树莓派3B+ Debain 10

树莓派3B+ Debain 10,第1张

树莓派3B+opencv+pyzbar进行二维码识别
  • 一、软件安装
    • 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
可以从官网下载

一、软件安装 1、树莓派换源(清华)

编辑 /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版本)

  1. 输入python3,进入Python交互环境查看自己是否有Python3
python3

如图

说明已经安装了Python3,如果没有Python3,先安装

sudo apt-get install python3
  1. 更换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版本

3、树莓派上安装opencv
sudo apt-get install python3-opencv -y

测试一下有没有安装成功,以此输入

python3
import cv2


说明安装成功,接着查询版本,直接输入

cv2.__version__

4、安装pyzbar
sudo apt-get install libzbar-dev
pip install pyzbar

安装完成后是以下状态

软件准备已经完毕

二、硬件准备 1、开启树莓派摄像头

把树莓派的摄像头装好,然后输入

sudo raspi-config

接着 3 Interface Options

再接着 P1 Camera

按 Enter 选择enable 然后退出

2、测试一下可不可以实时显示视频

代码如下

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

如果 *** 作正确的话,你应该已经可以看见实时视频了。

三 、二维码生成、识别 1、二维码的生成

首先要先安装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()# 显示二维码

显示结果

扫码结果(手机扫的)

2、二维码识别 1、使用pyzbar对摄像头捕获到的二维码进行解析,并将解析出来的数据存入txt文件

代码来源

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()


完结撒花!!!!
有问题下方留言,谢谢!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/741617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存