AFFICHAGE WEBCAM, CAPTURE ET TRAITEMENT D'IMAGE

cs_freew Messages postés 2 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 27 novembre 2003 - 27 nov. 2003 à 21:55
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 - 10 juin 2007 à 21:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17900-affichage-webcam-capture-et-traitement-d-image

cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
10 juin 2007 à 21:26
oops j'ai interverti les liens plus haut...
Site en cache:
http://66.102.9.104/search?q=cache:QADV83TYgG4J:www.tutorials-xe.com/VIDEO/create-ksproxyax/+directdraw+registerfilter&hl=fr&ct=clnk&cd=1&gl=fr&client=firefox-a

Discussions:
http://groups.google.com/groups?q=group%3Amicrosoft.public.*+insubject%3Avirtual+author%3Arep.movsd%40gmail.com&start=0&num=100&hl=en&lr=&as_drrb=q&as_mind=1&as_minm=1&as_miny=1981&as_maxd=14&as_maxm=6&as_maxy=2006&safe=off&filter=0

Désolé d'avoir pourri la mise en page du source avec des liens trop long :(
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
10 juin 2007 à 21:24
En faisant un peu de "Googling", j'ai trouvé la version cache d'une discussion sur le sujet d'une webcam virtuelle (le site original a l'air d'avoir disparu):
http://groups.google.com/groups?q=group%3Amicrosoft.public.*+insubject%3Avirtual+author%3Arep.movsd%40gmail.com&start=0&num=100&hl=en&lr=&as_drrb=q&as_mind=1&as_minm=1&as_miny=1981&as_maxd=14&as_maxm=6&as_maxy=2006&safe=off&filter=0
et en particulier, j'ai trouvé la liste des questions posées sur des newsgroup par un type qui a réussi à faire un truc similaire (ledit truc est payant, donc pas opensource :-( ):
group:microsoft.public.* insubject:virtual author:rep.movsd@gmail.com

Si quelqu'un a le courage un jour de se lancer là-dedans, je suis partant pour m'associer à lui!
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
10 juin 2007 à 19:35
Non, ce n'est pas possible "nâtivement". C'est une limitation imposée par les driver même des webcam.

Toutefois, je pense qu'il est possible de faire un système pour lancer une application "server" en tâche de fond, qui lance l'acquisition de façon classique, puis de "publier" un filtre DirectDraw supplémentaire personnalisé pour toutes les applications clientes qui voudraient faire de l'acquisition simultanément (je crois que c'est possible à l'échelle d'un process). Ce filtre "simulerait" une webcam virtuelle en redirigeant simplement les données en provenance du server (par exemple en utilisant un Read/WriteProcessMemory) dans l'application cliente (MSN, etc...). Peut-être qu'il faudrait injecter une DLL dans les applications clientes propriétaires (genre MSN) pour appeler RegisterFilter.

C'est juste une idée comme ça, sans garantie que ça marche, mais si mon intuition est bonne ça ne devrait pas être *trop* compliqué à mettre en oeuvre.
niocco Messages postés 6 Date d'inscription mardi 14 septembre 2004 Statut Membre Dernière intervention 21 juillet 2009
10 juin 2007 à 19:01
je viens t'envoyer un msg mais autant l'ajouter aussi en tant que com pour que tout le monde en profite:

Est il possible avec TCamera, de capturer ce que voit la caméra et ce même si elle est déjà utilisée par une autre application. Imaginons que quelqu'un chat sur msn pendant que mon prog a base de TCamera tourne, ou plutôt l'inverse, mon prog se lance alors que la cam est déjà utilisée... comment détecter que quelqu'un utilise déjà la caméra ? et la cas échéant, au lieu de tout planter, comment utiliser le flux déjà créé comme source plutôt que d'en créer un nouveau. => A la fin de la session msn, possibilité de rechanger de source

Et si on ne peut pas avec TCaméra, quelle serait la méthode, ou dans quel direction chercher la méthode?

Pour info je précise que chez moi, mais peut être pas chez tout le monde, tout plante si on essaye d'accéder à la cam par deux applis différentes.
ewertheimer Messages postés 161 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 26 janvier 2009
23 juin 2005 à 18:28
J'ai fait ce qu'it dit mais quand j'installe il y a _un bug dans les class :
unit Camera;

interface

uses
SysUtils, Classes;

