Giới thiệu dự án
Mô hình bán lẻ truyền thống đang đối mặt với bài toán nan giải về chi phí vận hành và trải nghiệm khách hàng. Theo các nghiên cứu thị trường ngành bán lẻ toàn cầu, tình trạng khách hàng rời bỏ giỏ hàng do thời gian xếp hàng thanh toán kéo dài gây thiệt hại hàng chục tỷ USD mỗi năm. Sự bùng nổ của đại dịch và xu hướng số hóa đã thúc đẩy mạnh mẽ nhu cầu về trải nghiệm mua sắm không tiếp xúc, liền mạch và tức thì.
Khóa luận tốt nghiệp "Nghiên cứu các kỹ thuật dựa trên thị giác máy tính và máy học để xây dựng ứng dụng Just Walk Out Shopping" được thực hiện bởi sinh viên Lê Quang Trung (MSSV: 20520333) và Hà Phi Hùng (MSSV: 20520526), dưới sự hướng dẫn của TS. Nguyễn Duy Khánh tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM (UIT - VNUHCM, 2024). Đề tài tập trung giải quyết bài toán cốt lõi của mô hình cửa hàng không thu ngân (Autonomous Checkout): tự động hóa hoàn toàn quy trình nhận diện hành động mua sắm, định danh sản phẩm và đồng bộ giỏ hàng thời gian thực chỉ thông qua camera giám sát.
+------------------+ WebRTC Stream +-----------------------------+
| Camera Giám Sát | ------------------------> | Computer Vision Service |
| (Edge Client) | | (YOLOv8n + MoViNet-A1) |
+------------------+ +-----------------------------+
|
Kafka Topic 'cart-updates'
v
+------------------+ Socket.IO API +-----------------------------+
| Next.js Frontend | <------------------------ | Business Service (NestJS) |
| (Khách hàng xem) | | + PostgreSQL Database |
+------------------+ +-----------------------------+
Vấn đề cốt lõi và bài toán thực tiễn
Các rào cản chính khi triển khai mô hình Just Walk Out (JWO) thương mại bao gồm:
- Chi phí hạ tầng phần cứng đắt đỏ: Các giải pháp tiên phong như Amazon Go hay hệ thống tích hợp cảm biến FAIM đòi hỏi hàng trăm camera trần kết hợp mạng lưới cảm biến áp lực (load-cell) và RFID gắn dày đặc trên từng kệ hàng.
- Độ trễ xử lý thời gian thực: Video stream nhiều chiều đòi hỏi năng lực tính toán cực lớn, dễ gây nghẽn cổ chai nếu xử lý tập trung.
- Xử lý thị giác trong môi trường động: Sự che khuất (occlusion), góc quay hạn chế, thay đổi diện mạo khách hàng và kích thước sản phẩm nhỏ gây khó khăn cho việc phân loại chính xác.
Mục tiêu của đề tài
- Nghiên cứu và làm chủ luồng hoạt động: Phân tích kiến trúc hệ thống Just Walk Out, kỹ thuật xử lý luồng video thời gian thực và mô hình mạng nơ-ron học sâu (Deep Learning).
- Xây dựng hệ thống Computer Vision nhận diện: Ứng dụng mô hình YOLOv8n để phát hiện tay và nhận diện mặt hàng; kết hợp mô hình 3D CNN MoViNet-A1-Stream để phân loại hành động lấy (Pick) hoặc trả (Return) sản phẩm.
- Thiết kế kiến trúc hướng sự kiện (Event-Driven Architecture): Tích hợp Apache Kafka điều phối dữ liệu giữa tầng xử lý thị giác máy tính và tầng logic nghiệp vụ.
- Phát triển Backend Service & Web Client: Xây dựng Business Service bằng NestJS kết nối cơ sở dữ liệu PostgreSQL và giao diện hiển thị giỏ hàng trực quan thời gian thực bằng Next.js qua giao thức WebSockets/Socket.IO.
- Thực nghiệm và đánh giá toàn diện: Đo lường độ chính xác mAP, độ trễ hệ thống, FPS và kiểm thử các kịch bản lấy/trả hàng thực tế.
Phương pháp tiếp cận và phạm vi nghiên cứu
- Phương pháp tiếp cận: Khóa luận đề xuất mô hình Pure-Vision (thuần thị giác máy tính) kết hợp kiến trúc phân tán. Thay vì phụ thuộc vào cảm biến vật lý trên kệ, hệ thống kết hợp không gian (Spatial Features từ YOLOv8n) và thời gian (Temporal Features từ MoViNet-A1-Stream đệm luồng) để nhận diện tương tác của người mua sắm.
- Phạm vi nghiên cứu: Đồ án tập trung xây dựng hệ thống mẫu (PoC) xử lý luồng dữ liệu cho một khách hàng đơn lẻ trong một vùng giám sát camera, phân loại tập sản phẩm xác định và tự động cập nhật giỏ hàng lên trang web theo thời gian thực.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí so sánh |
Cửa hàng truyền thống (POS Barcode) |
Hệ thống cảm biến tích hợp (FAIM - Falcao et al.) |
Mô hình Amazon Go |
Giải pháp JWO đề xuất trong khóa luận |
| Phương thức nhận diện |
Quét mã vạch thủ công qua đầu đọc |
Cảm biến trọng lượng kệ hàng + Camera phụ trợ |
Hàng trăm camera trần + Load-cells + Cảm biến lòng bàn tay |
Pure-Vision: Camera đơn + Dual YOLOv8n + MoViNet-A1-Stream |
| Chi phí phần cứng |
Thấp (chỉ cần quầy thu ngân) |
Rất cao (lắp đặt cảm biến toàn bộ kệ) |
Cực kỳ đắt đỏ (hạ tầng chuyên biệt) |
Tối ưu, tận dụng camera IP chuẩn WebRTC |
| Độ phức tạp lắp đặt |
Đơn giản |
Phức tạp, khó bảo trì cảm biến cơ học |
Cần thiết kế lại toàn bộ không gian cửa hàng |
Linh hoạt, triển khai nhanh trên nền tảng sẵn có |
| Độ trễ cập nhật giỏ hàng |
Thủ công tại quầy |
< 1 giây sau khi thay đổi trọng lượng |
Thời gian thực (< 500ms) |
Thời gian thực qua Kafka & Socket.IO (< 350ms) |
| Xử lý che khuất |
N/A |
Tốt (nhờ trọng lượng) |
Xuất sắc (đa camera trần & kệ) |
Phụ thuộc vào góc quay của camera giám sát |
Ma trận yêu cầu hệ thống (MoSCoW)
- Must Have (Bắt buộc): Nhận diện chính xác hành động lấy hàng (Pick) và trả hàng (Return); phát hiện vị trí bàn tay và sản phẩm tương tác; cập nhật giỏ hàng lên giao diện web tức thì; truyền nhận video qua WebRTC không giật lag.
- Should Have (Nên có): Tự động xóa sản phẩm khỏi giỏ khi số lượng về 0; cơ chế hàng đợi xử lý sự kiện bất đồng bộ chống nghẽn; logging chi tiết luồng dữ liệu.
- Could Have (Có thể có): Mở rộng nhận diện đồng thời nhiều góc camera; gom nhóm nhiều khách hàng vào một phiên giỏ hàng chung.
- Won't Have (Chưa thực hiện): Tích hợp cổng thanh toán sinh trắc học lòng bàn tay (Amazon One); quản lý chuỗi cung ứng tồn kho kho hàng lớn.
Thiết kế hệ thống
graph TD
subgraph Client & Ingestion Layer
CAM[WebRTC Camera Client / Video Stream]
WEB[Next.js Web Frontend]
end
subgraph Computer Vision Service - Python
API[aiohttp Signal Server]
RTC[aiortc RTCPeerConnection]
TRACK[VideoVisionTrack Worker]
HD[Hand Detector - YOLOv8n]
ID[Item Detector - YOLOv8n]
AD[Action Detector - MoViNet-A1-Stream]
FUSION[Vision Event Engine]
EMITTER[MessageEmitter - Kafka Producer]
end
subgraph Messaging & Orchestration
KAFKA[(Apache Kafka Cluster - Topic: cart-updates)]
end
subgraph Business & Data Layer - NestJS
KCTRL[Kafka Controller]
CSERVICE[CartService]
GATEWAY[CartGateway - Socket.IO]
DB[(PostgreSQL / Prisma ORM)]
end
CAM -->|SDP Offer / HTTP POST| API
API -->|SDP Answer| CAM
CAM -->|RTP Media Stream| RTC
RTC --> TRACK
TRACK --> HD
TRACK --> ID
TRACK --> AD
HD --> FUSION
ID --> FUSION
AD --> FUSION
FUSION -->|ShoppingEvent| EMITTER
EMITTER -->|Produce Event| KAFKA
KAFKA -->|Consume Event| KCTRL
KCTRL --> CSERVICE
CSERVICE --> DB
CSERVICE --> GATEWAY
GATEWAY -->|WebSocket Push| WEB
Technology Stack và phiên bản chi tiết
- Computer Vision Service: Python 3.10+, PyTorch 2.1.0, Ultralytics YOLOv8 8.1.0, OpenCV 4.9.0, aiortc 1.6.0, aiohttp 3.9.1, kafka-python 2.0.2.
- Business Service: Node.js 20.x LTS, NestJS 10.2.0, Prisma ORM 5.9.0, Socket.IO 4.7.4, KafkaJS 2.2.4, TypeScript 5.3.
- Frontend & Storage: Next.js 14.1.0 (App Router/React 18), Tailwind CSS, PostgreSQL 15.4.
Thiết kế cơ sở dữ liệu (Database Schema)
-- Bảng danh mục sản phẩm
CREATE TABLE "Product" (
"id" SERIAL PRIMARY KEY,
"name" VARCHAR(255) NOT NULL,
"sku" VARCHAR(100) UNIQUE NOT NULL,
"price" DECIMAL(10, 2) NOT NULL,
"description" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Bảng quản lý giỏ hàng của phiên mua sắm
CREATE TABLE "Cart" (
"id" SERIAL PRIMARY KEY,
"sessionId" VARCHAR(255) UNIQUE NOT NULL,
"status" VARCHAR(50) NOT NULL DEFAULT 'ACTIVE',
"totalAmount" DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Bảng chi tiết từng dòng sản phẩm trong giỏ hàng
CREATE TABLE "CartItem" (
"id" SERIAL PRIMARY KEY,
"cartId" INTEGER NOT NULL REFERENCES "Cart"("id") ON DELETE CASCADE,
"productId" INTEGER NOT NULL REFERENCES "Product"("id"),
"quantity" INTEGER NOT NULL DEFAULT 1,
"unitPrice" DECIMAL(10, 2) NOT NULL,
"linePrice" DECIMAL(10, 2) NOT NULL,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "UQ_Cart_Product" UNIQUE ("cartId", "productId")
);
Thiết kế API và giao thức truyền thông
- WebRTC Signaling API (
aiohttp Server):
POST /offer: Nhận WebRTC SDP Offer từ camera client, tạo RTCPeerConnection, thiết lập track nhận video và trả về SDP Answer.
- Kafka Event Topic (
cart-updates) Payload:
{
"eventId": "evt_9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"timestamp": 1718445600000,
"actionType": "PICK",
"items": [
{
"productId": 101,
"quantityChange": 1
}
]
}
- Socket.IO Real-time Cart Gateway:
- Event
registerNewCartListener: Client đăng ký nhận cập nhật.
- Event
cartUpdated: Server push toàn bộ snapshot giỏ hàng mới nhất gồm danh sách items, totalQuantity, totalPrice.
Methodology & Quy trình phát triển
- Quy trình phát triển: Áp dụng mô hình Agile/Scrum rút gọn chia làm 4 giai đoạn chính (Thu thập & gán nhãn dữ liệu $\rightarrow$ Huấn luyện & tối ưu mô hình Deep Learning $\rightarrow$ Xây dựng kiến trúc Microservices $\rightarrow$ Tích hợp & Kiểm thử thực nghiệm).
- Quản lý rủi ro:
- Rủi ro nghẽn luồng xử lý video: Giải quyết bằng mô hình đa tiến trình
ProcessPoolExecutor trong Python kết hợp cơ chế Causal Convolution Stream Buffer của MoViNet.
- Rủi ro mất gói tin giỏ hàng: Giải quyết bằng Apache Kafka với cơ chế Replication và At-least-once Delivery.
Implementation và kết quả
Chi tiết các thuật toán và kỹ thuật cốt lõi
1. Mạng nơ-ron tích chập 2D & Phát hiện vật thể (YOLOv8n)
Mô hình tích chập 2D trích xuất đặc trưng không gian thông qua phép toán nhân chập ma trận trọng số (kernel) $\omega \in \mathbb{R}^{M \times N}$ với lân cận điểm ảnh $x$:
$$h_{ij} = \alpha\left(b + \sum_{m=1}^{M}\sum_{n=1}^{N} \omega_{mn} x_{i+m-1, j+n-1}\right)$$
YOLOv8n (Nano) sử dụng cấu trúc One-stage detector, tối ưu hóa hàm mất mát phân loại (VFL/BCE) và hàm mất mát hồi quy bounding box (CIoU + DFL). Để xác định sản phẩm nào đang được thao tác, hệ thống tính toán khoảng cách không gian (Spatial Distance & IoU) giữa Bounding Box bàn tay (dự đoán từ mô hình HandDetector) và Bounding Box sản phẩm (dự đoán từ ItemDetector):
$$\text{IoU} = \frac{\text{Area}(A \cap B)}{\text{Area}(A \cup B)}$$
2. Tích chập nhân quả 3D & Bộ đệm Stream (MoViNet-A1-Stream)
Để nhận diện hành động mua sắm trong thời gian thực mà không cần nạp toàn bộ video dài vào bộ nhớ, MoViNet áp dụng Causal 3D Convolution (tích chập nhân quả chỉ dựa vào khung hình hiện tại $x_t$ và bộ đệm quá khứ $B$) kết hợp cơ chế gộp tích lũy toàn cục Cumulative Global Average Pooling (CGAP):
$$F_t = f(x_t, B_{[:b]}), \quad \text{CGAP}(a, T) = \frac{1}{T} \sum_{t=1}^{T} a_t$$
Mô hình duy trì bộ đệm luồng gồm $b$ khung hình kích hoạt trước đó, giúp giảm đỉnh sử dụng bộ nhớ (Peak Memory) xuống dưới 15MB mà vẫn giữ độ chính xác Top-1 cao.
Khung hình hiện tại x_t -----\
+--> [ Causal 3D Conv ] --> Đặc trưng F_t --> [ CGAP ] --> Action Logits
Bộ đệm Stream B (b frames) --/ |
v
Cập nhật lại bộ đệm B'
Code Snippet: Xử lý video track và phát hiện sự kiện tại CV Service
import asyncio
from av import VideoFrame
from aiortc import MediaStreamTrack
from ultralytics import YOLO
import torch
class VideoVisionTrack(MediaStreamTrack):
kind = "video"
def __init__(self, track, event_queue, item_model_path, hand_model_path, action_model):
super().__init__()
self.track = track
self.event_queue = event_queue
self.item_detector = YOLO(item_model_path)
self.hand_detector = YOLO(hand_model_path)
self.action_detector = action_model # MoViNet-A1-Stream in PyTorch
self.stream_buffer = None
async def recv(self):
frame: VideoFrame = await self.track.recv()
img = frame.to_ndarray(format="bgr24")
# 1. Phát hiện bàn tay và sản phẩm bằng YOLOv8n
hand_results = self.hand_detector(img, verbose=False, conf=0.5)[0]
item_results = self.item_detector(img, verbose=False, conf=0.5)[0]
# 2. Xử lý nhận diện hành động theo luồng với MoViNet Causal Stream
tensor_frame = torch.from_numpy(img).permute(2, 0, 1).unsqueeze(0).unsqueeze(2).float() / 255.0
with torch.no_grad():
action_logits, self.stream_buffer = self.action_detector(tensor_frame, self.stream_buffer)
action_idx = torch.argmax(action_logits, dim=-1).item()
action_type = "PICK" if action_idx == 1 else ("RETURN" if action_idx == 2 else "NONE")
# 3. Kết hợp vị trí không gian để xác định sản phẩm tương tác
if action_type in ["PICK", "RETURN"] and len(hand_results.boxes) > 0 and len(item_results.boxes) > 0:
target_item_id = self._match_item_in_hand(hand_results.boxes, item_results.boxes)
if target_item_id is not None:
event = {
"actionType": action_type,
"items": [{"productId": target_item_id, "quantityChange": 1 if action_type == "PICK" else -1}]
}
self.event_queue.put(event)
return frame
def _match_item_in_hand(self, hand_boxes, item_boxes):
# Tính toán khoảng cách Euclid tâm hoặc IoU giữa tay và vật thể
# Trả về ID của vật thể gần nhất nằm trong tay người mua sắm
pass
Code Snippet: Nhận sự kiện Kafka và phát Socket.IO tại Business Service
import { Controller } from '@nestjs/common';
import { MessagePattern, Payload } from '@nestjs/microservices';
import { CartService } from './cart.service';
import { CartGateway } from './cart.gateway';
import { CartUpdateDto } from './dto/cart-update.dto';
@Controller()
export class CartKafkaController {
constructor(
private readonly cartService: CartService,
private readonly cartGateway: CartGateway,
) {}
@MessagePattern('cart-updates')
async handleCartUpdate(@Payload() message: CartUpdateDto): Promise<void> {
// 1. Cập nhật cơ sở dữ liệu PostgreSQL qua Prisma ORM
const updatedCart = await this.cartService.updateCart(message);
// 2. Bắn thông điệp Socket.IO tới toàn bộ Web Frontend client đang kết nối
this.cartGateway.emitNewCart(updatedCart);
}
}
Testing và đánh giá thực nghiệm
1. Dữ liệu thực nghiệm
- Bộ dữ liệu bàn tay: Sử dụng EgoHands Dataset gồm 4.800 ảnh được gán nhãn hộp bao bàn tay người trong các hoạt động tương tác góc nhìn thứ nhất (First-person view).
- Bộ dữ liệu mặt hàng: Tập dữ liệu tùy chỉnh gồm các mặt hàng bán lẻ phổ biến (nước giải khát đóng chai, đồ hộp, bánh kẹo đóng gói) được chụp dưới nhiều góc độ và điều kiện ánh sáng với hơn 2.500 ảnh.
- Bộ dữ liệu hành động mua sắm: Các đoạn video ghi nhận hành động Lấy (Pick), Trả (Return) và Duyệt hàng (Idle/Neutral) với tốc độ 30 FPS.
2. Kết quả kiểm thử các mô hình AI độc lập
| Mô hình |
Nhiệm vụ |
Kích thước đầu vào |
Tập dữ liệu |
Precision |
Recall |
mAP50 / Top-1 Acc |
mAP50-95 |
| YOLOv8n-Hand |
Phát hiện bàn tay |
$640 \times 640$ |
EgoHands |
92.4% |
88.1% |
91.8% (mAP50) |
68.5% |
| YOLOv8n-Item |
Định danh sản phẩm |
$640 \times 640$ |
Custom Retail Items |
90.6% |
86.7% |
89.4% (mAP50) |
65.2% |
| MoViNet-A1-Stream |
Phân loại hành động |
$50 \text{ frames} \times 172 \times 172$ |
Custom Shopping Actions |
88.9% |
87.2% |
87.8% (Top-1) |
N/A |
Độ chính xác (Precision) vs. Độ đầy đủ (Recall) trên tập đánh giá:
mAP50 (Hand): [=========================> ] 91.8%
mAP50 (Item): [=======================> ] 89.4%
Top-1 (Action):[======================> ] 87.8%
3. Kết quả đánh giá hiệu năng toàn hệ thống (End-to-End System Benchmark)
| Kịch bản kiểm thử thực tế |
Số lần thử |
Số lần thành công |
Tỷ lệ chính xác |
Độ trễ trung bình |
Trạng thái đồng bộ Web |
| Lấy 1 mặt hàng đơn lẻ |
50 |
47 |
94.0% |
285 ms |
100% chính xác |
| Trả 1 mặt hàng về đúng kệ |
50 |
45 |
90.0% |
310 ms |
100% chính xác |
| Lấy liên tiếp 2 mặt hàng khác nhau |
30 |
26 |
86.7% |
340 ms |
Không mất mát sự kiện |
| Cầm sản phẩm xem rồi đặt lại |
30 |
28 |
93.3% |
320 ms |
Giỏ hàng không đổi |
| Tổng thể (Overall Benchmark) |
160 |
146 |
91.25% |
313.7 ms |
Ổn định cao |
Đổi mới và đóng góp
- Ứng dụng thành công mô hình MoViNet đệm luồng (Stream Buffer) cho bài toán bán lẻ: Thay vì sử dụng các mạng 3D CNN đồ sộ (như I3D, SlowFast) vốn yêu cầu bộ nhớ GPU lớn và có độ trễ cao, đề tài đã ứng dụng MoViNet-A1 với Causal Convolution. Kỹ thuật này cho phép mô hình suy luận liên tục từng khung hình mà chỉ tiêu tốn dưới 15MB VRAM, đạt tốc độ >30 FPS trên phần cứng thông dụng.
- Kiến trúc phân tách Microservices kết hợp Apache Kafka: Phân tách hoàn toàn tác vụ nặng về tính toán (Computer Vision Service - Python) và tác vụ phục vụ giao dịch người dùng (Business Service - NestJS). Việc sử dụng Kafka làm Message Broker giúp hệ thống không bị nghẽn (non-blocking), đảm bảo độ trễ từ lúc camera ghi nhận đến khi hiển thị lên trình duyệt dưới 350ms.
- Giải pháp Pure-Vision tối ưu chi phí cho doanh nghiệp vừa và nhỏ (SMEs): Khác với mô hình đắt đỏ của Amazon Go phụ thuộc vào mạng lưới cảm biến trọng lượng và hàng trăm camera dày đặc, kiến trúc đề xuất chứng minh tính khả thi của việc xây dựng cửa hàng tự động hóa chỉ bằng camera giám sát thông thường, mở ra tiềm năng ứng dụng thực tế cao với chi phí đầu tư ban đầu giảm hơn 70%.
Ứng dụng thực tế và triển khai
Kịch bản triển khai thực tế
- Cửa hàng tiện lợi Grab-and-Go 24/7: Phục vụ tại các tòa nhà văn phòng, ký túc xá đại học, trạm tàu điện ngầm hoặc bệnh viện – nơi nhu cầu mua sắm nhanh các mặt hàng thực phẩm đóng gói, đồ uống không cần nhân viên vận hành.
- Kiosk tự phục vụ trong khu nghỉ dưỡng/khách sạn: Cung cấp đồ dùng cá nhân, thức ăn nhanh mà không cần quầy thanh toán.
[Camera WebRTC 1080p@30fps]
[Edge Computing Node: Mini PC / GPU Server (NVIDIA RTX 3060 / Jetson Orin)]
[Cloud / Local Server: NestJS Business API + PostgreSQL]
[Khách hàng: Màn hình hiển thị tại chỗ / Ứng dụng điện thoại]
Yêu cầu phần cứng và hạ tầng triển khai
| Thành phần |
Cấu hình khuyến nghị cho Edge Node (1-2 Camera) |
Cấu hình triển khai Server (Multi-stores) |
| CPU |
Intel Core i7-11700 / AMD Ryzen 7 5800H |
16 Cores vCPU (Intel Xeon / AMD EPYC) |
| GPU |
NVIDIA RTX 3060 12GB VRAM hoặc RTX 4060 |
NVIDIA A10G / T4 Tensor Core GPU |
| RAM |
16 GB DDR4/DDR5 |
32 GB ECC RAM |
| Camera |
Camera IP hỗ trợ RTSP/WebRTC 1080p @ 30FPS |
Đa góc quay băng thông mạng $\ge 100\text{ Mbps}$ |
| Hệ điều hành |
Ubuntu 22.04 LTS x86_64 |
Ubuntu Server 22.04 LTS / Docker Container |
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Góc nhìn camera đơn (Single Viewpoint): Khi người mua sắm xoay lưng hoặc đưa đồ vật ra sau cơ thể, hiện tượng che khuất điểm ảnh (severe occlusion) làm giảm khả năng nhận diện của YOLOv8 và MoViNet.
- Phạm vi phục vụ một người dùng (Single Shopper): Hiện tại hệ thống chưa tích hợp thuật toán Multi-Object Tracking (MOT) như ByteTrack hoặc DeepSORT để phân biệt đồng thời nhiều người mua sắm đứng sát nhau trên cùng một kệ.
- Điều kiện ánh sáng: Độ chính xác giảm khi môi trường có độ sáng quá yếu hoặc có phản quang mạnh trên bao bì sản phẩm dạng kính/kim loại.
Hướng phát triển trong tương lai
- Tích hợp Đa camera & Tracking đa người dùng: Bổ sung thuật toán Re-Identification (ReID) và ByteTrack để theo dõi xuyên suốt nhiều khách hàng cùng lúc trong không gian lớn với nhiều góc camera giao nhau.
- Tổng hợp cảm biến bổ trợ (Sensor Fusion): Kết hợp camera trần với các dải cảm biến cân nặng mini dưới đáy từng kệ hàng để kiểm tra chéo (Cross-validation), loại bỏ hoàn toàn sai số khi nhận diện các sản phẩm có bao bì tương đồng.
- Mô hình Open-Vocabulary & Zero-Shot: Tích hợp các mô hình thị giác lớn (VLM/CLIP) để tự động nhận diện sản phẩm mới được bổ sung lên kệ mà không cần trải qua quá trình thu thập và tái huấn luyện dữ liệu từ đầu.
Đối tượng hưởng lợi
- Sinh viên & Học viên chuyên ngành CNTT/Khoa học dữ liệu: Cung cấp tài liệu tham khảo hoàn chỉnh về quy trình tích hợp các mô hình Deep Learning thị giác máy tính hiện đại (YOLOv8, MoViNet) với kiến trúc phần mềm phân tán (NestJS, Kafka, WebRTC).
- Kỹ sư phần mềm & AI Engineers: Nắm bắt kiến trúc giải pháp xử lý video thời gian thực hạn chế bộ nhớ (Stream Buffer) và mẫu thiết kế Event-Driven Microservices ứng dụng trong các bài toán thực tiễn.
- Doanh nghiệp bán lẻ & Startups: Sở hữu thiết kế kiến trúc tham chiếu khả thi, tiết kiệm chi phí để từng bước tự động hóa các điểm bán lẻ, cửa hàng thông minh mà không phụ thuộc vào các giải pháp độc quyền đắt đỏ từ các tập đoàn lớn.
- Các nhà nghiên cứu ứng dụng: Mở rộng các hướng nghiên cứu về tương tác người - đồ vật (Human-Object Interaction - HOI) trong bài toán mua sắm thực tế.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?
Hệ thống yêu cầu camera hỗ trợ chuẩn WebRTC hoặc RTSP độ phân giải tối thiểu 1080p tốc độ 30 FPS. Phía máy chủ thị giác máy tính cần trang bị tối thiểu 1 GPU NVIDIA có $\ge 6\text{ GB}$ VRAM hỗ trợ CUDA (ví dụ: GTX 1660 Super hoặc RTX 3050 trở lên), RAM hệ thống 16GB và đường truyền mạng nội bộ có độ trễ thấp ($< 20\text{ ms}$).
2. MoViNet-A1-Stream khác biệt như thế nào so với các mô hình 3D CNN truyền thống?
Các mạng 3D CNN truyền thống (như I3D) cần nhận đồng thời cả đoạn clip (ví dụ 16 - 64 frames) rồi mới thực hiện tích chập không gian - thời gian, gây độ trễ lớn và chiếm dụng hàng trăm MB VRAM. MoViNet-A1-Stream áp dụng Causal 3D Convolution và Stream Buffer, cho phép nạp và xử lý trực tiếp từng khung hình đơn lẻ (Frame-by-Frame), giảm đỉnh bộ nhớ xuống dưới 15MB và cho phép phát hiện hành động liên tục với độ trễ suy luận tức thời.
3. Làm thế nào để mở rộng hệ thống cho nhiều khách hàng cùng mua sắm?
Để mở rộng phục vụ nhiều khách hàng, hệ thống cần tích hợp thêm module Multi-Person Tracking (ví dụ: ByteTrack hoặc DeepSORT) kết hợp gán định danh (Tracking ID) cho từng cá nhân khi bước qua cửa vào. Mỗi hành động Lấy/Trả kèm vị trí bàn tay sẽ được ánh xạ với Bounding Box của người thực hiện tương ứng để cập nhật chính xác vào Session giỏ hàng của người đó.
4. Hệ thống có bảo mật thông tin và tính riêng tư của khách hàng không?
Mô hình hoàn toàn tuân thủ bảo vệ quyền riêng tư: Stream video chỉ được xử lý tạm thời trong RAM tại tầng Computer Vision Service để trích xuất tọa độ Bounding Box và sự kiện hành động, tuyệt đối không lưu trữ video khuôn mặt hay hình ảnh thô của khách hàng vào cơ sở dữ liệu dài hạn.
5. Chi phí ước tính và thời gian hoàn vốn (ROI) khi ứng dụng mô hình này?
Chi phí lắp đặt một trạm bán lẻ tự động theo mô hình đề xuất dao động từ 1.500 - 3.000 USD (bao gồm Edge GPU Node và camera), thấp hơn rất nhiều so với mức 50.000 - 100.000 USD của các mô hình đa cảm biến. Với việc cắt giảm 100% chi phí nhân sự trực ca thu ngân và vận hành 24/7, thời gian hoàn vốn ước tính chỉ từ 6 đến 12 tháng tùy thuộc vào lưu lượng khách hàng.
Kết luận
Khóa luận tốt nghiệp "Nghiên cứu các kỹ thuật dựa trên thị giác máy tính và máy học để xây dựng ứng dụng Just Walk Out Shopping" của sinh viên Lê Quang Trung và Hà Phi Hùng dưới sự hướng dẫn của TS. Nguyễn Duy Khánh tại Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM đã hiện thực hóa thành công một mô hình cửa hàng không thu ngân hiện đại, toàn diện và có tính ứng dụng cao.
Bằng việc kết hợp tinh tế giữa các công nghệ Deep Learning tiên tiến (YOLOv8n, MoViNet-A1-Stream) và kiến trúc phần mềm hướng sự kiện phân tán (WebRTC, Apache Kafka, NestJS, Next.js, PostgreSQL), đề tài đã chứng minh tính khả thi vượt trội của phương pháp tiếp cận Pure-Vision: đạt độ chính xác thực nghiệm tổng thể trên 91%, độ trễ phản hồi thời gian thực dưới 350ms với chi phí hạ tầng tối ưu. Đây là nền tảng vững chắc và nguồn tài liệu tham khảo giá trị cho các nghiên cứu chuyên sâu cũng như việc thương mại hóa các giải pháp bán lẻ tự động hóa trong tương lai.