Passer au contenu du pied de page
UTILISATION DE IRONBARCODE

Construire un lecteur de BarCode en utilisant une webcam en C#

Un lecteur de codes-barres utilisant une webcam en C# élimine le besoin de lecteurs de codes-barres physiques en transformant n'importe quelle caméra connectée en un puissant lecteur de codes-barres. Dans cet article, nous vous guiderons pas à pas dans la construction d'un lecteur de codes-barres pour webcam fonctionnant sur console, capable de capturer des images vidéo en direct et de décoder les codes-barres et les codes QR en temps réel, le tout avec seulement quelques lignes de code.

Que vous soyez en train de prototyper un système d'inventaire, de construire une borne d'enregistrement ou simplement curieux de savoir comment fonctionne la lecture des codes-barres, ce guide vous fournit un code source fonctionnel que vous pouvez exécuter immédiatement.

Commencez avec IronBarcode maintenant.
green arrow pointer

Une webcam peut-elle remplacer un lecteur de codes-barres dédié ?

Absolument. Toute webcam standard ou tout périphérique de capture vidéo USB connecté à un ordinateur Windows, macOS ou Linux peut servir de lecteur de codes-barres lorsqu'il est associé au logiciel approprié. Le procédé consiste à capturer des images vidéo provenant de la caméra, à convertir chaque image en une image bitmap, puis à transmettre cette image à une bibliothèque de lecture de codes-barres pour le décodage.

Les systèmes de lecture de codes-barres traditionnels utilisant des outils comme le SDK Dynamsoft Barcode Reader ou DirectShow .NET nécessitent souvent de configurer manuellement un graphe de filtres, de mettre en place un graphe de capture et de connecter un pipeline de rappel d'images pour obtenir les images de la caméra. IronBarcode simplifie considérablement cela ; il n'est plus nécessaire de construire une infrastructure complexe de flux vidéo. Vous fournissez les données de l'image, et la classe BarcodeReader s'occupe du reste, prenant en charge tout, des codes-barres standard aux codes QR, à partir d'une seule méthode de lecture .

Comment configurer la caméra et installer les dépendances ?

L'intégration d'images vidéo provenant d'une webcam dans une application console .NET nécessite une bibliothèque d'accès à la caméra. OpenCvSharp4 est un wrapper .NET léger et multiplateforme autour d'OpenCV qui simplifie cette tâche. Combiné à IronBarcode, il vous offre tout le nécessaire pour créer un lecteur de codes-barres en temps réel sans avoir à vous soucier de l'énumération des périphériques de capture vidéo de bas niveau ni de la configuration de la fréquence d'images.

Installez les deux packages via NuGet:

dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarCode
dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarCode
```
dotnet add package OpenCvSharp4.Windows
dotnet add package OpenCvSharp4.Extensions
dotnet add package BarCode
```
$vbLabelText   $csharpLabel

Une fois ces trois paquets installés, votre projet bénéficiera d'un accès à la caméra via OpenCvSharp et d'un décodage des codes-barres via IronBarcode. Aucune dépendance système supplémentaire ni SDK externe à configurer, il suffit d'installer et c'est parti.

Comment capturer des images vidéo et lire les données des codes-barres en temps réel ?

L'exemple de code suivant crée un lecteur de codes-barres en mode console dans Visual Studio qui ouvre votre webcam par défaut, capture des images en continu et analyse chacune d'elles à la recherche de codes-barres. Lorsqu'un code-barres est détecté, les données sont écrites dans la console et la trame est enregistrée sous forme d'instantané.

