003-基于Jetson Nano平台的在线二维码检测

本节主要介绍如何在Jetson Nano使用USB摄像头读取和显示视频。在此基础之上,实现一种实时二维码检测实例。

目录

1.1 使用摄像头

1.2 二维码识别

1.1 使用摄像头

Jetson Nano能够使用的摄像头有两种。一种是相对价格比较便宜的CSI摄像头(树莓派摄像头),另外一种是普通的USB接口摄像头。

考虑到大部分读者都和我一样,是业余级嵌入式开发爱好者,因此本节只介绍更常用更一般的USB摄像头的使用。有关CSI摄像头的设置和使用方法,可查阅相关资料。需要说明的一点,Jetson Nano并不是支持所有的USB摄像头,建议在采购时选取Linux免驱的USB摄像头。

相比于读取CSI摄像头,读取USB摄像头更加简单,只需要先初始化摄像头,然后逐帧显示并。

下面给出一段Python版本摄像头调用程序

import cv2
 
 #创建摄像头捕获模块
cap = cv2.VideoCapture(0) # 0是摄像头序号,默认从0开始
 
#创建窗口
window_handle = cv2.namedWindow("USB Camera", cv2.WINDOW_AUTOSIZE)
 
# 逐帧显示
while cv2.getWindowProperty("USB Camera", 0) >= 0:
    ret_val, img = cap.read()
 
    cv2.imshow("USB Camera", img)
 
    keyCode = cv2.waitKey(10) & 0xFF  # 每隔10ms监测一次键盘命令
    if keyCode == 27: # ESC键退出
        break
 
#释放资源
cap.release()
cv2.destroyAllWindows()

1.2 二维码识别

本小节介绍一个基于Jetson Nano的二维码实时检测和识读功能。

Jetson Nano系统自带的Opencv4.1版本,已经集成了二维码识读模块,我们只需调用相关函数即可完成。

基于OpenCV的二维码检测和识别主要分为以下三步:

  1. 创建二维码检测器(使用QRCodeDetector函数);
  2. 二维码检测和识别(使用detectAndDecode函数);
  3. 输出检测结果。

下面是完整的Python版二维码检测和识读代码:

import cv2
import numpy as np
 
 #创建摄像头捕获模块
cap = cv2.VideoCapture(0)
 
#创建窗口
window_handle = cv2.namedWindow("USB Camera", cv2.WINDOW_AUTOSIZE)
 
#创建二维码检测器
qrDecoder = cv2.QRCodeDetector()
 
# 逐帧显示
while cv2.getWindowProperty("USB Camera", 0) >= 0:
    ret_val, img = cap.read()
    #print(img.shape)
    
    # 根据需要,调整视频窗口大小
    height, width = img.shape[0:2]
    if width>800:
        new_width=800
        new_height=int(new_width/width*height)
        img = cv2.resize(img, (new_width,new_height))
 
    # 检测和识别二维码
    data,bbox,rectifiedImage = qrDecoder.detectAndDecode(img)
    if len(data)>0:
        print("解码数据: {}".format(data))
        n = len(bbox)
        for j in range(n):
            cv2.line(img, tuple(bbox[j][0]), tuple(bbox[ (j+1) % n][0]), (255,0,0), 3)
    else:
        print("没有检测到二维码")
 
    #显示图像
    cv2.imshow("USB Camera", img)
 
    #每隔100ms,监测键盘命令
    keyCode = cv2.waitKey(100) & 0xFF         
    if keyCode == 27:# ESC键退出
        break
 
#释放资源
cap.release()
cv2.destroyAllWindows()

实际检测效果如下图:

Jetson Nano 从入门到实战(案例:Opencv配置、人脸检测、二维码检测)_jetson nano 从入门到实战(案例:opencv配置、人脸检测、二维码检测)-CSDN博客

(未完待续)

最近更新

  1. TCP协议是安全的吗?

    2024-03-23 15:44:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-23 15:44:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-23 15:44:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-23 15:44:03       18 阅读

热门阅读

  1. C语言判断回⽂字符串

    2024-03-23 15:44:03       17 阅读
  2. MySQL知识总结

    2024-03-23 15:44:03       18 阅读
  3. Linux - IO

    2024-03-23 15:44:03       15 阅读
  4. capl实现crc校验码计算

    2024-03-23 15:44:03       19 阅读
  5. 蓝桥杯/减肥/c\c++

    2024-03-23 15:44:03       15 阅读
  6. LeetCode算法(一) 之 Python基础

    2024-03-23 15:44:03       19 阅读
  7. 力扣-字符串的最长公共前缀

    2024-03-23 15:44:03       19 阅读
  8. 力扣由浅至深 每日一题.11 加一

    2024-03-23 15:44:03       18 阅读
  9. 前端面试题整理

    2024-03-23 15:44:03       17 阅读
  10. 解决Linux报错JCE cannot authenticate the provider BC

    2024-03-23 15:44:03       16 阅读