type
TCamera1 = class(TCamera)//Ils disent que TCamera (entre parenthese) n'est pas un identificateur declare
private
{ Déclarations privées }
protected
{ Déclarations protégées }
public
{ Déclarations publiques }
published
{ Déclarations publiées }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Exemples', [TCamera1]);
end;

end.
ewertheimer Messages postés 161 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 26 janvier 2009
23 juin 2005 à 08:50
Comment est il possible d'installer des composants avec l'extansion *.pas . Je vous en supplit aider moi
krypto2000 Messages postés 23 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 3 mars 2005
22 déc. 2004 à 09:18
bouhouhouhouhou vous êtes des méchants !!!
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
29 nov. 2004 à 11:02
Bon, ben si vous avez plus besoin de moi !....

Effectivement le buffer est dimensionné pour des images 230 x 240 x 24bits(=3octets)/pixel = 230400 octets d'où :
TTabImage = Array[0..230399] of byte;
en 640 x 480 couleurs 24 bits il faut :
TTabImage = Array[0..921599] of byte;

TheSquad, pour l'affichage plein écran, tu peux utiliser MaCamera.Align:=alClient; le "stretch" est automatique.


niocco,
Pour préciser les choses : AviCaptura.pas est l'interface de la DLL Avicap32.dll. Ce fichier a été "espagnolisé" et on peut aussi le trouver en anglais sur internet (sous le nom de Avicap.pas)
Pour aller plus loin dans l'utilisation des fonctions de cette dll, reportez-vous au MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_using_video_capture.asp

JLCVideo (ou Camera) crée un composant qui permet d'exploiter les fonctions d' AviCap32.dll. Son seul problème est d'être écrit en Espagnol, ce qui ne simplifie rien pour nous pauvres francophones. Mais si vous vouliez (comme moi) écrire votre propre composant, vous vous apercevriez bien vite que JLCVideo (très complet) contient déjà tout ce que vous vouliez écrire ! Alors tout compte fait, vous utilisez JLCVideo, parce qu'il est déja écrit !

Ken@vo
TheSquad Messages postés 25 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 24 mai 2006
27 nov. 2004 à 21:09
je parlais du post de kryptos2000, et non du tiens.
Ce parfait gentleman, qui a su lire ce qui n'étais pas ecrit en insultant kenavo d'avoir fait croire qu'il avait fait ecrit ces modules, alors qu'il est bien dit qu'il l'a traduit en partie !
enfin bon parler de lui ne lui donnerai que plus d'importance...

Juste une chose, sans repondre a ta question, mais pour t'eviter la meme erreur que moi, si tu fais le test de comparaison des images, et que tu a une image superieur a 320*240 faut augmenter la taille du tableau TTabImage [0..1280*1024] enfin ta resolution quoi...
Pour choisir la resolution de ta cam, il y a un Camera1.SelectFormat;
qui te permettra de choisir a l'execution
niocco Messages postés 6 Date d'inscription mardi 14 septembre 2004 Statut Membre Dernière intervention 21 juillet 2009
27 nov. 2004 à 21:02
Salut

D'abord au sujet de mon post un peu plus, comme d'habitude je me suis trompé. mon programme était mal fichu voilà pourquoi ces plantages intempestifs. l'erreur était idiote de plus.

Deuxièmement j'espère que ce n'est pas mon post qui motive la remarque de Thesquad ce n'est pas du tout mon intention de départ. et j'ai lu plus haut des posts bien plus impolis.

J'en arrive au fait:
J'ai quelques soucis avec une fonctionnalité de mon appli:
J'aimerais bien pouvoir contrôler les paramètres de la webcam ( comme par exemple les dimensions de la capture. )
J'ai bien vu que le composant le permet, mais c'est peu commenté et c'est de l'espagnol. bref, si c'était possible d'avoir un ou deux éclaircissements ce serait cool cool cool.

d'avance merci
TheSquad Messages postés 25 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 24 mai 2006
27 nov. 2004 à 20:59
Derniere petite question, est-ce que quelqu'un saurait comment faire un fullscreen, parce que j'ai beau cherché dans l'api, je ne trouve rien qui puisse le faire...
Merci de votre aide.
TheSquad Messages postés 25 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 24 mai 2006
27 nov. 2004 à 19:27
effectivement, bien vu, ça ne marchait pas en 640x480...
Merci pour ton aide masterglob !
masterglob Messages postés 2 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 27 novembre 2004
27 nov. 2004 à 11:23
A mon avis c'est parce que le programme de démo qui est fait ne vérifie pas la taille réelle de l'image en acquisition.

