Задать вопрос
@Jimm24

Не находит текст извлечённый с помощью pytesseract в excel?

В общем не могу найти проблему. Cчитываю изображение, перевожу его в текст, после ищу соответствие значения текста и ячейки получаю текст и форматирую его в строку без перевода строки, но мне не выдается значение ячейки. Не могу найти в чем проблема, текст соответствует формату. Еще просьба если кто решит как добавить к соседней ячейке от найденного значения ячейки, переменную. И как возможно это зациклить на кнопку, чтобы ожидала выполнение.
spoiler
import time
import numpy as np
import pyscreenshot as ImageGrab
import cv2
import pytesseract
import re
# import keyboard
import openpyxl

theFile = openpyxl.load_workbook('text_name.xlsx')
allSheetNames = theFile.sheetnames
pytesseract.pytesseract.tesseract_cmd = r"C:\\Program Files\\Tesseract-OCR\\tesseract.exe"
filename = 'image.png'
last_time = time.time()
x = 1

screen = np.array(ImageGrab.grab(bbox=(716, 483, 1275, 652)))
print('цикл занял {} секунд'.format(time.time() - last_time))
last_time = time.time()
cv2.imshow('window', cv2.cvtColor(screen, cv2.COLOR_BGR2RGB))
cv2.imwrite(filename, screen)
x = x + 1
print(x)


def find_cell():
    img = cv2.imread('image.png')
    mytext = pytesseract.image_to_string(img, lang="rus")
    print(mytext)
    string = mytext
    new_string = re.sub(r"\n", " ", string)  # проблема тут или нет не пойму вроде текст равен нужному
    print(new_string)
    for row in range(1, currentSheet.max_row + 1):
        for column in 'ABCDEFGHIJKL':  # Можно добавить или уменьшить столбцы
            cell_name = '{}{}'.format(column, row)
            if currentSheet[cell_name].value == new_string:
                # print("Ячейка {1} расположена на {0}" .format(cell_name, currentSheet[cell_name].value))
                print('Номер ячейки {} равен значению. {}'.format(cell_name, currentSheet[cell_name].value))
                print(cell_name)
                return cell_name


for sheet in allSheetNames:
    print('Текущее имя листа {}'.format(sheet))
    currentSheet = theFile[sheet]
    CellLetter = (find_cell())


Архив excel, текст для теста
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Jimm24 Автор вопроса
в общем проблема решена text.strip() надо было просто убрать пробелы в самом тексте.
Второй вопрос тоже решил
newcell = currentSheet[cell_name].offset(column=+1)
newcell.value = 'test'
theFile.save('text_name.xlsx')
Вопрос как зациклить остался, если кто может объяснить как это сделать поскольку посмотрев библиотеку keyboard
я не пойму как, это сделать. Через ожидание цикл не останавливается, должен быть поидее либо счетчик, который этот триггер отключает или возможно кто подскажет, что-то другое кроме этой библиотеки и способов как это сделать удобно.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы