当前位置: 首页 > 面试题库 >

如何在(最好是纯净的)Python中解码QR码图像?

翟卓君
2023-03-14
问题内容

TL; DR :我需要一种使用(最好是纯净的)Python从图像文件中解码QR码的方法。

我有一个带有QR码的jpg文件,我想使用Python对其进行解码。我找到了一些声称可以做到这一点的库:

PyQRCode (这里的网站)可以通过简单地提供如下路径来解码图像中的
二维 码:

import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
    print 'result: ' + d.result
else:
    print 'error: ' + d.error

因此,我只是使用安装了它sudo pip install pyqrcode。但是,我对上面的示例代码感到奇怪的是,它仅导入qrcode(而不是导入pyqrcode),因为我认为qrcode引用的是只能
生成 qr代码图像的库,这使我感到困惑。所以我用和尝试了上面的代码,但是都在第二行说了失败。此外,该网站还引用了Ubuntu
8.10(发布于6年前),我找不到它的公共(git或其他)存储库来检查最新的提交。所以我转到下一个库:
__pyqrcode``qrcode``AttributeError: 'module' object has no attribute 'Decoder'

ZBar (在这里的网站)声称是"an open source software suite for reading bar codes from various sources, such as image files."这样,所以我尝试在运行的Mac OSX上安装它sudo pip install zbar。失败error: command 'cc' failed with exit status 1。我试图在这个SO问题的答案中提出建议,但似乎无法解决。因此,我决定再次继续:

QRTools ,根据此博客文章,可以使用以下代码轻松解码图像:

from qrtools import QR
myCode = QR(filename=u"/home/psutton/Documents/Python/qrcodes/qrcode.png")
if myCode.decode():
  print myCode.data
  print myCode.data_type
  print myCode.data_to_string()

因此,我尝试使用进行安装sudo pip install qrtools,但找不到任何内容。我也试了一下python-qrtoolsqr- toolspython- qrtools和一对夫妇更多的组合,可惜不得要领。我想它指的是这个仓库,它说它是基于ZBar的(见上文)。尽管我想在Heroku上运行我的代码(因此更喜欢使用纯Python解决方案),但我成功地将其安装在Linux机器上(使用sudo apt-get install python-qrtools)并尝试运行它:

from qrtools import QR
c = QR(filename='/home/kramer65/qrcode.jpg')
c.data  # prints u'NULL'
c.data_type  # prints u'text'
c.data_to_string()  # prints '\xef\xbb\xbfNULL' where I expect an int (being `1234567890`)

尽管这似乎可以对其进行解码,但似乎无法正确执行。此外,它需要ZBar,因此不是纯Python。所以我决定再找一个图书馆。

PyXing (这里的网站)应该是流行的Java
ZXing库的Python端口,但是最初的唯一提交已经有6年的历史了,该项目没有任何自述文件或文档。

对于剩下的我发现一对夫妇QR- EN 编码器(未
编码器),并且能为你解码一些API端点。由于我不希望此服务依赖于其他API端点,因此我希望将解码保持在本地。

因此得出结论;有谁知道我如何用(最好是纯净的)Python从图像中解码QR码?欢迎所有提示!


问题答案:

您可以尝试执行以下步骤并使用以下代码进行编码qrtools

  • 创建qrcode文件(如果尚不存在)

    • 我曾经pyqrcode这样做,可以使用安装pip install pyqrcode
    • 然后使用代码:
          >>> import pyqrcode
      

      qr = pyqrcode.create(“HORN O.K. PLEASE.”)
      qr.png(“horn.png”, scale=6)

  • 使用解码现有qrcode文件qrtools

    • qrtools使用安装sudo apt-get install python-qrtools
    • 现在在python提示中使用以下代码
          >>> import qrtools
      

      qr = qrtools.QR()
      qr.decode(“horn.png”)
      print qr.data
      u’HORN O.K. PLEASE.’

这是一次运行的完整代码:

In [2]: import pyqrcode
In [3]: qr = pyqrcode.create("HORN O.K. PLEASE.")
In [4]: qr.png("horn.png", scale=6)
In [5]: import qrtools
In [6]: qr = qrtools.QR()
In [7]: qr.decode("horn.png")
Out[7]: True
In [8]: print qr.data
HORN O.K. PLEASE.

注意事项

  • 您可能需要安装PyPNGusingpip install pypng用于pyqrcode
  • 如果已PIL安装,则可能会得到IOError: decoder zip not available。在这种情况下,请尝试PIL使用以下方法进行卸载和重新安装:

    pip uninstall PIL
    

    pip install PIL

  • 如果这样不起作用,请尝试Pillow改用

    pip uninstall PIL
    

    pip install pillow



 类似资料:
  • 问题内容: 我希望用Java动态生成QR码。什么是最好的QR码生成器库?我会同时考虑商业和开源吗? 问题答案: 我不知道什么是 最 合适的,但是zxing具有适用于Java的qr代码生成器,正在积极开发中,并获得了自由许可。

  • 问题内容: 我用python脚本下载了一个网页。在大多数情况下,这可以正常工作。 但是,这个有一个响应标头:GZIP编码,当我尝试打印此网页的源代码时,它的腻子中包含所有符号。 如何将其解码为普通文本? 问题答案: 我使用zlib从Web解压缩压缩的内容。

  • 问题内容: 好的,所以我要把握机会,这里的某个人以前使用过zxing。我正在开发Java应用程序,它需要做的一件事是将字节数据数组编码为QR码,然后在以后对其进行解码。 这是我的编码器外观的示例: 此代码中的开始字节数组仅用于对其进行测试。实际的字节数据将有所不同。 这是我的解码器的外观: 是一种将字节数组转换为十六进制字符串的方法。 当我尝试同时运行这两个代码块时,输出如下: 显然,文本已被编码

  • 问题内容: 试图使用像ZXing,ZBar和它们的fork之类的几个库,但是找不到从相机而不是从文件扫描条形码的方法。 有人可以指出我正确的方向吗?最好是我正在研究ZXing:如何从文件(而不是相机)扫描图像。 请。 问题答案: 最后,我找到了解决方案。代码是(源自此处): Gradle引用为: 用法:

  • 我添加了Firebase,允许客户端直接从web应用程序客户端(浏览器)进行身份验证。我正在使用firebase web JS包,它工作得非常好。我可以在浏览器中看到,我收到一个用户对象,其中包含有关该用户的信息,包括。 然后,我需要在我的服务器后端(即python django)上对该用户进行身份验证。在Firebase文档中,我找到了一个我正试图做的操作指南,即验证id令牌。 因为他们没有支持

  • 问题内容: 我通过xmlrpc从我的一个客户那里获得的字符串有问题。他给我发送了两次编码的utf8字符串:(因此,当我在python中获取它们时,我有一个unicode对象,该对象必须再解码一次,但显然python不允许这样做。我注意到我的客户端但是我需要在修复之前先进行快速解决。 来自tcp转储的原始字符串: 它将转换为: 我们得到的最好的是: 结果是正确的字符串,它是: 但是,这很丑陋,不能在