Vérifie que la taille dans la config de ta webcam correspond bien à celle codée en dur dans le programme
TheSquad Messages postés 25 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 24 mai 2006
26 nov. 2004 à 21:55
Salut, tout d'abord, merci pour ta source (faut pas être désagréable comme certaines personnes que je ne citera pas)

voila j'ai un petit probleme avec la source, en fait, il plante avec ces lignes de codes :

if un then
for i:=1 to (Taille-1) do
MemoImage1[i] := p^[i]
else
for i:=1 to (Taille-1) do
MemoImage2[i] := p^[i];

lorsque je les mets en comentaire, tout marche bien. Mais hélas, ce que je recherchais tout particulierement c'était la comparaison de 2 images. Mais bien sur sans ces lignes de codes, ça ne marche plus :(
En esperant que tu pourra m'aidé.
Merci bcp !!
niocco Messages postés 6 Date d'inscription mardi 14 septembre 2004 Statut Membre Dernière intervention 21 juillet 2009
15 sept. 2004 à 10:03
Salut.

Un bien joli composant le Tcamera, simple d'utilisation etc... mais: il y a des comportements tout à fait imprévisibles, par exemple:

1: Par moment ça plante après un passage dans la selection de la source avec le message suivant: "putain ca plante encore ce bordel". J'imagine que ça veux dire que tu es comme moi: impossible de savoir pourquoi.
2: Le ou les écrans de configuration s'affichent par moments lors de l'activation du composant Tcamera, mais pas toujours! Desfois ils n'apparaissent tout simplement pas.
3: A d'autres moments les fonction selectconfig, selectsource etc ne produisent rien. Absolument aucun effet!

Bref c'est pas évident de programmer dans des circonstances aussi aléatoires, mais c'est là que le dev devient le plus intéressant: on a pas l'impression d'être devant un ordinateur, mais devant une adolescente en plein age c... ;)

Si quelqu'un a des infos à ce sujet, please faites tourner!
masterglob Messages postés 2 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 27 novembre 2004
26 juil. 2004 à 18:37
Salut

Je suis nouveau sur ce site, mais ce composant est exactement ce que je cherchais, a un détail près:

Il manque (ou alors j'ai raté quelques lignes) la possibilité de choisir son périphérique quand on en a plusieurs (exemple: moi j'ai une carte TUNER et une WEBCAM)

J'ai donc un peu modifié le composant pour obtenir une fonctionnalité permettant de changer de périphérique, et d'obtenir la liste des drivers.

Est-ce que ça intéresse des gens d'avoir cette modif? Et si Oui comment propose-t-on une mise a jour?

Merci a tous.
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
3 juin 2004 à 07:42
Kacola,
TJLCVideo est le composant original, TCamera en est une copie quasi conforme. Le programme BigBrother utilise TCamera. Les deux peuvent être intallés, mais c'est un peu redondant.

Kenavo
kacola Messages postés 30 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 10 janvier 2008
2 juin 2004 à 22:32
Je ne comprends pas, ça a marché une première fois, j'ai pu admirer ce petit programme et puis le lendemain, le programme ne marche plu!!!!
Il me signale une erreur de violation d'adresse.

Quelqu'un peut-il expliquer comment le faire marcher.
"Il faut installer le composant Tcamera (camera.pas) à la place (ou en plus) de TJLCVideo"???

Merci, beaucoup.
Longzzorreills Messages postés 4 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 13 septembre 2004
26 mars 2004 à 21:06
J'ai essaye le programme mais j'ai un probleme avec le composant Tcamera, l'ordinateur ne trouve aucun drivers et ce avec les deux webcams différentes que j'ai teste. Y a t il une manoeuvre speciale pour que delphi reconnaisse ma camera (windows la voire et arrive a s en servir mais delphi ne trouve aucun driver). Est ce que quelqu'un a deja eut ce probleme et connait une solution?

Merci d'avance

Un programmeur debutant.
Kaaloos Messages postés 6 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 10 décembre 2003
24 févr. 2004 à 18:31
Mais alors là quel niveau, je ne suis pas français et je ne vis pas en France mais je remercie les français pour avoir mis des sites pareils pour les développeurs débutants cet aide que je ne trouve pas dans mon pays.
Un autre chapeau pour Kénavo pour ne pas avoir pris la peine de répondre un niveau intellectuel aussi bas.
Je ne comprends pas comment le Webmaster laisse trainer des expressions pareilles. Super déçu.
Ce composant m'a aidé dans un mini-TP à la Faculté.
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
19 févr. 2004 à 11:58
Oui, mais déjà nous on parle (ou écrit) mieux français :)

