푸터 콘텐츠로 바로가기
IRONBARCODE 사용

C#에서 웹캠을 사용하여 바코드 스캐너 빌드하기

C#으로 구현된 웹캠 기반 바코드 스캐너는 연결된 모든 카메라를 강력한 바코드 판독기로 변환하여 물리적인 바코드 스캐너의 필요성을 없애줍니다. 이 글에서는 단 몇 줄의 코드로 실시간 비디오 프레임을 캡처하고 바코드 및 QR 코드를 실시간으로 디코딩하는 콘솔 기반 웹캠 바코드 스캐너를 구축하는 과정을 안내합니다.

재고 관리 시스템 프로토타입을 제작하든, 체크인 키오스크를 구축하든, 아니면 바코드 스캐닝이 내부적으로 어떻게 작동하는지 궁금하든, 이 가이드는 바로 실행할 수 있는 작동 가능한 소스 코드를 제공합니다.

!{--010011000100100101000010010100100100000101010010010110010101111101000111010001010101010001011111010100110101010001000001010101001001010100010001011111010101110100100 10101010001001000001011111010100000101001001001111010001000101010101000011010101000101111101010001010010010010010010010100000101001100010111110100001001001100010011110100001101001011--}

웹캠이 전용 바코드 스캐너를 대체할 수 있을까요?

전적으로. Windows, macOS 또는 Linux 컴퓨터에 연결된 모든 표준 웹 카메라 또는 USB 비디오 캡처 장치는 적절한 소프트웨어와 함께 사용하면 바코드 스캐너로 사용할 수 있습니다. 이 과정은 카메라에서 비디오 프레임을 캡처하고, 각 프레임을 비트맵 이미지로 변환한 다음, 해당 이미지를 바코드 판독기 라이브러리에 전달하여 디코딩하는 방식으로 진행됩니다.

Dynamsoft Barcode Reader SDK 또는 DirectShow .NET 과 같은 도구를 사용하는 기존 바코드 스캔 설정에서는 카메라에서 프레임을 얻기 위해 필터 그래프를 수동으로 구성하고, 캡처 그래프를 설정하고, 프레임 콜백 파이프라인을 연결해야 하는 경우가 많습니다. IronBarcode 이 과정을 획기적으로 간소화합니다. 복잡한 비디오 스트림 인프라를 구축할 필요가 없습니다. 이미지 데이터를 제공하면 BarcodeReader 클래스가 나머지를 처리하며, 단일 읽기 메서드 로 표준 바코드부터 QR 코드까지 모든 것을 지원합니다.

카메라 설정 및 필수 프로그램 설치 방법은 무엇인가요?

웹캠에서 비디오 프레임을 .NET 콘솔 애플리케이션으로 가져오려면 카메라 액세스 라이브러리가 필요합니다. OpenCvSharp4 는 OpenCV를 간편하게 사용할 수 있도록 해주는 경량의 크로스 플랫폼 .NET 래퍼입니다. IronBarcode 와 함께 사용하면 저수준 비디오 캡처 장치 열거나 프레임 속도 구성과 같은 복잡한 작업 없이 실시간 바코드 스캐너를 만드는 데 필요한 모든 것을 제공합니다.

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

이 세 가지 패키지를 설치하면 OpenCvSharp를 통해 카메라에 접근하고 IronBarcode 통해 바코드 디코딩을 할 수 있습니다. 추가 시스템 종속성이나 외부 SDK 구성이 필요 없으며, 설치 후 바로 사용 가능합니다.

실시간으로 비디오 프레임을 캡처하고 바코드 데이터를 읽는 방법은 무엇일까요?

다음 코드 예제는 Visual Studio에서 콘솔 기반 바코드 스캐너를 생성합니다. 이 스캐너는 기본 웹캠을 열고, 프레임을 연속적으로 캡처하며, 각 프레임에서 바코드를 스캔합니다. 바코드가 감지되면 데이터가 콘솔에 출력되고 해당 프레임은 스냅샷으로 저장됩니다.

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#

C#에서 웹캠을 사용하여 바코드 스캐너 빌드하기: 이미지 1 - C#에서 웹캠을 사용하여 바코드 스캐너 사용하기

이 코드는 코드를 깔끔하게 유지하기 위해 최상위 수준의 구문을 사용합니다. VideoCapture 객체는 연결된 첫 번째 카메라 소스를 열고 루프를 통해 프레임을 가져오기 시작합니다. 각 프레임은 OpenCvSharp Mat에서 Bitmap으로 변환된 다음 IronBarcode의 BarcodeReader.Read 메서드가 지원하는 크로스 플랫폼 이미지 형식인 AnyBitmap으로 래핑됩니다.

BarcodeReaderOptions 객체는 스캔 동작을 제어합니다. 속도를 ReadingSpeed.Faster로 설정하면 프레임당 빠른 응답이 필요한 실시간 비디오에 최적화됩니다. ExpectBarcodeTypes 속성이 BarcodeEncoding.All로 설정되어 있으므로 스캐너는 Code 128 및 EAN-13부터 Data Matrix 및 QR 코드에 이르기까지 지원되는 모든 형식을 감지합니다. 사용 사례에서 특정 형식만 필요한 경우, 형식을 좁히면 스캔 성능이 향상됩니다. 이러한 옵션 구성에 대한 자세한 내용은 BarcodeReaderOptions 참조를 확인하세요.

foreach 루프는 반환된 컬렉션의 각 BarcodeResult를 순회합니다. Value 속성에는 디코딩된 바코드 데이터가 포함되고, BarcodeType 속성은 형식을 식별합니다. 이 메서드는 BarcodeResults 컬렉션을 반환하므로 필요한 경우 여러 바코드를 쉽게 처리할 수 있습니다.

다양한 사용 사례에 맞게 바코드 판독기를 미세 조정하는 방법은 무엇일까요?

실제 바코드 스캔 환경에서는 조명 불량, 기울어진 각도 또는 손상된 라벨과 같은 불완전한 조건이 흔히 발생합니다. IronBarcode의 리더기 옵션을 사용하면 작업 대상에 따라 속도와 정확도 사이의 균형을 맞출 수 있습니다.

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

다양한 바코드 판독 결과 출력: QR 코드 예시

C#에서 웹캠을 사용하여 바코드 스캐너 빌드하기: 이미지 2 - 바코드 스캐너로 QR 코드 읽기

속도를 ReadingSpeed.Detailed로 변경하면 디코더가 더 철저한 이미지 분석을 적용하게 되는데, 이는 노이즈가 많거나 왜곡된 입력 데이터를 처리하는 데 이상적입니다. 자동 회전 기능을 활성화하면 IronBarcode 이미지에서 회전된 바코드를 자동으로 보정할 수 있습니다. 이는 사용자가 카메라 앞에서 제품을 비스듬한 각도로 들고 있을 때 흔히 발생하는 상황입니다. 이는 IronBarcode QR 코드 라이브러리 및 바코드 리더로서 진정으로 돋보이는 부분 중 하나입니다. 내장된 이미지 전처리 기능 덕분에 외부 이미지 보정 필터를 연결할 필요 없이 이러한 문제를 해결할 수 있습니다.

저장된 이미지 파일 , PDF 및 다중 프레임 TIFF 파일에서도 동일한 BarcodeReader API를 사용하여 바코드를 스캔할 수 있으므로 웹캠 사용 사례를 훨씬 뛰어넘는 다양한 용도로 활용할 수 있습니다. 웹 기반 스캐너를 구축하는 경우 IronBarcode Blazor 통합 가이드에서 JavaScript 상호 운용성을 사용하여 브라우저를 통한 웹캠 스캔 방법을 다룹니다.

이 접근 방식이 다른 대안보다 더 간단한 이유는 무엇일까요?

C#으로 작성된 웹캠 바코드 스캐너 튜토리얼은 대부분 여러 라이브러리를 조합하여 사용하는데, 일반적으로 디코딩에는 ZXing .NET , 카메라 접근에는 AForge .NET 또는 DirectShow .NET 사용합니다. 이러한 접근 방식은 비디오 캡처를 위한 필터 그래프 설정, 비디오 스트림에서 프레임을 추출하기 위한 프레임 콜백의 수동 구성, 그리고 하위 수준 Windows API를 통한 장치 열거 처리를 필요로 합니다. Dynamsoft 바코드 리더 SDK도 유사한 패턴을 따르며, 웹캠에 접근하기 위해 DirectShow .NET 기반 구현이 필요합니다.

