- Yêu cầu
- Cài đặt OpenCV trong Raspberry Pi
- Cài đặt các Gói bắt buộc khác
- Thiết lập phần cứng trình đọc mã QR Raspberry pi
- Mã Python cho Raspberry Pi QR Code Reader
- Kiểm tra Máy quét mã QR Raspberry Pi
Mã QR (Mã phản hồi nhanh) là một loại mã vạch ma trận có chứa thông tin về mặt hàng mà nó được gắn vào, như dữ liệu vị trí, số nhận dạng hoặc trình theo dõi xác định trang web hoặc ứng dụng, v.v. Đây là một loại máy quang học có thể đọc được. nhãn ở dạng hình ảnh 2D và có mẫu khác. Để tìm hiểu thêm về mã QR và cách tạo mã QR, hãy làm theo hướng dẫn trước của chúng tôi.
Trong hướng dẫn này, chúng tôi sẽ xây dựng một Máy quét mã QR dựa trên Raspberry Pi bằng cách sử dụng thư viện OpenCV và ZBar. ZBar là thư viện tốt nhất để phát hiện và giải mã các loại mã vạch và mã QR khác nhau. OpenCV được sử dụng để lấy một khung hình mới từ một luồng video và xử lý nó. Khi OpenCV nắm bắt một khung, sau đó chúng ta có thể chuyển nó đến một thư viện giải mã mã vạch Python chuyên dụng, chẳng hạn như ZBar để giải mã mã vạch và chuyển nó thành thông tin tương ứng.
Yêu cầu
- Raspberry Pi 3 (bất kỳ phiên bản nào)
- Mô-đun máy ảnh Pi
Trước khi tiếp tục với trình quét mã QR Raspberry Pi 3 này, trước tiên, chúng ta cần cài đặt OpenCV, thư viện giải mã mã vạch ZBar, imutils và một số phụ thuộc khác trong dự án này. OpenCV được sử dụng ở đây để xử lý hình ảnh kỹ thuật số. Các ứng dụng phổ biến nhất của Xử lý hình ảnh kỹ thuật số là phát hiện đối tượng, Nhận dạng khuôn mặt và bộ đếm người.
Cài đặt OpenCV trong Raspberry Pi
Ở đây thư viện OpenCV sẽ được sử dụng cho máy quét QR Raspberry Pi. Để cài đặt OpenCV, trước tiên, hãy cập nhật Raspberry Pi.
sudo apt-get cập nhật
Sau đó, cài đặt các phụ thuộc cần thiết để cài đặt OpenCV trên Raspberry Pi của bạn.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Sau đó, cài đặt OpenCV trong Raspberry Pi bằng lệnh dưới đây.
pip3 cài đặt opencv-Contrib-python == 4.1.0.25
Trước đây chúng tôi đã sử dụng OpenCV với Raspberry pi và đã tạo rất nhiều hướng dẫn về nó.
- Cài đặt OpenCV trên Raspberry Pi bằng CMake
- Nhận dạng khuôn mặt thời gian thực với Raspberry Pi và OpenCV
- Nhận dạng biển số bằng Raspberry Pi và OpenCV
- Ước tính quy mô đám đông bằng OpenCV và Raspberry Pi
Chúng tôi cũng đã tạo một loạt các hướng dẫn OpenCV bắt đầu từ cấp độ người mới bắt đầu.
Cài đặt các Gói bắt buộc khác
Cài đặt ZBar
Zbar là thư viện tốt nhất để phát hiện và giải mã các loại mã vạch và mã QR. Sử dụng lệnh dưới đây để cài đặt thư viện:
pip3 cài đặt pyzbar
Cài đặt imutils
imutils được sử dụng để thực hiện các chức năng xử lý hình ảnh thiết yếu như dịch, xoay, thay đổi kích thước, tạo khung và hiển thị hình ảnh Matplotlib dễ dàng hơn với OpenCV. Sử dụng lệnh dưới đây để cài đặt imutils:
pip3 cài đặt imutils
Cài đặt argparse
Sử dụng lệnh dưới đây để cài đặt thư viện argparse. argparse chịu trách nhiệm phân tích cú pháp các đối số dòng lệnh.
pip3 cài đặt argparse
Thiết lập phần cứng trình đọc mã QR Raspberry pi
Ở đây chúng tôi chỉ yêu cầu máy ảnh Raspberry Pi và Pi cho máy quét mã QR này bằng Máy ảnh Raspberry Pi và bạn chỉ cần gắn đầu nối dải băng máy ảnh vào khe máy ảnh được cung cấp trong Raspberry pi
Camera Pi có thể được sử dụng để xây dựng các dự án thú vị khác nhau như Camera giám sát Raspberry Pi, Hệ thống giám sát khách truy cập, Hệ thống an ninh gia đình, v.v.
Mã Python cho Raspberry Pi QR Code Reader
Mã hoàn chỉnh cho trình đọc QR Raspberry Pi được đưa ra ở cuối trang. Trước khi lập trình Raspberry Pi, hãy hiểu mã.
Vì vậy, như thường lệ, hãy bắt đầu mã bằng cách nhập tất cả các gói được yêu cầu.
from imutils.video import VideoStream from pyzbar import pyzbar import argparse import daytime import imutils import time import cv2
Sau đó, xây dựng trình phân tích cú pháp đối số và phân tích cú pháp các đối số. Đối số Dòng lệnh chứa thông tin về đường dẫn của tệp CSV. Tệp CSV (Giá trị được phân tách bằng dấu phẩy) chứa dấu thời gian và trọng tải của mọi mã vạch từ luồng video của chúng tôi.
ap = argparse.ArgumentParser () ap.add_argument ("- o", "--output", type = str, default = "barcodes.csv", help = "đường dẫn đến tệp CSV có chứa mã vạch") args = vars (ap.parse_args ())
Sau đó, khởi tạo luồng video và bỏ ghi chú dòng nhận xét nếu bạn đang sử dụng webcam USB.
#vs = VideoStream (src = 0).start () vs = VideoStream (usePiCamera = True).start () time.sleep (2.0)
Bây giờ bên trong vòng lặp, lấy một khung hình từ luồng video và thay đổi kích thước nó thành 400 pixel. Khi nó lấy được khung, hãy gọi hàm pyzbar.decode để phát hiện và giải mã mã QR.
frame = vs.read () frame = imutils.resize (frame, width = 400) barcodes = pyzbar.decode (frame)
Bây giờ, lặp qua các mã vạch được phát hiện để trích xuất vị trí của mã vạch và vẽ hộp giới hạn xung quanh mã vạch trên hình ảnh.
đối với mã vạch trong mã vạch: (x, y, w, h) = barcode.rect cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
Sau đó, giải mã mã vạch được phát hiện thành chuỗi "utf-8" bằng cách sử dụng hàm giải mã ("utf-8") và sau đó trích xuất loại mã vạch bằng cách sử dụng hàm barcode.type.
barcodeData = barcode.data.decode ("utf-8") barcodeType = barcode.type
Sau đó, lưu dữ liệu mã vạch đã trích xuất và loại mã vạch bên trong một văn bản có tên biến và vẽ dữ liệu mã vạch và nhập vào hình ảnh.
text = "{} ({})". format (codeData, barcodeType) cv2.putText (frame, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0,5, (0, 0, 255), 2)
Bây giờ hiển thị đầu ra với dữ liệu mã vạch và loại mã vạch.
cv2.imshow ("Trình đọc mã vạch", khung)
Bây giờ trong bước cuối cùng, hãy kiểm tra xem phím 's' có được nhấn hay không, sau đó thoát ra khỏi vòng lặp chính và bắt đầu quá trình dọn dẹp.
key = cv2.waitKey (1) & 0xFF # nếu phím `s` được nhấn, ngắt khỏi vòng lặp nếu phím == ord (" s "): break print (" dọn dẹp… ") csv.close () cv2.destroyAllWindows () vs.stop ()
Kiểm tra Máy quét mã QR Raspberry Pi
Sau khi thiết lập của bạn đã sẵn sàng, hãy khởi chạy chương trình đọc mã QR. Bạn sẽ thấy một cửa sổ hiển thị chế độ xem trực tiếp từ máy ảnh của mình, bây giờ bạn có thể trình bày mã vạch trước máy ảnh PI. Khi pi giải mã mã vạch, nó sẽ vẽ một hộp màu đỏ xung quanh nó với dữ liệu mã vạch và loại mã vạch như thể hiện trong hình ảnh dưới đây:
Đây là cách bạn có thể dễ dàng xây dựng Trình đọc mã QR cho Máy ảnh Raspberry Pi chỉ bằng cách sử dụng bảng Raspberry Pi và máy ảnh Pi hoặc máy ảnh USB.
Dưới đây là một đoạn video làm việc và mã hoàn chỉnh cho dự án này.