pyzbar报错解决方法:WARNING: .\zbar\decoder\pdf417.c:89: <unknown>:

博客探讨了如何在使用pyzbar识别手机图片中的二维码时遇到PDF417错误,通过图片转换策略解决问题的过程。作者发现先将图片转存再识别的方式成功避开错误,并揭示了这一方法背后的原理。

使用pyzbar识别手机拍摄的图片中的二维码,报错:WARNING: .\zbar\decoder\pdf417.c:89: <unknown>:

网上搜到的一个解决报错方法:

from PIL import Image
from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol

im = Image.open(path) 

#报错是因为使用了PDF417
#关键在于遍历图片所有二维码时指定使用QRCODE

for barcode in decode(im,symbols=[ZBarSymbol.QRCODE]):   
        barcodeData = barcode.data.decode("utf-8")
        print(barcodeData)

使用该方法后虽然不会再出现pdf417报错,但是二维码还是识别不出来,然后歪打正着摸索出一个方法就是先用Image读取并另存为一个新的图片,再对新图片进行二维码识别

import os
from PIL import Image
from os import listdir

def xj(path):
    a = os.path.exists(path)
    if not a :
        os.makedirs(path)

def newpic(path,path_2):
    im = Image.open(path)
    im.save(path_2)
    
#获取当前路径
path_pic = os.path.dirname(os.path.abspath(__file__))

#新建文件夹newpic的路径
path_new = path_pic + r'\newpic'

#新建文件夹newpic
xj(path_new)

#遍历当前路径中所有的jpg文件并且保存到新文件夹newpic中
for file_name in listdir(path_pic):
    if file_name.endswith('.jpg'):
        path_now = path_pic + f'\{file_name}'
        path_then = path_new + f'\{file_name}'
        newpic(path_now,path_then)

对新建文件夹newpic中的图片执行第一段代码就可以成功识别出二维码了,甚至可以直接decode(im),都不需要symbols=[ZBarSymbol.QRCODE]来解决报错,虽然歪打正着得到了想要的效果但是不明所以,等一个好心人来解答一下这里面的原理。

ermissionError: [Errno 13] Permission denied: 'stegano_scan.log' mingyang@WIN-TNM72R0OP32:~$ sudo python3 stegano_scanner_fixed.py --drive /mnt/d 开始扫描驱动器: /mnt/d 日志文件: /home/mingyang/stegano_scan.log /usr/lib/python3/dist-packages/PIL/Image.py:981: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images warnings.warn( 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128.png 的Red通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128.png 的Green通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128.png 的Blue通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128_null_character.png 的Red通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128_null_character.png 的Green通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128_null_character.png 的Blue通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/我的资源/来自:iPhone/2024-03-10 180345(1).jpg 的Green通道发现隐藏数据 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(010) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(000) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(010) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(000) part=1 ^X^C 用户中断扫描 mingyang@WIN-TNM72R0OP32:~$ python3 scanner.py --drive /mnt/d # 而非 D: python3: can't open file '/home/mingyang/scanner.py': [Errno 2] No such file or directory mingyang@WIN-TNM72R0OP32:~$ python3 scanner.py --drive /mnt/d python3: can't open file '/home/mingyang/scanner.py': [Errno 2] No such file or directory mingyang@WIN-TNM72R0OP32:~$ sudo python3 /path/to/stegano_scanner_fixed.py --drive /mnt/d python3: can't open file '/path/to/stegano_scanner_fixed.py': [Errno 2] No such file or directory mingyang@WIN-TNM72R0OP32:~$ import os import-im6.q16: unable to open X server `' @ error/import.c/ImportImageCommand/346. mingyang@WIN-TNM72R0OP32:~$ import sys import-im6.q16: unable to open X server `' @ error/import.c/ImportImageCommand/346. mingyang@WIN-TNM72R0OP32:~$ mingyang@WIN-TNM72R0OP32:~$ if sys.platform == 'win32': > # Windows下用Start-Process提升权限 > os.system('Start-Process PowerShell -ArgumentList "python stegano_scanner_fixed.py --drive D:" -Verb RunAs') -bash: syntax error near unexpected token `'Start-Process PowerShell -ArgumentList "python stegano_scanner_fixed.py --drive D:" -Verb RunAs'' mingyang@WIN-TNM72R0OP32:~$ else: else:: command not found mingyang@WIN-TNM72R0OP32:~$ # Linux下用sudo mingyang@WIN-TNM72R0OP32:~$ os.system('sudo python3 stegano_scanner_fixed.py --drive /mnt/d') -bash: syntax error near unexpected token `'sudo python3 stegano_scanner_fixed.py --drive /mnt/d'' mingyang@WIN-TNM72R0OP32:~$ sudo python3 stegano_scanner_fixed.py --drive /mnt/d 开始扫描驱动器: /mnt/d 日志文件: /home/mingyang/stegano_scan.log /usr/lib/python3/dist-packages/PIL/Image.py:981: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images warnings.warn( 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128.png 的Red通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128.png 的Green通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128.png 的Blue通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128_null_character.png 的Red通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128_null_character.png 的Green通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/.venv/Lib/site-packages/pyzbar/tests/code128_null_character.png 的Blue通道发现隐藏数据 在 /mnt/d/BaiduSyncdisk/我的资源/来自:iPhone/2024-03-10 180345(1).jpg 的Green通道发现隐藏数据 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(010) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(000) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(010) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(000) part=1 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=20 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=19 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=6 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=4 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=5 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=25 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=6 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=4 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=5 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=25 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=6 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=4 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=5 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=25 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=2 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=0 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=6 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=4 f=-1(010) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=7 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=5 f=-1(000) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=21 f=-1(110) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=28 f=-1(100) part=0 WARNING: decoder/databar.c:1210: _zbar_decode_databar: Assertion "seg->finder >= 0" failed. i=25 f=-1(110) part=0 这个什么意思
最新发布
10-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值