https://amazefcc233.com/archives/148/
- 在树莓派(Debian)系统上通过usb摄像头扫描识别QR二维码
- python实现树莓派生成并识别二维码
- 树莓派python实现二维码识别——Zbar
- linux环境下通过源码安装imagemagick
- jpeg的渐进式体验(imagemagick )
- 彻底搞懂 python 中文乱码问题
准备
在本教程所给出的内容中,您需要安装以下工具:
sudo apt-get install python-imaging
sudo apt-get install qrencode
sudo apt-get install python-pygame
如果您想识别二维码而不需要支持中文,那么您可以使用一键命令:sudo apt-get install zbar-tools 解析二维码必用
如果想要支持中文,那么...请遵守教程中的指示以进行操作。
样例读取IP并且二维码显示
#!/usr/bin/env python #-*- coding: UTF-8 -*- import os, signal, subprocess import cv2 import socket #获取IP def get_host_ip(): """ 查询本机ip地址 :return: ip """ try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] finally: s.close() return ip #成成英文二维码 暂时不支持中文 def set_qrcode(Msg='zhe',imgpath= "qrcode.png"): #Msg='http://'+get_host_ip()+":8080" imgpath = "qrcode.png" #print(IP) os.system("qrencode -o "+imgpath+" '"+Msg+"'")#保存生成的二维码 img = cv2.imread(imgpath) # 加载生成的二维码图片 cv2.namedWindow("qrcode",0) cv2.imshow("qrcode",img)#显示出来 cv2.waitKey(100) #二维码识别 def konw_qrcode(image_src="qrcode.png"): #image_src="/home/pi/Work/WorkPlace/python/1project/30二维码/qrcode.png" #image_src="qrcode.png" #从摄像头抓取一张图片识别 #zbarcam=subprocess.Popen("zbarcam --raw --nodisplay /dev/video0", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) #qrcodetext=zbarcam.stdout.readline() #读取离线图片 zbarcam=subprocess.Popen("zbarimg --raw "+image_src, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) qrcodetext=zbarcam.stdout.readline().decode() if qrcodetext != "": qrresult = f"识别结果: {qrcodetext}" print(qrresult) else: print (u"qrcodetext 为空") #return (qrresult) if __name__ == '__main__': showmsg='http://'+get_host_ip()+":8080" set_qrcode(showmsg,"qrcode.png")#生成二维码 konw_qrcode("qrcode.png") #识别二维码
综合测试
生成二维码
读取离线图片
从视频读取
#!/usr/bin/env python #-*- coding: UTF-8 -*- import os, signal, subprocess import cv2 #成成英文二维码 暂时不支持中文 def set_qrcode(Msg='0001',imgpath= "qrcode.png"): #Msg='http://'+get_host_ip()+":8080" #imgpath = "qrcode.png" #print(IP) os.system("qrencode -o "+imgpath+" '"+Msg+"'")#保存生成的二维码 img = cv2.imread(imgpath) # 加载生成的二维码图片 cv2.namedWindow("qrcode",0) cv2.imshow("qrcode",img)#显示出来 cv2.waitKey(100) #set_qrcode(msg,num+".png")#生成二维码 #二维码识别 从离线图片读取 def konw_qrcode(image_src="qrcode.png"): #从摄像头抓取一张图片识别 #zbarcam=subprocess.Popen("zbarcam --raw --nodisplay /dev/video0", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) #qrcodetext=zbarcam.stdout.readline() #读取离线图片 zbarcam=subprocess.Popen("zbarimg --raw "+image_src, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) qrcodetext=zbarcam.stdout.readline().decode() if qrcodetext != "": qrresult = f"识别结果: {qrcodetext}" print(qrresult) else: print (u"qrcodetext 为空") #二维码识别 从USB相机 def video(): cap=cv2.VideoCapture(0) cap.set(3,640) cap.set(4,480) while(cap.isOpened()): ret_flag, Vshow = cap.read() #cap.read()返回两个值,第一个值为布尔值,如果视频正确,那么就返回true, 第二个值代表图像三维像素矩阵 cv2.imshow('Capture', Vshow) #cv2.imwrite('Saveimage.png',Vshow) #konw_qrcode('Saveimage.png') k=cv2.waitKey(10) if k==ord('s'): cv2.imwrite('Saveimage.png',Vshow) konw_qrcode('Saveimage.png') cap.release() cv2.destoryAllWindows() #重中之重,这个必须有,这个获取字母,但是一直不能通过,即等待一定时间内的用户反馈,如果用户没有按下按键,则继续等待循环。 if __name__ == '__main__': #生成二维码并保存 0001 内容 qrcode.png 保存路径和名字 #set_qrcode('0001', "qrcode.png"): #离线图像测试 #path="0003"+".png" #konw_qrcode(path) #识别二维码 #在线USB测试 video()
不需要支持识别中文二维码
只要上面所有的准备工作都全部成功地做完了,那么您运行代码即可。按理来说应该并没有什么问题会出现。
需要支持识别中文二维码
请在阅读以下内容之前,再想一想:我是否真的需要支持中文呢?
......
......
......
如果答案仍然为是,那么请继续阅读。否则请使用方便快捷的不需要支持中文的方式。
因为此部分内容会涉及到一些编译安装的相关内容。
安装前置库
首先,请运行以下命令,安装工具库
wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz tar -xzvf jpegsrc.v9b.tar.gz cd jpeg.9b ./configure make sudo make install
然后,就要安装Imagemagick了。
wget https://www.imagemagick.org/download/ImageMagick.tar.gz # 文件夹名称可能有所不同。还请自行灵活处理。 cd ImageMagick-7.0.8-68 ./configure make sudo make install sudo ldconfig /usr/local/lib # 检验安装是否成功 convert -version
并且,我们还需要配置一波软链接:
sudo ln -s /usr/local/include/ImageMagick-7 /usr/local/include/ImageMagick sudo ln -s /usr/local/include/ImageMagick-7/MagickWand /usr/local/include/wand
编译安装zbar
首先,下载一份zbar源码,并准备编译器:
sudo apt-get install python-gtk2-dev sudo apt-get install libqt4-dev wget http://downloads.sourceforge.net/project/zbar/zbar/0.10/zbar-0.10.tar.gz tar -zxvf zbar-0.10.tar.gz
然后,我们需要编辑一下编码,使得可以支持中文。
# 进入目录 cd zbar.0.10/zbar/qrcode/ vim qrdectxt.c
找到如图片所示的代码(约第64行),将红框内圈出部分的编码进行替换
(替换的内容为日文的编码。如果希望识别日文,那请替换其他编码,但不要替换utf-8)
同文件找到如图片所示的代码,将编码顺序进行排列
(建议中文放在最前面)
保存,并退出。
然后,就可以开始编译工作啦!
# 首先回到自己的目录(目录仅为示例,对于不同人可能会有不同) cd /home/pi/Desktop/build/zbar-0.10 # 以下代码安装后将**不可以**使用zbarcam命令。若想使用zbarcam,请去除--disable-video命令,并自行安装相关库 ./configure --disable-video -without-qt -without-gtk -without-x -with-jpeg make sudo make install