ошибка read_mrz: не удалось найти формат для чтения указанного файла в режиме 'i' - PullRequest
2 голосов
/ 04 июня 2019

Приведенный ниже код используется для чтения данных mrz из паспорта, и он работает абсолютно нормально, когда я запускаю его на локальном компьютере, но когда я пытаюсь выполнить его на своем сервере (сервер Windows AWS), он выдает ошибка. Подскажите, пожалуйста, что это за ошибка и как ее устранить.

from PIL import Image
import sys
from passporteye import read_mrz
import pytesseract

mrz = read_mrz("C:/docs/IMG/PASSPORT/abc.png")

Ошибка:

Traceback (most recent call last):
  File "C:/qfc_apps/edocs/PY/PASSPORT/passport.py", line 64, in <module>
    passport()
  File "C:/qfc_apps/edocs/PY/PASSPORT/passport.py", line 19, in passport
    mrz = read_mrz("C:/docs/IMG/PASSPORT/abc.png")
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\mrz\image.py", line 337, in read_mrz
    mrz = p.result
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\mrz\image.py", line 325, in result
    return self['mrz_final']
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\util\pipeline.py", line 102, in __getitem__
    self._compute(key)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\util\pipeline.py", line 109, in _compute
    self._compute(d)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\util\pipeline.py", line 109, in _compute
    self._compute(d)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\util\pipeline.py", line 109, in _compute
    self._compute(d)
  [Previous line repeated 1 more times]
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\util\pipeline.py", line 111, in _compute
    results = self.components[cname](*inputs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\mrz\image.py", line 52, in __call__
    return self._imread(self.file)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\passporteye\mrz\image.py", line 37, in _imread
    img = skimage_io.imread(file, as_gray=self.as_gray, plugin='imageio')
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\skimage\io\_io.py", line 61, in imread
    img = call_plugin('imread', fname, plugin=plugin, **plugin_args)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\skimage\io\manage_plugins.py", line 210, in call_plugin
    return func(*args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\imageio\core\functions.py", line 221, in imread
    reader = read(uri, format, "i", **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\imageio\core\functions.py", line 139, in get_reader
    "Could not find a format to read the specified file " "in mode %r" % mode
ValueError: Could not find a format to read the specified file in mode 'i'

1 Ответ

1 голос
/ 06 июня 2019

Обдумал решение после нескольких часов исследований, поэтому выложу свое решение для тех, кто может столкнуться с подобным решением.

Я все еще не мог понять, в чем проблема с приведенным выше кодом, но мне удалось найти выход.

В документации passporteye упоминается, что мы пропускаем путь к изображению или поток байтов, содержащий данные изображения. Поскольку путь не работал для меня, поэтому я выбрал второй метод.

Использование приведенного ниже кода решает нашу проблему: -

image = cv2.imread("path of image")
import PIL.Image as Image
 import io
 pil_im = Image.fromarray(image)
 b = io.BytesIO()
 pil_im.save(b, 'jpeg')
 im_bytes = b.getvalue()

 mrz = read_mrz(im_bytes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...