Trên thế giới, mã vạch đã được đưa vào áp dụng đại trà từ hơn 30 năm nay trong các ngành khác nhau như: bán lẻ, quốc phòng, y tế, giao thông vận tải, thể thao và truy tìm nguồn gốc, … Để
Trang 1TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
BỘ MÔN ĐIỀU KHIỂN HỌC
BÁO CÁO BÀI TẬP LỚN
Trang 2MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU VỀ ĐÊ TÀI 1
1.1 Lý do chọn đề tài 1
1.2 Nhiệm vụ đề tài 1
1.3 Mục đích đề tài 1
1.4 Phương pháp nghiên cứu 2
CHƯƠNG 2: TỔNG QUAN VÀ CÁC VẤN ĐỀ LIÊN QUAN 3
2.1 Xử lý ảnh và các vấn đề cơ bản trong xử lý ảnh 3
2.2 Tổng quan về mã vạch 3
2.3 Các dạng mã vạch 4
2.4 Các loại mã vạch thông dụng 6
CHƯƠNG 3: 9
TỔNG QUAN VỀ NGÔN NGỮ Python-OpenCV VÀ PHẦN MỀM GIAO DIỆN GUI 9
3.1 Tổng quan ngôn ngữ Python 9
3.1.1 Python là gì ? 9
3.1.2 Đặc điểm của Python 10
3.2 Tổng quan về OpenCV 10
3.2.1 OpenCV là gì ? 10
3.2.2 Ứng dụng 11
3.3 Lập trình giao diện Python với PyQt5 và Qt Designer 11
3.3.1 Qt Designer là gì ? 11
3.3.2 PyQt5 là gì ? 12
CHƯƠNG 4: QUY TRÌNH THỰC HIỆN 13
4.1 Thiết kế giao diện GUI sử dụng phần mềm Qt Designer 13
4.2 Quá trình nhận dạng mã vạch 15
4.3 Một số hàm xử lý mã vạch 16
CHƯƠNG 5: KẾT QUẢ THỰC HIỆN 19
5.1 Kết quả nhận diện từ ảnh 19
5.2 Kết quả nhận diện từ video 20
CHƯƠNG 6: KẾT LUẬN 21
Trang 3CHƯƠNG 1: GIỚI THIỆU VỀ ĐÊ TÀI
1.1 Lý do chọn đề tài
Như chúng ta đã biết, mã vạch là một trong các công nghệ nhận dạng và thu thập dữ liệu tự động, có thể đưa vào áp dụng trong đa ngành công nghiệp Trên thế giới, mã vạch đã được đưa vào áp dụng đại trà từ hơn 30 năm nay trong các ngành khác nhau như: bán lẻ, quốc phòng, y tế, giao thông vận tải, thể thao và truy tìm nguồn gốc, … Để có thể ứng dụng những ưu việt của mã vạch vào trong thực tế thìmột thiết bị đọc mã vạch là máy đọc mã vạch đã ra đời và ngày càng trở lên phổ biến, nhưng giá thành của những máy đọc này thường rất cao và chỉ sử dụng cho mục đíc duy nhất là đọc mã vạch Trong điều kiện nền kinh tế đang phát triển ở Việt Nam hiện nay, việc tạo ra các sản phẩm có giá thành rẻ hơn để có thể sử dụng trong các lĩnh vực là một điều cần thiết
Hiện nay, công nghệ xử lý ảnh đã rất phổ biến trong công nghiệp, được ứng dụng vào trong thực tế sản xuất Và với những Camera thông dụng đủ tốt nhưng không quá đắt tiền nếu chúng ta xây dựng một phần mềm chương trình nhận dạng bằng Camera thì sẽ tiết kiệm được giá thành hơn khi mua máy đọc mã vạch Hơn nữa với Camera thì chúng ta có thể sử dụng trong các mục đích khác ngoài việc đọc mã vạch Đó là ưu điểm rất lớn và vượt trội của xử lý ảnh trong công nghiệp
Vì vậy, em muốn đi vào nghiên cứu và viết một chương trình nhận dạng mã
vạch ứng dụng công nghệ xử lý ảnh, và đã chọn đề tài: “Ứng dụng công nghệ xử
Trang 4Mục đích của đề tài nhằm xây dựng môt chương trình để đọc mã vạch từ Camera, từ đó có thể phát triển để ứng dụng vào các yêu cầu đọc mã vạch thực
tế như thư viện, nhà sách, siêu thị …
1.4 Phương pháp nghiên cứu
Dựa trên yêu cầu của đề tài em đã thu thập tài liệu về mã vạch và cách giải
mã mã vạch, tìm hiểu về các máy đọc mã vạch thực tế để ứng dụng vào việc thiết kế phần mềm đọc mã vạch
Sau khi nghiên cứu về mã vạch, em tìm hiểu về lý thuyết xử lý ảnh, chủ yếu
đi về các thuật toán tăng cường chất lượng ảnh để Camera nhận dạng tốt hơn
Và cuối cùng là việc viết chương tình nhận dạng mã vạch từ dữ liệu hình ảnh Camera thu về
Trang 5CHƯƠNG 2: TỔNG QUAN VÀ CÁC VẤN ĐỀ LIÊN QUAN
2.1 Xử lý ảnh và các vấn đề cơ bản trong xử lý ảnh
Con người thu nhận thông tin qua các giác quan, trong đó thị giác đóng vai trò quan trọng nhất Những năm trở lại đây với sự phát triển của phần cứng máy tính, xử lý ảnh và đồ họa đó phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộc sống Xử lý ảnh và đồ họa đóng một vai trò quan trọng trong tương tác người – máy
Quá trình xử lý ảnh được xem như là quá trình thao tác ảnh đầu vào nhằm cho ra kết quả mong muốn Kết quả đầu ra của một quá trình xử lý ảnh có thể
là một ảnh “tốt hơn” hoặc một kết luận
Sơ đồ tổng quát của một hệ xử lý ảnh:
2.2 Tổng quan về mã vạch
Mã vạch là sự thể hiện thông tin trong các dạng nhìn thấy trên các bề mặt màmáy móc có thể đọc được Nguyên thủy thì mã vạch lưu trữ dữ liệu theo bề
Trang 6rộng của các vạch được in song song cũng như của khoảng trống giữa chúng, nhưng ngày nay chúng còn được in theo các mẫu của các điểm, theo các vòng tròn đồng tâm hay chúng ẩn trong các hình ảnh Mã vạch có thể được đọc bởi các thiết bị quét quang học gọi là máy đọc mã vạch hay được quét từ hình ảnh bằng các phần mềm chuyên biệt.
Nội dung của mã vạch là thông tin về sản phẩm như: nước sản xuất, tên doanh nghiệp, lô, tiêu chuẩn chất lượng đăng ký, thông tin về kích thước sản phẩm, nơi kiểm tra …
2.3 Các dạng mã vạch
Các mã vạch tuyến tính
Loại Thuộc tính Độ rộng Sử dụngPlessey Liên tục 2 Catalog, các giá hàng
trong cửa hàng, hàng tồn kho
UPC Liên tục Nhiều Bán lẻ ở Mỹ
EAN-UCC Liên tục Nhiều Bán lẻ khắp thế giớiCodaBar Rời rạc 2 Thư viện, ngân hàng
máu, vé máy bayInterleaved 2 of 5 Liên tục 2 Bán buôn, thư viện ( ở
Na Uy)Code 39 Rời rạc 2 Đa dạng
Code 93 Liên tục 2 Đa dạng
Code 128 Liên tục Nhiều Đa dạng
Code 11 Rời rạc 2 Điện thoại
POSTNET Liên tục Cao/Thấp Bưu điện
Trang 7PostBar Rời rạc Nhiều Bưu điện
CPC Binary Rời rạc 2 Bưu điện
Telepen Liên tục 2 Thư viên
Mã vạch cụm
Loại Ghi chú
Codablock Mã vạch cụm 1D
Code 16K Dựa trên Code 128 1D
Code 49 Mã vạch cụm 1D từ Intermec Corp
PDF417 Mã vạch 2D phổ biến nhất Phạm vi công cộng.Micro PDF417
Mã vạch 2D
Loại Ghi chú
3-DI Phát triển bởi Lynn Ltd
ArrayTag Từ ArrayTech Systems
Trang 8DataGlyphs Từ Xerox PARC
Datamatrix Từ RVSI Acuity CiMatrix Hiện nay thuộc phạm vi
công cộng
Datastrip Code Từ Datastrip, Inc
QR Code Phạm vi công cộng
HueCode Từ Robot Design Associates Sử dụng thang màu xám
hoặc nhiều màu
2.4 Các loại mã vạch thông dụng
EAN
EAN là bước phát triển kế tiếp của UPC Về cách mã hóa nó cũng giống hệt như UPC nhưng về dung lượng nó gồm 13 ký số trong đó 2 hoặc 3 ký số đầu tiên là ký số “mốc”, dùng để biểu thị cho nước xuất xứ Các ký số này chính là “mã quốc gia” của sản phẩm được cấp bởi Tổ chức EAN quốc tế (EAN International Organization)
EAN này được gọi là EAN-13 để phân biệt với phiên bản EAN-8 sau này gồm 8 ký số
Theo ký hiệu EAN-13 như hình vẽ phía trên, có thể phân chia như sau:
* 893 – Mã quốc gia Việt Nam
* 123456789 – 9 ký số này được phân chia làm 2 cụm: cụm mã nhà sản xuất có thể 4, 5 hoặc 6 ký số tùy theo được cấp, cụm còn lại là mã mặt hàng
* 7 – Mã kiểm tra tính chính xác của tòan bộ số EAN
Trang 9 Code 39
Code 39 được phát triển sau UPC và EAN là ký hiệu chữ và số thông dụng nhất Nó không có chiều dài cố định như UPC và EAN do đó có thể lưu trữ nhiều lượng thông tin hơn bên trong nó Do tính linh họat như vậy, Code 39 được ưa chuộng rộng rãi trong bán lẻ và sản xuất Bộ ký tự này bao gồm tất cả các chữ hoa, các ký số từ 0 đến 9 và 7 ký tự đặc biệt khác
Nhiều tổ chức đã chọn một dạng thức Code 39 để làm chuẩn công nghiệp của mình trong đó đáng chú ý là Bộ Quốc Phòng Mỹ đã lấy Code 39 làm bộ
mã gọi là LOGMARS
Mã QR Code
Trang 10Loại mã 2D được sử dụng nhiều nhất hiện nay là QR Code (Quick
Response) QR Code ứng dụng phổ biến trong các hoạt động tiếp thị quảng cáo, thương hiệu; giới thiệu sản phẩm/dịch vụ; các chương trình khuyến mãi; tra cứu thông tin; thậm chí dùng để quét mã thanh toán, giao dịch
chuyển tiền tại một số ngân hàng
Mã QR Code có nhiều ưu điểm như: kích thước đa dạng, khả năng đọc dữ liệu nhanh, hỗ trợ mã hóa 4 chế độ khác nhau của dữ liệu (Số, chữ, byte, Kanji); ít bị lỗi trong khi dùng và đặc biệt loại mã vạch này miễn phí sử dụng
Mã ma trận – Data Matrix
Mã Data Matrix được ứng dụng trong việc đặt tên các hàng hóa và văn bản Tương tự như QR Code, loại mã vạch này hầu như rất ít bị lỗi trong quátrính sử dụng, khả năng đọc nhanh Mã AZTEC
Mã vạch PDF417
Trang 11PDF417 là một loại mã vạch 2 chiều 2D, chúng được dùng trong các ứng dụng yêu cầu lưu trữ lượng dữ liệu khổng lồ, có thể kể đến như: Ảnh kỹ thuật số, dấu vân tay, số và đồ họa, chữ ký,
Mã vạch PDF417 là một loại mã vạch thông dụng ở nước ngoài và được sử dụng miễn phí
Trang 121980 và được phát hành lần đầu tiên vào tháng 2 năm 1991 Đến nay thì cộng đồng người sử dụng ngôn ngữ này rất đông, nếu so sánh từ bảng xếp hạng các ngôn ngữ năm 2018 thì Python đã leo lên vị trí số 1 trên bảng xếp hạng những ngôn ngữ lập trình phổ biến.
3.1.2 Đặc điểm của Python
Trang 13 Xử lý lỗi dựa theo ngoại lệ.
Kiểu dữ liệu động ở mức rất cao
Các thư viện chuẩn và các mô-đun ngoài bao quát hầu như mọi việc
Phần mở rộng và mô-đun dễ dàng viết trong C, C++
Có thể nhúng trong ứng dụng như một giao diện kịch bản (scripting interface)
Python mạnh mẽ và thực hiện rất nhanh
3.2 Tổng quan về OpenCV
3.2.1 OpenCV là gì ?
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàngđầu cho xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết bằng C/C++, vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến thời gian thực Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần
Trang 143.3 Lập trình giao diện Python với PyQt5 và Qt Designer
3.3.1 Qt Designer là gì ?
Qt Designer là một công cụ để nhanh chóng xây dựng giao diện người dùng
đồ họa với các widget từ khung Qt GUI Nó cung cấp cho bạn một giao diện kéo và thả đơn giản để bố trí các thành phần như nút, trường văn bản, hộp tổ hợp và hơn thế nữa Đây là ảnh chụp màn hình của Qt Designer trên Windows:
3.3.2 PyQt5 là gì ?
Qt là một Application framework đa nền tảng viết trên ngôn ngữ C++ , được dùng để phát triển các ứng dụng trên desktop, hệ thống nhúng và mobile Hỗ trợ cho các platform bao gồm : Linux, OS X, Windows, VxWorks, QNX, Android, iOS, BlackBerry, Sailfish OS và một số
platform khác PyQt là Python interface của Qt, kết hợp của ngôn ngữ lậptrình Python và thư viện Qt, là một thư viện bao gồm các thành phần giao
diện điều khiển (widgets , graphical control elements).
PyQt API bao gồm các module bao gồm số lượng lớn với
các classes và functions hỗ trợ cho việc thiết kế ra các giao diện giao tiếp
với người dùng của các phần mềm chức năng Hỗ trợ với Python 2.x và 3.x
Các class của PyQt5 được chia thành các module, bao gồm:
+ QtCore : là module bao gồm phần lõi không thuộc chức năng GUI, ví
dụ dùng để làm việc với thời gian, file và thư mục, các loại dữ liệu,
Trang 15streams, URLs, mime type, threads hoặc processes.
+ QtGui : bao gồm các class dùng cho việc lập trình giao diện
(windowing system integration), event handling, 2D graphics, basic imaging, fonts và text
+ QtWidgets : bao gồm các class cho widget, ví dụ : button, hộp thoại, …được sử dụng để tạo nên giao diện người dùng cơ bản nhất
+ QtMultimedia : thư viện cho việc sử dụng âm thanh, hình ảnh, camera,
…
+ QtBluetooth : bao gồm các class giúp tìm kiếm và kết nối với các thiết
bị có giao tiếp với phần mềm
+ QtNetwork : bao gồm các class dùng cho việc lập trình mạng, hỗ trợ lập trình TCP/IP và UDP client , server hỗ trợ việc lập trình mạng
+ QtPositioning : bao gồm các class giúp việc hỗ trợ xác định vị
+ Enginio : module giúp các client truy cập các Cloud Services của Qt.+ QtWebSockets : cung cấp các công cụ cho WebSocket protocol
+ QtWebKit : cung cấp các class dùng cho làm việc với các trình duyệt Web , dựa trên thư viện WebKit2
+ QtWebKitWidgets : các widget cho WebKit
+ QtXml : các class dùng cho làm việc với XML file
+ QtSvg : dùng cho hiển thị các thành phần của SVG file
+ QtSql : cung cấp các class dùng cho việc làm việc với dữ liệu
+ QtTest : cung cấp các công cụ cho phép test các đơn vị của ứng dụng với PyQt5
Trang 16CHƯƠNG 4: QUY TRÌNH THỰC HIỆN
4.1 Thiết kế giao diện GUI sử dụng phần mềm Qt Designer
GUI (Graphical User interface) hay giao diện đồ họa người dùng Đây là thuộc ngữ chung để gọi những chương trình với giao diện các cửa sổ
Sau khi tính toán và xây dựng các tính năng của GUI thì ta được một giaodiện GUI tương tác với người dùng sau đây :
Trang 17 Bằng cách kéo thả các đối tượng như Button, text box, group box, check box… ta được giao diện như trên.
Sau khi tạo xong được giao diện, phần mềm sẽ xuất cho ta một file
“design.ui”.Nhiệm vụ của ta bây giờ là sẽ chuyển đổi file có đuôi “.ui” sang file có đuôi “.py” để nhúng code xử lý quét mã vạch Sau đây là câu lệnh chuyển đổi trên terminal:
Pyuic5-x design.ui -o design.py
FILE_NAME: Là tên file sẽ code
pyuic5 sẽ được cài đặt với PyQt5 công cụ chuyển file giao diện
*.ui sang *.py render ra giao diện
4.2 Quá trình nhận dạng mã vạch
Trong quá trình nghiên cứu và phân tích các ưu nhược điểm của các loại thuật toán đọc mã vạch khác nhau, ta thấy thuật toán DBR có các chức năng đọc mã vạch trong các ướng dụng đa nền tảng.Các định dạng mã vạch được hỗ trợ bao gồm QR Code, Linear(1D), PDF 417, DataMatrix …
Các ưu điểm của thuật toán đọc mã vạch DBR:
Hiệu suất đọc mã vạch cao
Sự nhanh nhẹn, linh hoạt khi đọc các mã vạch kém chất lượng
Tích hợp xử lý hình ảnh đa năng
Trang 18Lưu đồ thuật toán của thuật toán đọc mã vạch DBR:
Trang 19settings.intermediate_result_types = EnumIntermediateResultType.IRT_ORIGINAL_IMAGE
#Chỉ định lưu kết quả trong bộ nhớ
settings.intermediate_result_saving_mode = EnumIntermediateResultSavingMode.IRSM_MEMORY #Cập nhật các cài đặt hiện tại, nếu có lỗi thì báo lỗi
frame = np.ndarray((height, width, channel), np.uint8, buffer, 0, (stride, channel, 1))
#trả về các kết quả hình ảnh và thời gian xử lý
return frame, [results, (end - start) * 1000]
Hàm quét mã vạch từ video đầu vào
def process_barcode_frame(license, frameQueue, resultQueue, template=None, types=0, types2=0): # Tạo một đối tượng nhận dạng mã QR
Trang 20start, end = 0, 0
try:
#Lấy thông số khung hình
frameHeight, frameWidth, channel = frame.shape[:3]
start = time.time()
# results = reader.decode_buffer(frame)
#Giải mã mã vạch từ đầu vào video và trả về các kết quả dưới dạng văn bản Results
results = reader.decode_buffer_manually(np.array(frame).tobytes(), frameWidth, frameHeight, frame.strides[0], EnumImagePixelFormat.IPF_RGB_888)
end = time.time()
except BarcodeReaderError as error:
print(error)
try:
#trả về kết quả và thời gian xử lý
resultQueue.put([results, (end - start) * 1000], False, 10)
Trang 21CHƯƠNG 5: KẾT QUẢ THỰC HIỆN
5.1 Kết quả nhận diện từ ảnh
Trang 225.2 Kết quả nhận diện từ video
Trang 23CHƯƠNG 6: KẾT LUẬN
- Bài tập lớn “ỨNG DỤNG CÔNG NGHỆ XỬ LÝ ẢNH ĐỂ NHẬN DẠNG
MÃ VẠCH” của em đã xử lí nhận dạng và giải mã mã vạch từ hình ảnh hoặc
video đầu vào
- Đối với thu nhận ảnh từ camera thì độ chính xác còn chưa cao do bị tác độngbởi các yếu tố môi trường như ánh sáng , bụi bẩn hay chất lượng của camera…
- Để giải quyết các khó khăn của đề tài, người thực hiện xin đề xuất 1 số ý kiếnsau đây: