零基础入门Jetson Nano——通过OpenCV调用CSI和USB摄像头

2023-05-16

Jetson Nano学习——摄像头调用

  • 前言
  • 一、CSI摄像头的调用
    • 1、安装v4l2-utils协助工具
    • 2、查看摄像头挂载情况
    • 3、查看挂载的摄像头详细参数情况
    • 4、检测摄像头能否正常工作
    • 5、使用OpenCV调用CSI摄像头
      • 方式一、利用Gstreamer通道打开摄像头
      • 方式二、利用Jetcam通道打开摄像头
  • 二、USB摄像头的调用
  • 总结


前言

因为Jetson Nano是一款AI边缘计算开发板,所以用它来做嵌入式AI项目是很合适的。本文将详细介绍Jetson Nano如何通过OpenCV调用CSI摄像头(IMX219)和USB摄像头。


一、CSI摄像头的调用

1、安装v4l2-utils协助工具

sudo apt install v4l-utils 

2、查看摄像头挂载情况

ls /dev/video* 

摄像头挂载情况我这里video0和video1是CSI摄像头,video2是USB摄像头。

3、查看挂载的摄像头详细参数情况

v4l2-ctl --device=/dev/video0 --list-formats-ext

摄像头参数RG10:代表这个摄像头的数据格式;
10-bit Bayer RGRG/GBGB:是进一步说明该格式使用的算法与通道对应的参数;
3264x2464、3264x1848、1920x1080、1640x1232、1280x720:代表尺寸;
Interval为性能参数,表示所支持的分辨率及该分辨率的最高执行帧率。

4、检测摄像头能否正常工作

终端输入以下代码,检测摄像头能否正常打开。

nvgstcapture

5、使用OpenCV调用CSI摄像头

Jetson Nano默认安装了OpenCV 4.1.1版本。

方式一、利用Gstreamer通道打开摄像头

安装Gstreamer

sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev

实现读取CSI摄像头的步骤

创建Gstreamer管道
将Gstremer管道绑定至OpenCV的视频流
逐帧提取并绑定

示例

import CV2

# 设置gstreamer管道参数
def gstreamer_pipeline(
    capture_width=1280, #摄像头预捕获的图像宽度
    capture_height=720, #摄像头预捕获的图像高度
    display_width=1280, #窗口显示的图像宽度
    display_height=720, #窗口显示的图像高度
    framerate=60,       #捕获帧率
    flip_method=0,      #是否旋转图像
):
    return (
        "nvarguscamerasrc ! "
        "video/x-raw(memory:NVMM), "
        "width=(int)%d, height=(int)%d, "
        "format=(string)NV12, framerate=(fraction)%d/1 ! "
        "nvvidconv flip-method=%d ! "
        "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
        "videoconvert ! "
        "video/x-raw, format=(string)BGR ! appsink"
        % (
            capture_width,
            capture_height,
            framerate,
            flip_method,
            display_width,
            display_height,
        )
    )

if __name__ == "__main__":
    capture_width = 1280
    capture_height = 720

    display_width = 1280
    display_height = 720

    framerate = 60			# 帧数
    flip_method = 0			# 方向

    # 创建管道
    print(gstreamer_pipeline(capture_width,capture_height,display_width,display_height,framerate,flip_method))

    #管道与视频流绑定
    cap = CV2.VideoCapture(gstreamer_pipeline(flip_method=0), CV2.CAP_GSTREAMER)

    if cap.isOpened():
        window_handle = CV2.namedWindow("CSI Camera", CV2.WINDOW_AUTOSIZE)

        # 逐帧显示
        while CV2.getWindowProperty("CSI Camera", 0) >= 0:
            ret_val, img = cap.read()
            CV2.imshow("CSI Camera", img)

            keyCode = CV2.waitKey(30) & 0xFF
            if keyCode == 27:# ESC键退出
                break

        cap.release()
        CV2.destroyAllWindows()
    else:
        print("打开摄像头失败") 

方式二、利用Jetcam通道打开摄像头

安装traitlets

Python3.7以下使用 traitlets4.x
pip3 install traitlets==4.3.3
Python3.7以上使用 traitlets5.x
pip3 install traitlets

通过以下命令查看自己Python的版本
Python2

python --version

Python3

python3 --version

由于Jetson Nano的Python3默认版本是3.6.9,所以我们安装traitlets4.x
安装Jetcam

git clone https://github.com/NVIDIA-AI-IOT/jetcam
cd jetcam
sudo python3 setup.py install

示例

from jetcam.csi_camera import CSICamera
import CV2

#CSI-0
camera0 = CSICamera(capture_device=0, width=224, height=224)
image0 = camera0.read()
print(image0.shape)
print(camera0.value.shape)

