Gstreamer

GStreamer的程序通过连接数字媒体处理的元素注入管道(pipeline)。每个元素是由一个插件提供 。 元素可组合为箱(bins),箱可以进一步聚合,从而形成架构图。下图是一个例子一个过滤器图表 。

元素沟通是透过垫(pads)。来源垫(source pad)上一个元素可以被连接到一个接收垫(sink pad)在另一个。当管道是在播放状态,数据缓冲流(data buffers flow)从来源垫(source pad)流向接收垫(sink pad)。

该图可以体现出如何使用GStreamer播放MP3文件。该文件的源读取 MP3文件从一台计算机的硬盘驱动程序,并将其发送到MP3解码器。解码器解码该MP3数据,并转换成PCM,然后传递到ALSA声音驱动。ALSA的声卡驱动程序发送 PCM声音样本,最后从电脑的扬声器播放。

前期准备

你需要得到摄像头的一些参数:
保证当前设备和摄像头在相同的ip地址下,打开直接输入摄像头的ip地址,即可进入摄像头设置界面,其中分辨率和编码方式我们需要注意,因为在使用GStreamer时,我们需要确定输入的格式与摄像头设备设置是一种的,不然会导致读取错误问题,从而打不开摄像头。
并且一般NX设备自带的GStreamer和Opencv是配套的,所以如果自己在虚拟环境中安装的opencv可能会导致和GStreamer版本不适配,也会导致打不开摄像头。我们可以卸载虚拟环境的opencv,然后通过如下代码手动建立与本地opencv的链接:
知识参考:NVIDIA AGX Xavier环境配置

sudo cp /usr/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-aarch64-linux-gnu.so /home/nvidia/archiconda3/envs/torch/lib/python3.6/site-packages


包括如果摄像头不清楚,可以通过手动调节摄像头参数,在预览中观察是否清晰实现调节。

代码

程序读取视频帧并进行解码是一个很耗费CPU算力的工作,如果我们直接利用opencv接受rtsp视频流,在多摄像头的情况下,小功率的NX设备根本来不对所有的视频进行解码。即使单个摄像头,如此占算力的工作,也会导致CPU无法进行其他的任务。为此我们需要硬件的帮忙。并且这一切GStreamer会自动做完。 具体代码如下:

import sys
import cv2
import time
import multiprocessing as mp
import osdef image_put(name, pwd, ip, channel=1,show = False,write = False,save_W = 200,save_H =200):image_width = 1920  #摄像头视频分辨率中宽度参数image_height = 1080 #摄像头视频分辨率中高度参数rtsp_latency = 50uri = "rtsp://%s:%s@%s:554//Streaming/Channels/%d" % (name, pwd, ip, channel)gst_str = ("rtspsrc location={} latency={} ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv ! video/x-raw, width=(int){}, height=(int){}, format=(string)BGRx ! videoconvert ! appsink sync=false")\.format(uri, rtsp_latency, image_width, image_height)  #开启硬件加速cap = cv2.VideoCapture(gst_str,cv2.CAP_GSTREAMER)if not cap.isOpened():sys.exit("Failed to open camera!")now_save = time.strftime("%m-%d_%H", time.localtime())if show == True:print('{} showing frames'.format(str(ip)))if write == True:print('{} saving video...'.format(str(ip)))fourcc = cv2.VideoWriter_fourcc(*'mp4v')fps = 20.0size = (save_W, save_H)out_file = f'.//det_videos//{str(ip)}.{now_save}.mp4'out = cv2.VideoWriter(out_file, fourcc, fps, size)while True:frame = cap.read()[1]if write == True:if time.strftime("%m-%d_%H", time.localtime()) != now_save:now_save = time.strftime("%m-%d_%H", time.localtime())fourcc = cv2.VideoWriter_fourcc(*'mp4v')fps = 20.0size = (save_W, save_H)out_file = f'.//det_videos//{str(ip)}.{now_save}.mp4'out = cv2.VideoWriter(out_file, fourcc, fps, size)try:save_img = cv2.resize(frame, (save_W, save_H))out.write(save_img)except Exception as e:print(e)print('frame lossing and pass')if show == True:frame = cv2.resize(frame, (400, 400))cv2.imshow(str(ip), frame)k = cv2.waitKey(25)if (k & 0xff == ord('q')):breakprint('camera {} over'.format(str(ip)))if write == True:out.release()cv2.destroyAllWindows()def run_multi_camera():if os.path.exists('.//det_videos'):passelse:os.mkdir('.//det_videos')# user_name, user_pwd = "admin", "password"user_name, user_pwd = "admin", "admin"#多摄像头ip列表camera_ip_l = ["192.168.0.5",  # ipv4#"192.168.0.4",#"192.168.0.1",#"192.168.0.2",]mp.set_start_method(method='spawn')  # initprocesses = []for camera_ip in camera_ip_l:processes.append(mp.Process(target=image_put, args=(user_name, user_pwd, camera_ip,1,True,True)))for process in processes:process.daemon = Trueprocess.start()for process in processes:process.join()if __name__ == '__main__':run_multi_camera()

