web-dev-qa-db-fra.com

Comment lire un code QR directement à partir d'une caméra mobile à l'aide de ZXing [ASP.Net WebForm]

Je travaille actuellement sur un projet médical qui consiste en une base de données de patients. J'ai utilisé zxing pour générer un code QR à chaque fois qu'un patient est ajouté au dossier et que le code QR contient l'ID du patient.

Le code de génération est le suivant

 //GENERATE QRCODE
        private void GenerateCode(string patientIdString)
        {           

            var writer = new BarcodeWriter();
            writer.Format = BarcodeFormat.QR_CODE;
            var result = writer.Write(patientIdString);
            string path = Server.MapPath("~/images/" + patientIdString + ".jpg");
            var barcodeBitmap = new Bitmap(result);

            using (MemoryStream memory = new MemoryStream())
            {
                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite))
                {
                    barcodeBitmap.Save(memory, ImageFormat.Jpeg);
                    byte[] bytes = memory.ToArray();
                    fs.Write(bytes, 0, bytes.Length);
                }
            }
            patientQRCode.Visible = true;
            patientQRCode.ImageUrl = "~/images/"+ patientIdString + ".jpg";
        }

Cette méthode est ensuite appelée sur la fonctionnalité AddPatient qui fonctionne parfaitement bien.

Sur ma page de numérisation, j'ai deux fonctionnalités, soit un utilisateur clique sur l'ID d'un patient affiché sur une table de données qui le redirigerait vers la page de visualisation du patient, soit un utilisateur dispose d'une fonctionnalité pour utiliser sa caméra mobile.

Le code pour lire le QR Code et le traduire est le suivant

//READ CODE FROM QR IMAGE
        private void ReadQRCode()
        {
            var reader = new BarcodeReader();
            string filename = Path.Combine(Request.MapPath("~/images/"), "QRImage.jpg");
            //Detatch and decode the barcode inside the bitmap
            var result = reader.Decode(new Bitmap(filename));
            if (result != null)
            {
                lblQRCode.Text = "QR Code : " + result.Text;
            }
        }

Et la méthode que j'utilise pour que les utilisateurs mobiles ouvrent leur caméra est la suivante:

        <p class="lead" style="text-align: center"><input class="btn btn-success btn-sm" type="file" accept="image/*" runat="server" capture="camera" /></p>

Le problème est que l'appareil photo ne numérise pas/ne prend pas de photo, il fonctionne simplement comme un objectif. Existe-t-il un moyen de le faire lire et de convertir le code pour qu'il obtienne l'ID du patient, puis redirige automatiquement l'utilisateur vers la page du patient?

Merci d'avance pour le support

8
zadders

J'ai fini par activer le plugin javascript WebRTC pour activer un panneau qui utilise la caméra sur le téléphone. (Ce tutoriel https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Taking_still_photos#Using_specific_devices )

Puis j'ai utilisé cet exemple pour activer la caméra arrière, car la première section ne permettait que la caméra frontale à utiliser. ( https://webrtc.github.io/samples/src/content/devices/input-output/ )

Cela m'a donné le résultat souhaité nécessaire avec la capture d'image.

J'ai ensuite utilisé ZXing pour créer le QR nécessaire, puis aussi pour lire l'image capturée par la caméra WebRTC.

Je me suis également souvenu que les caméras affichaient un écran vide lorsque j'essayais de lancer le site Web sur mon mobile, ce qui s'est avéré être dû au fait que le site Web n'avait pas le certificat SSL vérifié, ce qui signifie que le site était toujours un HTTP plutôt que un HTTPS qui, pour une raison quelconque, permet au mobile d'accéder à la fonction caméra. ( https://www.pluralsight.com/guides/visual-studio-2017-resolving-ssl-tls-connections-problems-with-iis-express )

3
zadders