蓝字关注我们

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

引子

Python中有几个开源的条码解析库,之前我测试过pyzbar、libdmx这些库,发现都是个锤子,主要是功能太弱了,解码能力堪忧,之前我用ZXING C++版本写过一很好用的条码跟二维码的解码库,于是我搜索一下看看是否有Python版本的ZXING,发现真有就是pyzxing,但是需要注意的是,它不是基于ZXing C++的,它是通过Python调用Java的依赖实现解码的,而且默认是支持hard模型跟旋转模式解码的。

pyzxing安装与测试

pyzxing在python下安装特别简单,只需要一条命令行执行:

但是它其实是依赖OpenJDK才能运行的,推荐最好安装1.8版本,下载地址如下:

安装好之后,cmd运行测试如下:

相关解码函数

相关功能与函数说明可以直接访问这个页面:

它支持三种输入

相关函数演示代码如下:

展开全文

reader = BarCodeReaderresults = reader.decode('/PATH/TO/FILE')# Or file pattern for multiple filesresults = reader.decode('/PATH/TO/FILES/*.png')print(results)# Or a numpy array# Requires additional installation of opencv# pip install opencv-pythonresults = reader.decode_array(img)

OpenCV-Python解码开发演示

在实际使用ZXING的解码中,首先需要做的就是各种图像预处理,因为多数工业喷码的图像质量都很一般,直接ZXING解码一次成功率大概只有50%左右,都需要通过各种预处理之后输入到ZXING二次解码,二次解码成功率会提升到95%左右,这个时候需要针对那些特别难的码进行更深度的预处理跟重新裁剪然后三次解码,总的三次解码成功率可以达到99%左右。这个里面涉及特别多解码细节问题。这里以最简单的几个工业常见的DataMatrix码的解码为例说明:

frompyzxing import BarCodeReader

import cv2

import os

code_roi = cv2.imread(os.path. join(test_dir, f), cv2.IMREAD_GRAYSCALE)

cv2.bitwise_not(code_roi, code_roi)

ret, binary= cv2.threshold(code_roi, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

se = cv2.getStructuringElement(cv2.MORPH_RECT, ( 3, 3))

binary= cv2.erode( binary, se)

results = reader.decode_array( binary)

found = False

forresult inresults:

code_txt = result. get( 'parsed')

ifcode_txt isnotNone:

print( "decode content: ", code_txt)

print( "code type: ", result. get( 'format'))

found = True

解码输出

扫码查看OpenCV+OpenVIO+Pytorch系统化学习路线图

CV全栈开发者说 - 从传统算法到深度学习怎么修炼

2022入坑深度学习,我选择Pytorch框架!

Pytorch轻松实现经典视觉任务

教程推荐 | Pytorch框架CV开发-从入门到实战

OpenCV4 C++学习 必备基础语法知识三

OpenCV4 C++学习 必备基础语法知识二

OpenCV4.5.4 人脸检测+五点landmark新功能测试

OpenCV二值图象分析之Blob分析找圆

OpenCV4.5.x DNN + YOLOv5 C++推理

OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理

OpenVINO2021.4+YOLOX目标检测模型部署测试

比YOLOv5还厉害的YOLOX来了,官方支持OpenVINO推理