salut
Je me présente, Mahdi , étudiant en troisième année de Informatique, et actuellement en 23ème jour de stage de Projet fin d'étude.
Mon sujet porte sur la gestion d'une caméra IP de surveillance sous Android
Concrètement, je dois réaliser une application Android, permettant à l'utilisateur de pouvoir obtenir l'image sur son Tablet , que reçoit la caméra.
Mon problème actuel : récupérer l'image de la caméra, sur Android , création de la classe client (socket, les méthode de récupération de le flux vidéo )
Or, je me permets donc de vous demander un "petit coup de main", afin de savoir par quelle méthode avez vous pu récupérer l'image de la caméra ?
Si vous pouviez me renseigner, cela me serait d'une grande utilité pour la réalisation de mon projet de stage .
En vous remerciant.
Je vous laisse mes coordonnées si vous souhaitez me contacter :
Il faudrait savoir de quel type de mpeg est ton flux d'abord ...
Par exemple certain type de mpeg ne renvois que les pixels qui ont
changé dans l'image par rapport à la précédente ...
Ce qui va engendrer de grosses modifications dans ce code.
Si ta caméra est une TrendNet Tv-IP 300 elle gère le lux MJPEG.
Et si ce n'est pas le cas, il existe du code LGPL chez trend Net:
http://www.trendnet.com/downloads/list_gpl.asp Avec ça tu devrais pouvoir faire quelque chose de bien !
Bon courage ...
salut SEBLINCK ,
oui mon camera IP possède un serveur web intégré , le probleme que le flux transmit par la camera IP est MPEG et non pas MJPEG ?
pour l'adabtation du code :
const char* s=netFormat("GET /TRENDnet-cgi/mpeg/video.cgi?resolution="512 x 480"&fps="25" HTTP/1.1\r\nUser-Agent: HttpClient\r\nHost:"192.168.0.30"\r\nConnection:Keep-Alive\r\nCache-Control:no-cache\r\n\r\n");
Désolé ZOUZOUAG, je n'avais pas vu ta question.
Pour utiliser un client sur le réseaux local
comme source du flux, il faut soit connaitre
son protocole ( dans notre cas, protocole HTTP)
soit utiliser une API ou SDK fournissant une méthode.
Par exemple pour Axis:
Il faut lier le programme avec la lib de l'API,
puis appeller la méthode GetCurrentImage(...),
avec les paramètres qui vont bien. Et tu retrouves
ton image dans un buffer.Qu'il ne reste plus qu'a
pousser sur l'interface .
Si ta caméra IP possède un serveur web intégré sur lequel tu peux te connecter,
pour visualiser le flux live en MJPEG, tu peux très simplement adapter ce code.
salut Seblink ,
merci de m'avoir répondu ,j'arrivais à compiler cet programme ,j'ai voulu essayer d'integrer cet programmme pour mon projet sur la detection des visages , Mais est ce que vous avez une idée si je peut récupère mon flux MJPEG non pas par une camera mais par un flux MPEG transmis par un client dans un réseaux local ?
merci d'avance pour votre aide :)
slt,
merci pour ton code , ce geniale comme idée , je voulus le compiler mais je trouver quelque deficulte ce qui conserne le linker , j'utilise visual studio C++2008 comme IDE et je ne trouve pas les lib suivants: libgdi32 libuser32 libole32 liboleaut32 libolepro32 libuuid dans mon IDE , et ce qui conserne libsock32 d'ou je peut le charger ?
merci d'avace pour votre aide :)
Pour ta question, lorsque j'étais encore sur mon projet de master 2, j'ai finis par réussir à récupérer les pixels dans un tableau que je pouvais traiter à ma guise.
Cela remonte maintenant à plus d'un an et je m'apprête à partir au travail, tout ce que je peux donc faire pour l'instant c'est te donner l'adresse d'un de mes messages sur ce forum où il me semble que je donne la solution (pour le cas d'une camera AXIS207MW utilisant un flux MJPEG).
De mémoire, il me semble qu'il faut utiliser une fonction d'Axis genre GetCurrentImage(.. , .. , ..) avec les arguments qui vont bien, ce qui te récupère dans un buffer (qui a été passé en argument de la fonction) une image bitmap (dans le premier argument il me semble, si tu mets 1 ça fait du bitmap, si tu mets 0 ça fait du JPEG).
Je n'avais que 2 mois pour mon projet en plus des cours, je n'ai pas atteint le bout mais il ne me restait plus qu'à réafficher mes images traités dans une fenêtre.
J'espère que ça pourra t'aider.
Sinon, si tu veux plus d'info sur ce que j'avais fait en projet de master, recherche "Crepuscule3" sur ce forum, tu devrais trouver tous mes messages sur le sujet. Peut-être que ça t'aidera.
Salut,
je travail sur une Axis 210, il est possible d'utiliser la même méthode que propose GSDevelop, mais il faut changer légèrement la requête ( ça va sans dire ).
Voilà, sinon il est très facile de récupérer un flux M-jpeg en utilisant l'exemple AXIS,
mais comme le souligne Crepuscule3, il est assez difficile de faire un traitement derrière.
En revanche, la méthode fournis par AXIS est très bonne pour un enrgistrement de flux...
je travaille actuellement sur une camera axis 207MW. Je souhaiterais faire un traitement d'image temps réel sur le flux MJPEG ou MPEG4 provenant de cette camera IP, dans le but de ne visualiser que les contours des objets filmés. Je possède actuellement un programme provenant de chez axis me permettant de relever le flux MJPEG. J'arrive donc à le visualiser mais je n'arrive toujours pas à trouver comment faire un traitement vidéo dessus (pour cela il me faudrait un accès aux pixels). Par ailleurs, je préciserai que les commandes utilisées pour afficher la vidéo sont des fonctions "InvokeHelper" de ActiveX ou DirectX je ne sais plus.
Si l'un d'entre vous a réussit à faire un traitement d'image sur un flux MJPEG, ou si quelqu'un a réussit à faire marcher le programme de cette page web, ou encore si quelqu'un sait comment utiliser le programme de chez axis, pourriez vous me donner un coup de main? Je galère vraiment depuis quelque temps.
j'ai un problème avec la fonction netInit() à la compliation il me met une error comme quoi elle a besoin d'arguments (elle est appelée avec des arguments dans netSocket.h)
Or si je modifie la fonction dans le .h en lui virant les arguments , il la reconnait plus quand il doit aller la chercher dans la lib et me fait une erreur du type lnk2019.
Comme vous arruvez à le compiler je comprend pas d'où vient mon erreur.
pour info ,j'utilise Visual C++
Salut je voudrai comprendre cette ligne de programme :
const char* s = netFormat ("GET /VIDEO.CGI HTTP/1.0\r\nUser-Agent: user\r\nAuthorization: Basic YWRtaW46REVVU1Q=\r\n\r\n") ;
Je sais pas comment tu apel ? netFormat ? d'ou il vient ?
Merci.
salut
je suis un etudiant en informatique je suis entrient de travailler sur la videsurveillance ip. ce pendant j'ai un probleme avec la compilation de votre code il ne genére pas .exe si vous pouvez m'aidé je serais tres reconéssant. c'est tres urgent svp.
voila mon e-mail:mekki.ben-younes@laposte.net
merci d'avance..
salut
j'arrive à compiler votre code mais il ne veut pas s'executer.Bon il m'affiche le message suivant "fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe."
j'ai besoin de votre aide s.v.p .C'est tres important.
merci
Deja bien ton code.
Moi je travailles avec une DCS-6620G mais je dois recuperer le flux video afin de l'afficher dans une frame.
Alors j'arrive a controler la camera au niveau rotation par contre impossible de recuperer le flux.
J'utilise ethereal pour recuperer la requete a envoyer mais lorsque je l'envoie j'ai une exception : "Le serveur a renvoyé une réponse non valide ou non reconnue".
Pourtant j'envoi la même requête qu'IE.
salut!
Merci pour ton code mais je n'arrive pas à le compiler. je ne trouve pas la lib plib. j'ai trouvé netSocket.h mais il me manque toujours des fichiers d'en tete. si tu peu m'aiguillé ou ziper ton repertoire include et le mettre sur le site ca serai bien sympa de ta part.
merci d'avance.
Slt,
Merci pour ton code, il est plutôt bien fait et surtout il marche!! Je l'ai adapter pour ma camera (Sony SNC-P1) car elle peut délivrer soit des MJPEG, soit du MPEG4. J'aimerai maintenant récupérer le flux MPEG4, pense-tu que c'est possible à partir de ton code? J'ai pas encore eu trop le temps de me pencher dessus mais si je trouve je te previens.
A+
Salut
dans ton code, tu déclare
#define longMaxJpeg 16384 // longueur maximale d'une image jpeg reçue (suffisant pour du 320x200)
Comment tu trouve ton 16384, comment le caluler ? car moi j'utilise du 320x240.
Merci
J'ai commencer un algo de traitement d'image (il en est a la recherche de lignes complexes), sont but seras la vision binoculaire, en C+SDL...
Si tu arrive a me motivé je veux bien le continuer...
Je doit modifier cette recherche de ligne pour la rendre plus sensible, avec une notion d'intervale.
Salut! Tiens ! Tu travaille sur un robot ? Moi aussi. A l'occasion on pourra avoir un contact pour échange vocal. De mon coté je suis en VB , win XP et cam USB ( un peu différent n'est ce pas lol ). A plus . . .
Je me présente, Mahdi , étudiant en troisième année de Informatique, et actuellement en 23ème jour de stage de Projet fin d'étude.
Mon sujet porte sur la gestion d'une caméra IP de surveillance sous Android
Concrètement, je dois réaliser une application Android, permettant à l'utilisateur de pouvoir obtenir l'image sur son Tablet , que reçoit la caméra.
Mon problème actuel : récupérer l'image de la caméra, sur Android , création de la classe client (socket, les méthode de récupération de le flux vidéo )
Or, je me permets donc de vous demander un "petit coup de main", afin de savoir par quelle méthode avez vous pu récupérer l'image de la caméra ?
Si vous pouviez me renseigner, cela me serait d'une grande utilité pour la réalisation de mon projet de stage .
En vous remerciant.
Je vous laisse mes coordonnées si vous souhaitez me contacter :
Mail : mahjoub.mahdi5@gmail.com
MERCI . ......
Il faudrait savoir de quel type de mpeg est ton flux d'abord ...
Par exemple certain type de mpeg ne renvois que les pixels qui ont
changé dans l'image par rapport à la précédente ...
Ce qui va engendrer de grosses modifications dans ce code.
Si ta caméra est une TrendNet Tv-IP 300 elle gère le lux MJPEG.
Et si ce n'est pas le cas, il existe du code LGPL chez trend Net:
http://www.trendnet.com/downloads/list_gpl.asp
Avec ça tu devrais pouvoir faire quelque chose de bien !
Bon courage ...
oui mon camera IP possède un serveur web intégré , le probleme que le flux transmit par la camera IP est MPEG et non pas MJPEG ?
pour l'adabtation du code :
const char* s=netFormat("GET /TRENDnet-cgi/mpeg/video.cgi?resolution="512 x 480"&fps="25" HTTP/1.1\r\nUser-Agent: HttpClient\r\nHost:"192.168.0.30"\r\nConnection:Keep-Alive\r\nCache-Control:no-cache\r\n\r\n");
est ce que c'est juste ?
Pour utiliser un client sur le réseaux local
comme source du flux, il faut soit connaitre
son protocole ( dans notre cas, protocole HTTP)
soit utiliser une API ou SDK fournissant une méthode.
Par exemple pour Axis:
Il faut lier le programme avec la lib de l'API,
puis appeller la méthode GetCurrentImage(...),
avec les paramètres qui vont bien. Et tu retrouves
ton image dans un buffer.Qu'il ne reste plus qu'a
pousser sur l'interface .
Si ta caméra IP possède un serveur web intégré sur lequel tu peux te connecter,
pour visualiser le flux live en MJPEG, tu peux très simplement adapter ce code.
je veux récupérer les images d'une camera IP 300 (512 x 480) est ce que je peux adapter ce code pour mon camera IP 300 TRENDnet ?
merci d'avance pour votre aide :)
merci de m'avoir répondu ,j'arrivais à compiler cet programme ,j'ai voulu essayer d'integrer cet programmme pour mon projet sur la detection des visages , Mais est ce que vous avez une idée si je peut récupère mon flux MJPEG non pas par une camera mais par un flux MPEG transmis par un client dans un réseaux local ?
merci d'avance pour votre aide :)
Si Visual Studio 2008 ne trouve pas lalib GDI, c'est la loose...
Tu asfait quoi comme type de projet ?
merci pour ton code , ce geniale comme idée , je voulus le compiler mais je trouver quelque deficulte ce qui conserne le linker , j'utilise visual studio C++2008 comme IDE et je ne trouve pas les lib suivants: libgdi32 libuser32 libole32 liboleaut32 libolepro32 libuuid dans mon IDE , et ce qui conserne libsock32 d'ou je peut le charger ?
merci d'avace pour votre aide :)
Pour ta question, lorsque j'étais encore sur mon projet de master 2, j'ai finis par réussir à récupérer les pixels dans un tableau que je pouvais traiter à ma guise.
Cela remonte maintenant à plus d'un an et je m'apprête à partir au travail, tout ce que je peux donc faire pour l'instant c'est te donner l'adresse d'un de mes messages sur ce forum où il me semble que je donne la solution (pour le cas d'une camera AXIS207MW utilisant un flux MJPEG).
http://www.cppfrance.com/forum/sujet-RECUPERER-IMAGE-DEPUIS-BUFFER_1043087.aspx
De mémoire, il me semble qu'il faut utiliser une fonction d'Axis genre GetCurrentImage(.. , .. , ..) avec les arguments qui vont bien, ce qui te récupère dans un buffer (qui a été passé en argument de la fonction) une image bitmap (dans le premier argument il me semble, si tu mets 1 ça fait du bitmap, si tu mets 0 ça fait du JPEG).
Je n'avais que 2 mois pour mon projet en plus des cours, je n'ai pas atteint le bout mais il ne me restait plus qu'à réafficher mes images traités dans une fenêtre.
J'espère que ça pourra t'aider.
Sinon, si tu veux plus d'info sur ce que j'avais fait en projet de master, recherche "Crepuscule3" sur ce forum, tu devrais trouver tous mes messages sur le sujet. Peut-être que ça t'aidera.
Cordialement,
Crepuscule3
je souhaiterai savoir si l'un de vous à réussi dans cette mission qu'est la récupération des pixels de l'image?
Bonne soirée
je travail sur une Axis 210, il est possible d'utiliser la même méthode que propose GSDevelop, mais il faut changer légèrement la requête ( ça va sans dire ).
"GET /axis-cgi/mjpg/video.cgi?resolution="320x240"&fps="25" HTTP/1.1\r\nUser-Agent: HttpClient\r\nHost:"192.168.10.50"\r\nConnection:Keep-Alive\r\nCache-Control:no-cache\r\n\r\n"
Voilà, sinon il est très facile de récupérer un flux M-jpeg en utilisant l'exemple AXIS,
mais comme le souligne Crepuscule3, il est assez difficile de faire un traitement derrière.
En revanche, la méthode fournis par AXIS est très bonne pour un enrgistrement de flux...
je travaille actuellement sur une camera axis 207MW. Je souhaiterais faire un traitement d'image temps réel sur le flux MJPEG ou MPEG4 provenant de cette camera IP, dans le but de ne visualiser que les contours des objets filmés. Je possède actuellement un programme provenant de chez axis me permettant de relever le flux MJPEG. J'arrive donc à le visualiser mais je n'arrive toujours pas à trouver comment faire un traitement vidéo dessus (pour cela il me faudrait un accès aux pixels). Par ailleurs, je préciserai que les commandes utilisées pour afficher la vidéo sont des fonctions "InvokeHelper" de ActiveX ou DirectX je ne sais plus.
Si l'un d'entre vous a réussit à faire un traitement d'image sur un flux MJPEG, ou si quelqu'un a réussit à faire marcher le programme de cette page web, ou encore si quelqu'un sait comment utiliser le programme de chez axis, pourriez vous me donner un coup de main? Je galère vraiment depuis quelque temps.
Cordialement
Crepuscule3
j'ai un problème avec la fonction netInit() à la compliation il me met une error comme quoi elle a besoin d'arguments (elle est appelée avec des arguments dans netSocket.h)
Or si je modifie la fonction dans le .h en lui virant les arguments , il la reconnait plus quand il doit aller la chercher dans la lib et me fait une erreur du type lnk2019.
Comme vous arruvez à le compiler je comprend pas d'où vient mon erreur.
pour info ,j'utilise Visual C++
Merci d'avance pour votre aide :)
J'arrive pas a compiler tu peu me donner la lib netsoket STP
const char* s = netFormat ("GET /VIDEO.CGI HTTP/1.0\r\nUser-Agent: user\r\nAuthorization: Basic YWRtaW46REVVU1Q=\r\n\r\n") ;
Je sais pas comment tu apel ? netFormat ? d'ou il vient ?
Merci.
je suis un etudiant en informatique je suis entrient de travailler sur la videsurveillance ip. ce pendant j'ai un probleme avec la compilation de votre code il ne genére pas .exe si vous pouvez m'aidé je serais tres reconéssant. c'est tres urgent svp.
voila mon e-mail:mekki.ben-younes@laposte.net
merci d'avance..
j'arrive à compiler votre code mais il ne veut pas s'executer.Bon il m'affiche le message suivant "fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe."
j'ai besoin de votre aide s.v.p .C'est tres important.
merci
Deja bien ton code.
Moi je travailles avec une DCS-6620G mais je dois recuperer le flux video afin de l'afficher dans une frame.
Alors j'arrive a controler la camera au niveau rotation par contre impossible de recuperer le flux.
J'utilise ethereal pour recuperer la requete a envoyer mais lorsque je l'envoie j'ai une exception : "Le serveur a renvoyé une réponse non valide ou non reconnue".
Pourtant j'envoi la même requête qu'IE.
voila le code correspondant.
char *l_strHeaders2 = "User-Agent: VVTK (ver=40)\r\nAccept: */*\r\nHost: 10.226.144.238\r\n\r\n";
char *l_strObject2 = "/cgi-bin/downstream.cgi?SID=0";
m_pconnection = m_session.GetHttpConnection(l_strServeur, port , "VVTK (ver=40)");
m_pfile = m_pconnection->OpenRequest(CHttpConnection::HTTP_VERB_GET , l_strObject2,NULL , 1 , NULL , "HTTP/1.0");
if(m_pfile != NULL)
{
try
{
m_pfile->AddRequestHeaders(l_strHeaders2);
m_pfile->SendRequest(NULL,0,NULL,0);
}
catch(CInternetException *e)
{
char error[255];
e->GetErrorMessage(error,255);
}
catch(CException *e)
{
char error[255];
e->GetErrorMessage(error,255);
}
}
et voila la requete envoyé par IE vu par ethereal :
GET /cgi-bin/downstream.cgi?SID=0 HTTP/1.0
User-Agent: VVTK (ver=40)
Accept: */*
Host: 10.226.144.238
et voila la mienne :
GET /cgi-bin/downstream.cgi?SID=0 HTTP/1.1
User-Agent: VVTK (ver=40)
Accept: */*
Host: 10.226.144.238
alors je me dit que c a cause du HTTP/1.1 mais il me le met par defaut et je ne sais comment le passer en 1.0.
Si quelqu'un a une idée je vous serez vraiment reconnaissant.
Merci d'avance
Merci pour ton code mais je n'arrive pas à le compiler. je ne trouve pas la lib plib. j'ai trouvé netSocket.h mais il me manque toujours des fichiers d'en tete. si tu peu m'aiguillé ou ziper ton repertoire include et le mettre sur le site ca serai bien sympa de ta part.
merci d'avance.
Merci pour ton code, il est plutôt bien fait et surtout il marche!! Je l'ai adapter pour ma camera (Sony SNC-P1) car elle peut délivrer soit des MJPEG, soit du MPEG4. J'aimerai maintenant récupérer le flux MPEG4, pense-tu que c'est possible à partir de ton code? J'ai pas encore eu trop le temps de me pencher dessus mais si je trouve je te previens.
A+
dans ton code, tu déclare
#define longMaxJpeg 16384 // longueur maximale d'une image jpeg reçue (suffisant pour du 320x200)
Comment tu trouve ton 16384, comment le caluler ? car moi j'utilise du 320x240.
Merci
Si tu arrive a me motivé je veux bien le continuer...
Je doit modifier cette recherche de ligne pour la rendre plus sensible, avec une notion d'intervale.
Je dev portable...