Firefly AIO-3399ProC无法读取USB摄像头画面的参考解决方法

一、硬件条件

Firefly AIO-3399ProC + Ubuntu18.04官方固件(5.11号)+ Firefly工业级500M摄像头

二、问题描述

在python3+cv2环境下不能通过cv2.VideoCapture()读取摄像头画面(错误说不太清,有时候是说读取的画面不满足长宽>0,有时候是Can’t open camera by index,有时候是Unable to stop the stream: Invalid arguement),不能通过cheese(Ubuntu软件,18.04LTS自带)读取摄像头画面,不能通过官方固件自带的Camera检测程序检测出来(按1选择USB摄像头直接中断)。

简而言之就是摄像头驱动不起来,没画面。

三、解决思路

1. 驱动问题

首先,我购买的摄像头是Firefly官方的免驱动USB摄像头,按理说是可以支持热插拔的摄像头,不需要额外装驱动。而淘宝第三方卖家告诉我这个摄像头在官方Ubuntu固件包中不自带驱动。并告诉我这个它支持UVC协议,可以自行安装相关驱动。后来发现根本不是驱动的问题。

如果读者和我的摄像头不一样,先考虑是否是驱动问题。先搞清楚支持的是什么协议,如果是UVC协议,可以转到Linux UVC driver and tools查看你的USB摄像头是否被支持,然后参考网站上的内容下载。

2.接口问题(我的问题)

在Firefly AIO-3399ProC中,5.11固件包,系统启动时默认占用了十个video接口
Firefly AIO-3399ProC无法读取USB摄像头画面的参考解决方法_第1张图片
而插入其他USB摄像头时,分配为9号和10号两个接口
Firefly AIO-3399ProC无法读取USB摄像头画面的参考解决方法_第2张图片
而在opencv源码的./modules/videoio/src/cap_v4l.cpp文件中,明确定义了opencv默认只支持最多8个摄像头的读取,注释中是这样说的:
Firefly AIO-3399ProC无法读取USB摄像头画面的参考解决方法_第3张图片
程序中是这样定义的:
Firefly AIO-3399ProC无法读取USB摄像头画面的参考解决方法_第4张图片
解决方法是把定义的MAX_CAMERAS的8改为12,就可以了。

唯一的问题是这样解决问题需要自己编译安装opencv,不能通过pip或者apt-get安装。
具体过程可以参考本人的另一篇博客ARM开发板安装opencv+dlib
要求是在cmake编译之前按上文修改定义

———————————————————————————————————————————
本人新手,在校学生,刚接触ubuntu和python
非常感谢CSDN上各路大佬的帖子,感觉要回馈社区,所以开始写CSDN博客
欢迎咨询

你可能感兴趣的:(Firefly,opencv,ubuntu,arm)