树莓派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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值