本节主要介绍如何在Jetson Nano使用USB摄像头读取和显示视频。在此基础之上,实现一种实时二维码检测实例。
目录
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的二维码检测和识别主要分为以下三步:
- 创建二维码检测器(使用QRCodeDetector函数);
- 二维码检测和识别(使用detectAndDecode函数);
- 输出检测结果。
下面是完整的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博客
(未完待续)