Как можно получить текст с картинки в телеграмм
Я пытаюсь сделать так, чтобы телеграмм бот обрабатывал отправленную ему картинку с текстом и отправлял текст обратно пользователю.Пробовал прогонять отправленную картинку сначала через opencv ,а потом через tesseract, но данные библиотеки не принимают формат .jpg, который используется в telegram. Как можно вывести текст с отправленной боту картинки?
bot = telebot.TeleBot(config.token)
@bot.message_handler(content_types= ["photo"])
def answer_to_photo(message):
image = message.photo[0].file_id
img = cv2.imread(image)
im = Image.open(img)
text = pytesseract.image_to_string(img)
bot.send_message(message.chat.id, text)
После попытки выполнения выдаёт данные две ошибки:
File "shablon.py", line 21, in answer_to_photo
im = Image.open(img)
File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\PIL\Image.py",
line 2884, in open
fp = io.BytesIO(fp.read())
AttributeError: 'NoneType' object has no attribute 'read'
2020-07-27 22:09:07,781 (util.py:68 WorkerThread1) ERROR - TeleBot: "AttributeError occurred,
args=("'NoneType' object has no attribute 'read'",)
Traceback (most recent call last):
File "C:\Users\Родион\AppData\Local\Programs\Python\Python38-32\lib\site-packages\PIL\Image.py", line 2882, in open
fp.seek(0)
AttributeError: 'NoneType' object has no attribute 'seek'
Ответы (2 шт):
img = cv2.imread(image)
im = Image.open(img)
text = pytesseract.image_to_string(img)
Тут вы (не без ошибок) пытаетесь
- прочитать изображение в формате opencv
- конвертировать его в формат pillow (почему бы не начать читать сразу в pillow?)
- передать его в image_to_string (почему бы сразу не передать имя файла?)
image_to_string принимает как pillow изображения (вы пытаетесь передать ему img, а не im), так и имена файлов. Имеем ненужную цепочку конвертаций... Just text = pytesseract.image_to_string(image), okay?
Вывод: работайте над именованием переменных. image - file, img - cv_image, im - pil_image. Сами же себя и запутали.
FWD
По поводу первого исключения. Во-первых вы неправильно конвертируете opencv изображение в pillow. Правильно так. Во-вторых AttributeError говорит о том, что opencv вернул не изображение, а None, ибо не смог его прочитать. Возможно, я ошибочно предположил, что в image было имя файла с изображением, потому что я то знаю, что первым аргументом идет оно, но вы, возможно...
Не получиться ведь тессеракт находится в локальном а то что он получает фото в глобальном нужен другой метод например онлайн сервисы по типу гугла со своим клауд читалкой а за это придется заплатить
File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\pytesseract\pytesseract.py", line 260, in run_tesseract raise TesseractError(proc.returncode, get_errors(error_string)) pytesseract.pytesseract.TesseractError: (1, 'Error, cannot read input file C:\Users\user\photo: No such file or directory Error during processing.')