using OpenCvSharp;
using OpenCvSharp.Extensions;
using IronBarCode;
using IronSoftware.Drawing;
// Open the default camera (device index 0)
using var capture = new VideoCapture(0);
if (!capture.IsOpened())
{
    Console.WriteLine("No camera found. Check connected devices.");
    return;
}
// Configure the barcode reader for real-time scanning
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.All,
    Speed = ReadingSpeed.Faster
};
Console.WriteLine("Barcode scanner active. Press 'Q' to quit.");
using var frame = new Mat();
bool scanning = true;
while (scanning)
{
    capture.Read(frame);
    if (frame.Empty())
        continue;
    // Convert the captured frame to a bitmap for barcode processing
    var bitmap = BitmapConverter.ToBitmap(frame);
    var anyBitmap = new AnyBitmap(bitmap);
    // Scan the frame for barcodes
    var results = BarcodeReader.Read(anyBitmap, options);
    foreach (var result in results)
    {
        Console.WriteLine($"Barcode detected: {result.Value}");
        Console.WriteLine($"  Format: {result.BarcodeType}");
        // Save a snapshot of the frame where the barcode was found
        bitmap.Save("barcode_snapshot.png");
        Console.WriteLine("  Snapshot saved to barcode_snapshot.png");
    }
    // Check for quit key
    if (Cv2.WaitKey(1) == 'q')
        scanning = false;
}
Console.WriteLine("Scanner stopped.");
using OpenCvSharp;
using OpenCvSharp.Extensions;
using IronBarCode;
using IronSoftware.Drawing;
// Open the default camera (device index 0)
using var capture = new VideoCapture(0);
if (!capture.IsOpened())
{
    Console.WriteLine("No camera found. Check connected devices.");
    return;
}
// Configure the barcode reader for real-time scanning
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.All,
    Speed = ReadingSpeed.Faster
};
Console.WriteLine("Barcode scanner active. Press 'Q' to quit.");
using var frame = new Mat();
bool scanning = true;
while (scanning)
{
    capture.Read(frame);
    if (frame.Empty())
        continue;
    // Convert the captured frame to a bitmap for barcode processing
    var bitmap = BitmapConverter.ToBitmap(frame);
    var anyBitmap = new AnyBitmap(bitmap);
    // Scan the frame for barcodes
    var results = BarcodeReader.Read(anyBitmap, options);
    foreach (var result in results)
    {
        Console.WriteLine($"Barcode detected: {result.Value}");
        Console.WriteLine($"  Format: {result.BarcodeType}");
        // Save a snapshot of the frame where the barcode was found
        bitmap.Save("barcode_snapshot.png");
        Console.WriteLine("  Snapshot saved to barcode_snapshot.png");
    }
    // Check for quit key
    if (Cv2.WaitKey(1) == 'q')
        scanning = false;
}
Console.WriteLine("Scanner stopped.");
Imports OpenCvSharp
Imports OpenCvSharp.Extensions
Imports IronBarCode
Imports IronSoftware.Drawing

' Open the default camera (device index 0)
Using capture As New VideoCapture(0)
    If Not capture.IsOpened() Then
        Console.WriteLine("No camera found. Check connected devices.")
        Return
    End If

    ' Configure the barcode reader for real-time scanning
    Dim options As New BarcodeReaderOptions With {
        .ExpectMultipleBarcodes = False,
        .ExpectBarcodeTypes = BarcodeEncoding.All,
        .Speed = ReadingSpeed.Faster
    }
    Console.WriteLine("Barcode scanner active. Press 'Q' to quit.")

    Using frame As New Mat()
        Dim scanning As Boolean = True
        While scanning
            capture.Read(frame)
            If frame.Empty() Then
                Continue While
            End If

            ' Convert the captured frame to a bitmap for barcode processing
            Dim bitmap = BitmapConverter.ToBitmap(frame)
            Dim anyBitmap As New AnyBitmap(bitmap)

            ' Scan the frame for barcodes
            Dim results = BarcodeReader.Read(anyBitmap, options)
            For Each result In results
                Console.WriteLine($"Barcode detected: {result.Value}")
                Console.WriteLine($"  Format: {result.BarcodeType}")

                ' Save a snapshot of the frame where the barcode was found
                bitmap.Save("barcode_snapshot.png")
                Console.WriteLine("  Snapshot saved to barcode_snapshot.png")
            Next

            ' Check for quit key
            If Cv2.WaitKey(1) = AscW("q"c) Then
                scanning = False
            End If
        End While
    End Using
End Using

Console.WriteLine("Scanner stopped.")
$vbLabelText   $csharpLabel

Using Webcam for Barcode Scanning in C#

Construire un lecteur de code-barres à l'aide d'une webcam en C# : Image 1 - Utilisation de notre lecteur de code-barres utilisant une webcam en C#

Ce code utilise des instructions de niveau supérieur pour plus de clarté. L'objet VideoCapture ouvre la première source de caméra connectée et commence à capturer des images en boucle. Chaque image est convertie d'un objet OpenCvSharp Mat en un objet Bitmap, puis encapsulée dans un objet AnyBitmap, le format d'image multiplateforme accepté par la méthode BarcodeReader.Read d'IronBarcode.

