@egorttt_youtube

Программа зависает?

Всем доброе утро, вчера я тестировал свою программу (В ней есть бесконечный цикл, создания скриншота, обработка текста на скриншоте, потом через translate русский текст переводится на английский и копируется в буфер обмена) в течении 20-40 минут программа работает хорошо, но позже она зависает. Можете помочь с этой проблемой?)
PS: много importov буду фиксить позже, но я не думаю, что это из-за них...
import time
import numpy as np
import pyscreenshot as ImageGrab
import cv2
import PIL
from PIL import Image
import pytesseract
import pyperclip
import  pyautogui as pg
import time
import os
import requests
from pprint import pprint
import translators as ts
filename = 'Image.png'
x = 1
time.sleep(10)
while True:
    try:
        time.sleep(4)
        while True:
            screen = np.array(ImageGrab.grab(bbox=(713,550,1400,586)))
            cv2.imwrite(filename,screen)
            x = x + 1
            print(x)
            if x == 2:
                cv2.destroyAllWindows()
                x = 0
                break
        ####################################
        pytesseract.pytesseract.tesseract_cmd = "C:\Program Files (x86)\Tesseract-OCR/tesseract.exe"
        tessdata_dir_config = r'--tessdata-dir "C:\Program Files (x86)\Tesseract-OCR\tessdata"'
        img = Image.open(filename)
        text = pytesseract.image_to_string(img, lang='rus', config=tessdata_dir_config)
        print('Текст',text)
        text = text.replace('','')
        text = text.replace('ь!', 'ы')
        text = text.replace('„','')
        text = text.replace('—', ' is')
        endtext = ts.google(text, from_language='ru', to_language='en')
        endtext = endtext.replace("'", '')
        endtext = endtext.replace(".", '')
        print(endtext)
        pyperclip.copy(endtext)
    except TypeError:
        print('Попытка краша программы была предотвращена! \n(¬‿¬) работаем дальше!')

Помогите пж))
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 4
longclaps
@longclaps
У тебя "программа" наполовину состоит из импортов, из них половина не используется.
Ты маньяк?
Ответ написан
@o5a
Много лишнего. Вместо numpy, pyscreenshot, cv2 можно использовать PIL. Не совсем понятно, зачем в цикле несколько раз делается скриншот, при том, что используется только 1. Если делается цикл, то объявление всяких констант лучше выносить за него.

Например так, вместо использования промежуточных модулей с сохранением файла и вложенного цикла.
import time
import pytesseract
from PIL import Image, ImageGrab

pytesseract.pytesseract.tesseract_cmd = "C:\Program Files (x86)\Tesseract-OCR/tesseract.exe"
tessdata_dir_config = r'--tessdata-dir "C:\Program Files (x86)\Tesseract-OCR\tessdata"'
time.sleep(10)
while True:
    try:
        time.sleep(4)
        # просто считываем с экрана и напрямую распознаем
        img = ImageGrab.grab(bbox=(713,550,1400,586))
        text = pytesseract.image_to_string(img, lang='rus', config=tessdata_dir_config)
    ...
Ответ написан
LaRN
@LaRN
Senior Developer
А сколько памяти потребляет скрипт, когда зависает? Может он всю оперативку выдаёт и от этого начинает тормозить?
Ответ написан
Bad-Coder
@Bad-Coder
Srenior Pityhon Developer
Проблему не решу но предлагаю изменить код.
# Importing Modules.
from time import sleep as sl;import numpy as np;import pyscreenshot as ImgGrab;import cv2 as cv
from PIL import *;import pytesseract;import pyperclip as pc;import translators as ts
# Defining Some Variables...
FileName = "Image.png"
x = 1
#Interval "10".
sl(10)
# Inf-Cycle.
while True:
    try: # Trying.
        sl(3) # Interval "3".
        while True: # Inf-Cycle.
            Screen = np.array(ImgGrab.grab(bbox=(715,550,1400,585)));cv.imwrite(FileName, Screen) # Grabing Screen.
            x = int(x) + 1;print(x) # Appending 1 To "x", And Printing.
            if x == 2: cv.destroyAllWindows();x = 0;break # If "x" = 2, Breaking Cycle.
        pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe" # Path To PyTess.
        TessdataDirConfig = "--tessdata-dir 'C:\\Program Files (x86)\\Tesseract-OCR\\tessdata'" # Path To PyTess.
        Img = Img.open(FileName) # Opening Image.
        Text = pytesseract.image_to_string(Img, lang='rus', config=TessdataDirConfig) # Image To String By PyTesseract.
        print("Текст {}".format(Text)) # Printing Text.
        Text = Text.replace("", "");Text = Text.replace("ь!", "ы");Text = Text.replace("„", "");Text = Text.replace("—", "Is") # Creating Variable, Replacing Symbols.
        EndText = ts.google(Text, from_language="ru", to_language="en");EndText = EndText.replace("'", "");EndText = EndText.replace(".", "") # Creating Variable, Replacing Symbols.
        print(EndText) # Printing.
        pc.copy(EndText) # Copying Text.
    except TypeError: # Excepting.
        print(
            "Попытка Краша Программы Была Предотвращена!\nРаботаем Дальше!" 
            ) # Excepting "TypeError" How Message.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы