但我们需要对此处进行修改,使用rtsp流,进行AI行人识别,下面需要进行分析代码,找到可以修改的地方,或者摸个参数,来进行RTSP流的修改。
已经找到了视频流在哪里传进去的了,下面就是进行分析里面的代码进行改成rtsp流,把rtsp流写进去,来做到实时分析,实现行人检测的效果。
在进行分析的时候,发现source这个参数只有LoadStreams用到过,而且是直接传进去的。
进入source参数里面查看,发现里面有一个默认的值,就是读文件,如果不是文件,就把source=[source],再进行source值遍历。在遍历中还使用到了opencv打开本地电脑的摄像机流,再开一个线程进行实时行人识别。
代码中使用了opencv中cv2.VideoCapture的函数,从网上查找这个函数的用法得知,此函数是可以直接传入rtsp流地址的,所以问题解决就简单多了。cv2.VideoCapture这个函数是可以传入rtsp地址的,所以传入rtsp地址进行尝试,发现传入rtsp地址是没有问题的。
只要修改source这个参数即可,最终实现了检测:
这种情况可能是因为Python中的OpenCV库无法直接读取某些特定类型的摄像头数据流,需要使用其他工具或库来解决。
下面是一些可能的解决方法:
确认URL地址正确性:首先,请确保URL地址是正确的,可以使用浏览器进行测试。
检查防火墙和网络设置:如果摄像头在内部网络中,需要确保计算机可以访问该网络并且防火墙不会阻止访问。
检查OpenCV是否支持该类型的数据流:请确保OpenCV库支持您的摄像头数据流。如果不支持,则需要使用其他工具或库来读取数据流。
使用FFmpeg库:如果您的摄像头使用的是RTSP流,则可以尝试使用FFmpeg库来读取数据流。可以使用以下代码进行测试:
import cv2
cap = cv2.VideoCapture('rtsp://admin:password@192.168.1.1/1')
while True:
ret, frame = cap.read()
if not ret:
print("Error: failed to capture frame")
break
cv2.imshow("frame", frame)
if cv2.waitKey(1) &0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
在代码中,您需要将URL替换为您的RTSP流URL,然后运行代码进行测试。
希望这些方法可以帮助您解决问题。
1.设备这里用的是海康的鱼眼摄像头,型号是DS-2CD3955FWD-IWS,其实基本上能支持sdk二次开发的IP摄像头都可以(参考这里)。鱼眼摄像头相比普通的摄像头经过扭曲,因此在应用的时候一般需要进行反扭曲,这一步会造成比较大的延迟,因此没有不是特定需求的话尽量使用普通的就可以。
注:海康的萤石系列貌似并不能通过RTSP地址获取,而这里的方法需要用RTSP进行视频流获取,所以无法萤石系列就不在此列。
2.通过RTSP地址获取视频流
首先需要知道海康设备的RTSP地址,可以通过这里进行查看。
import cv2
source = ""rtsp://admin:12345@192.168.1.64/Streaming/Channels/1"
注: admin和12345分别是ip camera的用户名和密码,在浏览器上第一次登录摄像头的时候会进行设置;
192.168.1.64是摄像头的默认IP,在浏览器中输入即可进入登录页面(如下);
Channels/1和Channels/2分别对应主码流和子码流地址,两者的分辨率不同。IP摄像头无法通过opencv调节分辨率,只能在海康的监控界面的配置进行设置(如下)。
3. 摄像头校准(calibration)(optional)
这个配置有很多,而且官方提供的校准文档很详细(戳这里),就不具体细讲了。需要python版本的代码的话可以直接fork这里;如果是c++版本的话可以参考这里
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)