Есть телеграм бот который распознает текст с картинок.
#my_ocr.py
import io
import fitz
import pytesseract
from PIL import Image
#распознаем текст с картинки из байтовой строки
def get_text_from_image(b):
language = 'rus+eng+ukr'
f = io.BytesIO(b)
return pytesseract.image_to_string(Image.open(f), lang=language)
#tb.py
from aiogram import Bot, Dispatcher, types, executor
import cfg
import io
import my_ocr
bot = Bot(token=cfg.token)
dp = Dispatcher(bot)
@dp.message_handler(content_types=types.ContentType.PHOTO)
async def handle_photo(message: types.Message):
# получаем самую большую фотографию из списка
photo = message.photo[-1]
fp = io.BytesIO()
# скачиваем фотографию в байтовый поток
await photo.download(destination_file=fp)
# распознаем текст на фотографии с помощью pytesseract
text = my_ocr.get_text_from_image(fp.read())
# отправляем распознанный текст пользователю
if text.strip() != '':
# если текст слишком длинный, отправляем его в виде текстового файла
if len(text) > 4096:
with io.StringIO(text) as f:
f.name = 'text.txt'
await message.reply_document(f)
else:
await message.reply(text)
if __name__ == '__main__':
executor.start_polling(dp)
Распознанный текст выглядит не совсем так как надо, предложения разорваны.
Например картинка
Текст
Женщина:
— Обветрились губы. Воспользовалась
скрабом для губ, сделала питательную
маску, намазала бальзамом, сверху -
увлажняющий блеск.
Мужчина:
— Обветрились губы. Отодрал кожу.
Сьел.
а должно быть как то так
Женщина:
— Обветрились губы. Воспользовалась скрабом для губ, сделала питательную маску, намазала бальзамом, сверху -
увлажняющий блеск.
Мужчина:
— Обветрились губы. Отодрал кожу. Сьел.
Можно конечно просто склеивать строки пробелами пока не наткнешься на пустую строку но может есть какие то специализированные библиотеки для этого. Еще неплохо бы исправлять ошибки которые появляются от плохого распознавания.