1. Tổng quan mã vạch và mã QR code Mã Barcode:mã hóa, biểu diễn dữ liệu bằng các vạch đen và vạch trắng có độ rộng khác nhau tùy theo từng bảng mã Một số chuẩn phổ biến: UPC, Code 39, Code 128, EAN-8, EAN-13...
Ở trên là mã vạch theo chuẩn UPC-A với các đặc trưng
sau:
Mã QR code (Quick Response Code): một dạng mã vạch hai chiều, có thể lưu trữ nhiều loại ký tự khác nhau (số, ký tự, ký tự trong bảng mã Kanji của tiếng Nhật...). Các bạn có thể xem đặc tả chi tiết của chuẩn mã QR code phổ biến nhất là chuẩn ISO18004. Mã QR code có nhiều ưu điểm vượt trội so với mã Barcode như khả năng lưu trữ được lượng dữ liệu lớn,
khả năng tự sửa lỗi...
Dưới đây là một mã QR code mẫu và định dạng chuẩn cho một mã QR code
Nội dung: LAP TRINH XU LY ANH TREN NEN NHUNG Contact: 0985905253 (Mr Thuan)
Format định dạng cho mã QR code với các phần thông tin quan trọng để dò tìm, nhận dạng, giải mã QR code. Ở đây có một số phần thông tin quan trọng:
Position Detection Patterns: giúp nhận diện vùng chứa mã QR code
Format Information & Version Information: nhận diện phiên bản và format chuẩn để giải mã
Timing Patterns: canh khung để
tách các vùng dữ liệu và mã sửa lỗi
Alignment Patterns: giúp căn chỉnh, hiệu chỉnh mã QR code trong các trường hợp bị xoay, méo...
Data and Error Correction Codewords: chứa dữ liệu và các mã sửa lỗi
2. Giới thiệu thư viện Zbar Để có thể giải mã Barcode và QR code chúng ta có thể sử dụng các thư viện mã nguồn mở, trong đó Zbar là một thư viện đa nền tảng, khá gọn nhẹ và cho kết quả nhận dạng tốt. Các bạn có thể tham khảo chi tiết tạihttp://zbar.sourceforge.net/ Thư viện được xây dựng trên mã nguồn C/C++ nên dễ dàng porting lên trên các nền tảng khác nhau bao gồm cả iOS, Android và Linux. Dưới đây là mô hình hệ thống của Zbar
Thư viện Zbar có thể nhận dữ liệu trực tiếp từ Camera hoặc từ file ảnh, sau đó sẽ được đưa qua bộ giải mã (decoder) để xử lý và nhận
dạng. 3. Cài đặt thư viện Zbar Đầu tiên, chúng ta cần download mã nguồn của thư viện Zbar tại địa chịhttp://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10.tar.bz2/download (phiên bản hiện tại là
0.10) Tiếp theo, chúng ta sẽ giải nén file mã nguồn, chuyển đường dẫn tới thư mục chứa mã nguồn và tiến hành biên dịch thư viện này trên máy Desktop và trên KIT Bước 1: Biên dịch trên máy Desktop
./configure --without-qt
--without-gtk --without-python --without-imagemagick make sudo make install
Bước 2: Biên dịch trên KIT
./configure --without-qt
--without-gtk --without-python --without-imagemagick CC=arm-linux-gcc
--host=arm-linux --prefix=/opt/zbar.arm --with-x=no make sudo make install
Sau khi biên dịch, copy các file trong thư mục /opt/zbar.arm/include xuống thư mục /usr/include và /opt/zbar.arm/lib xuống thư mục /usr/lib ở trên KIT. 4. Lập trình đọc mã Barcode và QR code sử dụng thư viện Zbar Dưới đây là mã nguồn tham khảo để sử dụng thư viện zbar giải mã mã vạch, QR code từ một ảnh đầu vào. Các bạn có thể phát triển lên thành nhận dạng
realtime với đầu vào là Video từ USB Camera bằng cách kết hợp thêm thư viện OpenCV để giao tiếp và lấy các frame từ USB Camera. Bước 1: Cấu hình để có thể sử dụng thư viện Zbar Thêm các dòng sau vào file .pro của project. Việc cấu hình này cho phép chúng ta dễ dàng chuyển đổi chương trình giữa nền tảng X86 trên Desktop và nền tảng ARM trên KIT bằng cách
thay đổi thông số CONFIG
CONFIG+=build_arm
#KhicanbiendichchoX86LINUXDESKTOP
build_x86{
INCLUDEPATH+=/usr/local/include/opencv
LIBS+=/usr/local/lib/*.so
}
#KhicanbiendichdechaytrenKIT
build_arm{
INCLUDEPATH+=/opt/opencv.arm/include/opencv
INCLUDEPATH+=/opt/zbar.arm/include
LIBS+=/opt/opencv.arm/lib/*.so
LIBS+=/opt/opencv.arm/lib/*.so.4
LIBS+=/opt/zbar.arm/lib/*.so
}
Bổ sung include các thư viện cần thiết
#include<zbar.h> usingnamespacezbar;
Bước 2: Lập trình sử dụng các hàm của thư viện Zbar Các bạn có thể tham khảo đoạn code dưới đây, đoạn code này viết trên QT cho phép mở cửa sổ File Dialog để người dùng chọn file, khi người dùng bấm nút Scan và tiến hành nhận dạng mã Barcode, QR code trên ảnh vừa
nhận