Pyzbar二维码实时检测代码运行失败问题求助
实时二维码检测报错解决
问题代码
我用来实现实时二维码检测的代码如下:
import cv2 import numpy as np from pyzbar.pyzbar import decode cap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480) while True: success, img = cap.read() for barcode in decode(img): myData = barcode.data.decode('utf-8') print (myData) pts = np.array([barcode.polygon], np.int32) pts = pts.reshape((-1,1,2)) cv2.polylines(img, [pts], True, (255,0,255),5) cv2.imshow('Result',img) cv2.waitKey(1)
报错信息
运行后抛出以下错误:
回溯(最近的调用最后): 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\zbar_library.py", 第58行, 在load函数中 dependencies, libzbar = load_objects(Path('')) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\zbar_library.py", 第50行, 在load_objects函数中 deps = [ 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\zbar_library.py", 第51行, 在列表推导式中 cdll.LoadLibrary(str(directory.joinpath(dep))) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\ctypes\__init__.py", 第452行, 在LoadLibrary函数中 return self._dlltype(name) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\ctypes\__init__.py", 第374行, 在__init__函数中 self._handle = _dlopen(self._name, mode) FileNotFoundError: 找不到模块 'libiconv.dll' (或它的某个依赖项)。请尝试使用完整路径的构造函数语法。 在处理上述异常期间,又发生了另一个异常: 回溯(最近的调用最后): 文件 "C:\Users\BEYZANUR\Projeler\Teknofest\e.py", 第3行, 在<module>中 from pyzbar.pyzbar import decode 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\pyzbar.py", 第7行, 在<module>中 from .wrapper import ( 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\wrapper.py", 第151行, 在<module>中 zbar_version = zbar_function( 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\wrapper.py", 第148行, 在zbar_function函数中 return prototype((fname, load_libzbar())) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\wrapper.py", 第127行, 在load_libzbar函数中 libzbar, dependencies = zbar_library.load() 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\zbar_library.py", 第60行, 在load函数中 dependencies, libzbar = load_objects(Path(__file__).parent) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\zbar_library.py", 第54行, 在load_objects函数中 libzbar = cdll.LoadLibrary(str(directory.joinpath(fname))) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\ctypes\__init__.py", 第452行, 在LoadLibrary函数中 return self._dlltype(name) 文件 "C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\ctypes\__init__.py", 第374行, 在__init__函数中 self._handle = _dlopen(self._name, mode) FileNotFoundError: 找不到模块 'C:\Users\BEYZANUR\AppData\Local\Programs\Python\Python39\lib\site-packages\pyzbar\libzbar-64.dll' (或它的某个依赖项)。请尝试使用完整路径的构造函数语法。
解决办法
方案1:安装带Windows依赖的pyzbar版本
卸载现有pyzbar:
pip uninstall pyzbar -y
安装适配Windows的版本:
pip install pyzbar-windows
方案2:手动补充缺失的DLL文件
- 找到
libiconv.dll和libzbar-64.dll文件 - 将它们放置到以下任意目录:
- Python安装目录下的
Scripts文件夹 - 你的项目代码所在目录
- 添加到系统环境变量
Path对应的路径中
- Python安装目录下的
方案3:改用OpenCV内置的二维码检测器(无需额外依赖)
修改代码为以下形式,直接使用cv2.QRCodeDetector:
import cv2 cap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480) qr_detector = cv2.QRCodeDetector() while True: success, img = cap.read() if not success: break data, bbox, _ = qr_detector.detectAndDecode(img) if data: print(data) # 绘制二维码边框 if bbox is not None: bbox = np.int32(bbox) cv2.polylines(img, [bbox], True, (255,0,255), 5) cv2.imshow('Result', img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Beyza Nur
相关产品推荐
相关产品推荐

