Giới thiệu dự án
Trong kỷ nguyên bán lẻ tự động hóa (Retail 4.0), bài toán tối ưu hóa trải nghiệm khách hàng tại điểm thanh toán (Point of Sale - POS) trở thành yếu tố sống còn đối với các chuỗi siêu thị và cửa hàng tiện lợi. Theo các thống kê từ ngành bán lẻ hiện đại, hơn 68% khách hàng cảm thấy thất vọng và có xu hướng từ bỏ giỏ hàng nếu thời gian xếp hàng chờ thanh toán vượt quá 5 phút. Vấn đề này xuất phát từ hai nghịch lý vận hành chính: vào các khung giờ cao điểm, lưu lượng người mua vượt quá công suất phục vụ của quầy thu ngân truyền thống; ngược lại, vào các khung giờ thấp điểm, doanh nghiệp buộc phải cắt giảm số lượng nhân viên thu ngân để tối ưu hóa chi phí vận hành, vô hình trung kéo dài thời gian chờ đợi của những khách hàng cá lẻ.
Đặc biệt, nhóm hàng nông sản tươi sống (rau, củ, quả) tạo ra điểm nghẽn lớn nhất trong quy trình thanh toán. Không giống như các mặt hàng công nghiệp có mã vạch (Barcode) chuẩn hóa dán sẵn trên bao bì, các sản phẩm trái cây thường được bán theo khối lượng thực tế và không có mã định danh trực tiếp. Quy trình thông thường đòi hỏi thu ngân phải tra cứu thủ công mã SKU (Stock Keeping Unit), cân trọng lượng, sau đó mới in hoặc quét mã giá, gây lãng phí thời gian và tiềm ẩn rủi ro sai sót, gian lận thương mại.
Đồ án tốt nghiệp "Ứng dụng xử lý ảnh và YOLO trong hệ thống máy thanh toán tự động" do sinh viên Trương Quốc Tín và Doãn Đức Minh (ngành Công nghệ Kỹ thuật Điện tử - Viễn thông, Trường Đại học Sư phạm Kỹ thuật TP.HCM, dưới sự hướng dẫn của ThS. Nguyễn Ngô Lâm) thực hiện nhằm giải quyết triệt để bài toán này. Hệ thống kết hợp mạng nơ-ron tích chập (Convolutional Neural Networks - CNNs) hiện đại với kiến trúc phần cứng nhúng phân tán, mang lại giải pháp tự thanh toán (Self-Checkout) thông minh, chính xác và tối ưu chi phí.
Mục tiêu nghiên cứu cụ thể
- Thiết kế và chế tạo phần cứng nhúng tích hợp: Xây dựng mô hình trạm thanh toán hoàn chỉnh với cơ chế cân kép (Dual Loadcell 5kg kết hợp module ADC HX711 24-bit) và Camera Pi Module giao tiếp chuẩn CSI với bộ xử lý trung tâm Raspberry Pi 4 cùng vi điều khiển ESP32.
- Huấn luyện và tối ưu hóa mô hình thị giác máy tính: Triển khai thuật toán YOLOv8 (You Only Look Once phiên bản 8) để nhận diện thời gian thực (Real-time) 6 loại nông sản phổ biến: Cam vàng, Cam xanh, Chuối, Mãng cầu, Táo và Xoài.
- Tích hợp xử lý đa phương thức: Kết hợp song song nhận diện hình ảnh AI và giải mã mã vạch (Barcode 1D/2D) thông qua thư viện OpenCV và PyZbar, cho phép xử lý linh hoạt cả sản phẩm tươi sống lẫn hàng đóng gói.
- Xây dựng hệ thống Backend và Giao diện người dùng: Thiết kế hệ thống máy chủ RESTful API trên nền tảng Django REST Framework (DRF) và giao diện Web POS trực quan cho khách hàng và trang quản trị (Admin Dashboard) cho quản lý siêu thị.
- Tự động hóa giao dịch không tiền mặt: Tự động tính toán tổng hóa đơn dựa trên đơn giá và trọng lượng thực tế, sau đó khởi tạo mã QR động (Dynamic QR Code) để khách hàng thanh toán qua ngân hàng số tức thì.
+-----------------------------------------------------------------------------+
| HỆ THỐNG THANH TOÁN TỰ ĐỘNG |
+-----------------------------------------------------------------------------+
| [Đầu vào Cảm biến & Hình ảnh] |
| + Trái cây -> Đặt lên Cân 1 / Cân 2 -> Loadcell 5kg -> ADC HX711 -> ESP32 |
| + Camera Pi Module (CSI) -> Thu thập luồng Video thời gian thực |
| |
| [Khối xử lý biên - Edge Computing (Raspberry Pi 4)] |
| + Luồng 1: YOLOv8 Inference Engine (Nhận diện phân loại 6 loại quả) |
| + Luồng 2: PyZbar / OpenCV Engine (Giải mã mã vạch hàng đóng gói) |
| + Luồng 3: Web Server & Django REST Framework (Quản lý giỏ hàng & API) |
| |
| [Đầu ra & Thanh toán] |
| + Màn hình LCD 16x2 I2C / Web POS UI: Hiển thị tên, khối lượng, thành tiền|
| + Dynamic QR Code Engine: Tạo mã QR VietQR thanh toán chuyển khoản |
+-----------------------------------------------------------------------------+
Phạm vi và giới hạn của đề tài
- Phạm vi nhận diện: Phân loại tự động 6 loại quả nông sản tươi và giải mã các mã vạch chuẩn 1D (EAN-13, Code 128) phổ biến trên thị trường.
- Giới hạn phần cứng: Cân tải trọng tối đa 5kg trên mỗi bàn cân; hoạt động tối ưu trong điều kiện ánh sáng ổn định (khoang nhận diện khép kín hoặc chiếu sáng tiêu chuẩn 300 - 500 Lux).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Hiện nay trên thị trường tồn tại nhiều hình thức thanh toán tại điểm bán, từ thủ công đến bán tự động. Bảng so sánh dưới đây làm rõ ưu và nhược điểm của từng giải pháp:
| Tiêu chí |
Quầy thu ngân truyền thống |
Kiosk Self-Checkout thông thường |
Hệ thống AI Dual-Scale Kiosk (Đề tài) |
| Nhận diện trái cây |
Thủ công (Thu ngân nhớ/tra mã) |
Khách hàng tự tìm trên màn hình cảm ứng |
Tự động 100% qua YOLOv8 AI |
| Xử lý hàng mã vạch |
Máy quét laser cầm tay |
Máy quét cố định tại chỗ |
Tích hợp Camera AI + PyZbar |
| Tốc độ xử lý giỏ hàng |
Trung bình (60 - 90 giây/khách) |
Chậm (Khách bối rối tra mã hàng tươi) |
Rất nhanh (20 - 30 giây/khách) |
| Chi phí nhân sự |
Rất cao (1 - 2 nhân viên/quầy) |
Trung bình (Cần 1 nhân viên giám sát) |
Tối thiểu (Vận hành tự động hoàn toàn) |
| Kiến trúc bàn cân |
Cân đơn tại bàn thu ngân |
Cân đơn chống gian lận |
Cân kép độc lập (Tăng thông lượng) |
| Phương thức trả tiền |
Tiền mặt / Thẻ POS / Quét mã |
Thẻ ngân hàng / Tiền mặt |
Mã QR động (VietQR/Banking) |
Ma trận ưu tiên yêu cầu hệ thống (MoSCoW)
- Must Have (Bắt buộc phải có):
- Khả năng nhận diện chính xác 6 loại trái cây đạt độ tin cậy > 90%.
- Thuật toán đọc mã vạch thời gian thực với độ trễ < 200ms.
- Đo lường khối lượng với sai số cho phép < ±2g trong dải 0 - 5kg.
- Giao tiếp ổn định giữa ESP32 và Raspberry Pi 4 qua REST API / UART.
- Sinh mã thanh toán QR tự động gắn liền với tổng giá trị đơn hàng.
- Should Have (Nên có):
- Hệ thống đèn LED và còi Buzzer phản hồi trạng thái nhận diện thành công.
- Cảm biến khoảng cách siêu âm HC-SR04 kích hoạt hệ thống khi có khách hàng tiếp cận.
- Màn hình phụ LCD 1602 I2C hiển thị thông số nhanh tại bàn cân.
- Could Have (Có thể có):
- Khả năng tự động cập nhật dữ liệu huấn luyện mới qua cơ chế Active Learning.
- Kết nối Gateway thanh toán tự động xác nhận giao dịch qua Webhook.
- Won't Have (Chưa triển khai trong phạm vi này):
- Hệ thống phân loại kích thước và độ chín chi tiết của nông sản.
- Cánh tay robot tự động gắp và đóng gói hàng hóa.
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình kiến trúc nhúng phân tán (Distributed Embedded Architecture), tách biệt nhiệm vụ đọc cảm biến tầng thấp và nhiệm vụ tính toán AI tầng cao nhằm đảm bảo tính ổn định và thời gian đáp ứng thời gian thực.
+-------------------------------------+
| NGƯỜI DÙNG / KHÁCH HÀNG |
+-------------------------------------+
| ^
Tương tác | | Giao diện Web POS
& Đặt hàng | | & Mã QR Thanh toán
v |
+-----------------------------------------------------------------------------+
| KHỐI XỬ LÝ TRUNG TÂM |
| |
| +---------------------------+ +-----------------------------+ |
| | Camera Pi Module | | Raspberry Pi 4 Model B | |
| | (MIPI CSI 2-lane) | | (ARM Cortex-A72 @1.5G) | |
| +---------------------------+ +-----------------------------+ |
| | ^ ^ |
| +--------> [ OpenCV Stream ] --------+ | |
| [ YOLOv8 Inference ] | |
| [ PyZbar Barcode ] | |
| | |
| HTTP / REST API |
| (JSON Payload) |
| | |
| +--------------------------------------------------------------+--------+ |
| | Vi điều khiển ESP32 (Tensilica Dual-Core) | |
| +-----------------------------------------------------------------------+ |
| | | | | |
| v v v v |
| [Loadcell 1 + HX711] [Loadcell 2 + HX711] [LCD 16x2 I2C] [HC-SR04 & Buzzer]|
+-----------------------------------------------------------------------------+
Technology Stack & Hardware Specifications
-
Phần cứng điều khiển & cảm biến (Low-level Edge):
- Vi điều khiển ESP32: Kiến trúc Tensilica Xtensa Dual-Core 32-bit LX6, xung nhịp 240MHz, tích hợp Wi-Fi 802.11 b/g/n và BLE 4.2. Đảm nhiệm việc giao tiếp với các cảm biến vật lý và gửi dữ liệu đo lường về máy chủ.
- Cảm biến trọng lượng Loadcell 5kg: Cảm biến biến dạng dạng cầu trở kháng Wheatstone Bridge, dải tải trọng 0 - 5000g, độ nhạy $1.0 \pm 0.15\text{ mV/V}$.
- Module biến đổi ADC HX711: Bộ chuyển đổi tương tự sang số (ADC) chuyên dụng 24-bit, tích hợp tiền khuếch đại nhiễu thấp với mức tăng ích (Gain) 128 cho kênh A, hỗ trợ tốc độ lấy mẫu 10Hz hoặc 80Hz.
- Màn hình LCD 1602 kèm PCF8574 I2C Adapter: Hiển thị 2 dòng x 16 ký tự, tiết kiệm chân GPIO chỉ với 2 đường tín hiệu SDA (GPIO21) và SCL (GPIO22).
- Cảm biến khoảng cách HC-SR04: Dải đo 2cm - 400cm, góc quét 15°, sử dụng sóng siêu âm 40kHz để phát hiện sự hiện diện của vật phẩm hoặc người mua hàng.
-
Phần cứng tính toán và thị giác (High-level Compute Engine):
- Raspberry Pi 4 Model B: SoC Broadcom BCM2711, 4 nhân ARM Cortex-A72 (ARM v8) 64-bit @ 1.5GHz, 4GB LPDDR4-3200 SDRAM, hỗ trợ giải mã phần cứng H.265/H.264 và GPU VideoCore VI.
- Camera Pi Module V2: Cảm biến Sony IMX219 8-megapixel, hỗ trợ video 1080p30, 720p60, kết nối qua giao diện MIPI CSI-2 băng thông cao, giảm thiểu độ trễ khung hình so với cổng USB webcam thông thường.
-
Ngăn xếp phần mềm (Software Stack):
- Hệ điều hành: Raspberry Pi OS (64-bit Debian Bullseye).
- Ngôn ngữ: Python 3.10 (Backend & AI Inference), C++ (ESP32 Firmware qua Arduino IDE Core v2.0.14), JavaScript ES6/HTML5/CSS3 (Frontend).
- Thư viện AI & Xử lý ảnh:
ultralytics==8.0.196, opencv-python==4.8.0.76, pyzbar==0.1.9, numpy==1.24.3, torch==2.0.1.
- Backend Web Framework:
Django==4.2.7, djangorestframework==3.14.0, django-cors-headers==4.3.0.
- Cơ sở dữ liệu: SQLite3 (chế độ phát triển) và PostgreSQL (môi trường sản xuất).
Thiết kế Cơ sở dữ liệu (Database Schema)
Hệ thống sử dụng mô hình ánh xạ đối tượng ORM của Django để quản lý dữ liệu sản phẩm, hóa đơn và lịch sử cân:
+--------------------------------------------------------------------------------+
| DATABASE SCHEMA |
+--------------------------------------------------------------------------------+
| tbl_products |
| - id: AutoField (PK) |
| - name: CharField(max_length=100) |
| - code_identifier: CharField(max_length=50, unique=True) |
| - product_type: CharField(choices=['FRUIT_WEIGHT', 'PACKAGED_UNIT']) |
| - unit_price: DecimalField(max_digits=10, decimal_places=2) |
| - unit_type: CharField(choices=['KG', 'ITEM']) |
| - image_ref: ImageField(upload_to='products/') |
+--------------------------------------------------------------------------------+
| 1
|
| n
+--------------------------------------------------------------------------------+
| tbl_order_items |
| - id: AutoField (PK) |
| - order_id: ForeignKey(tbl_orders, on_delete=CASCADE) |
| - product_id: ForeignKey(tbl_products, on_delete=RESTRICT) |
| - measured_weight: FloatField(null=True, blank=True) |
| - quantity: IntegerField(default=1) |
| - subtotal: DecimalField(max_digits=12, decimal_places=2) |
+--------------------------------------------------------------------------------+
n |
| 1
+--------------------------------------------------------------------------------+
| tbl_orders |
| - order_code: UUIDField(primary_key=True, default=uuid4) |
| - scale_station: IntegerField(choices=[1, 2]) |
| - total_amount: DecimalField(max_digits=12, decimal_places=2) |
| - payment_status: CharField(choices=['PENDING', 'PAID', 'FAILED']) |
| - qr_payload: TextField() |
| - created_at: DateTimeField(auto_now_add=True) |
+--------------------------------------------------------------------------------+
Thiết kế RESTful API
Hệ thống giao tiếp nội bộ qua các API Endpoints chuẩn RESTful:
GET /api/v1/products/: Lấy danh mục sản phẩm và bảng giá niêm yết hiện hành.
POST /api/v1/detect/predict/: Tiếp nhận hình ảnh từ Camera, kích hoạt inference pipeline và trả về danh sách bounding boxes, class labels và confidence scores.
POST /api/v1/scales/weight-sync/: Nhận payload JSON từ ESP32 chứa trọng lượng ổn định:
{
"scale_id": 1,
"raw_value": 8421050,
"weight_grams": 452.50,
"is_stable": true,
"timestamp": 1721543820
}
POST /api/v1/checkout/create-order/: Khởi tạo đơn hàng, tính thành tiền dựa trên trọng lượng nhận diện và sinh mã VietQR theo chuẩn Napas247.
Methodology
Đề tài áp dụng mô hình phát triển phần mềm và hệ thống nhúng linh hoạt (Agile-Scrum) qua 4 Sprint chính, kéo dài từ 28/02/2024 đến 21/06/2024:
+--------------------------------------------------------------------+
| LỘ TRÌNH TRIỂN KHAI DỰ ÁN |
+--------------------------------------------------------------------+
| Giai đoạn 1: Nghiên cứu & Thiết kế Mạch (Sprint 1) |
| [28/02/2024 - 25/03/2024] |
| * Khảo sát linh kiện, mô phỏng mạch Proteus |
| * Thiết kế sơ đồ nguyên lý ESP32, HX711, Raspberry Pi 4 |
| ---------------------------------------------------------------- |
| Giai đoạn 2: Xây dựng Dataset & Train YOLOv8 (Sprint 2) |
| [26/03/2024 - 25/04/2024] |
| * Thu thập 3,000 ảnh 6 loại quả trong các điều kiện sáng |
| * Huấn luyện mô hình YOLOv8n, tối ưu hóa mAP |
| ---------------------------------------------------------------- |
| Giai đoạn 3: Phát triển Backend DRF & Firmware (Sprint 3) |
| [26/04/2024 - 25/05/2024] |
| * Lập trình firmware ESP32 (lọc số, hiệu chuẩn cân) |
| * Xây dựng Django REST API và giao diện Web POS |
| ---------------------------------------------------------------- |
| Giai đoạn 4: Tích hợp Hệ thống & Đánh giá (Sprint 4) |
| [26/05/2024 - 21/06/2024] |
| * Lắp ráp khung mô hình cơ khí 2 bàn cân |
| * Thử nghiệm End-to-End, đo đạc độ trễ và nghiệm thu |
+--------------------------------------------------------------------+
Implementation và kết quả
Development process
Thuật toán nhận diện vật thể YOLOv8
YOLOv8 của Ultralytics loại bỏ hoàn toàn khái niệm Anchor Boxes (Anchor-Free Object Detection), chuyển sang dự đoán trực tiếp khoảng cách từ tâm ô lưới tới 4 cạnh của Bounding Box. Kiến trúc mạng gồm:
- Backbone: Mạng tích chập cải tiến CSPDarknet-AA với các khối C2f (Cross-Stage Partial with 2 Convolutions) thay thế khối C3 của YOLOv5, tăng cường khả năng truyền gradient và trích xuất đặc trưng đa quy mô.
- Neck: Path Aggregation Network (PAN) kết hợp Feature Pyramid Network (FPN) giúp tổng hợp đặc trưng ngữ nghĩa từ tầng sâu với đặc trưng không gian tầng nông.
- Head: Tách rời thành hai nhánh độc lập (Decoupled Head): một nhánh dự đoán phân lớp (Classification Loss - Binary Cross-Entropy) và một nhánh dự đoán tọa độ hộp bao (Bounding Box Regression Loss - kết hợp giữa CIoU Loss và Distribution Focal Loss - DFL).
Hàm mất mát tổng thể của YOLOv8 được xác định theo công thức:
$$\mathcal{L}{Total} = \lambda{cls} \mathcal{L}{BCE} + \lambda{box} \mathcal{L}{CIoU} + \lambda{dfl} \mathcal{L}_{DFL}$$
Thuật toán đo lường khối lượng và lọc nhiễu tín hiệu
Cảm biến Loadcell biến đổi áp lực cơ học thành tín hiệu vi sai cực nhỏ tính bằng mili-Volt ($\text{mV}$). Module ADC HX711 khuếch đại và số hóa tín hiệu thành giá trị nguyên có dấu 24-bit ($2^{24} = 16,777,216$ mức lượng tử). Để khắc phục hiện tượng trôi điểm không (Zero Drift) và dao động cơ học khi đặt sản phẩm lên đĩa cân, nhóm tác giả triển khai thuật toán lấy trung bình trượt kết hợp bộ lọc trung vị (Moving Average + Median Filter):
#include "HX711.h"
const int LOADCELL_DOUT_PIN = 16;
const int LOADCELL_SCK_PIN = 4;
const float CALIBRATION_FACTOR = 420.55; // Xác định qua mẫu chuẩn 500g
HX711 scale;
void setup() {
Serial.begin(115200);
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(CALIBRATION_FACTOR);
scale.tare(); // Thiết lập điểm 0 ban đầu
}
float getStableWeight() {
const int NUM_READINGS = 10;
float readings[NUM_READINGS];
if (scale.is_ready()) {
for (int i = 0; i < NUM_READINGS; i++) {
readings[i] = scale.get_units(1);
delay(10);
}
// Sắp xếp mảng để lấy giá trị trung vị
for (int i = 0; i < NUM_READINGS - 1; i++) {
for (int j = i + 1; j < NUM_READINGS; j++) {
if (readings[i] > readings[j]) {
float temp = readings[i];
readings[i] = readings[j];
readings[j] = temp;
}
}
}
// Lấy trung bình của 4 giá trị ở giữa để loại bỏ ngoại lai
float filteredWeight = 0;
for (int i = 3; i < 7; i++) {
filteredWeight += readings[i];
}
return filteredWeight / 4.0;
}
return 0.0;
}
Pipeline tích hợp Thị giác máy tính và Giải mã mã vạch
Chương trình chính trên Raspberry Pi 4 chạy một luồng xử lý khung hình liên tục từ Camera Pi, ưu tiên kiểm tra mã vạch bằng PyZbar trước; nếu không có mã vạch trong khung hình, luồng dữ liệu sẽ được chuyển tiếp qua mô hình YOLOv8n để phân loại nông sản:
import cv2
import numpy as np
from pyzbar.pyzbar import decode
from ultralytics import YOLO
class CheckoutVisionPipeline:
def __init__(self, model_weights_path='best.pt', conf_thresh=0.75):
self.model = YOLO(model_weights_path)
self.conf_thresh = conf_thresh
self.class_names = ['Cam_vang', 'Cam_xanh', 'Chuoi', 'Man_cau', 'Tao', 'Xoai']
def process_frame(self, frame):
detection_result = {
'type': None,
'identifier': None,
'confidence': 0.0,
'bbox': None
}
# 1. Pipeline Giải mã Mã vạch (PyZbar)
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
barcodes = decode(gray_frame)
if barcodes:
for barcode in barcodes:
barcode_data = barcode.data.decode('utf-8')
rect = barcode.rect
detection_result['type'] = 'BARCODE'
detection_result['identifier'] = barcode_data
detection_result['confidence'] = 1.0
detection_result['bbox'] = (rect.left, rect.top, rect.width, rect.height)
return detection_result
# 2. Pipeline Nhận diện Nông sản AI (YOLOv8)
results = self.model(frame, conf=self.conf_thresh, verbose=False)
for r in results:
boxes = r.boxes
if len(boxes) > 0:
# Lấy đối tượng có độ tin cậy cao nhất
best_box = boxes[0]
cls_id = int(best_box.cls[0].item())
confidence = float(best_box.conf[0].item())
xyxy = best_box.xyxy[0].cpu().numpy().astype(int)
detection_result['type'] = 'FRUIT'
detection_result['identifier'] = self.class_names[cls_id]
detection_result['confidence'] = confidence
detection_result['bbox'] = xyxy.tolist()
return detection_result
return detection_result
Testing và validation
Quá trình kiểm thử mô hình AI được thực hiện trên tập dữ liệu kiểm tra độc lập gồm 600 hình ảnh (100 ảnh cho mỗi loại quả) dưới nhiều góc chụp, khoảng cách và điều kiện đổ bóng khác nhau.
Kết quả đánh giá mô hình YOLOv8 trên từng lớp đối tượng
| Lớp sản phẩm |
Số lượng mẫu kiểm thử |
Precision (P %) |
Recall (R %) |
mAP@0.5 (%) |
mAP@0.5:0.95 (%) |
| Cam vàng |
100 |
96.8% |
95.5% |
96.2% |
82.4% |
| Cam xanh |
100 |
95.1% |
94.2% |
94.8% |
79.8% |
| Chuối |
100 |
97.4% |
96.0% |
95.5% |
84.1% |
| Mãng cầu |
100 |
93.8% |
92.5% |
93.1% |
76.5% |
| Táo |
100 |
98.2% |
97.1% |
97.0% |
86.3% |
| Xoài |
100 |
95.6% |
93.8% |
94.4% |
80.2% |
| Trung bình (All Classes) |
600 |
96.15% |
94.85% |
95.17% |
81.55% |
Đánh giá độ chính xác của khối cảm biến trọng lượng Loadcell 5kg
| Mẫu chuẩn (g) |
Giá trị đọc Cân 1 (g) |
Sai số Cân 1 (g) |
Giá trị đọc Cân 2 (g) |
Sai số Cân 2 (g) |
Sai số % lớn nhất |
| 100.0 |
100.2 |
+0.2 |
99.8 |
-0.2 |
0.20% |
| 500.0 |
500.6 |
+0.6 |
499.5 |
-0.5 |
0.12% |
| 1,000.0 |
1,001.1 |
+1.1 |
1,000.8 |
+0.8 |
0.11% |
| 2,500.0 |
2,501.8 |
+1.8 |
2,498.4 |
-1.6 |
0.07% |
| 4,500.0 |
4,502.5 |
+2.5 |
4,497.2 |
-2.8 |
0.06% |
Kết quả đạt được
Hệ thống đã hoàn thiện 100% các tính năng kỹ thuật đặt ra theo kế hoạch ban đầu:
- Tốc độ xử lý (Inference Latency): Thời gian nhận diện của YOLOv8n trên Raspberry Pi 4 (đã tối ưu qua NCNN framework) đạt trung bình 68ms/frame, đảm bảo trải nghiệm hiển thị mượt mà không có độ trễ cảm nhận.
- Tốc độ đọc mã vạch: PyZbar phản hồi kết quả trong 18ms - 35ms ngay khi mã vạch xuất hiện trước camera.
- Thời gian thanh toán trung bình: Thời gian từ lúc đặt sản phẩm đầu tiên lên cân đến khi thanh toán QR thành công giảm từ 75 giây (quầy truyền thống) xuống còn 24.5 giây/giao dịch, tương đương mức cải thiện 67.3%.
Đổi mới và đóng góp
Điểm đột phá kỹ thuật
- Cơ chế Cân Kép Xen Kẽ (Dual-Scale Interleaved Architecture): Thiết kế hai bàn cân độc lập hoạt động song song cho phép khách hàng đặt đồng thời hai loại trái cây khác nhau. Hệ thống tự động chuyển đổi luồng xử lý và gán nhãn sản phẩm tương ứng với từng bàn cân mà không cần thao tác bấm chọn phức tạp trên màn hình, giúp tăng 180% thông lượng phục vụ so với các kiosk cân đơn thông thường.
- Hợp nhất đa tác vụ trên luồng quang học duy nhất (Unified Vision Pipeline): Không cần trang bị đầu đọc mã vạch laser chuyên dụng đắt tiền, hệ thống tái sử dụng luồng hình ảnh từ Camera Pi CSI để thực hiện đồng thời cả hai thuật toán AI và Computer Vision cổ điển (YOLOv8 + PyZbar). Giải pháp này giúp cắt giảm 45% chi phí linh kiện phần cứng quang học.
- Mô hình kiến trúc phân tầng biên - máy chủ (Hierarchical Edge-to-Server Framework): Bằng cách giao toàn bộ tác vụ đọc tín hiệu tương tự, lọc số thời gian thực cho vi điều khiển ESP32 và giải phóng tài nguyên CPU/RAM của Raspberry Pi 4 chỉ dành riêng cho suy luận AI và Web Server, hệ thống duy trì được tính ổn định cao, không bao giờ xảy ra hiện tượng tràn bộ nhớ hay rớt khung hình (Frame Drop).
Bảng so sánh với các giải pháp công nghiệp hiện hành
| Đặc tính |
NCR FastLane SelfServ |
Diebold Nixdorf Easy eXpress |
Kiosk AI HCMUTE (Đề tài) |
| Giá thành phần cứng |
8,000$ - 15,000$ |
6,000$ - 12,000$ |
< 350$ (Tối ưu cho thị trường VN) |
| Nhận dạng hàng tươi |
Cần chọn menu bằng tay |
Cần chọn menu bằng tay |
Tự động bằng YOLOv8 AI |
| Cơ chế cân |
Cân đơn |
Cân đơn |
Cân kép song song |
| Công nghệ mã vạch |
Đầu đọc đa tia Laser |
Đầu đọc 2D Imager |
Camera Pi CSI + PyZbar |
| Điện năng tiêu thụ |
180W - 250W |
150W - 200W |
< 15W (Cực kỳ tiết kiệm) |
Ứng dụng thực tế và triển khai
Trường hợp sử dụng thực tế (Real-World Use Cases)
- Chuỗi cửa hàng tiện lợi mở cửa 24/7 (GS25, Circle K, 7-Eleven): Vận hành ca đêm hoàn toàn tự động mà không cần nhân viên thu ngân túc trực tại quầy, chỉ cần 1 nhân viên bảo vệ/giữ xe.
- Khu vực rau củ quả tại các đại siêu thị (Co.opmart, BigC, WinMart): Đặt trực tiếp tại khu vực nông sản để khách hàng tự cân và thanh toán ngay tại chỗ, giảm tải áp lực dồn ứ tại các quầy thu ngân trung tâm ở lối ra.
- Căn tin trường học và bệnh viện: Tự động tính tiền các suất ăn hoặc trái cây tráng miệng với tốc độ cao, giải tỏa ùn tắc trong các khung giờ nghỉ giải lao 15 - 30 phút.
Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis & ROI)
Một trạm thanh toán tự động hoàn chỉnh chế tạo theo đề tài có tổng chi phí linh kiện ước tính khoảng 6,500,000 VNĐ (gồm Raspberry Pi 4 4GB, 2 bộ Loadcell + HX711, Camera Pi V2, ESP32, màn hình LCD, khung mica/nhôm và nguồn cung cấp).
So với chi phí thuê một nhân viên thu ngân làm việc 2 ca/ngày (chi phí lương và phúc lợi trung bình khoảng 8,000,000 VNĐ/tháng), một máy tính tiền tự động có thể bù đắp toàn bộ chi phí đầu tư phần cứng chỉ sau 0.81 tháng (~25 ngày) vận hành, và mang lại mức tiết kiệm chi phí nhân sự ròng lên đến 96,000,000 VNĐ/năm/quầy.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Phụ thuộc điều kiện chiếu sáng: Trong môi trường ánh sáng quá yếu (< 100 Lux) hoặc ánh sáng rọi trực tiếp gây lóa bề mặt vỏ trái cây có lớp sáp (như Táo, Xoài), độ tin cậy nhận diện có thể giảm xuống dưới 85%.
- Sản phẩm xếp chồng hoặc che khuất (Occlusion): Mô hình hiện tại chỉ nhận diện chính xác khi các loại quả được đặt trải đều trên đĩa cân; hiện tượng xếp chồng nhiều lớp khiến các quả ở dưới bị che khuất không được tính vào kết quả nhận diện quang học.
- Tập dữ liệu nhận diện: Mới dừng lại ở 6 loại quả cơ bản, chưa bao phủ toàn bộ các mặt hàng rau củ quả đa dạng trên thị trường.
Hướng phát triển trong tương lai
- Tích hợp Chip tăng tốc AI chuyên dụng (NPU Edge Accelerator): Bổ sung module Google Coral Edge TPU (USB Accelerator) hoặc chip Hailo-8 M.2 để tăng tốc độ suy luận mô hình YOLOv8 từ 68ms xuống 8ms - 12ms/frame, cho phép nâng độ phân giải camera lên 4K để nhận diện các chi tiết vân vỏ phức tạp.
- Mở rộng mô hình nhận diện đa góc nhìn (Multi-Camera Fraud Prevention): Lắp đặt thêm 1 camera góc nhìn từ cạnh bên (Side-view) kết hợp với camera từ trên xuống (Top-down) để phát hiện hành vi gian lận (ví dụ: dùng tay đè lên cân hoặc tráo đổi mã sản phẩm).
- Cơ chế tự động học tăng cường (Active Learning & Auto-Retrain Pipeline): Xây dựng cơ chế tự động gửi các mẫu nhận diện có độ tin cậy thấp ($0.5 < \text{confidence} < 0.75$) về Cloud Server để gán nhãn lại và tái huấn luyện định kỳ hàng tuần.
Đối tượng hưởng lợi
- Sinh viên & Giảng viên ngành Điện tử - Viễn thông, Tự động hóa, CNTT:
- Tiếp cận một mã nguồn mở mẫu hoàn chỉnh tích hợp giữa Hệ thống nhúng (ESP32/Raspberry Pi), Trí tuệ nhân tạo biên (Edge AI YOLOv8) và Web API (Django REST Framework).
- Tài liệu tham khảo hữu ích cho các môn học: Xử lý ảnh số, Kỹ thuật vi xử lý, IoT và Hệ thống nhúng nâng cao.
- Kỹ sư và Lập trình viên IoT / Edge AI:
- Tham khảo kiến trúc kết nối chuẩn công nghiệp giữa vi điều khiển và máy tính đơn bo (SBC).
- Tái sử dụng các module code lọc nhiễu trọng lượng HX711 và pipeline tích hợp OpenCV - PyZbar tối ưu hóa hiệu năng CPU.
- Doanh nghiệp bán lẻ và Chủ siêu thị:
- Sở hữu giải pháp công nghệ tự chủ 100%, chi phí triển khai chỉ bằng 1/15 so với các giải pháp ngoại nhập của Mỹ hay châu Âu.
- Tăng chỉ số hài lòng của khách hàng (CSAT) lên mức 92% nhờ giảm thiểu triệt để thời gian xếp hàng.
- Khách hàng tiêu dùng:
- Trải nghiệm quy trình mua sắm hiện đại, chủ động, nhanh chóng và an toàn vệ sinh trong bối cảnh thanh toán không tiếp xúc (Contactless Payment).
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để tự triển khai và vận hành hệ thống này là gì?
Hệ thống yêu cầu nguồn điện ổn định 5V-3A cho Raspberry Pi 4 (qua cổng Type-C) và 5V-1A cho ESP32. Về mặt mạng, hệ thống chỉ cần kết nối mạng Wi-Fi cục bộ (Local LAN) chuẩn 2.4GHz để truyền dữ liệu JSON qua giao thức HTTP/REST nội bộ. Đối với mô hình YOLOv8n, hệ thống yêu cầu thẻ nhớ MicroSD tối thiểu 32GB Class 10 U3 để đảm bảo tốc độ đọc/ghi dữ liệu của hệ điều hành Linux.
2. Hệ thống xử lý thế nào nếu người mua đặt nhiều loại trái cây khác nhau cùng lúc lên một bàn cân?
Hệ thống sử dụng cơ chế Bounding Box đa đối tượng của YOLOv8. Nếu phát hiện nhiều loại quả khác nhau trên cùng một bàn cân (ví dụ 1 quả Cam và 1 quả Táo trên Cân 1), hệ thống sẽ kích hoạt còi cảnh báo Buzzer và hiển thị thông báo trên màn hình Web POS yêu cầu khách hàng chỉ đặt một loại quả duy nhất trên mỗi đĩa cân tại một thời điểm để đảm bảo việc tính giá tiền theo trọng lượng được chính xác tuyệt đối.
3. Làm thế nào để tích hợp hệ thống này vào phần mềm quản lý bán hàng (ERP/POS) có sẵn của siêu thị?
Nhờ kiến trúc chuẩn RESTful API xây dựng trên Django REST Framework, hệ thống có thể kết nối liền mạch với bất kỳ phần mềm ERP nào (như SAP, Odoo, KiotViet, Sapo) thông qua các Webhook hoặc API Endpoints chuẩn JSON. Bảng giá và số lượng tồn kho có thể được đồng bộ hóa hai chiều theo thời gian thực.
4. Chi phí bảo trì phần cứng và hiệu chuẩn cân định kỳ như thế nào?
Cảm biến Loadcell và module HX711 có độ bền cơ học cao và hầu như không cần bảo trì linh kiện điện tử. Quy trình hiệu chuẩn lại điểm 0 (Tare) và hệ số cân (Calibration Factor) được tích hợp sẵn trên giao diện quản trị Admin Web, cho phép kỹ thuật viên đặt quả cân chuẩn 1kg lên đĩa và nhấn nút "Auto Calibrate" trong vòng 5 giây mà không cần can thiệp nạp lại code cho ESP32.
5. Khả năng mở rộng quy mô (Scalability) của hệ thống khi siêu thị muốn nhận diện thêm 50 loại rau củ quả mới?
Quá trình mở rộng số lượng lớp nhận diện không đòi hỏi thay đổi phần cứng. Doanh nghiệp chỉ cần thu thập thêm 200 - 300 hình ảnh cho mỗi loại rau củ mới, sau đó tiến hành Fine-tuning (Transfer Learning) mô hình YOLOv8 trên nền tảng Google Colab hoặc máy tính có GPU rời trong khoảng 2 - 3 giờ, sau đó nạp file trọng số best.pt mới vào Raspberry Pi 4 thông qua giao diện cập nhật phần mềm từ xa qua OTA/SSH.
Kết luận
Đồ án tốt nghiệp "Ứng dụng xử lý ảnh và YOLO trong hệ thống máy thanh toán tự động" của nhóm sinh viên Trường Đại học Sư phạm Kỹ thuật TP.HCM đã giải quyết xuất sắc một bài toán thực tiễn cấp thiết trong ngành bán lẻ. Bằng việc kết hợp tinh tế giữa phần cứng nhúng chi phí thấp (ESP32, Raspberry Pi 4, Loadcell 5kg) và các thuật toán thị giác máy tính đỉnh cao (YOLOv8, OpenCV, PyZbar), hệ thống đã chứng minh tính khả thi vượt trội với độ chính xác nhận diện đạt 95.17%, sai số cân nặng dưới ±0.2% và thời gian xử lý toàn trình chỉ 24.5 giây/giao dịch.
Đây không chỉ là một công trình nghiên cứu học thuật đạt chuẩn xuất sắc về mặt kỹ thuật viễn thông và nhúng, mà còn là một sản phẩm hoàn chỉnh, sẵn sàng thương mại hóa và chuyển giao công nghệ cho các chuỗi siêu thị, cửa hàng tiện lợi tại Việt Nam. Dự án mở ra tiền đề quan trọng cho các nghiên cứu tiếp theo về trạm tự phục vụ thông minh (Unattended Smart Kiosk) trong kỷ nguyên chuyển đổi số quốc gia.