Đọc mã vạch từ hình ảnh trong C#

Bạn đang tìm cách đọc mã vạch hoặc mã QR từ hình ảnh theo chương trình? Nếu bạn là nhà phát triển và bạn cần tạo ứng dụng đọc mã vạch của riêng mình? Bạn đã đến đúng nơi. Mã vạch rất quan trọng để theo dõi chính xác hàng tồn kho và phân phối sản phẩm từ nơi sản xuất đến điểm bán hàng. Chúng ta có thể dễ dàng phát hiện, nhận dạng và đọc các loại mã vạch và mã QR khác nhau trong các ứng dụng .NET. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách đọc mã vạch từ hình ảnh trong C# chỉ bằng một vài bước đơn giản. Bạn có thể sử dụng bài viết này làm hướng dẫn từng bước để phát triển các ứng dụng quét hoặc đọc mã vạch.

Đầu tiên, chúng ta sẽ xem qua C# Barcode Reader API để đọc các mã vạch có sẵn trong hình ảnh đầu vào. Tiếp theo, chúng tôi sẽ hướng dẫn các bước về cách phát hiện, nhận dạng và trích xuất dữ liệu mã vạch từ hình ảnh. Bạn sẽ tìm thấy các bước chi tiết và đoạn mã. Cuối cùng, chúng tôi sẽ cung cấp các liên kết hữu ích để cải tiến thêm. Vậy hãy bắt đầu!

Các chủ đề sau sẽ được đề cập trong bài viết này:

  1. API C# để đọc mã vạch từ hình ảnh
  2. Các bước để đọc mã vạch từ hình ảnh
  3. Đọc mã vạch từ Bitmap
  4. Đọc mã vạch từ hình ảnh bằng Stream
  5. Cách đọc mã vạch của loại cụ thể
  6. Đọc nhiều loại mã vạch từ một hình ảnh
  7. Phát hiện và đọc các bộ ký hiệu được xác định trước
  8. Phát hiện và đọc nhiều mã vạch từ một hình ảnh
  9. Lấy tọa độ X và Y của mã vạch
  10. Đọc mã vạch từ vùng hình ảnh cụ thể
  11. Đọc mã vạch từ nhiều vùng ảnh

API C# để đọc mã vạch từ hình ảnh

Để đọc mã vạch từ hình ảnh, chúng tôi sẽ sử dụng Aspose.BarCode for .NET API. API cho phép tạo, quét và đọc nhiều loại ký hiệu mã vạch. Nó cho phép hiển thị hình ảnh mã vạch ở định dạng JPEG, TIFF, PNG, BMPGIF.

API cung cấp lớp BarCodeReader cho phép nhận dạng hơn 60 loại mã vạch khác nhau từ các hình ảnh nhất định. Bước đầu tiên trong việc phát hiện mã vạch là chỉ định nguồn của hình ảnh có mã vạch. Đây có thể là một tệp, một đối tượng bitmap hoặc một luồng. Sau đó, cần chỉ định các ký hiệu mục tiêu trong tham số DecodeType. Chúng ta có thể xem qua tất cả các loại ký hiệu được hỗ trợ khác nhau bằng cách chỉ định DecodeType.AllSupportedTypes. Phương thức ReadBarCodes() của lớp này trả về một mảng mã vạch được nhận dạng. Lớp BarCodeResult của API lưu trữ dữ liệu mã vạch được nhận dạng như loại mã vạch, văn bản mã, vùng và các tham số khác.

API cũng cho phép chỉ định các vùng của hình ảnh mà đầu đọc mã vạch sẽ đọc. Điều này có thể được thực hiện bằng cách sử dụng đối tượng .NET Rectangle và cho phép tránh phải tìm mã vạch trong các vùng hình ảnh không chứa mã vạch theo mặc định.

Vui lòng tải xuống DLL của API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.BarCode 

Đọc mã vạch từ hình ảnh bằng C#

Chúng ta có thể dễ dàng đọc mã vạch từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
  2. Gọi phương thức readBarCodes() và nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult.
  3. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch từ hình ảnh trong C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ tệp hình ảnh.
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Sample.png");

// Đọc mã vạch và hiển thị kết quả
foreach(BarCodeResult result in reader.ReadBarCodes()) 
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
Đọc mã vạch từ một hình ảnh.

Đọc mã vạch từ một hình ảnh trong C#.

Đọc mã vạch từ Bitmap trong C#

Chúng ta có thể dễ dàng đọc mã vạch từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp Bitmap.
  2. Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng Bitmap.
  3. Gọi phương thức ReadBarCodes() và nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult.
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch từ bitmap trong C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ bitmap.
// Tải hình ảnh trong Bitmap
Bitmap bmp = new Bitmap("C:\\Files\\BarCode\\Code128.jpg");

// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader(bmp);

// Đọc tất cả các mã vạch trong khu vực được cung cấp
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
Đọc mã vạch từ hình ảnh bitmap trong C#.

Đọc mã vạch từ Bitmap trong C#.

Đọc mã vạch từ hình ảnh bằng Stream trong C#

Chúng tôi cũng có thể tải hình ảnh mã vạch bằng luồng tệp và đọc mã vạch bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp FileStream.
  2. Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng luồng.
  3. Gọi phương thức ReadBarCodes() và nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult.
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch từ hình ảnh bằng Luồng trong C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ hình ảnh bằng cách sử dụng luồng tệp.
// Tải hình ảnh
Stream stream = new FileStream("C:\\Files\\BarCode\\MultipleBarcodes.jpeg", FileMode.Open, FileAccess.Read);

// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader(stream);

// Đọc tất cả các mã vạch trong khu vực được cung cấp
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}

Đọc mã vạch của loại cụ thể từ hình ảnh trong C#

Bạn nên chọn các ký hiệu mã vạch mục tiêu sẽ được xem xét để nhận dạng nhằm giảm thiểu lượng thời gian cần thiết để hoàn thành nhận dạng và tránh các nỗ lực nhận dạng mã vạch lỗi thời.

Chúng tôi có thể chỉ định loại mã vạch mục tiêu và đọc mã vạch từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
  2. Tiếp theo, đặt loại giải mã mã vạch, chẳng hạn như Code39Standard.
  3. Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch của một loại cụ thể từ hình ảnh bằng C#.

// Ví dụ về mã này trình bày cách đọc mã vạch của một loại giải mã cụ thể từ một hình ảnh.
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Code39Standard.jpg", DecodeType.Code39Standard);

// Đọc mã vạch loại Code39Extended
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
Nhận dạng mã vạch của một loại cụ thể từ hình ảnh

Nhận dạng mã vạch của một loại cụ thể từ hình ảnh trong C#.

Đọc mã vạch nhiều loại từ hình ảnh trong C#

Chúng tôi cũng có thể chỉ định nhiều loại mã vạch bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
  2. Tiếp theo, đặt loại giải mã mã vạch bằng phương thức SetBarCodeReadType().
  3. Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch thuộc nhiều loại từ một hình ảnh bằng C#.

// Ví dụ mã này trình bày cách đọc mã vạch của nhiều loại giải mã từ một hình ảnh.
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\MultipleBarcodes.png");
reader.SetBarCodeReadType(DecodeType.DataMatrix, DecodeType.QR, DecodeType.Code39Extended);

// Đọc mã vạch
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
Đọc mã vạch nhiều loại từ hình ảnh trong C#

Đọc mã vạch nhiều loại từ hình ảnh trong C#

Chúng ta cũng có thể chỉ định nhiều loại giải mã trong hàm tạo của lớp BarCodeReader như dưới đây:

BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Code39Standard.jpg", DecodeType.DataMatrix, DecodeType.QR, DecodeType.Code39Extended);

Đọc Tập hợp các loại mã vạch được xác định trước từ hình ảnh trong C#

Chúng ta có thể đọc một tập hợp các ký hiệu được xác định trước để nhận dạng được xác định trong lớp DecodeTypes. Chúng tôi có thể đặt bất kỳ tập hợp được xác định trước nào sau đây:

  • AllSupportedTypes - tất cả các loại mã vạch được hỗ trợ
  • Type1D - tất cả các ký hiệu 1D được hỗ trợ
  • Type2D - tất cả các ký hiệu 2D được hỗ trợ
  • PostalTypes - tất cả các ký hiệu bưu chính được hỗ trợ chủ yếu được sử dụng bởi các dịch vụ bưu chính
  • MostCommonTypes - một tập hợp các tiêu chuẩn mã vạch được sử dụng rộng rãi nhất được xác định

Chúng ta có thể chỉ định một tập hợp được xác định trước bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
  2. Tiếp theo, hãy đặt loại giải mã mã vạch trong hàm tạo BarCodeReader hoặc phương thức SetBarCodeReadType, chẳng hạn như DecodeType.Types2D.
  3. Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch bằng cách sử dụng bộ ký hiệu được xác định trước trong C#.

// Ví dụ về mã này trình bày cách đọc mã vạch bằng cách sử dụng bộ ký hiệu được xác định trước.
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\MultipleBarcodes.png", DecodeType.Types1D);

// Đọc mã vạch và hiển thị kết quả
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
Đọc Tập hợp các loại mã vạch được xác định trước từ hình ảnh trong C#

Đọc Tập hợp các loại mã vạch được xác định trước từ hình ảnh trong C#

Đọc nhiều mã vạch từ hình ảnh trong C#

Chúng tôi cũng có thể đọc tất cả các mã vạch có sẵn từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
  2. Tiếp theo, đặt loại giải mã mã vạch là ALLSUPPORTEDTYPES.
  3. Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc nhiều mã vạch từ một hình ảnh bằng C#.

// Ví dụ mã này trình bày cách đọc mã vạch nhiều mã vạch từ một hình ảnh.
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\MultipleBarcodes.png", DecodeType.AllSupportedTypes);

// Đọc tất cả các loại mã vạch có sẵn trên hình ảnh đầu vào
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
Đọc nhiều mã vạch từ hình ảnh.

Đọc nhiều mã vạch từ một hình ảnh.

Nhận tọa độ X và Y của mã vạch bằng C#

Chúng tôi có thể đọc tọa độ X và Y của mã vạch được phát hiện từ một hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp BarCodeReader.
  2. Tiếp theo, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  3. Sau đó, lặp lại các kết quả và kiểm tra xem Vùng có phải là null hay không.
  4. Sau đó, lấy mảng Điểm giới hạn vùng mã vạch bằng phương thức Points.
  5. Cuối cùng, hiển thị các điểm X và Y của mã vạch.

Mẫu mã sau đây cho biết cách lấy điểm tọa độ X và Y của mã vạch từ hình ảnh bằng C#.

// Ví dụ về mã này trình bày cách đọc điểm mã vạch vùng X & Y từ một hình ảnh.
// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader("C:\\Files\\BarCode\\Code39Standard.jpg", DecodeType.AllSupportedTypes);

// đọc mã vạch
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    if (result.Region != null)
    {
        // Hiển thị tọa độ x và y của tất cả các mã vạch được phát hiện
        Point[] point = result.Region.Points;
        Console.Out.WriteLine("Top left coordinates: X = " + point[0].X + ", Y = " + point[0].Y);
        Console.Out.WriteLine("Bottom left coordinates: X = " + point[1].X + ", Y = " + point[1].Y);
        Console.Out.WriteLine("Bottom right coordinates: X = " + point[2].X + ", Y = " + point[2].Y);
        Console.Out.WriteLine("Top right coordinates: X = " + point[3].X + ", Y = " + point[3].Y);
    }
}
Nhận tọa độ X và Y của mã vạch

Nhận tọa độ X và Y của mã vạch từ một hình ảnh.

Đọc mã vạch từ vùng hình ảnh cụ thể trong C#

Chúng ta có thể đọc mã vạch từ một vùng cụ thể hoặc một khu vực của hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, đọc dữ liệu bộ đệm của tệp hình ảnh bằng phương pháp Bitmap.
  2. Tiếp theo, tạo một thể hiện của lớp BarCodeReader. Nó lấy một hình ảnh, một khu vực hình chữ nhật và Loại giải mã làm đối số.
  3. Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  4. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch từ một vùng cụ thể của hình ảnh bằng C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ vùng cụ thể của hình ảnh.
// Tải hình ảnh
Bitmap img = new Bitmap("C:\\Files\\BarCode\\MultipleBarcodes.jpeg");

// Tạo một thể hiện của lớp BarCodeReader
// và chỉ định một khu vực để tìm kiếm mã vạch
BarCodeReader reader = new BarCodeReader(img, new Rectangle(0, 0, 400, 200));

// Đọc tất cả các mã vạch trong khu vực được cung cấp
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
}
Đọc mã vạch từ vùng cụ thể của hình ảnh.

Đọc mã vạch từ một vùng cụ thể của hình ảnh trong C#.

Đọc mã vạch từ nhiều vùng hình ảnh trong C#

Chúng tôi cũng có thể đọc mã vạch từ nhiều vùng của hình ảnh bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải một hình ảnh bằng lớp Bitmap.
  2. Tiếp theo, định nghĩa các hình chữ nhật bằng lớp Rectangle.
  3. Sau đó, tạo một thể hiện của lớp BarCodeReader.
  4. Trong khi đó, gọi SetBarCodeImage() với đối tượng hình ảnh và hình chữ nhật làm đối số.
  5. Tùy chọn, đặt kiểu đọc mã vạch bằng phương thức SetBarCodeReadType().
  6. Sau đó, nhận kết quả nhận dạng trong đối tượng lớp BarCodeResult bằng phương thức ReadBarCodes().
  7. Cuối cùng, lặp lại các kết quả và hiển thị loại và văn bản của mã vạch.

Mẫu mã sau đây cho biết cách đọc mã vạch từ nhiều vùng của hình ảnh bằng C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ vùng cụ thể của hình ảnh.
// Tải hình ảnh trong Bitmap
Bitmap bmp = new Bitmap("C:\\Files\\BarCode\\MultipleBarcodes.png");

// Hình chữ nhật của mã vạch 2D trong hình ảnh nguồn
Rectangle rect2D = new Rectangle(0, 0, 400, 200);

// Hình chữ nhật của mã vạch Code128 trong hình ảnh nguồn
Rectangle rectCode128 = new Rectangle(450, 100, 600, 180);

// Khởi tạo đầu đọc mã vạch
BarCodeReader reader = new BarCodeReader();
reader.SetBarCodeImage(bmp, new Rectangle[] { rect2D, rectCode128 });
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);

// Đọc tất cả các mã vạch trong khu vực được cung cấp
foreach (BarCodeResult result in reader.ReadBarCodes())
{
    Console.Out.WriteLine("CodeText: " + result.CodeText);
    Console.Out.WriteLine("Symbology type: " + result.CodeType);
    Console.Out.WriteLine("-------------------------");
}
Đọc mã vạch từ nhiều vùng hình ảnh.

Đọc mã vạch từ Nhiều vùng của hình ảnh trong C#.

Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử thư viện mà không bị giới hạn đánh giá.

Sự kết luận

Trong bài viết này, chúng ta đã học cách:

  • Tải tệp hình ảnh mã vạch;
  • Đọc hình ảnh dưới dạng bitmap hoặc sử dụng luồng tệp;
  • nhận dạng mã vạch của các loại khác nhau từ một hình ảnh;
  • đọc tọa độ mã vạch;
  • phát hiện và đọc nhiều mã vạch từ một hình ảnh duy nhất;
  • phát hiện và đọc mã vạch từ một khu vực cụ thể của hình ảnh.

Bên cạnh việc đọc mã vạch từ một hình ảnh trong C#, bạn có thể tìm hiểu thêm về Aspose.BarCode for .NET API bằng cách sử dụng tài liệu. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng liên hệ với chúng tôi trên diễn đàn hỗ trợ miễn phí của chúng tôi.

Xem thêm