#CSI-1
#camera1 = CSICamera(capture_device=1, width=224, height=224)
#image1 = camera1.read()
#print(image1.shape)
#print(camera1.value.shape)

while 1:
    image0 = camera0.read()
    CV2.imshow("CSI Camera0", image0)

    #image1 = camera1.read()
    #CV2.imshow("CSI Camera1", image1)

    kk = CV2.waitKey(1)
    if kk == ord('q'):  						#按下q键,退出
        break 

二、USB摄像头的调用

相比于CSI摄像头,利用OpenCV调用USB摄像头要简单的多。

示例

import cv2

cap = cv2.VideoCapture(dev)     # dev表示Jetson Nnao上USB的设备号,上面查看摄像头挂载情况那里提到我的USB是video2,故我这里dev = 2

while(1):
    ret,frame = cap.read()  #ret:True/False,代表有没有读到图片  frame:当前截取一帧的图片
    cv2.imshow("capture",frame) 
   
    if (cv2.waitKey(1) & 0xFF) == ord('q'):
        break  
    
cap.release()
cv2.destroyAllWindows()


总结

本文介绍了Jetson Nano如何通过OpenCV调用我们平时常用的两种摄像头(CSI和USB)。注意:CSI摄像头不像USB一样支持热插拔,所以千万不能带电插拔CSI摄像头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

零基础入门Jetson Nano——通过OpenCV调用CSI和USB摄像头 的相关文章

  • opencv 视频上的颜色阈值

    I am thresholding for a color range in an opencv video The goal is to seperate the B mode black and white information on
  • 使用相位相关和对数极坐标变换获得旋转位移

    我一直在编写一个脚本 它使用 cv2 计算两个图像之间的旋转位移phaseCorrelate method 我有两张图像 第二张是第一张图像的 90 度旋转版本 加载图像后 我将它们转换为对数极坐标 然后将它们传递到phaseCorrela
  • CvMat 和 Imread 与 IpImage 和 CvLoadImage

    使用 OpenCv 2 4 我有两个选项来加载图像 1 CvMat and Imread 2 IpImage and CvLoadImage 使用哪一个更好 我尝试将两者混合并最终出现段错误 imread返回一个Mat not CvMat
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • 提高 pytesseract 从图像中正确识别文本的能力

    我正在尝试使用读取验证码pytesseract模块 大多数时候它都能提供准确的文本 但并非总是如此 这是读取图像 操作图像以及从图像中提取文本的代码 import cv2 import numpy as np import pytesser
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • OpenCV的拼接模块可以拼接平行运动相机拍摄的图像吗?

    我想知道是否缝合 http docs opencv org modules stitching doc stitching html http docs opencv org modules stitching doc stitching
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • opencv形态扩张滤波器作为最大滤波器

    就像中值滤波器的定义一样 我可以将 最大滤波器 定义为局部窗口 例如dst x y max 3x3 局部窗口像素 但我在opencv中找不到这样的过滤器 最接近的是 dilate 函数 然后我使用 dilate 函数的默认配置 但结果不正确
  • 当我将鼠标移到 Mat 关键字上时,Visual Studio 2017 冻结(OpenCv 3.4.1)

    我想在 Visual Studio 2017 中开发 openCv 项目 我下载了 opencv 预构建库并进行了必要的设置 那是 1 我添加了系统路径 build x64 vc14 bin 2 在 Visual Studio 中的项目属性
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • Delphi - 如何获取 USB 可移动硬盘和记忆棒的列表?

    在我的应用程序 Delphi 中 我需要列出所有 USB 存储设备 这些可以是闪存棒or外部存储驱动器 有一个Jvcl成分JvDriveCombo 并且它有DriveType属性 问题是我是否选择DriveType Fixed那么除了外部驱
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo

随机推荐

  • 数据库E-R图基础概念

    E R图也称实体 联系图 Entity Relationship Diagram xff0c 提供了表示实体类型 属性和联系的方法 xff0c 用来描述现实世界的概念模型 ER模型的基本元素 实体 xff1a 用方框表示 xff0c 实体名
  • 51单片机蜂鸣器

    蜂鸣器分为两类 1 有源蜂鸣器 2 无源蜂鸣器 有源蜂鸣器比较简单 xff0c 只要有电流通过 xff0c 蜂鸣器就会发声 一般改变不了音调和音量 无源蜂鸣器要给一定频率的脉冲信号 xff0c 蜂鸣器才会发出声音 对于无源蜂鸣器只要改变频率
  • 数据分析----数据清洗

    文章目录 前言一 数据清洗是什么 xff1f 二 步骤1 选择列2 缺失值处理1 找到缺失值2 处理缺失值的方法 3 数据类型转化4 重复值处理 总结 前言 随着科技的不断发展 xff0c 数据在我们生活中越来越多 xff0c 面对繁杂的数
  • python装饰器

    装饰器 一 概念 1 装饰器 xff08 Decoration xff09 装饰器是一种设计模式 xff0c 经常用来实现 34 面向切面的编程 34 AOP 实现在不修改源代码的情况下 xff0c 给程序动态添加功能的一种技术 2 装饰器
  • 拒绝拖延!

  • 使用qemu-img转换镜像格式

    qemu功能强大 xff0c 详细了解其功能请到官网查看 https www qemu org docs master system images html qemu img能将RAW qcow2 VMDK VDI VHD xff08 vp
  • KEIL5MDK最新版(3.37)安装以及旧编译器(V5)安装

    最近KEIl5最新版本出来了 xff0c 但官方不在默认安装V5编译器 xff0c 导致某些代码无法兼容 xff0c 为了防止搞忘 xff0c 便把方法上传网上 旧编译器的安装思路是 在以前有V5编译器的KEILMDK安装包中复制粘贴到新的
  • mp4转ros bag包

    操作方法 python2 mp4 to bag py lane video mp4 lane camera bag 执行转化命令 rosbag play l TLout bag camera image raw 61 image raw0
  • 深度学习之卷积神经网络CNN详细

    需要PPT加Q1271370903 一 深度学习引入 1 各学习方法之间的联系 SL SSL和UL是传统ML方法 DL提供了一个更强大的预测模型 可产生良好的预测结果 RL提供了更口快的学习机制 且更适应环境的变化 TL突破了任务的限制 将
  • 基于51单片机实现红外循迹

    红外循迹外观 xff1a 红外循迹原理 xff1a 红外循迹模块原理还是很简单的 xff0c 和许多光电传感器原理一样 xff0c 当发射器发射出去的光被接收器接收到后 xff0c 模块上对应的LED灯点亮 xff0c 此时相应的输出引脚输
  • Ubuntu“从服务器获取共享列表失败:拒绝连接”问题的解决方法

    本来是可以的 xff0c 在安装nginx后 xff0c ubuntu连接不上共享文件 有过以下尝试 删除nginx和所有配置 xff0c 关闭代理 或者搜一些什么安装smbd包什么的 还有连接ip地址进行挂载的 以及开放端口 我解决的方法
  • C语言:scanf的使用

    目录 一 scanf的循环读取 1 scanf的一次读取 2 加入while循环使scanf能进行循环读取 3 由于scanf出错时会返回EOF xff0c 故代码改为 4 加入rewind清空缓冲区 xff08 只适用于vs xff09
  • 搭建mysql的主从关系

    目录 1 什么是mysql主从 2 为什么要使用MySQL主从 3 MySQL主从的实现原理 4 如何搭建mysql主从关系 4 1 搭建两台有mysql的虚拟机 可以克隆 4 2 保证自己的mysql可以远程访问 4 3 修改ip地址 因
  • 关于虚拟机装Anaconda教学

    文章目录 一 第一步装VMware Workstation Pro虚拟机的安装二 下载虚拟机镜像文件三 安装python解释器 xff0c 安装Anaconda xff1a python解释器 xff1a 直接在DOS上安装 xff0c 操
  • C#ftp服务器配置与文件上传

    个人分享 public void test ftp服务器路径 string ftpServer 61 34 ftp 192 168 0 1 34 ftp本地路径 string ftpDefaultUrl 61 34 A 34 登入到ftp的
  • 完整的前端项目开发流程

    一个项目从一开始的计划到最后的上线 大概要经过以下的流程 产品设计原型审评项目分工项目开发项目测试项目构建项目上线 1产品设计 主要负责人 产品经理 产品经理前期负责收集销售 客户 领导的零散需求 然后做需求分析 完成产品设计 需求分析 需
  • debian11 sid

    编辑 etc apt sources list xff0c 增加下面二行 xff1a deb http ftp us debian org debian sid main contrib non free deb src http ftp
  • 单片机学习——定时器/计数器

    单片机必学系列 单片机学习 中断系统 单片机学习 存储器详解 xff08 程序存储器 片内RAM 拓展RAM EEPROM xff09 单片机学习 定时器 计数器 单片机学习 A D转换 更新ing 单片机学习 定时器 计数器 单片机必学系
  • ros bag包转mp4视频

    先在 rosbag2video py 脚本中修改相关配置参数 或者在终端命令改也行 如果使用脚本里的默认参数 则可直接运行 python rosbag2video py 2022 02 02 10 41 38 bag 代码如下 span c
  • 零基础入门Jetson Nano——通过OpenCV调用CSI和USB摄像头

    Jetson Nano学习 摄像头调用 前言一 CSI摄像头的调用1 安装v4l2 utils协助工具2 查看摄像头挂载情况3 查看挂载的摄像头详细参数情况4 检测摄像头能否正常工作5 使用OpenCV调用CSI摄像头方式一 利用Gstre