创作理由:因为我的研究方向,是机器视觉嘛,工业相机的开发是必不可少的,再加上大学做裸机开发的时候,也是比较常用摄像头模块来做整个系统的眼睛,所以对相机有着些许的心得感触,今天就分享出来供大家一起交流。以下给出的都是我用过的一些摄像头作为示例,但是不代表这个摄像头只能够按照我用的方法去获取视频流哈,如今还是有很多获取视频流的方法呢!!


1、常用的OpenCV 的 VideoCapture()

    OV5640等等芯片的摄像头大部分都是采用这个方法来实现视频流读取的,但是对于有些工业相机等不是很方便,因为有的摄像头可能都会有自己的视频流读取协议等等。

  • 优点:
  • 简单易用,适合常见的视频源。
  • 缺点:
  • 对一些特定协议或编码的支持有限,不能直接读取非标准视频流(如GigE、USB3 Vision等工业相机协议)。


获取视频流的方法(个人经历总结)_视频流


示意代码:

import cv2

cap = cv2.VideoCapture(0)  # 从摄像头读取

# 或者读取网络视频流

# cap = cv2.VideoCapture('rtsp://username:password@ip_address:port/stream')


while True:

    ret, frame = cap.read()

    if not ret:

        break

    cv2.imshow('frame', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):

        break

cap.release()

cv2.destroyAllWindows()


2、使用特定设备的SDK

   一般的大厂都会有自己的SDK包,比如大华、海康威视等等,但是有些小厂也会配有,一般都是直接用的国内外大厂的SDK。SDK有各种各样的区别,平台啊!语言种类啊!大致都包括实例、文档、APP等等开发工具。


  • 优点:
  • 完全支持设备的特性,能获取高性能、低延迟的视频流。
  • 可以控制设备的特殊功能,如曝光、帧率等。
  • 缺点:
  • 相对复杂,需要学习SDK的使用方法。
  • 代码需要针对不同的设备编写,缺乏通用性。


获取视频流的方法(个人经历总结)_帧率_02

                                                                                       USB摄像头


3、RTSP(Real-Time Streaming Protocol)属于SDK

    RTSP是一种用于控制音视频流的网络控制协议,通常用于从IP摄像头或其他支持网络视频流的设备中传输视频。RTSP本身并不传输数据,而是用于建立和控制数据流的会话,实际的视频数据通常通过RTP(Real-time Transport Protocol)传输。网络协议就不用我多说,它的好处了吧?监控网就是一个典例。其本质就是通过一个ip地址来获取视频流。

  • 优点:
  • 广泛支持的网络协议,许多摄像头和媒体服务器都支持RTSP。
  • 适合长距离传输和多客户端连接。
  • 缺点:
  • 需要良好的网络环境,延迟和丢包可能影响流媒体质量。

   

获取视频流的方法(个人经历总结)_帧率_03

                                                                                      Luckfox Pico

获取视频流的方法(个人经历总结)_视频流_04


4、GigE(Gigabit Ethernet):属于SDK

GigE是指通过千兆以太网接口进行数据传输,广泛应用于工业相机,因其能够提供高速数据传输,适合高分辨率和高帧率的图像采集。GigE接口通常依赖于特定的工业协议,如GigE Vision协议,该协议允许相机通过标准网络设备进行图像传输。

  • 优点:
  • 提供高带宽和高帧率的图像传输,非常适合工业应用。
  • 支持长距离传输和多个设备的连接。
  • 缺点:
  • 需要特定的SDK或驱动程序,配置和使用较为复杂。
  • 对网络质量要求高,网络性能直接影响数据传输质量。

获取视频流的方法(个人经历总结)_视频流_05

                                                                             网口相机(PoE供电)


5、我为人人,人人喂我