使用Jetson Nano和树莓派相机实现视频流

了解如何用树莓派相机和Jetson Nano使用Flask框架实时视频流!

Jetson Nano是一个边缘计算平台,适合低功耗、不受监控和独立使用。它非常适合在没有显示器或键盘等外设连接的情况下使用。

本文展示了如何从树莓派(Raspberry Pi)摄像机实时传输视频到web浏览器,并在连接到同一网络的任何其他设备上访问该视频流。

1.先决条件

  • Jetson Nano开发工具包
  • Raspberry Pi Camera v2相机
  • 开发者套件的电源

一切都设置好之后,我们创建一个简单的Python应用程序,它使用OpenCV从摄像机捕获视频,调整每一帧的大小,并使用Python Flask框架将其传输到HTML网页。

2. Flask

Python有几个用于创建可靠和高性能web应用程序的web开发框架。Django、Flask和Pyramid是最常见的框架。

Flask是一个微框架,不需要外部库或工具。它比Django更灵活,并且允许用户包含不同的插件和或扩展。它的数据抽象层或数据验证层可以在其他框架中找到。用户可以为身份验证、数据格式验证、SQL管理、请求处理和用户权限部署第三方扩展。

在Jetson Nano上安装Falsk

pip3 install flask

3.简单的视频流到Web浏览器应用程序

Jetson Nano板使用GStreamer管道来处理媒体应用程序。GStreamer管道利用appsink接收器插件来访问原始缓冲区数据。

当用户发送kill命令(Ctrl + C)时,它会在退出前等待所有数据缓冲区处理完毕,这将阻塞应用程序中的流线程。因此,这里创建的Gstreamer对象额外被赋予了wait-on-eos=false和只有一个buffer (max-buffers=true)参数,以避免脏杀和挂起管道。

import cv2
import time
import threading
from flask import Response, Flask# Image frame sent to the Flask object
global video_frame
video_frame = None# Use locks for thread-safe viewing of frames in multiple browsers
global thread_lock
thread_lock = threading.Lock()# GStreamer Pipeline to access the Raspberry Pi camera
GSTREAMER_PIPELINE = 'nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=21/1 ! nvvidconv flip-method=0 ! video/x-raw, width=960, height=616, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink wait-on-eos=false max-buffers=1 drop=True'# Create the Flask object for the application
app = Flask(__name__)def captureFrames():global video_frame, thread_lock# Video capturing from OpenCVvideo_capture = cv2.VideoCapture(GSTREAMER_PIPELINE, cv2.CAP_GSTREAMER)while True and video_capture.isOpened():return_key, frame = video_capture.read()if not return_key:break# Create a copy of the frame and store it in the global variable,# with thread safe accesswith thread_lock:video_frame = frame.copy()key = cv2.waitKey(30) & 0xffif key == 27:breakvideo_capture.release()def encodeFrame():global thread_lockwhile True:# Acquire thread_lock to access the global video_frame objectwith thread_lock:global video_frameif video_frame is None:continuereturn_key, encoded_image = cv2.imencode(".jpg", video_frame)if not return_key:continue# Output image as a byte arrayyield(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + bytearray(encoded_image) + b'\r\n')@app.route("/")
def streamFrames():return Response(encodeFrame(), mimetype = "multipart/x-mixed-replace; boundary=frame")# check to see if this is the main thread of execution
if __name__ == '__main__':# Create a thread and attach the method that captures the image frames, to itprocess_thread = threading.Thread(target=captureFrames)process_thread.daemon = True# Start the threadprocess_thread.start()# start the Flask Web Application# While it can be run on any feasible IP, IP = 0.0.0.0 renders the web app on# the host machine's localhost and is discoverable by other machines on the same network app.run("0.0.0.0", port="8000")

代码的重要部分带有注释。该应用程序是用线程安全的视频帧捕获和显示实现编写的,以避免数据损坏。

  • 将上面显示的程序保存为 web_streaming.py 并通过python web_streaming.py 运行。这将启动 Flask 应用程序并启动视频流。
  • 运行 ifconfig 获取 Jetson Nano Developer Kit 的 IP 地址。

您可以通过访问 IP 地址在连接到同一网络的任何设备的浏览器窗口中访问视频源。例如输入 192.168.1.2:8000 就可以看到直播了。

4.结果和结论

当 Jetson Nano 板部署在机器人或监控站点等远程操作平台上时,实时查看摄像头操作至关重要。这是一种非常简单的技术,可以通过网络传输摄像头实时视频流并在其他机器上查看。

参考目录

https://maker-pro.translate.goog/nvidia-jetson/tutorial/streaming-real-time-video-from-rpi-camera-to-browser-on-jetson-nano-with-flask

