Как извлечь текст из файла GIF с помощью Python - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь извлечь текст из GIF-изображения с помощью приведенного ниже кода, он работает для формата PNG, не работает для GIF.

import pytesseract
import io
import requests
from PIL import Image

url = requests.get('http://article.sapub.org/email/10.5923.j.aac.20190902.01.gif')
img = Image.open(io.BytesIO(url.content))
text = pytesseract.image_to_string(img)
print(text)

получить эту ошибку

C:\python\lib\site-packages\PIL\Image.py:1048: UserWarning: Couldn't allocate palette entry for transparency
 warnings.warn("Couldn't allocate palette entry for transparency")
Traceback (most recent call last):
 File "D:/elifesciences/prox.py", line 8, in <module>
text = pytesseract.image_to_string(img)
File "C:\python\lib\site-packages\pytesseract\pytesseract.py", line 345, in image_to_string
 }[output_type]()
File "C:\python\lib\site-packages\pytesseract\pytesseract.py", line 344, in <lambda>
 Output.STRING: lambda: run_and_get_output(*args),
File "C:\python\lib\site-packages\pytesseract\pytesseract.py", line 242, in run_and_get_output
 temp_name, input_filename = save_image(image)
File "C:\python\lib\site-packages\pytesseract\pytesseract.py", line 173, in save_image
 image.save(input_file_name, format=extension, **image.info)
File "C:\python\lib\site-packages\PIL\Image.py", line 2088, in save
 save_handler(self, fp, filename)
File "C:\python\lib\site-packages\PIL\GifImagePlugin.py", line 507, in _save
 _write_single_frame(im, fp, palette)
File "C:\python\lib\site-packages\PIL\GifImagePlugin.py", line 414, in _write_single_frame
 _write_local_header(fp, im, (0, 0), flags)
File "C:\python\lib\site-packages\PIL\GifImagePlugin.py", line 532, in _write_local_header
 transparency = int(transparency)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'

Process finished with exit code 1

1 Ответ

1 голос
/ 19 октября 2019

Идея состоит в том, чтобы преобразовать каждый из кадров в изображение RGB перед выполнением на них оптического распознавания текста, как показано ниже -

for frame in range(0,img.n_frames):

    img.seek(frame)

    imgrgb = img.convert('RGBA')

    imgrgb.show()

    text = pytesseract.image_to_string(imgrgb)

    print(text)

Рабочий образец - https://colab.research.google.com/drive/1ctjk3hH0HUaWv0st6UpTY-oo9C9YCQdw

...