需求:产品中有二维码,但是二维码很小,需要进行整盘识别二维码并记录,难度大,精度低。
一个可行的方案:先识别产品区域,再进一步无损裁剪二维码可能性的区域,裁剪的二维码识别精度低,还需要进一步放大后识别,之前使用了ZXing、Pyzbar 、cv2等最基础的识别库,识别能力一般般。
最后翻了好多资料,最终识别二维码采用的是微信开源的算法模型,能识别模糊的、倾斜角度的,识别能力是很靠谱。
相关代码片段:
import cv2
# 加载 wechat_qrcode 检测器,这段是重点,换了好多个扫码识别的库,最终只有这个微信开源的扫码引擎最靠谱,参考文档:https://zhuanlan.zhihu.com/p/348412200
detector = cv2.wechat_qrcode_WeChatQRCode(
"./qr_mode/detect.prototxt",
"./qr_mode/detect.caffemodel",
"./qr_mode/sr.prototxt",
"./qr_mode/sr.caffemodel"
)
# 二维码识别模块
def qr_processing(crop_img):
try:
# 放大倍数识别,分别1-6倍
for num in range(1, 6):
resized_img = cv2.resize(crop_img, None, fx=num, fy=num, interpolation=cv2.INTER_CUBIC)
res, _ = detector.detectAndDecode(resized_img)
if res and res[0]:
print(f'二维码识别成功: {res[0]}')
return False
except Exception as e:
print(f'二维码识别错误: {str(e)}')
return False
识别产品看我另一篇文章:
使用yolo模型进行目标检测,包含训练步骤和测试代码-优快云博客
完整的识别例子:
识别速度还可以再快点,最新代码能实现3秒内识别出4X5=20个码。
测试硬件:
1、2000万像素CCD工业相机+支架(摄像头越高清,解析度越好)
2、6毫米焦段镜头,和相机配套的,目的就是为了近距离拍摄出更高清的帧率照片
3、I7 9700系列处理器,主要是加快识别速度,感觉还行,差距不大,识别瞬间会调用所有核心,几乎一秒钟后就搞定了。
相机和镜头成本整套算起来3500左右吧。
批量识别大图小码视频案例