Capture d'image par webcam en console

Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 8 mai 2012 à 09:44
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 14 mai 2012 à 10:26
Bonjour,

Je tente de lancer ma webcam au démarrage de l'application qui n'a pas d'interface graphique et de réussir à prendre des captures du flux vidéo pour ensuite les analyser. Je pourrais aussi faire des captures tous les N temps, les enregistrer et les analyser ensuite, mais si je peux directement faire une capture depuis le flux, ce serait parfait.

Le but final étant de pouvoir décoder un code QR présenté a l'objectif de la caméra et d'agir en fonction de ce code.

Pour l'instant j'ai trouvé quelques exemple, mais tous ont une interface graphique et récupèrent des images depuis le flux affiché dans une picturebox. Or je suis en console et je ne vois pas vraiment comment faire une capture du flux de cette manière.

Quelque chose dans le genre serait très intéressant :
Bitmap bmp = new Bitmap( ImageCapturee );

//Et finalement de l'analyser
string[] datas = BarcodeScanner.Scan(ImageCapturee, BarcodeType.QRCode);


Quelqu'un pourrait éclairer ma lanterne ?

D'avance, merci :)

Cordialement, Gaedarr.
A voir également:

2 réponses

Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
8 mai 2012 à 15:41
sachant qu'afficher le flux dans une picturebox, c'est plus ou moins afficher une image depuis un memory streamn. Pourquoi tu ne récupères pas ce stream avec lequel tu crées une image que tu sauves ensuite?
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
14 mai 2012 à 10:26
Bonjour,

Navré de la réponse plutôt tardive, j'ai finalement tourné le projet légèrement différemment pour pouvoir mieux comprendre la chose et pouvoir la transposer ensuite en console.

Alors pour le moment, voici ce dont je dispose :

Le Load
private void Form1_Load(object sender, EventArgs e)
        {
            foreach (Filter f in InputOptions.VideoInputDevices)
            {
                cbxVideo.Items.Add(f.Name);
            }
            if (cbxVideo.Items.Count > 0)
            {
                cbxVideo.SelectedIndex = 0;
            }
            foreach (Filter f in InputOptions.AudioInputDevices)
            {
                cbxAudio.Items.Add(f.Name);
            }
            if (cbxAudio.Items.Count > 0)
                cbxAudio.SelectedIndex = 0;

            this.Configure();

            this.tmrCapture.Enabled = true;
        }


"Configure"
private void Configure()
        {
            try
            {
                if (cbxVideo.Items.Count < 1)
                    throw new Exception();
                cbxVideo.Enabled = false;
                cbxAudio.Enabled = false;
                this.VideoInput = this.InputOptions.VideoInputDevices[cbxVideo.SelectedIndex];
                if (cbxAudio.Items.Count > 0)
                    this.AudioInput = this.InputOptions.AudioInputDevices[cbxAudio.SelectedIndex];
                this.CaptureInfo = new Capture(this.VideoInput, this.AudioInput);
                this.CaptureInfo.PreviewWindow = pbxPreview;
                this.CaptureInfo.RenderPreview();
                this.CaptureInfo.FrameCaptureComplete += new Capture.FrameCapHandler(CaptureInfo_FrameCaptureComplete);
            }
            catch(Exception e)
            {
                this.ErrorMessage(e);
            }
        }


Le timer
private void tmrCapture_Tick(object sender, EventArgs e)
        {
            try
            {
                CaptureInfo.CaptureFrame();                
                pbxCapture.Image.Save("images\\myImage.jpg");
                
                barcodes = BarcodeScanner.ScanSingleBarcode("images\\myImage.jpg", BarcodeType.QRCode);
                lbltest.Text = barcodes[0];
            }
            catch (Exception exept)
            {
                this.ErrorMessage(exept);
            }
        }


Et finalement
void CaptureInfo_FrameCaptureComplete(PictureBox Frame)
        {
            pbxCapture.Image = Frame.Image;
        }


Maintenant que ça fonctionne, du moins en partie (je précise que c'est une source d'ici même), je me dis que ça serait tout de même plus léger en passant par un bitmap.

Cela dit, j'ai par moment quelques erreurs d’accès et de handle, si vous voyez des erreurs, je suis preneur de tout conseil.

En attendant, je vous remercie de vous pencher sur mon sujet :)


Cordialement, Gaedarr.
0
Rejoignez-nous