天天看點

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攝像頭畫面的參考解決方法

而插入其他USB攝像頭時,配置設定為9号和10号兩個接口

Firefly AIO-3399ProC無法讀取USB攝像頭畫面的參考解決方法

而在opencv源碼的./modules/videoio/src/cap_v4l.cpp檔案中,明确定義了opencv預設隻支援最多8個攝像頭的讀取,注釋中是這樣說的:

Firefly AIO-3399ProC無法讀取USB攝像頭畫面的參考解決方法

程式中是這樣定義的:

Firefly AIO-3399ProC無法讀取USB攝像頭畫面的參考解決方法

解決方法是把定義的MAX_CAMERAS的8改為12,就可以了。

唯一的問題是這樣解決問題需要自己編譯安裝opencv,不能通過pip或者apt-get安裝。

具體過程可以參考本人的另一篇部落格ARM開發闆安裝opencv+dlib

要求是在cmake編譯之前按上文修改定義

———————————————————————————————————————————

本人新手,在校學生,剛接觸ubuntu和python

非常感謝CSDN上各路大佬的文章,感覺要回饋社群,是以開始寫CSDN部落格

歡迎咨詢