使用Jetson Nano和树莓派相机实现视频流相关推荐

  1. jetson nano安装树莓派摄像头(v2)及调试的方法

    首先先烧写好jetson nano的镜像,这些工作已经默认完成. 需要在nano上使用树莓派相机,要注意jetson nano支持的是IMX219 sensor,所以树莓派相机中有这一款符合要求: R ...

  2. 【AI创造营】基于PaddleHub与Jetson Nano的智能宠物看护助手

    基于PaddleHub与Jetson Nano的智能宠物看护助手 一.效果展示 二.实现思路 1.训练一个适用于该需求的模型 2.使用PaddleHub预训练模型 三.数据采集 硬件部分 代码部分 四 ...

  3. jetson nano opencv 打开 CSI摄像头_Nvidia Jetson Nano:使用Tensorflow和OpenCV从头开始自定义对象检测...

    本文作者: 转载自: https://medium.com/swlh/nvidia-jetson-nano-custom-object-detection-from-scratch-using-ten ...

  4. Jetson Nano - 人脸识别:家门视频监控

    教你用1000元预算打造家门口的人脸识别监控系统: 我们只需Jetson Nano配上一个简单的摄像头就能实现识别和记录来访你家门口的人员. 通过人脸识别模块face_recognition,能够实时 ...

  5. Jetson nano GPIO的使用

    jetson nano 和树莓派一样作为嵌入式设备提供了GPIO接口,其位置如下图红色框选部分. 其中部分引脚功能已标注丝印具体功能如下表所示: 这是微雪提供的引脚功能表,其中: BCM是丝印内容 N ...

  6. 使用dd整盘克隆jetson nano tf卡

    平台:jetson nano(树莓派,linux pc) 备份系统 将系统装好环境的tf卡用读卡器插入jetson nano或者其他linux系统. 找到插进来的U盘设备 sudo fdisk -l ...

  7. NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁

    在前面的文章中,我已经想大家介绍了NVIDIA Jetson Nano这个板子.今天我将给大家介绍NVIDIA Jetson Nano最重要的一个接口–GPIO.Jetson Nano 和树莓派一样作 ...

  8. 单片机、芯片、arduino、树莓派、Jetson Nano、esp32、stm32

    一.芯片:百科上说半导体元件产品的统称.知乎上说芯片(集成电路),或称微电路.微芯片.晶片/芯片在电子学中是一种把电路小型化的方式,并时常制造在半导体晶圆表面上. 前述将电路制造在半导体芯片表面上的集 ...

  9. 树莓派4与英伟达Jetson Nano性能大比拼,谁是最佳的嵌入式“电脑”?

    作者 | Chris Pietschmann 译者 | 弯月,责编 | 屠敏 转载自CSDN(ID:CSDNnews) 导读:日前,Raspberry 基金会发布了开发者为之兴奋的 Raspberry ...

最新文章

  1. 关于PPP Multilink协议的配置
  2. Mac OS X 系统自带的截图快捷键有哪些?
  3. 关于 sql语句的一些小优化
  4. Hibernate【inverse和cascade属性】知识要点
  5. leetcood学习笔记-204-计算质数
  6. table数据表 边框特效
  7. 欢乐的跳(洛谷P1152题目链接,Java语言描述)
  8. CentOS常用基础命令大全
  9. CSS3渐变——gradient
  10. 识别到硬盘 计算机不显示盘符,移动硬盘不显示盘符怎么办
  11. 一文带你彻底了解 Java 异步编程
  12. python中的统计模型库——statsmodels
  13. cefsharp内嵌资源html的读取,C#(csharp)用CefSharp开发实现一个浏览器,抓取网站任意资源...
  14. python中将数据写入excel
  15. 传播知识,分享快乐--我的相关资源下载(不定期更新)
  16. 钢琴的乐理知识以及musicXml属性介绍
  17. aspose office系列转换pdf文件
  18. list和tuple的区别
  19. 学习Mybatis源码
  20. 决策树(信息熵、信息增溢、GINI)的计算

热门文章

  1. 联想Z475有时候不能连接无线
  2. 我国大陆居民×××Java验证
  3. 基于Android手机车辆状态监控
  4. 一名佛系退休前端程序员的年度总结(生活记录)
  5. Android开发实战《智慧北京》——4.WebView的使用
  6. 锐捷交换机访问控制策略配置实例
  7. 计算机考研之中南大学PK东南大学
  8. 登陆失败 禁用当前的账户
  9. 【Hive】Hive建表基本语法及解释
  10. yuzu最新安装使用教程