python - read_mrz 错误 : Could not find a format to read the specified file in mode 'i'

标签 python ocr

下面的代码是我用来从护照中读取 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'

最佳答案

经过数小时的研究找出了解决方案,因此将我的解决方案发布给可能面临类似解决方案的其他人。

我仍然无法弄清楚上面的代码有什么问题,但我找到了解决办法。

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)

关于python - read_mrz 错误 : Could not find a format to read the specified file in mode 'i' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56442327/

相关文章:

c++ - TessBaseAPI::Clear() 的语义

python - 如何将字典列表转换为以组合元组为键的多个字典?

python - 在 matplotlib 中,如何使单条线的线宽随 x 变化?

python - 由于某种原因,即使该项目在范围内,我仍然收到索引错误

python - OpenCV 将所有文本处理为白底黑字(分割)

android - 在 onPictureTaken 中处理原始图像数据

python - 如何叠加两个具有不同 WCS/分辨率的 .fits 图像?

Python Api C 产生内存泄漏

ios - ABBYY Cloud OCR SDK 返回空的 authToken 作为响应?

java - ANDROID 的 OCR 代码和 Java 代码的问题