2012-12-18 38 views
3

我想製作一個程序,爲數字視頻/照相機(除DSLR以外的其他消費類照相機)提供連線操作,以便將相機插入電腦(USB或其他)並使用它的功能(拍照,錄製視頻,縮放,聚焦等)。 現在的預期平臺是Linux。在LINUX上用C++連接攝像頭的應用程序

據我所知,沒有任何製造商爲他們的產品提供SDK,除少數人(佳能,奧林巴斯,尼康),但僅限於他們的數碼單反相機。

我不是新來的C++,但我沒有在它的許多項目上工作。但是,我對OpenCV完全陌生,而且我還不知道這個庫的功能。 爲了測試opencv構建和我的配置,我製作了一個簡單的應用程序,它只需從網絡攝像頭獲取流並將其顯示在窗體上。 (使用cvCreateCameraCapture)

這是否適用於數碼相機或攝像機?我猜他們必須有一個「網絡攝像頭模式」,但這並不常見(至少不是攝像機)。 Firewire或者是否有其他支持HD的連接器?他們會被OpenCV識別嗎? 如果可能的話,我想遠離HDMI和捕捉設備(額外費用)。所以我想我的問題是,如果任何人有任何像這樣的項目的經驗:什麼是這種用法(什麼功能)的首選相機規格?是否有任何庫可用於緩解我的煩惱:)

我正在調查libgphoto2以及。如果需要的話,我會嘗試像寫相機的驅動程序,如果可能的話使用libusb,但我真的不知道從哪裏開始。 嗅探USB端口(使用它們的本地驅動程序),之後該怎麼處理這些信息?

如果有人能夠闡明該主題,我將非常感激 - 如何開始,如何開始,推薦編寫驅動程序軟件的好書?另外,我知道Linux Kino提供了類似的功能,所以我可以查看源代碼,但它僅適用於IEEE 1394嗎?

最後一個問題,我怎麼能達到相機在電腦啓動時自動啓動,因爲它通過USB連接?

很抱歉的長期職位,

謝謝和良好的祝願!

Matekk

回答

3

要開始與你添加udev規則吧,像this一個USB-conneected設備進行通訊的程序。如示例中所示,您可能想要使用ATTR{device}ATTR{vendor}而不是KERNEL

至於相機本身,older Canon P&S cameras可以做tethered shooting。有些支持gphoto。如果您的相機沒有Linux支持,但可以在其他操作系統中工作,則必須進行逆向工程支持。是的,從提供的軟件發出命令,嗅探USB端口,找出消息格式,讓程序通過libusb2寫/讀消息(或者增加對libgphoto2的支持)。

另一種可能性是基於Android的相機(不是電話而是真實的P & S)。尼康和三星都做這些事情。可能不需要對任何東西進行逆向工程,但是您可能必須爲相機編寫Android應用程序。有些應用程序可以做到這一點,但通過WiFi/3G工作,所以這也應該可以用於USB。

+0

嘿,tnx的回覆,這裏很棒的建議。我不知道udev,肯定會看到更多,在這裏看起來很有用!基於android的相機是一個好主意,但是我發現只有一個三星和一個尼康模型可用,並且它們都超過了佳能EOS 1100D的成本,而現在看來這是我的最佳選擇。雖然它比我所希望的要昂貴,但它具有共享和SDK(儘管適用於Windows和Mac OS),但我應該能夠嗅探到我感受到的一些東西;)。另外,它已經被gphoto lib支持! – Matekk

+0

另外,是否可以通過電腦開啓或關閉相機?這可以通過軟件解決任何機會,如啓動程序,或者我應該看看電子黑客? :) – Matekk

+0

如果您計劃捕捉實時高清視頻流,無論如何,您都需要使用數碼單反相機或攝像機的捕捉設備。劇照只需要USB。實時預覽(非全高清質量)也可以通過USB進行流式傳輸。我不知道要對這些東西進行逆向工程是多麼困難。至於開機/關機,數碼單反相機往往有機械開/關開關,所以你可能不得不做電子和/或機械黑客攻擊。 –

相關問題