• python 二维码识别包 pyzbar zxing使用简介


     

    一、Python下二维码识别包的使用详情

    在python下二维码识别,目前主要有三个模块:zbar 、zbarlight、zxing。

    未使用zbarlight,原因是zbarlight和zbar的dll相同,二维码识别准去率没提升。另外,该包的pip安装存在一些问题未解决。

     

    1、安装包:

    pip install opencv-python

    pip install pillow image zxing

    pip install pyzbar

    2、 安装使用包过程中遇到的问题:

    A、使用zxing是,出现“FileNotFoundError: [WinError 2”

    解决办法:安装java(jdk、jre都可以)。原因是zxing要调用一些java文件,要求java文件可被执行。

    B、安装zbarlight出现“Microsoft Visual C++ 14.0 is required.”

    解决办法:放弃。 原因:安装完vc_redist.x86后,还是会报相关的错误。

    4、 使用详情

    Pyzbar和zxing识别4张包含二维码的图片(图片如下),目前都只识别出来了前两张。微信(支付宝)扫一扫,4张都可以识别出来

     

    pyzbar相关代码:

     

    import pyzbar.pyzbar as pyzbar
    from PIL import Image, ImageEnhance
    
    
    def zabr_parser(image):
        img = Image.open(image)
        # img = ImageEnhance.Brightness(img).enhance(2.0)#增加亮度
        # img = ImageEnhance.Sharpness(img).enhance(17.0)#锐利化
        # img = ImageEnhance.Contrast(img).enhance(4.0)#增加对比度
        img = img.convert('L')#灰度化
        img = img.convert("1")
        img.show()
    
        barcodes = pyzbar.decode(img)
        for barcode in barcodes:
            barcodeData = barcode.data.decode("utf-8")
            print(barcodeData)

    zxing相关代码:

     1 from PIL import Image
     2 import zxing  # 导入解析包
     3 
     4 
     5 def ocr_qrcode_zxing(filename):
     6     img = Image.open(filename)
     7     zx = zxing.BarCodeReader()  # 调用zxing二维码读取包
     8     data = ''
     9     zxdata = zx.decode(filename)  # 图片解码
    10     return zxdata.parsed  # 返回记录的内容

    4、使用的图片

     

     

     

     

     

    二、对比:

    1、zbar和zbarlight内核一致,都是基于zbar的dll编译加载的。zbarlight使用比zbar更简单,不过是在zbar的基础又做了封装,增加易用性,二维码识别准确率没有提高。

    2、zxing是基于java的zxing核心的python分支,其原理是调用javaw 加载zxing的core.jar包,再获取输出结果。

    3、微信和支付宝的扫一扫功能较python的这三个包强大很多,是有自己的算法(微信扫一扫使用了zxing,应该做了一定的修改。参考https://my.oschina.net/yushulx/blog/495471)

     

     

    参考文档:https://www.php.cn/python-tutorials-373780.html

     

     

     

  • 相关阅读:
    开源Jabber(XMPP) IM服务器介绍
    ejabberd、jabber、jabberd、xmpp辨析
    分布式与集群的区别
    浅谈Javascript事件模拟
    理清javascript的相关概念 DOM和BOM
    js基础学习第一天(关于DOM和BOM)一
    处理机调度和死锁
    C++11 之 " = delete "
    小数的二进制表示
    二进制数的插入
  • 原文地址:https://www.cnblogs.com/tangdouguard/p/11251502.html
Copyright © 2020-2023  润新知