L'objet BarcodeReaderOptions contrôle le comportement de la lecture. Le réglage de la vitesse sur ReadingSpeed.Faster optimise la lecture vidéo en temps réel, où des réponses rapides par image sont nécessaires. La propriété ExpectBarcodeTypes est définie sur BarcodeEncoding.All, ce qui signifie que le scanner détectera tous les formats pris en charge, du Code 128 et EAN-13 aux codes Data Matrix et QR. Si votre cas d'utilisation ne concerne qu'un format spécifique, le fait de le restreindre améliorera les performances d'analyse. Pour plus d'informations sur la configuration de ces options, consultez la référence BarcodeReaderOptions .

La boucle foreach parcourt chaque BarcodeResult de la collection renvoyée. La propriété Value contient les données du code-barres décodées, tandis que BarcodeType identifie le format. La méthode renvoie une collection BarcodeResults, ce qui facilite le traitement de plusieurs codes-barres si nécessaire.

Comment optimiser le lecteur de codes-barres pour différents cas d'utilisation ?

La lecture des codes-barres en conditions réelles implique souvent des conditions imparfaites, un éclairage insuffisant, des angles de vue obliques ou des étiquettes endommagées. Les options de lecture d'IronBarcode vous permettent d'équilibrer vitesse et précision en fonction du type de données que vous utilisez.

using IronBarCode;
// Optimized options for scanning QR codes from a camera feed
var qrOptions = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.PDF417,
    Speed = ReadingSpeed.Detailed,
    AutoRotate = true
};
// Decode barcodes from a saved image captured by the webcam
var imageResults = BarcodeReader.Read("barcode_snapshot.png", qrOptions);
foreach (var barcode in imageResults)
{
    Console.WriteLine($"Data: {barcode.Value}");
    Console.WriteLine($"Type: {barcode.BarcodeType}");
    Console.WriteLine($"Page: {barcode.PageNumber}");
}
using IronBarCode;
// Optimized options for scanning QR codes from a camera feed
var qrOptions = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.PDF417,
    Speed = ReadingSpeed.Detailed,
    AutoRotate = true
};
// Decode barcodes from a saved image captured by the webcam
var imageResults = BarcodeReader.Read("barcode_snapshot.png", qrOptions);
foreach (var barcode in imageResults)
{
    Console.WriteLine($"Data: {barcode.Value}");
    Console.WriteLine($"Type: {barcode.BarcodeType}");
    Console.WriteLine($"Page: {barcode.PageNumber}");
}
Imports IronBarCode

' Optimized options for scanning QR codes from a camera feed
Dim qrOptions As New BarcodeReaderOptions With {
    .ExpectMultipleBarcodes = True,
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.PDF417,
    .Speed = ReadingSpeed.Detailed,
    .AutoRotate = True
}

' Decode barcodes from a saved image captured by the webcam
Dim imageResults = BarcodeReader.Read("barcode_snapshot.png", qrOptions)
For Each barcode In imageResults
    Console.WriteLine($"Data: {barcode.Value}")
    Console.WriteLine($"Type: {barcode.BarcodeType}")
    Console.WriteLine($"Page: {barcode.PageNumber}")
Next
$vbLabelText   $csharpLabel

Résultat de la lecture de différents codes-barres : exemple avec un code QR

Construire un lecteur de code-barres à l'aide d'une webcam en C# : Image 2 - Lecture du code QR avec notre lecteur de code-barres

Le passage à ReadingSpeed.Detailed indique au décodeur d'appliquer une analyse d'image plus approfondie, idéale pour traiter les données d'entrée bruitées ou déformées. L'activation de la rotation automatique permet à IronBarcode de corriger automatiquement les codes-barres pivotés dans l'image, un scénario courant lorsque les utilisateurs tiennent des articles à des angles inhabituels devant la caméra. C'est l'un des domaines où IronBarcode se distingue véritablement en tant que bibliothèque de codes QR et lecteur de codes-barres : son prétraitement d'image intégré gère ces défis sans que vous ayez besoin de connecter des filtres de correction d'image externes.

Vous pouvez également scanner les codes-barres à partir de fichiers image enregistrés , de fichiers PDF et de fichiers TIFF multi-images en utilisant la même API BarcodeReader, ce qui la rend polyvalente bien au-delà des cas d'utilisation d'une webcam. Si vous développez plutôt un scanner basé sur le Web, le guide d'intégration IronBarcode Blazor couvre la numérisation par webcam via un navigateur utilisant l'interopérabilité JavaScript .

Qu'est-ce qui rend cette approche plus simple que les autres ?

