View Full Version : [OpenCV] richiesta info
Teo@Unix
19-07-2010, 22:20
Ciao,
mi chiedo se c'è qualcuno che una certa esperienza con le librerie OpenCV.
So che si tratta di librerie per la realizzazzione di programmi che lavorano con volti ed altro, insomma con tutta una serie di oggetti che possono essere catturati da un telecamera...
sinceramente non sono andato a vedere ancora nessun esempio... lo devo fare al più presto.
C'è qualcuno che intanto mi può anticipare qualcosa? In particolare si tratta di un qualcosa di mastodontico? O potrei benissimo essere in grado di realizzarci qualcosa in tempi non lunghissimi? In particolare quanto potrebbe essere complesso realizzare un sistema di riconoscimento che si basa sui tratti del viso? Non mandatemi a quel paese se la cosa è molto complicata, come vi ho detto ho raccolto poche info prima di postare.
Grazie.:)
banryu79
20-07-2010, 08:15
Abbiamo un dio italiano in materia, Flavio Bernardotti.
Vedi si ti può tornare utile il suo forum sulla computer vision (http://www.bernardotti.it/portal/forumdisplay.php?f=7) :)
Teo@Unix
20-07-2010, 09:06
Abbiamo un dio italiano in materia, Flavio Bernardotti.
Vedi si ti può tornare utile il suo forum sulla computer vision (http://www.bernardotti.it/portal/forumdisplay.php?f=7) :)
grazie,
già già lo conosco anche Flavio. potrei chiedere a lui direttamente ma pensavo di farlo solo se riesco a far qualcosa....
Difatti appena ho un pò di tempo vado a mettere il naso proprio lì.
Temo che però non sia così semplice. Infatti mi chiedevo se qualche comune mortale mi dava un parere da comune mortale. Non ho mai letto nessun sorgente di OpenCV.
Teo@Unix
21-07-2010, 14:55
vabene.... creare qualcosa che riconosca i tratti di una persona e li archivia la vedo una cosa ardua (per il momento),
il seguente esempio carica una immagine da file, la inverte e la visualizza con l'aiuto di OpenCV:
////////////////////////////////////////////////////////////////////////
//
// hello-world.cpp
//
// This is a simple, introductory OpenCV program. The program reads an
// image from a file, inverts it, and displays the result.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char *argv[])
{
IplImage* img = 0;
int height,width,step,channels;
uchar *data;
int i,j,k;
if(argc<2){
printf("Usage: main <image-file-name>\n\7");
exit(0);
}
// load an image
img=cvLoadImage(argv[1]);
if(!img){
printf("Could not load image file: %s\n",argv[1]);
exit(0);
}
// get the image data
height = img->height;
width = img->width;
step = img->widthStep;
channels = img->nChannels;
data = (uchar *)img->imageData;
printf("Processing a %dx%d image with %d channels\n",height,width,channels);
// create a window
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin", 100, 100);
// invert the image
for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
data[i*step+j*channels+k]=255-data[i*step+j*channels+k];
// show the image
cvShowImage("mainWin", img );
// wait for a key
cvWaitKey(0);
// release the image
cvReleaseImage(&img );
return 0;
}
utilizzando "IplImage* img" non è difficile.
La libreria automatizza molte cose, ma la cattura da una videocamera più analisi non è una passeggiata ... :D
Mi sa che devo studiare un pò....
Nessuno usa OpenCV?
Teo@Unix
21-07-2010, 15:58
e anche per python:
http://opencv.willowgarage.com/wiki/PythonInterface
anche io sto cercando di lavorarci per rifare un vecchio progetto e togliere di mezzo il jmf :rolleyes: per lo stream da webcam...
il mio problema è che sto lavorando con java e su ubuntu.. e sto sbattendo la testa ancora sull'installazione ...... :cry: :cry: :cry:
cdimauro
22-07-2010, 08:40
e anche per python:
http://opencv.willowgarage.com/wiki/PythonInterface
:sbav: Grazie! :D
banryu79
22-07-2010, 08:44
:sbav: Grazie! :D
l'hai visto il link al cookbook, vero? -> http://opencv.willowgarage.com/documentation/python/cookbook.html
Teo@Unix
22-07-2010, 10:57
l'hai visto il link al cookbook, vero? -> http://opencv.willowgarage.com/documentation/python/cookbook.html
Prego ma...
Sicuramente python abbassa la difficoltà, il problema è che solitamente a questi sistemi si richiede una alta efficienza. Quindi meglio c++.
Ora ho cominciato a leggere il libro della OReilly.... vediamo un pò...
banryu79
22-07-2010, 11:04
Prego ma...
Sicuramente python abbassa la difficoltà, il problema è che solitamente a questi sistemi si richiede una alta efficienza. Quindi meglio c++.
Ora ho cominciato a leggere il libro della OReilly.... vediamo un pò...
Scusa Teo@Unix, infatti il messaggio era per cdimauro :D
Comunque è chiaro che per fare "qualcosa di spessore" tipo riconoscimento facciale, il problema non sarà tanto imparare a usare la libreria quanto sapere cosa farci :D dunque una buona fetta di studio della teoria annessa è imprescindibile.
Buon lavoro :)
Prego ma...
Sicuramente python abbassa la difficoltà, il problema è che solitamente a questi sistemi si richiede una alta efficienza. Quindi meglio c++.
Ora ho cominciato a leggere il libro della OReilly.... vediamo un pò...
Io ti consiglio di utilizzare i binding python (se conosci il linguaggio ovviamente) per familiarizzare con la libreria ed esplorare i concetti base della computer vision. Le prestazioni vengono dopo. Poi magari dal prototipo se hai bisogno passi all'implementazione in c++.
Detto questo per il lavoro che devi fare devi guardarti bene la teoria dei classificatori di Haar e la relativa parte su openCV. Ti dico sin da subito che l'addestramento dell'algoritmo è una cosa abbastanza noiosa e che richiede tantissimo "tempo macchina".
Sicuramente ti divertirai da matti con questo genere di cose. :D
Teo@Unix
22-07-2010, 11:35
Scusa Teo@Unix, infatti il messaggio era per cdimauro :D
Comunque è chiaro che per fare "qualcosa di spessore" tipo riconoscimento facciale, il problema non sarà tanto imparare a usare la libreria quanto sapere cosa farci :D dunque una buona fetta di studio della teoria annessa è imprescindibile.
Buon lavoro :)
Grassie.:D
E' molto usato per la video sorveglianza. Ed è proprio quello che mi occorrerebbe.....
Teo@Unix
22-07-2010, 11:43
Io ti consiglio di utilizzare i binding python (se conosci il linguaggio ovviamente) per familiarizzare con la libreria ed esplorare i concetti base della computer vision. Le prestazioni vengono dopo. Poi magari dal prototipo se hai bisogno passi all'implementazione in c++.
Detto questo per il lavoro che devi fare devi guardarti bene la teoria dei classificatori di Haar e la relativa parte su openCV. Ti dico sin da subito che l'addestramento dell'algoritmo è una cosa abbastanza noiosa e che richiede tantissimo "tempo macchina".
Sicuramente ti divertirai da matti con questo genere di cose. :D
Grazie.
Python non lo conosco molto, l'avrò usato qualche volta ....
se seguo il libro della OReilly, credo mi faccia partire con il C addirittura perchè per la grafica indica di utilizzare la libhighgui di opencv... poi comunque C++ è l'ideale.
Il fatto che dici che mi divertirò mi sta aiutando moralmente .... :D
cdimauro
22-07-2010, 13:49
l'hai visto il link al cookbook, vero? -> http://opencv.willowgarage.com/documentation/python/cookbook.html
No, e sto già sbavando. :sbav:
Grazie anche a te! :D
P.S. Concordo con lele85. Prima il prototipo / modello, e poi si pensa alle prestazioni. ;)
banryu79
22-07-2010, 14:25
P.S. Concordo con lele85. Prima il prototipo / modello, e poi si pensa alle prestazioni. ;)
Anche perchè immagino che per Python non è che ci sia una implementazione di OpenCV, ma solo un'interfaccia; le operazioni "veramente pesanti" le farà OpenCV under the hood che sarà ottimizzata a dovere.
Se poi l'applicazione che devi scrivere dovrà farsi "computazioni di spessore" extra-OpenCV, lo vedi appunto dopo, misurandole.
Scrivere in Python ti potrebbe servire per velocizzare la protipazione, ovviamente a patto di conoscerlo bene e non doverselo stuadiare in corsa, altrimenti "rischi" sì di essere più veloce con C++, che magari mastichi da anni.
Però potrebbe essere una buona occasione per aggiungere uno strumento nuovo al proprio bagaglio.
Teo@Unix
22-07-2010, 16:28
Scrivere in Python ti potrebbe servire per velocizzare la protipazione, ovviamente a patto di conoscerlo bene e non doverselo stuadiare in corsa, altrimenti "rischi" sì di essere più veloce con C++, che magari mastichi da anni.
Però potrebbe essere una buona occasione per aggiungere uno strumento nuovo al proprio bagaglio.
già non lo conosco molto, comunque non credo sia complesso impararlo in questa occasione, terrò presente.
Il C++ lo uso a volte e da un anno circa non di più, quindi non sono esperto di questi linguaggi.
Solo il C conosco molto bene.
Tra l'altro non faccio il programmatore a tempo pieno, anche se comunque riesco a dedicarci molto tempo...
E' proprio per questo che sono qui. Per sentire i consigli di chi ha più esperienza nella programmazione strutturata ad un livello che non sia asm o C, questo è proprio il punto dove temo di trovare più difficoltà.
per ora sto solo facendo un pò di prove. Ad esempio:
#include <opencv/highgui.h>
int main(int argc,char**argv) {
IplImage *img = cvLoadImage(argv[1]);
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvShowImage("Example1",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1");
}
L'acquisizione via WebCam non è molto più complessa. Praticamente fa un loop su una chiamata.... La libreria mette a disposizione due categorie di funzioni alto livello o basso livello.... Per il traking su uno stream video ho visto che c'è un capitolo dedicato... ma prima di arrivare li c'è tempo....
Potrei tenere come riferimento il forum di Flavio su CV ma lì ho visto che danno molte cose per scontato, e non è popolato come qui.
Quindi per il momento se ho bisogno chiederò a voi :stordita: .... magari cambiando il titolo dato che non è più una richiesta di info.....
anche perchè del C++, come ho già detto, non sono un esperto.
Quindi grazie per l'aiuto.:)
:sbav: Grazie! :D
Ahah sai cosa significa Cesare? :D
Teo@Unix
22-07-2010, 20:30
anche io sto cercando di lavorarci per rifare un vecchio progetto e togliere di mezzo il jmf :rolleyes: per lo stream da webcam...
il mio problema è che sto lavorando con java e su ubuntu.. e sto sbattendo la testa ancora sull'installazione ...... :cry: :cry: :cry:
su ubuntu hai aptitude che ti risparmia vari mal di testa:
sudo apt-get install libcv-dev
dovrebbe essere così.
su ubuntu hai aptitude che ti risparmia vari mal di testa:
sudo apt-get install libcv-dev
dovrebbe essere così.
è l'implementazione java il problema e anche il fatto che sono relativamente nuovo di ubuntu..
mah speriamo che in tempi brevi riesca a fare qualcosa...
intanto nessuno usa i wrapper per java?
Teo@Unix
22-07-2010, 20:55
è l'implementazione java il problema e anche il fatto che sono relativamente nuovo di ubuntu..
mah speriamo che in tempi brevi riesca a fare qualcosa...
intanto nessuno usa i wrapper per java?
guarda un pò questo:
http://www.bernardotti.it/portal/showthread.php?t=72959
cdimauro
23-07-2010, 07:29
Anche perchè immagino che per Python non è che ci sia una implementazione di OpenCV, ma solo un'interfaccia; le operazioni "veramente pesanti" le farà OpenCV under the hood che sarà ottimizzata a dovere.
Esatto.
Se poi l'applicazione che devi scrivere dovrà farsi "computazioni di spessore" extra-OpenCV, lo vedi appunto dopo, misurandole.
Penso che il collo di bottiglia in questi casi rimanga nelle operazioni di OpenCV.
Al limite per migliorare le prestazioni del codice Python ci sono diverse strade: algoritmiche, si può usare un compilatore JIT, compilare in C le parti critiche con strumenti come cython (http://cython.org/), oppure riscriverle proprio in C o C++.
Ahah sai cosa significa Cesare? :D
Ehm, no. :stordita:
banryu79
23-07-2010, 08:55
intanto nessuno usa i wrapper per java?
Ho trovato JavaCV (http://code.google.com/p/javacv/).
A occhio mi sembra "carne fresca".
DanieleC88
23-07-2010, 09:51
limite per migliorare le prestazioni del codice Python ci sono diverse strade: algoritmiche, si può usare un compilatore JIT, compilare in C le parti critiche con strumenti come cython (http://cython.org/), oppure riscriverle proprio in C o C++.
È ancora sperimentale, ma date un'occhiata anche a questo: http://code.google.com/p/shedskin/ :D
banryu79
23-07-2010, 10:11
È ancora sperimentale, ma date un'occhiata anche a questo: http://code.google.com/p/shedskin/ :D
Lo sviluppatore del progetto è Mark Dufour, rappresentante per KNMP, uno sponsor member della Python Software Fundation.
Bhe, se è vero che riesce ad arrivare adirittura ad un x20 di velocità rispetto a CPython...
È ancora sperimentale, ma date un'occhiata anche a questo: http://code.google.com/p/shedskin/ :D
Di progetti tipo quello ce ne sono molti tipo pyrex:
http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Oppure in maniera simile genie del progetto GNOME (sintassi un po diversa ma dal sapore pythonico):
http://live.gnome.org/Genie
Il fatto è che per ovvi motivi devi scendere a compromessi per quanto riguarda la dinamicità del linguaggio che è il vero punto di forza. Sono comunque strumenti utili se "infastidisce" scrivere con una sintassi diversa da quella pythonica.
banryu79
23-07-2010, 11:22
Di progetti tipo quello ce ne sono molti tipo pyrex:
http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Linko la pagina dell'autore di PyRex (ci sono altre cose interessanti, per gli appassionati, inerenti a Python e inoltre c'è uno scritto interessantissimo circa una sua tecnica personale per fare reverse-engineering sugli algoritmi CRC).
http://www.cosc.canterbury.ac.nz/greg.ewing/
Ho trovato JavaCV (http://code.google.com/p/javacv/).
A occhio mi sembra "carne fresca".
si gli avevo dato una occhiata... ma non mi convince molto.. quindi a quanto pare ci sono diversi wrapper.. visto che qui dice di scaricare altra roba.. http://walkintothefuture.blogspot.com/2009/04/opencv-java-linux.html però il problema principare resta il collegamento con le librerie... ci devo ancora sbattere la testa un pò...
ad esempio:
!!! required library not found : no OpenCV in java.library.path Verify that the java.library.path property is correctly set and 'libcxcore.so', 'libcv.so', 'libcvaux.so', 'libml.so', and 'libhighgui.so' are placed (or linked) in one of your system shared libraries folder<br>Exception in thread "main" java.lang.UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V at hypermedia.video.OpenCV.capture(Native Method)
Then I tried to run it as follows java -Djava.library.path=/usr/lib -jar myfile.jar but it didn't work, so I went to the NetBeansProjects directory and look for the output JAR file, which usualy is located in the dist project subdirecory, there I created simbolic links to all the libraries that I needed, for example ln -s /usr/lib/libcxcore.so libcxcore.so, I cross my fingers run the above command with the terminal and IT WORKED!!!
NOTE: The next thing to do in order to be able to run the project from Netbeans is to copy the symbolic links and libOpenCV.so and libOpenCV.jnilib to the jre/lib/i386.
ottengo l'errore ma non capisco bene la procedura con la quale lui lo ha risolto :doh:
Ehm, no. :stordita:
Lo capirai quando ti romperò le palle ahahah :D
banryu79
23-07-2010, 13:51
[OT]
ottengo l'errore ma non capisco bene la procedura con la quale lui lo ha risolto :doh:
Se non ho capito male ha creato dei link simbolici che puntano alle librerie direttamente dentro la cartella "dist" che NetBeans crea all'interno di un processo e che usa come output di una build (tipicamente ci schiaffa il .jar di output).
Questo .jar è quello che viene lanciato da Netbeans quando si fa il "Run" dall'IDE.
(probabilmente bastava includere le librerie nel progetto in modo che venissero infilate nel .jar prodotto e che di conseguenza venisse settato correttamente il manifest file di quel .jar).
cdimauro
23-07-2010, 15:53
È ancora sperimentale, ma date un'occhiata anche a questo: http://code.google.com/p/shedskin/ :D
Interessante. :)
Lo sviluppatore del progetto è Mark Dufour, rappresentante per KNMP, uno sponsor member della Python Software Fundation.
Bhe, se è vero che riesce ad arrivare adirittura ad un x20 di velocità rispetto a CPython...
x20 rispetto a psyco (compilatore JIT famoso per Python / x86 a 32 bit), x200 rispetto a CPython. :D
Di progetti tipo quello ce ne sono molti tipo pyrex:
http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Cython deriva e ha preso il posto di Pyrex.
Oppure in maniera simile genie del progetto GNOME (sintassi un po diversa ma dal sapore pythonico):
http://live.gnome.org/Genie
Il fatto è che per ovvi motivi devi scendere a compromessi per quanto riguarda la dinamicità del linguaggio che è il vero punto di forza. Sono comunque strumenti utili se "infastidisce" scrivere con una sintassi diversa da quella pythonica.
Chiaro. E a me dà particolarmente fastidio usare altro. :stordita:
Teo@Unix
23-07-2010, 16:45
Ciao,
voi avete problemi acquisendo da una webcam usb esterna?
il codice che utilizzo è semplice: (win32)
#include "C:\OpenCV2.0\include\opencv\cv.h"
#include "C:\OpenCV2.0\include\opencv\highgui.h"
int main( int argc, char** argv ) {
cvNamedWindow( "Example2_9", CV_WINDOW_AUTOSIZE );
CvCapture* capture;
if (argc==1) {
capture = cvCaptureFromCAM(-1);
} else {
capture = cvCreateFileCapture(argv[1]);
}
assert(capture != NULL);
IplImage* frame;
while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Example2_9", frame );
char c = cvWaitKey(10);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2_9" );
}
il codice di errore che ho è
Starting H:\OpenCV_sources\OCVtest7\debug\OCVtest7.exe...
H:\OpenCV_sources\OCVtest7\debug\OCVtest7.exe exited with code -1073741515
stasera provo da un web cam integrata.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.