IronBarcode 그러한 복잡성을 해소합니다. 바코드 스캔 로직은 전적으로 BarcodeReader.Read 함수에 있으며, 이 함수는 비트맵, 바이트 배열, 파일 경로 또는 스트림을 인수로 받습니다. 프레임 캡처를 위해 캡처 그래프를 구축하거나 객체 송신자 및 EventArgs와 이벤트 배선을 설정할 필요가 없습니다. 이미지 데이터만 전달하면 바코드 정보를 반환받을 수 있습니다. 이는 작성해야 할 코드가 줄어들고, 유지 관리해야 할 종속성이 줄어들며, 애플리케이션에서 실제로 중요한 기능에 더 많은 시간을 할애할 수 있음을 의미합니다.

.NET Core, .NET Framework 또는 .NET 8+를 사용하는 개발팀을 위해 IronBarcode Windows, macOS, Linux, Docker, Azure 및 AWS에서 일관된 크로스 플랫폼 지원을 제공합니다. 전체 기능 세트를 살펴보거나 추가 코드 예제를 찾아 어떤 다른 기능이 가능한지 확인해 보세요.

나만의 바코드 스캐너를 만들어볼 준비가 되셨나요?

적절한 도구만 있으면 웹캠을 C#으로 바코드 스캐너로 바꾸는 데는 최소한의 코드만 필요합니다. IronBarcode 표준 바코드부터 QR 코드까지 디코딩 작업을 처리하고, OpenCvSharp는 카메라 접근을 깔끔하게 관리합니다. 이 둘을 결합하면 제작이 쉽고, 확장이 용이하며, 바로 생산에 투입할 수 있는 스캐너가 만들어집니다.

무료 평가판을 시작하여 프로젝트에서 직접 사용해 보거나, 배포 준비가 되면 라이선스 옵션을 살펴보세요 .

자주 묻는 질문

C#에서 웹캠을 사용하여 바코드 스캐너를 만들려면 어떻게 해야 하나요?

IronBarcode를 활용하여 C#에서 웹캠을 사용하여 바코드 스캐너를 만들 수 있습니다. 여기에는 웹캠에서 비디오 프레임을 캡처하고 최소한의 코드 줄로 바코드와 QR 코드를 실시간으로 디코딩하는 작업이 포함됩니다.

바코드 스캔에 웹캠을 사용하면 어떤 이점이 있나요?

바코드 스캔에 웹캠을 사용하면 전용 하드웨어가 필요하지 않으므로 연결된 모든 카메라가 강력한 바코드 리더기가 될 수 있습니다. 이는 비용 효율적이며 다양한 용도로 활용할 수 있습니다.

C#에서 웹캠을 사용하여 QR 코드를 디코딩할 수 있나요?

예, IronBarcode를 사용하면 C#에서 웹캠을 사용하여 QR 코드를 디코딩할 수 있습니다. 이 라이브러리는 라이브 비디오 프레임을 캡처하고 이를 처리하여 QR코드 데이터를 원활하게 추출합니다.

C#으로 웹캠 바코드 스캐너를 사용하면 어떤 종류의 애플리케이션에 도움이 될 수 있을까요?

소매업, 재고 관리, 물류 분야의 애플리케이션은 C#으로 제작된 웹캠 바코드 스캐너의 이점을 누릴 수 있습니다. 바코드와 QR 코드 스캔을 위한 유연하고 비용 효율적인 솔루션을 제공합니다.

IronBarcode는 실시간 바코드 디코딩을 지원하나요?

예, IronBarcode는 실시간 바코드 디코딩을 지원합니다. 웹캠의 라이브 비디오 프레임을 처리하여 바코드와 QR 코드를 즉시 디코딩합니다.

웹캠 바코드 스캐너를 만들기 위한 소스 코드가 제공되나요?

예, 콘솔 기반 웹캠 바코드 스캐너를 C#으로 빌드하기 위한 전체 소스 코드가 제공됩니다. 이를 통해 개발자가 솔루션을 효율적으로 이해하고 구현할 수 있습니다.

웹캠이 있는 IronBarcode를 사용하여 어떤 유형의 바코드를 디코딩할 수 있나요?

IronBarcode는 C#의 웹캠을 사용하여 QR 코드, UPC, EAN, Code 128 등 다양한 유형의 바코드를 디코딩할 수 있습니다.

IronBarcode를 사용하여 바코드 스캐너를 구축하려면 고급 프로그래밍 기술이 필요하나요?

아니요, IronBarcode를 사용하여 바코드 스캐너를 구축하는 데 고급 프로그래밍 기술이 필요하지 않습니다. 몇 줄의 코드만 있으면 모든 기술 수준의 개발자가 액세스할 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해