PDA

View Full Version : Selezionare webcam con OpenCv in OSX


f(sants)
04-09-2012, 22:13
Salve a tutti!

Spero di scrivere nella sezione giusta. Devo scrivere un programma in C++ su Mac che usi le librerie Opencv. Come sorgente video devo usare una webcam esterna collegata via USB.

Il problema è che non riesco a usare indipendentemente da quale funzione usi (cvCaptureFromCAM cvCreateCameraCapture..) la webcam, riesco solo ad accedere alla built-in. Ho provato così a tentare di accedere alla webcam direttamente da terminale ma non so dove viene elencata in /dev (non è come nel buon vecchio linux /dev/video0).

Visto che la webcam mi viene riconosciuta da skype quindi funziona, come faccio ad accederci in qualche modo? Sono a un punto morto da circa una settimana, quindi ogni aiuto è gradito e ben accetto.

Ringrazio tutti quelli che mi aiuteranno.
Lorenzo

sottovento
05-09-2012, 05:04
Salve a tutti!

Spero di scrivere nella sezione giusta. Devo scrivere un programma in C++ su Mac che usi le librerie Opencv. Come sorgente video devo usare una webcam esterna collegata via USB.

Il problema è che non riesco a usare indipendentemente da quale funzione usi (cvCaptureFromCAM cvCreateCameraCapture..) la webcam, riesco solo ad accedere alla built-in. Ho provato così a tentare di accedere alla webcam direttamente da terminale ma non so dove viene elencata in /dev (non è come nel buon vecchio linux /dev/video0).

Visto che la webcam mi viene riconosciuta da skype quindi funziona, come faccio ad accederci in qualche modo? Sono a un punto morto da circa una settimana, quindi ogni aiuto è gradito e ben accetto.

Ringrazio tutti quelli che mi aiuteranno.
Lorenzo

Hai gia' provato a creare una lista dei dispositivi che OpenCV ha trovato?
C'e' una funzione gia' pronta all'uso, che ovviamente non ricordo. Pero' l'ho dovuto fare poco tempo fa in Java (usando javacv, il quale e' solo un wrapper delle librerie C. Quindi se java lo fa, a maggior ragione C/C++):


String[] videoInputs = VideoInputFrameGrabber.getDeviceDescriptions();


La corrispondente funzione in C/C++ sara' simile. Riesci a trovare la telecamera che ti interessa? Fai attenzione che non tutte le telecamere sono supportate da OpenCV.

Una volta fatto questo tentativo, dai un'occhiata agli esempi di OpenCV: ce ne sono parecchi ed e' probabile che ce ne sia almeno uno che ti permetta di fare il listing delle telecamere collegate, selezionare ed acquisire. Se trovi un esempio del genere sei a cavallo.

Tienici informati. E' interessante conoscere qualcuno che lavora con opencv....

!fazz
06-09-2012, 10:56
hai provato a cercare in /dev essenso osx a base *nix tutte le periferiche dovrebbero avere il device file li

kurt_85
06-09-2012, 12:21
Provato con cvCaptureFromCAM(–1)? E cvCaptureFromCAM(0)?

Ho usato abbastanza OpenCV per la tesi dell'università

Inviato dal mio Galaxy Nexus con Tapatalk 2

f(sants)
06-09-2012, 13:03
Ringrazio tutti per le risposte.

Analizzando un problema per volta: guardando in /dev c'è ovviamente di tutto ma non trovo/so quale sia il file della webcam. Provarli uno per volta mi pare un po' troppo, per questo chiedevo se qualcuno mi dicesse come sono indicizzate.

Ho avuto delle novità usando la funzione cvCaptureFromCAM(n): ho creato un ciclo in cui faccio andare n da 0 a 1000 per vedere se magari il device mi viene letto in una posizione che non sia la 1 (dato che la 0 p la built-in). In effetti mi trova qualcosa alla posizione 500.
Il problema è che quando provo ad accederci direttamente mi arrivano una sfilza di errori "Camera dropped frame!" e il video che mi visualizza è quello della built-in. Una cosa simile mi succede quando con Skype provo a usare la suddetta webcam ma (penso per ragioni di compatibilità) non riesce ad accederci: mi visualizza il video della built-in ma su source rimane selezionata la web esterna. Per risolvere il problema basta che riavii il computer con la webcam inserita

Insomma usare osx e web esterna è un po' come stare sulle sabbie mobili però spero di cavarci fuori qualcosa

f(sants)
06-09-2012, 13:11
Avrei un altro quesito. Io prima (parecchio tempo fa) ho usato la libreria cvcam per gestire i dati I/O, ora opencv ha smesso di usarla e usa la highgui.

Esiste nella suddetta libreria una funzione che, come diceva sottovento, mi restituisca tutti i dispositivi trovati? Io non l'ho trovata guardando il reference manual (http://www.cognotics.com/opencv/docs/1.0/ref/opencvref_highgui.htm) e cercando in rete trovavo solo esempi che utilizzano le cvcam...

grazie per le risposte!!