- 一、软件安装
- 1、树莓派换源(清华)
- 2、更换Python版本
- 3、树莓派上安装opencv
- 4、安装pyzbar
- 二、硬件准备
- 1、开启树莓派摄像头
- 2、测试一下可不可以实时显示视频
- 三 、二维码生成、识别
- 1、二维码的生成
- 2、二维码识别
- 1、使用pyzbar对摄像头捕获到的二维码进行解析,并将解析出来的数据存入txt文件
- 2、使用pyzbar识别二维码,输出结果
以下均基于Python3.7.3,Opencv3.2.0。Python3对应的软件是pyzbar,python2对应的软件的zbar,不要安装错了,因为3已经不支持zbar,很多教程还在讲zbar,但是已经不支持了,无法使用。
固件是 2021-05-07-raspios-buster-armhf
可以从官网下载
编辑 /etc/apt/sources.list
文件,删除(或者注释,语句前面加 # )原文件所有内容
sudo nano /etc/apt/sources.list
完成后效果如下
然后把以下内容输入进去
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
完成后效果如下
换源结束,输入以下代码
sudo apt-get update
2、更换Python版本
(将Python2版本更换成Python3版本)
- 输入python3,进入Python交互环境查看自己是否有Python3
python3
如图
说明已经安装了Python3,如果没有Python3,先安装
sudo apt-get install python3
- 更换Python版本(将Python2版本更换成Python3版本)
sudo rm /usr/bin/python
链接Python3,注:python3.7这里要换成对应你的python版本(我的是Python3.7.3)
sudo ln -s /usr/bin/python3.7 /usr/bin/python
终端输入python查看Python版本
sudo apt-get install python3-opencv -y
测试一下有没有安装成功,以此输入
python3
import cv2
说明安装成功,接着查询版本,直接输入
cv2.__version__
4、安装pyzbar
sudo apt-get install libzbar-dev
pip install pyzbar
安装完成后是以下状态
软件准备已经完毕
把树莓派的摄像头装好,然后输入
sudo raspi-config
接着 3 Interface Options
再接着 P1 Camera
按 Enter 选择enable 然后退出
代码如下
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while(True):
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
#cap.realse()
#cv2.destroyALLWindows()
以上文件命名为:Camera_test.py
python Camera_test.py
如果 *** 作正确的话,你应该已经可以看见实时视频了。
首先要先安装pillow,qrcode库,在Bash窗口输入
pip install pillow
pip install qrcode
代码如下
import qrcode as qrcode
qr = qrcode.QRCode(
version=1, #二维码的格子矩阵大小
error_correction=qrcode.constants.ERROR_CORRECT_Q,
box_size=10,
border=4,
)
qr.add_data("你学废了吗?")#向二维码添加数据
qr.make(fit=True)
img = qr.make_image(fill_color="green", back_color="white")#更改QR的背景和绘画颜色
img.show()# 显示二维码
显示结果
扫码结果(手机扫的)
代码来源
import cv2
import pyzbar.pyzbar as pyzbar
def detect():
camera = cv2.VideoCapture(0)
while True:
ret, frame = camera.read()
barcodes = pyzbar.decode(frame) # 解析摄像头捕获到的所有二维码
data = ''
# 遍历所有的二维码
for barcode in barcodes:
data = barcode.data.decode('utf-8') # 对数据进行转码
if data != '':
with open('data.txt', 'w') as file:
file.write(data)
break
if cv2.waitKey(1) == ord('q'):
break
cv2.imshow('', frame)
camera.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
detect()
2、使用pyzbar识别二维码,输出结果
代码如下
import cv2 as cv
from pyzbar import pyzbar as pyzbar
def decodeDisplay(image):
barcodes = pyzbar.decode(image)
for barcode in barcodes:
# 提取二维码的边界框的位置
# 画出图像中条形码的边界框
(x, y, w, h) = barcode.rect
cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 提取二维码数据为字节对象,所以如果我们想在输出图像上
# 画出来,就需要先将它转换成字符串
barcodeData = barcode.data.decode("UTF8")
barcodeType = barcode.type
# 绘出图像上条形码的数据和条形码类型
text = "{} ({})".format(barcodeData, barcodeType)
cv.putText(image, text, (x, y - 10), cv.FONT_HERSHEY_SIMPLEX,.5, (0, 0, 125), 2)
# 向终端打印条形码数据和条形码类型
print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
return image
def detect():
camera = cv.VideoCapture(0)
while True:
# 读取当前帧
ret, frame = camera.read()
# 转为灰度图像
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
im = decodeDisplay(gray)
c=cv.waitKey(5)#等待5毫秒
cv.imshow("camera", im)
if(c==27):#按下esc键关闭摄像头窗口
camera.release()
cv.destroyAllWindows()
break
if __name__ == '__main__':
detect()
完结撒花!!!!
有问题下方留言,谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)