begin process at 2010 02 10 02:15:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > AFFICHAGE WEBCAM, CAPTURE ET TRAITEMENT D'IMAGE

AFFICHAGE WEBCAM, CAPTURE ET TRAITEMENT D'IMAGE


 Information sur la source

Note :
8 / 10 - par 5 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Niveau :Débutant Date de création :13/11/2003 Date de mise à jour :13/11/2003 11:24:56 Vu / téléchargé :30 040 / 3 752

Auteur : Kenavo

Ecrire un message privé
Commentaire sur cette source (30)
Ajouter un commentaire et/ou une note

 Description

A la suite de questions sur le forum, je vous propose un exemple de capture et de traitement d'image acquise à partir d'une webcam.

L'application repose sur le composant freeware JLCVideo.

Le composant JLCVideo est disponible sur http://delphi.icm.edu.pl/ftp/d20free/jlcvideo.zip

J'ai renommé le composant "JLCVideo" en "Camera" et l'ai traduit en partie.

Il faut installer le composant Tcamera (camera.pas) à la place (ou en plus) de TJLCVideo

J'espère n'avoir rien oublié.

A vous de jouer !

Kén@vo

(Delphi 4 sur Windows Meuh)


 Conclusion

J'ai un problème si j'essaie de remettre le composant original (JLCVideo) à la place du composant Camera (peut-être un bug corrigé à l'époque)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

RÉELS ET RÉALITÉ
Source avec Zip Source avec une capture WEBCAM À MANIVELLE
Source avec Zip Source avec une capture ACQUISITION VIDEO (WEBCAM, TV CARDS ...)
Source avec Zip Source avec une capture IMAGE EN FOND DE PANEL
Source avec Zip LE RÉSEAU MICROSOFT - LES FONCTIONS WNET

 Sources de la même categorie

Source avec Zip Source avec une capture EXTRAIRE PÉRIPHÉRIQUE USB ( HOTPLUG ) par yanb
Source avec Zip Source avec une capture LOGICIEL INTERRUPTEUR MONDIAL USB par ced55957
Source avec Zip Source avec une capture RETIRER LES PÉRIPHÉRIQUES USB par yanb
Source avec Zip CHARGER ET ENVOYER DES DONNÉES VIA L'USB par ldesmartin
Source avec Zip Source avec une capture GESTION DU CLAVIER G15 DE LOGITECH par delphitness

Commentaires et avis

Commentaire de freew le 27/11/2003 21:55:39

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

Commentaire de Kaaloos le 10/12/2003 15:26:00

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.

Commentaire de Kenavo le 10/12/2003 18:06:05

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;

Commentaire de Kenavo le 11/12/2003 08:46:41

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;

Commentaire de Kaaloos le 16/12/2003 21:17:33

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)".  

Commentaire de Kenavo le 19/12/2003 08:03:57

Ah oui, pardon !
Il faut rajouter "ClipBrd" dans uses, pour pouvoir utiliser les fonctions du presse-papier (ClipBoard)

Commentaire de blue71 le 29/12/2003 02:26:07

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 !!!

Commentaire de Forman le 19/02/2004 11:58:24

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!)

Commentaire de Kaaloos le 24/02/2004 18:31:02

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é.

Commentaire de Longzzorreills le 26/03/2004 21:06:03

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.

Commentaire de kacola le 02/06/2004 22:32:16

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.

Commentaire de Kenavo le 03/06/2004 07:42:07

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

Commentaire de MAURICIO le 17/06/2004 19:11:15

Moi, en tant que Portugais (tu sais, là où il y a l' Euro 2004), je tiens à remercier le Webmaster pour ne pas avoir retirer le commentaire de 'MONSIEUR' Krypto2000 (alias Neo pour les intimes) qui vient se resourcer sur delphifr.com en bonnes sources. Ça montre que, et c' est aussi mon cas, que les professionels viennent 'tirer' des idées sur ce très bon site. Avec ton commentaire (oui je te parle directemenent petit prétentieux!) tu montres toi-même ton intérêt à regarder ce que font les autres. Et comme l' a si bien dit plus haut Forman, Kenavo n' a jamais dit que le code etait de lui. En tout cas, je te remercie Kenavo pour tes diverses participations sur cet excelent site.

Commentaire de masterglob le 26/07/2004 18:37:55

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.

Commentaire de niocco le 15/09/2004 10:03:40

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!

Commentaire de TheSquad le 26/11/2004 21:55:05

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 !!

Commentaire de masterglob le 27/11/2004 11:23:12

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

Commentaire de TheSquad le 27/11/2004 19:27:26

effectivement, bien vu, ça ne marchait pas en 640x480...
Merci pour ton aide masterglob !

Commentaire de TheSquad le 27/11/2004 20:59:12

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.

Commentaire de niocco le 27/11/2004 21:02:15

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

Commentaire de TheSquad le 27/11/2004 21:09:39

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

Commentaire de Kenavo le 29/11/2004 11:02:35

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

Commentaire de krypto2000 le 22/12/2004 09:18:22

bouhouhouhouhou vous êtes des méchants !!!

Commentaire de ewertheimer le 23/06/2005 08:50:43

Comment est il possible d'installer des composants avec l'extansion *.pas . Je vous en supplit aider moi

Commentaire de Kenavo le 23/06/2005 14:24:38

Salut,

Grandvizir a écrit un tutorial sur l'installation des composants

http://www.delphifr.com/tutorial.aspx?ID=86

Ken@vo

Commentaire de ewertheimer le 23/06/2005 18:28:43

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.

Commentaire de niocco le 10/06/2007 19:01:03

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.

Commentaire de Forman le 10/06/2007 19:35:51

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.

Commentaire de Forman le 10/06/2007 21:24:10

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!

Commentaire de Forman le 10/06/2007 21:26:27

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        :(

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,234 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales