Phương pháp phát hiện lỗi ký tự mã vạch dựa trên công nghệ Tesseract-OCR
Chuyển động ICT - Ngày đăng : 16:00, 04/01/2022
Trước hết, phương pháp này sử dụng phép chiếu ngang để phân đoạn mã vạch, và sau đó nó sử dụng phương pháp Tesseract-OCR để nhận dạng các ký tự trong mã vạch, cuối cùng, nó kết hợp thuật toán Levenshtein Distance để phát hiện các lỗi ký tự. Trong bài báo này đã sử dụng 1.000 hình ảnh mã vạch để thí nghiệm, và kết quả thí nghiệm cho thấy độ chính xác của kết quả phát hiện có thể đạt tới 94,3%, điều này chứng tỏ tính khả thi của phương pháp Tesseract-OCR.
Giới thiệu
Dấu hiệu nhận biết hàng hóa, mã vạch có ý nghĩa nghiên cứu quan trọng trong việc nhận dạng tự động thông tin hàng hóa, phân loại tự động và bán hàng thông minh, v.v.. [1]. Tuy nhiên, do kiểu chữ kém, thiết bị máy móc có độ chính xác thấp và công nghệ in chưa hoàn hảo nên có rất nhiều câu hỏi như bay mực, in thiếu, in sai, đốm đen và không đúng quy cách đăng ký trong quá trình in mã vạch. Các phương pháp phân loại những mã vạch lỗi theo cách thủ công truyền thống đòi hỏi nhiều nhân lực, không chỉ kém hiệu quả mà còn tồn tại các yếu tố chủ quan, ảnh hưởng lớn đến độ chính xác của việc phát hiện.
Trong những năm gần đây, các nhà nghiên cứu đã bắt đầu áp dụng thị giác máy tính để phát hiện khiếm khuyết của các bản in. Các phương pháp phổ biến bao gồm đối sánh mẫu, các hình ảnh khác nhau và phát hiện phân lớp [2]. Phương pháp đối sánh mẫu được thực hiện bằng cách xác định trước tiên một loại thước đo độ tương tự vùng, sau đó so sánh tất cả các vùng của ảnh phát hiện với ảnh mẫu và ảnh phát hiện đủ tiêu chuẩn tùy thuộc vào việc đáp ứng thước đo. Phương pháp chênh lệch hình ảnh là việc áp dụng phép trừ giữa các pixel theo hàng của hai hình ảnh và thông tin chênh lệch của chúng có thể được biết từ hình ảnh chênh lệch sau khi đã trừ. Phương pháp phân tầng được đề xuất để cải thiện tốc độ phát hiện, và tốc độ phát hiện có thể được cải thiện bằng phương pháp lấy mẫu [3-4].
M. Xu and W. Tang [5] đề xuất một phương pháp đối sánh mẫu phân vùng để phát hiện khiếm khuyết, nhưng tốc độ của phương pháp không thể đáp ứng yêu cầu về thời gian. Y. ou, G. baoping, H. tao and G. xuan [6] kết nối phương pháp đối sánh sự khác biệt giữa các hình ảnh và phương pháp phân tích cục bộ, sau đó phát hiện khiếm khuyết bên trong nó. Sun, J.Zhao, R.Wang [7] đã đề xuất một thuật toán tìm kiếm mục tiêu nhanh dựa trên mã hóa thời gian chạy để xác định vị trí các khiếm khuyết. M. Song, X. Zhou [8] đã đề xuất một thuật toán đối sánh dựa trên mẫu hình dạng cho phương pháp đối sánh mẫu truyền thống, mà không thể đáp ứng yêu cầu về thời gian thực trong kiểm tra khiếm khuyết với số lượng lớn, không rõ ràng và không chắc chắn.
Wen Wei et al. [9] đề xuất một hệ chuyên gia mờ dựa trên phương pháp phân tích khiếm khuyết trong bản in. Yali and Yeli Li [10] đã thực hiện một thuật toán phát hiện khiếm khuyết mã vạch nghiêng và ứng trên quét mã vạch 1 chiều căn cứ vào vị trí và góc nghiêng mã vạch.
Các nghiên cứu của các phương pháp này như đối sánh mẫu, phát hiện phân lớp, sự khác biệt trong hình ảnh yêu cầu các mẫu và các mẫu phải được cố định, và mọi mã vạch đều có mẫu khác với các mẫu còn lại. Khi sử dụng các phương pháp này, mọi mã vạch phải tạo mẫu, đây là một dự án tiêu tốn rất nhiều thời gian.
Vì thế, bài báo giới thiệu một phương pháp phát hiện khiếm khuyết dựa trên phương pháp Tesseract-OCR [11]. Thứ nhất, phương pháp này sử dụng phép chiếu ngang để phân đoạn mã vạch trong vùng ký tự. Sau đó, sử dụng phương pháp Tesseract-OCR để nhận dạng các ký tự. Cuối cùng, kết hợp thuật toán Khoảng cách Levenshtein [12] để đạt được nhiều loại phát hiện khiếm khuyết để xác định xem mã vạch có một vài khiếm khuyết hay không.
Phát hiện khiếm khuyết dựa trên kí tự mã vạch
Vì mã vạch khác với các bản in thông thường, một mã vạch hoàn chỉnh có thể được chia thành hai vùng, vùng ký tự và vùng nhận dạng đồ họa, là vùng duy nhất trong mã vạch. Hình ảnh về một mẫu mã vạch được hiển thị trong Hình 1. Đối với cùng một mã vạch được in bởi cùng một ngày và cùng một máy, dòng thứ tự và số nhận dạng đồ họa là khác nhau. Đối với dòng ký tự thứ 4, chỉ có 3 ký tự sau khác nhau trong 1.000 mẫu mã vạch, đồng thời 3 ký tự này là ba chữ số liền nhau. Bài báo này đề xuất một phương pháp phát hiện lỗi ký tự mã vạch dựa trên công nghệ Tesseract-OCR, chỉ cần thay thế một mẫu cho mỗi 1.000 và nó cải thiện đáng kể hiệu quả phát hiện.
Phương pháp phát hiện lỗi ký tự mã vạch dựa trên Tesseract-OCR chủ yếu bao gồm năm bước.
Thứ nhất, hình ảnh đầu vào được xử lý trước bằng cách nhị phân hóa để cải thiện độ chính xác của việc trích xuất đối tượng theo biên.
Thứ hai, hình ảnh nhị phân được phân đoạn theo chiều ngang bằng phương pháp chiếu ngang, do khoảng cách giữa mỗi dòng sau khi chiếu, hình ảnh mã vạch có thể được phân đoạn bằng cách sử dụng khoảng cách.
Thứ ba, phương pháp nhận dạng ký tự Tesseract-OCR được sử dụng để nhận dạng các ký tự trong ảnh.
Thứ tư, chúng ta có thể tính toán sự tương đồng giữa các ký tự của mã vạch mẫu và mã vạch được phát hiện bằng phương pháp của thuật toán Khoảng cách Levenshtein, nếu kết quả của phép tính càng lớn thì sự khác biệt giữa chúng là càng lớn.
Cuối cùng, chúng tôi xác định xem ký tự mã vạch có bị lỗi hay không bằng cách phân tích lỗi dựa trên kết quả tính toán và đưa ra kết quả phán đoán. Quy trình cụ thể của việc loại bỏ lỗi ký tự mã vạch được thể hiện trong Hình 2.
Tiền xử lý hình ảnh mã vạch
Việc tiền xử lý nhị phân của hình ảnh mã vạch trong quá trình phát hiện là để làm nổi bật các đặc điểm của các ký tự mã vạch. Trong quá trình nhị phân, ngưỡng được chọn bằng phương pháp phương sai giữa các lớp lớn nhất (Otsu). Kết quả của quá trình tiền xử lý hình ảnh mã vạch được thể hiện trong Hình 3.
Phân đoạn theo chiều ngang mã vạch
Bước quan trọng trong việc phát hiện các khiếm khuyết của các ký tự trong mã vạch là xác định các ký tự trong mã vạch. Để tránh mỗi lần kiểm tra làm thay đổi mẫu và định vị chính xác vị trí của khiếm khuyết, đồng thời nâng cao độ chính xác của việc nhận dạng, phương pháp chiếu ngang được sử dụng để phân đoạn mã vạch [10].
Phương pháp chiếu ngang dựa trên hình ảnh của đơn vị hành vi, phương pháp quét hình ảnh và thống kê sự phân bố pixel của các đặc điểm và lấy mã vạch Hình 1 làm ví dụ. Có thể thấy rằng có những khoảng trống rõ ràng trong hình ảnh giữa mỗi dòng sau khi hình ảnh quét cho một số vùng pixel đen liên tiếp được tạo ra. Do đó, việc sử dụng phương pháp chiếu ngang có thể hoạt động tốt trên phân đoạn mã vạch. Hình ảnh mã vạch và hình ảnh chiếu ngang được hiển thị trong Hình 4.
Sau khi hình ảnh được chiếu theo chiều ngang, có những vùng trống lớn giữa mỗi dòng, sử dụng những vùng này có thể phân đoạn hình ảnh mã vạch một cách hiệu quả để có được hình ảnh cho phần nghiên cứu tiếp theo. Hình ảnh kết quả được phân đoạn được hiển thị trong Hình 5.
Nhận dạng ký tự mã vạch dựa trên Tesseract-OCR
Để phát hiện các khiếm khuyết của các ký tự trong mã vạch một cách chính xác hơn, bài báo này chọn phương pháp Tesseract-OCR để xác định các ký tự trong ảnh mã vạch.
Các bước chủ yếu của phương pháp này được chia thành 2 bước: đào tạo thư viện phông chữ và nhận dạng ký tự.
1. Đào tạo Thư viện Phông chữ: Để cải thiện độ chính xác của nhận dạng ký tự trong mã vạch, công cụ nhận dạng Tesseract-OCR được đào tạo trước khi nhận dạng các ký tự. Các bước cụ thể của quá trình đào tạo như sau.
Đầu tiên, mười hình ảnh được chọn ngẫu nhiên từ thư viện mã vạch làm mẫu đào tạo và định dạng của hình ảnh được chuyển đổi thành định dạng “tif ”.
Thứ hai, nhập lệnh trên dòng lệnh “CMD” để tạo file “box”. File “box” và hình ảnh “tif” được lưu trữ trong cùng một thư mục tệp.
Thứ ba, sửa đổi thủ công file “box” bằng công cụ jTessBoxEditor, như thể hiện trong Hình 6, (a) đại diện cho file “box” trước khi sửa đổi và (b) đại diện cho file “box” sau khi sửa đổi.
Thứ tư, nhập (tesseract picturename.jpg picture-name nobatch box.train và lệnh unicharset_extractor Picture-name.box) trên dòng lệnh “CMD” một lần nữa để tạo tệp huấn luyện tương ứng “tr” và tệp dữ liệu unicharset. Mười hình ảnh được xử lý lần lượt từ bước thứ hai đến bước thứ tư.
Tiếp theo, tạo các tệp thuộc tính phông chữ có chứa văn bản in đậm, in nghiêng, v.v.. Cuối cùng, nhập (shapeclustering - F font_properties.txt -U unicharset Picture-name. tr, mftraining -F font property.txt -U unicharset -O Picturename. tr và cntraining picture-name.tr) [13] trên dòng lệnh “CMD” và kết hợp các tệp huấn luyện để hoàn thành quá trình đào tạo thư viện phông chữ Tessearct.
Phần được khoanh trong Hình 6 cần được sửa đổi. (a) là file box trước khi sửa đổi, có một số ký tự được nhận dạng và hình ảnh không khớp với ký tự, chẳng hạn như W được nhận dạng là U, A được nhận dạng là 9 hoặc R, v.v.. (b) là hộp tập tin sau khi sửa đổi, sửa đổi các ký tự trong “Char” không tương ứng với hình ảnh và thay đổi thành các ký tự giống như hình ảnh, nghĩa là, U được sửa đổi thành W, và 9 được sửa đổi thành A, v.v..
2. Nhận dạng ký tự: Đưa thư viện phông chữ Tesseract đã được đào tạo vào thư viện phông chữ Tesseract-OCR đã cài đặt và nhập mã thực thi sau (được hiển thị trong Hình 7) để đạt được nhận dạng ký tự mã vạch trên nền tảng visual studio 2013.
Kết quả nhận dạng đầu ra được so sánh kết quả với thư viện phông chữ được đào tạo trước đó. Kết quả nhận dạng được thể hiện trong Hình 8. (b) là kết quả của thư viện phông chữ không có thư viện phông chữ Tessearact được đào tạo. Và (c) là kết quả của thư viện phông chữ với thư viện phông chữ Tessearact đã được đào tạo. Có thể thấy từ hai biểu đồ này, các ký tự trong (b) khác biệt đáng kể so với các ký tự trong bản gốc (a), và các ký tự trong (c) về cơ bản là phù hợp với các ký tự trong (a). Hiệu quả của thư viện font Tesseract đào tạo được thể hiện đầy đủ.
Phát hiện sai sót ký tự mã vạch dựa trên khoảng cách Levenshtein
Lấy hai hình ảnh làm hình ảnh thử nghiệm, như trong Hình 9. Một là hình ảnh mã vạch tiêu chuẩn và một là hình ảnh mã vạch in bị lỗi. Sau khi nhận dạng các ký tự trong mã vạch, chúng tôi sử dụng thuật toán tính toán độ tương tự của Levenshtein Khoảng cách để tính toán độ giống nhau giữa các ký tự của mã nhận dạng hình ảnh của mã vạch mẫu và mã vạch được phát hiện. Sau đó xuất ra kết quả phân tích khiếm khuyết (thể hiện trong Hình 10). Phương pháp này phát hiện hiệu quả các lỗi xảy ra trong các ký tự mã vạch.
Phân tích các kết quả thực nghiệm
Trong bài báo này, chúng tôi đã thu thập 1.000 hình ảnh mã vạch được liên kết được đánh số từ các nhà sản xuất mã vạch, trong đó có 763 hình ảnh hoàn hảo và 237 hình ảnh bị lỗi. Chúng tôi phân loại ngẫu nhiên những hình ảnh này thành năm nhóm, mỗi nhóm chứa những hình ảnh bị lỗi và hoàn hảo. Phân nhóm cụ thể của thí nghiệm được trình bày trong Bảng 1.
Bài viết này sử dụng Visual Studio 2013 làm nền tảng phát triển, sử dụng C ++ làm ngôn ngữ phát triển. Để đảm bảo hiệu quả của thí nghiệm, bài báo này đã chọn tỷ lệ chính xác, tỷ lệ miss và tỷ lệ false làm tiêu chuẩn đánh giá cho các thí nghiệm.
“miss” đề cập đến những hình ảnh bị lỗi được phát hiện là hình ảnh đủ tiêu chuẩn. “false target” đề cập đến các hình ảnh đủ điều kiện được phát hiện là hình ảnh bị lỗi. Qua năm nhóm thí nghiệm so sánh hình ảnh, kết quả thí nghiệm được thể hiện trong Bảng 2.
Qua Bảng 2 có thể thấy, số lượng ảnh đạt tiêu chuẩn trong bộ mẫu có 763 ảnh, số ảnh bị lỗi là 237 ảnh, kết quả dò tìm là 706 ảnh đạt tiêu chuẩn và 294 ảnh bị lỗi. Loại khiếm khuyết của mã vạch được thể hiện trong Hình 11, (a) là hình ảnh mã vạch được in sai, (b) là hình ảnh mã vạch bị in có lỗi và (c) là hình ảnh mã vạch đăng ký không đúng.
Trong 5 nhóm, 943 mã vạch đã được phát hiện chính xác, bao gồm 241 cho nhóm đầu tiên, 105 cho nhóm thứ hai, 241 cho nhóm thứ ba, 215 cho nhóm thứ tư và 141 mã cho nhóm thứ năm. Trong năm nhóm, số lượng hình ảnh bị bỏ sót là 0, và tổng số lượng sai là 57, tương ứng với 5 nhóm là 33, 1, 0, 14 và 9. Phân tích bằng cách sử dụng ở trên tiêu chí đánh giá, kết quả được thể hiện trong Hình 12.
Thời gian phát hiện cũng là một thông số rất quan trọng để phát hiện các lỗi mã vạch. Trong bài báo này, thời gian để phát hiện một hình ảnh được biểu thị bằng tham số “NS”, và thời gian phát hiện của 300 thí nghiệm đầu tiên được thể hiện trong Hình 13. Đường cong biểu thị thời gian dành cho mỗi thí nghiệm và đường thẳng cho biết thời gian trung bình cho 300 thí nghiệm, là khoảng 0,624s.
Kết quả thực nghiệm trên cho thấy độ chính xác của phương pháp này là 94,3%, tỷ lệ sai là 0% và tỷ lệ sai khoảng 5,7%. Ngoài ra, thời gian dò tìm trung bình của mỗi hình ảnh mã vạch chỉ là 0,624s, điều này chứng tỏ rằng phương pháp này không chỉ nhanh chóng mà còn có độ chính xác cao, vượt trội so với phương pháp truyền thống.
Kết luận
Trong bài báo này, một phương pháp dựa trên phát hiện lỗi ký tự Tesseract-OCR được đề xuất để giải quyết vấn đề tốn thời gian và công sức theo cách phát hiện lỗi ký tự mã vạch truyền thống.
Bằng cách sử dụng các khoảng trống giữa mỗi dòng trong mã vạch, thuật toán chiếu ngang được sử dụng để phân đoạn mã vạch. Sau đó, Tesseract-OCR được sử dụng để xác định các ký tự trong hình ảnh được phân đoạn. Cuối cùng, thuật toán Khoảng cách Levenshtein được sử dụng để phát hiện các khiếm khuyết của ký tự.
Kết quả thực nghiệm cho thấy độ chính xác của phương pháp là 94,3%. Phương pháp này có độ chính xác nhận dạng cao và tốc độ nhanh, điều này chứng minh tính khả thi của việc phát hiện lỗi ký tự mã vạch dựa trên Tesseract-OCR. Tuy nhiên, bộ mẫu được sử dụng trong bài báo này bị giới hạn về số lượng ảnh mẫu được đào tạo bởi thư viện ký tự Tesseract-OCR là nhỏ. Do đó, những thay đổi trong thư viện ký tự khá hạn chế và độ chính xác của việc phát hiện lỗi có thể bị ảnh hưởng bởi các ký tự mã vạch khác, vì vậy việc mở rộng số lượng mẫu mã vạch là điểm cần nghiên cứu tiếp theo của chúng tôi./.
Tài liệu tham khảo:
1. Belussi, and N.S.T.Hirata, “Fast Component-Based QR Code Detection in Arbitrarily Acquired Images”, Journal of Mathematical Imaging and Vision; Vol.45, No 3, pp. 277-292, 2013.
2. Ohbuchi, and L.A.Hock, “Barcode Readers Using the Camera Device in Mobile Phones”, Proc. of International Conference on Cyberworlds; IEEE, pp. 260-265, 2004.
3. Yong and X.L.Wang , “QR Code Recognition Method Based on Correlation Match”, Chinese Journal of Scientific Instrument ; Vol. 32, No 3, pp. 571-576, 2013.
4. Fan, F.Jiang, Z.W.Liu, “Recognition of PDF417 Barcode Based on Captured Images”, Transactions of Beijing Institute of Technology, Vol. 28, No 12, pp. 1088-1092, 2008.
5. M. Xu and W. Tang, “The application of line-labeling algorithm to on-line defect detection system for printed-matter,” International Congress on Image and Signal Processing, pp. 310-313, 2011, doi: 10.1109/CISP.2011.6100020.
6. Y. ou, G. baoping, H. tao and G. xuan, “A Real-Time Vision System for Defect Detection in Printed Matter and Its Key Technologies,” 2007 2nd IEEE Conference on Industrial Electronics and Applications, pp. 2157-2161, 2007, doi: 10.1109/ICIEA.2007.4318792.
7. Sun, J.Zhao, R.Wang et al., “QR Code Recognition Based on Sparse Representation”, Journal of Computer Applications, Vol. 33, No 1, pp. 179-181, 2013.
8. M. Song, X. Zhou, Y. Cai and X. Mou, “Algorithm for Cheese Yarn Defects Detecting Based on Multi-Directional Matching Filter,” 2018 IEEE 3rd International Conference on Image, Vision and Computing (ICIVC), pp. 696-700, 2018, doi: 10.1109/ICIVC.2018.8492901.
9. Wen W, Sun X, Zhang L, “Printing defect analysis method based on fuzzy expert system”, Journal of Computer Applications, vol 35, pp. 232-265, 2014.
10. Yali and Yeli Li, et al, “A Fast Algorithm Detection for Barcode Inclination Defect”, Applied Mechanics and Materials, Vols. 644-650, pp. 1172-1175, 2014
11. Smith R, “An Overview of the Tesseract OCR Engine”, Ninth International Conference on Document Analysis and Recognition (ICDAR 2007), Vol 2, pp. 629-633, 2007. Doi: 10.1109/ ICDAR.2007.4376991
12. Levenshtein, Vladimir Iosifovich, “Binary codes capable of correcting deletions, insertions and reversals”, Soviet Physics Doklady, Vol 10, No. 8, pp. 707-710 , 1966.
13. Pradhan, Nikash and Tyagi, Dr and Nagpal, Ms, “ BARCODE RECOGNITION TECHNIQUES: REVIEW & APPLICATION”, International Journal of Innovative Research in Computer Science & Technology, Vol 9, 2021, doi: 10.21276/ijircst.2021.9.3.6
(Bài đăng ấn phẩm in Tạp chí TT&TT số 12 tháng 12/2021)