Et puis, après tout, Kenavo n'a jamais prétendu être l'auteur du composant, non?

De plus, nous autres putains de français, on n'y peut rien, on est très bête puisqu'on s'amuse à faire des sites et à poster dessus pour les programmeurs débutants, alors qu'en fait la programmation devrait être un art sérieux réservé au cercle très fermé des programmeurs expérimentés et professionnels qui ont pris de vrais cours pour ça, eux, et qui n'ont pas besoin de ça! Désolé donc de heurter ta sensibilité à fleur de peau par notre bêtise et notre manque de capacités en programmation, parce qu'on a juste choisi de programmer pour le plaisir, et que ça devrait être un honneur réservé à la seule élite très sérieuse que tu représentes... Et voilà que nous, pauvres débutants autodidactes, on a l'orgueil de vouloir jouer dans la cour des grands!
C'est vrai qu'on devrait être punis pour ça! Mais bon, quelque part tu es magnanime puisque tu nous traite de pines, et que le destin d'une pine n'est pas des plus désagréables: il n'y a pas mieux pour une pine que de pénétrer un con! (mais peut-être que vu ton niveau en français, tu ne connais pas le deuxième sens de ce mot, consulte donc un dictionnaire!)
blue71 Messages postés 11 Date d'inscription mardi 16 septembre 2003 Statut Membre Dernière intervention 11 mars 2004
29 déc. 2003 à 02:26
Hello, c'est moi lol. J'aurai une question. J'aimerai capturer un moment donner une image, cepandant j'arrive seulement a le faire au lancement, mais j'arrive pas a faire quand je le desire, par exemple j'aimerai savoir comment faire, pour capturer une image en appuyant sur un bouton, pour capturer une image quand on veux. Merci d'avance !!! Bonne soirée Et Bonne Année 2004 !!!
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
19 déc. 2003 à 08:03
Ah oui, pardon !
Il faut rajouter "ClipBrd" dans uses, pour pouvoir utiliser les fonctions du presse-papier (ClipBoard)
Kaaloos Messages postés 6 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 10 décembre 2003
16 déc. 2003 à 21:17
Très gentil de m'avoir aidé,merci !! Je crois qu'il ya un problème concernat la 2ème fonction le compilateur ne reconnait pas "ClipBoard.HasFormat(CF_BITMAP)".
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
11 déc. 2003 à 08:46
Une autre fonction existe dans l'objet TCamera : GrabarImagenPortaPapeles (capture d'image dans le presse papier)
De cette façon, on n'enregistre pas de fichier BMP.

procedure TForm1.Button2Click(Sender: TObject);
begin
Camera1.GrabarImagenPortaPapeles;
Image1.Width := Camera1.Width;
Image1.Height:= Camera1.Height;
Image1.Visible := True;
If ClipBoard.HasFormat(CF_BITMAP)then
Image1.picture.Bitmap.Assign(ClipBoard);
end;
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
10 déc. 2003 à 18:06
Il y a une fonction qui peut servir à ça : en fait l'image est d'abbord enregistrée sur le disque (CaptureImageDisque), puis chargée dans un TImage (LoadFromFile)

Il faut rajouter un bouton (Button1) redre visible Image1 située sous l'image de la caméra, et ajouter le code suivant

procedure TForm1.Button1Click(Sender: TObject);
begin
Camera1.CaptureImageDisque;
Image1.Width := Camera1.Width;
Image1.Height:= Camera1.Height;
Image1.Visible := True;
Image1.Picture.LoadFromFile(Camera1.FichierImage);
end;
Kaaloos Messages postés 6 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 10 décembre 2003
10 déc. 2003 à 15:26
C fort comme composant, mais voilà, j'aimerais faire un PAUSE et afficher la capture dan un TImage, c'est à dire faire de sorte que la webcam joue le rôle d'un appareil photo.
ça ressemblerait aux logiciels de "Picture Capture" fournis avec les webcam.
cs_freew Messages postés 2 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 27 novembre 2003
27 nov. 2003 à 21:55
Pas mal, je l'ai testé sous delphi 5, windows XP
avec ma webcam philips toUcam pro

Il ne manque plus que la doc francaise toute belle de camera.pas .. mais on se débrouille sans!

Merci :-D
Rejoignez-nous