De nombreux tutoriels sur les lecteurs de codes-barres pour webcam en C# s'appuient sur des combinaisons de plusieurs bibliothèques, généralement ZXing .NET pour le décodage associé à AForge .NET ou DirectShow .NET pour l'accès à la caméra. Cette approche nécessite la mise en place d'un graphe de filtres pour la capture vidéo, la configuration manuelle des fonctions de rappel d'images pour extraire les images du flux vidéo et la gestion de l'énumération des périphériques via les API Windows de bas niveau. Le kit de développement logiciel (SDK) du lecteur de codes-barres Dynamsoft suit un modèle similaire, nécessitant l'intégration de DirectShow .NET pour accéder à la webcam.

IronBarcode simplifie cette complexité. La logique de lecture des codes-barres réside entièrement dans BarcodeReader.Read, qui accepte un Bitmap, un tableau d'octets, un chemin de fichier ou un Stream. Il n'y a pas de graphe de capture à construire, pas d'expéditeur d'objets ni de câblage d'événements EventArgs pour la capture d'images, il suffit de lui fournir des données d'image et de récupérer les informations du code-barres. Cela signifie moins de code à écrire, moins de dépendances à maintenir et plus de temps consacré aux fonctionnalités qui comptent vraiment dans votre application.

Pour les équipes développant sur .NET Core, .NET Framework ou .NET 8+, IronBarcode offre une prise en charge multiplateforme cohérente sur Windows, macOS, Linux, Docker, Azure et AWS. Explorez l' ensemble des fonctionnalités ou parcourez des exemples de code supplémentaires pour découvrir toutes les possibilités.

Prêt à construire votre propre lecteur de codes-barres ?

Transformer une webcam en lecteur de codes-barres en C# nécessite un minimum de code lorsque vous disposez des outils adéquats. IronBarcode se charge du gros du travail de décodage, des codes-barres standard aux codes QR, tandis qu'OpenCvSharp gère l'accès à la caméra de manière propre. Ensemble, ils créent un scanner facile à construire, facile à étendre et prêt pour la production.

Démarrez un essai gratuit pour le tester avec votre propre projet, ou explorez les options de licence lorsque vous serez prêt à le déployer.

Questions Fréquemment Posées

Comment créer un lecteur de codes-barres à l'aide d'une webcam en C# ?

Vous pouvez créer un lecteur de codes-barres à l'aide d'une webcam en C# en tirant parti d'IronBarcode. Il s'agit de capturer des images vidéo à partir de la webcam et de décoder des codes-barres et des codes QR en temps réel avec un minimum de lignes de code.

Quels sont les avantages de l'utilisation d'une webcam pour la lecture de codes-barres ?

L'utilisation d'une webcam pour la lecture de codes-barres élimine le besoin d'un matériel dédié, permettant à toute caméra connectée de devenir un puissant lecteur de codes-barres. Il s'agit d'une solution rentable et polyvalente pour diverses applications.

Est-il possible de décoder des codes QR à l'aide d'une webcam en C# ?

Oui, avec IronBarcode, vous pouvez décoder des codes QR à l'aide d'une webcam en C#. La bibliothèque capture des images vidéo en direct et les traite pour extraire les données du code QR de manière transparente.

Quel type d'applications peut bénéficier d'un lecteur de codes-barres par webcam en C# ?

Les applications dans le domaine de la vente au détail, de la gestion des stocks et de la logistique peuvent bénéficier d'un lecteur de codes-barres par webcam en C#. Il constitue une solution flexible et rentable pour la numérisation des codes-barres et des codes QR.

IronBarcode prend-il en charge le décodage de codes-barres en temps réel ?

Oui, IronBarcode prend en charge le décodage de codes-barres en temps réel. Il traite les images vidéo en direct de la webcam pour décoder instantanément les codes-barres et les codes QR.

Le code source pour la construction d'un lecteur de codes-barres par webcam est-il disponible ?

Oui, le code source complet pour la construction d'un lecteur de codes-barres à webcam basé sur une console en C# est fourni. Cela aide les développeurs à comprendre et à mettre en œuvre la solution de manière efficace.

Quels types de codes-barres peuvent être décodés à l'aide d'IronBarcode avec une webcam ?

IronBarcode peut décoder différents types de codes-barres, notamment les codes QR, UPC, EAN et Code 128, entre autres, à l'aide d'une webcam en C#.

Ai-je besoin de compétences avancées en programmation pour construire un lecteur de codes-barres à l'aide d'IronBarcode ?

Non, vous n'avez pas besoin de compétences avancées en programmation pour construire un lecteur de codes-barres à l'aide d'IronBarcode. Le processus implique quelques lignes de code, ce qui le rend accessible aux développeurs de tous niveaux.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi