我想用我的raspi cam模块扫描二维码。 为了检测和解码qr码,我想使用zbar。 我的当前代码:
import io
import time
import picamera
import zbar
import Image
if len(argv) < 2: exit(1)
# Create an in-memory stream
my_stream = io.BytesIO()
with picamera.PiCamera() as camera:
camera.start_preview()
# Camera warm-up time
time.sleep(2)
camera.capture(my_stream, 'jpeg')
scanner = zbar.ImageScanner()
scanner.parse_config('enable')
pil = Image.open(argv[1]).convert('L')
width, height = pil.size
raw = pil.tostring()
my_stream = zbar.Image(width, height, 'Y800', raw)
scanner.scan(image)
for symbol in image:
print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
如您所见,我想创建一个图片流,将此流发送到zbar以检查图片中是否包含二维码。 我无法运行此代码,此错误是由于:
Segmentation fault
------------------ (program exited with code: 139) Press return to continue
我找不到任何解决方案如何修复这个错误,知道吗?
亲切的问候
排队
scanner.scan(图像)
您使用的变量以前从未出现在代码中。因为zbar是用C编写的,所以它不会捕捉到变量是未定义的,并且库尝试读取垃圾数据,就像它是一个图像一样。因此,segfault。我猜你是指我的流而不是图像。
我的项目是在覆盆子上使用QR解码。我用 子进程模块。 这里是我的QR解码功能:
您可以轻松地将参数添加到函数中,如img_widt和img_height 改变这部分代码
到
如果你想解码不同大小的图像。
所有其他答案的不足之处在于它们有很大的延迟——例如,它们扫描并显示在屏幕上的内容实际上是几秒钟前拍摄的帧,等等。
这是因为树莓Pi的CPU速度慢。所以
frame-rate
比我们的软件读取和扫描的速率要大得多。经过大量的努力,我终于编写了这段代码,它的延迟很小。所以当你给它一个QRCode/条形码,它会在不到一秒钟的时间内给你一个结果。
代码中解释了我使用的技巧。
相关问题 更多 >
编程相关推荐