Jetson Xavier NX设备上利用opencv进行多海康摄像头的捕获的部署方法相关推荐

  1. NVIDIA Jetson Xavier NX设备上使用jtop监控GPU、CPU、内存等的使用

    文章目录: 1 在Jetson设别上安装jtop 2 jtop的使用 2.1 jtop的使用 2.2 jetson-stats一些可执行文件使用 3 jetson NX默认刷好机之后的环境 1 在Je ...

  2. 学习笔记(15):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-opencv播放rtsp海康摄像头和播放系统摄像头...

    立即学习:https://edu.csdn.net/course/play/5694/106870?utm_source=blogtoedu opencv_ffmpeg320.dll    可跟换高版 ...

  3. 在NVIDIA Jetson Xavier NX上把yolov4-deepsort的模型pb模型使用tensorflow-onnx和onnx-tensorrt工具最终转换为tensorrt模型

    文章目录: 1 安装tensorflow-onnx环境和把tensorflow的pb模型转换为onnx模型 1.1 安装tensorflow2onnx环境 1.2 把tensorflow的pb模型转换 ...

  4. 胎儿式保姆级教程:Jetson Xavier NX镜像烧录、开机配置、中文配置、风扇设置、远程桌面、文件传输配置、pycharm安装环境配置,QQ,opencv(cuda编译),torch(GPU).

    一.使用的硬件:nx板子.原装充电器.有线鼠标(USB).有线键盘(USB).有线摄像头(USB).7寸触摸显示屏.20寸大显示屏(显示屏有一个就可以,大屏幕更加方便).SD卡(128G,用64g也可 ...

  5. NVIDIA Jetson Xavier NX分配磁盘空间

    文章目录: 1 问题和场景说明 2 尝试解决磁盘分区挂在问题 提前声明,这篇博客可能并不能够帮助你,你勿吐嘈,仅作我个人遇到到问题的情况,因此此篇是水博客,请跳过 1 问题和场景说明 1.我使用SDK ...

  6. jetson xavier nx安装opencv3.4

    jetson xavier nx自带的opencv版本是4.1,有的时候,我们需要3.x版本的opencv,这时候就需要我们自己编译opencv. 脚本如下: set -efolder=${HOME} ...

  7. Jetson Xavier NX刷机安装Ubuntu20.04,配置CUDA,cuDNN,Pytorch等环境教程(英伟达官方源安装,理论适用其它Jetson设备)

    一.准备工作 硬件:Jetson Xavier NX开发板(笔者购入为带128g内存条的EMMC版).跳线帽(杜邦线).microUSB转USB数据线.电源线 软件:Ubuntu host主机(可运行 ...

  8. 在Jetson Xavier NX上安装pycuda报错:src/cpp/cuda.hpp:14:10: fatal error: cuda.h: No such file or directory

    文章目录: 1 我的系统环境和遇到问题分析 1.1 我的系统环境 1.2 问题描述 2 问题解决方式 1 我的系统环境和遇到问题分析 1.1 我的系统环境 我的详细系统环境如下:使用jetson_re ...

  9. Jetson Xavier NX上安装scipy报错:numpy.distutils.system_info.NotFoundError: No lapack/blas resources found

    文正目录: 1 问题说明 2 解决问题 3 其他的我尝试失败的方法 1 问题说明 在Jetson Xavier NX嵌入式设备上(ARM架构)安装scipy的时候报错:numpy.distutils. ...

最新文章

  1. 阿里员工哀叹不读书已经没有出路,招聘简历基本都是985
  2. 庖丁解牛剖析国际学术论文写作的快速入门
  3. 简单三步-实现dede站内搜索功能
  4. python生成wheel包注意事项
  5. sizeof之字节对齐
  6. 零基础小白一个,我是如何入门商业数据分析师的
  7. HTML1个像素宽的代码,HTML5 Canvas中绘制一个像素宽的细线实现代码详情
  8. HBuilder的app自动更新
  9. Android中Adapter之BaseAdapter使用
  10. 广西2021各校高考成绩查询入口,2021广西高考成绩查询时间广西高考分数查询入口和查分方式_高三网...
  11. 网维无盘服务器错误代码,网维大师无盘环境INTER傲腾方案常见问题解答?
  12. phpnow mysql_使用PHPnow搭建本地PHP环境+创建MySQL数据库
  13. 读《创业36条军规》(三)学先进 傍大款 走正道
  14. if scl.shape = avg.shape: AttributeError: ‘float‘ object has no attribute ‘shape‘
  15. win电脑主板设置的Bios密码清除方法
  16. Pxe +ks+ cobbler+ cobbler-web 实现centos6.7,centos7.2无人值守全自动化网络安装系统。
  17. excel数据透视表总结
  18. 将favdb转换成html,360浏览器收藏夹使用小记
  19. 曾惊动中国大使馆的欧洲专利流氓迎来中国企业的连续痛击
  20. 电子投票算法_电子投票的历史不短

热门文章

  1. idea常用快捷键、markdown中html小技巧
  2. 考研力荐:宁缺毋滥 精选复习资料
  3. 用Python和Pygame写游戏-从入门到精通(16)
  4. 开发互动直播应用很简单:声网 Android Demo保姆级运行教程
  5. OpenCV.概念(读书笔记)
  6. java面试问题答不上来_程序员面试的时候突然遇到答不上的问题怎么办?
  7. 亿图图示Windows12.5版本,满足用户多元化绘图需求
  8. 【Docker】虚悬镜像(Dangling Image)介绍和处理方法
  9. python networkx库分析newmovies数据集
  10. Substance Painter - Blender - UE4/5 低模 高模 烘焙 ID 流程