Nhận diện vật thể real-time bằng YOLOv8 và Raspberry Pi 5
Nâng cao18/5/2026

Nhận diện vật thể real-time bằng YOLOv8 và Raspberry Pi 5

Tận dụng sức mạnh ARM Cortex-A76 của Raspberry Pi 5 để chạy YOLOv8 nhận diện vật thể thời gian thực. Pipeline sử dụng picamera2 chụp frame, tflite-runtime chạy model YOLOv8n INT8 (~30 FPS) và hiển thị kết quả qua Flask stream. Không cần GPU rời.

YOLOv8OpenCVTFLiteCameraAIRaspberry Pi 5
0 lượt thích1 người đã làm2 giờ5 bước4 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

Phần 3: Xây dựng pipeline nhận diện vật thể với Picamera2

1. Giới thiệu về Picamera2 và cách hoạt động, 2. Thiết lập camera và kiểm tra hình ảnh chụp, 3. Chụp khung hình và lưu trữ tạm thời, 4. Kết nối Picamera2 với mô hình YOLOv8n, 5. Xử lý khung hình để nhận diện vật thể, 6. Hiển thị kết quả nhận diện trên console.

Cập nhật 01/06/2026

Phần 3: Xây dựng pipeline nhận diện vật thể với Picamera2

1. Giới thiệu về Picamera2 và cách hoạt động

Picamera2 là một thư viện Python được thiết kế để tương tác với camera trên Raspberry Pi. Thư viện này cung cấp một API thân thiện giúp bạn dễ dàng chụp ảnh, quay video và xử lý hình ảnh. Với khả năng tích hợp tốt với các thư viện như OpenCV, Picamera2 trở thành một công cụ mạnh mẽ cho các ứng dụng IoT, đặc biệt trong lĩnh vực nhận diện vật thể.

Picamera2 sử dụng các driver của camera để tương tác trực tiếp với phần cứng, cho phép bạn truy cập vào các tính năng nâng cao như điều chỉnh độ phơi sáng, độ tương phản và độ sáng. Thông qua đó, bạn có thể tối ưu hóa chất lượng hình ảnh cho các ứng dụng nhận diện vật thể.

2. Thiết lập camera và kiểm tra hình ảnh chụp

Để bắt đầu, bạn cần cài đặt thư viện Picamera2. Bạn có thể thực hiện điều này bằng cách sử dụng pip:

pip install picamera2

Sau khi cài đặt xong, bạn có thể viết một đoạn mã đơn giản để kiểm tra camera và chụp một bức ảnh:

from picamera2 import Picamera2
import time

# Khởi tạo camera
picam2 = Picamera2()
picam2.start()

# Chờ một chút để camera ổn định
time.sleep(2)

# Chụp một bức ảnh
image = picam2.capture_array()
picam2.close()

# Lưu bức ảnh
import cv2
cv2.imwrite('test_image.jpg', image)

Đoạn mã trên sẽ khởi tạo camera, chờ một chút để ổn định, chụp một bức ảnh và lưu lại với tên là test_image.jpg.

3. Chụp khung hình và lưu trữ tạm thời

Để xây dựng pipeline nhận diện vật thể, bạn cần liên tục chụp khung hình từ camera. Đoạn mã dưới đây sẽ thực hiện điều này và lưu trữ tạm thời từng khung hình:

while True:
    image = picam2.capture_array()
    # Lưu tạm khung hình
    cv2.imwrite('temp_frame.jpg', image)
    # Thêm một đoạn mã để dừng vòng lặp, ví dụ nhấn phím

Khi bạn chạy đoạn mã trên, nó sẽ liên tục chụp hình và lưu vào tệp temp_frame.jpg. Bạn có thể thêm điều kiện để dừng vòng lặp, chẳng hạn như nhấn phím.

4. Kết nối Picamera2 với mô hình YOLOv8n

Để kết nối Picamera2 với mô hình YOLOv8n, trước tiên bạn cần tải mô hình đã được huấn luyện và chuyển đổi sang định dạng TensorFlow Lite (TFLite). Bạn có thể sử dụng đoạn mã sau để tải mô hình:

import tensorflow as tf

# Tải mô hình YOLOv8n
model = tf.lite.Interpreter(model_path="yolov8n.tflite")
model.allocate_tensors()

Đoạn mã trên sẽ tải mô hình YOLOv8n từ tệp yolov8n.tflite và chuẩn bị để sử dụng.

5. Xử lý khung hình để nhận diện vật thể

Để xử lý khung hình và nhận diện vật thể, bạn cần chuyển đổi khung hình sang định dạng phù hợp và chạy mô hình YOLOv8n:

def preprocess_image(image):
    # Chuyển đổi hình ảnh sang định dạng phù hợp với mô hình
    image_resized = cv2.resize(image, (640, 640))
    input_data = image_resized.astype('float32') / 255.0
    input_data = input_data.reshape(1, 640, 640, 3)
    return input_data

# Xử lý và nhận diện
input_data = preprocess_image(image)
model.set_tensor(model.get_input_details()[0]['index'], input_data)
model.invoke()

# Lấy kết quả
output_data = model.get_tensor(model.get_output_details()[0]['index'])

Trong đoạn mã trên, hàm preprocess_image sẽ chuẩn bị khung hình và sau đó, mô hình YOLOv8n sẽ thực hiện nhận diện vật thể.

6. Hiển thị kết quả nhận diện trên console

Cuối cùng, bạn cần hiển thị kết quả nhận diện trên console. Bạn có thể làm như sau:

for detection in output_data[0]:
    confidence = detection[4]
    if confidence > 0.5:  # Ngưỡng tin cậy
        x1, y1, x2, y2 = detection[0:4].astype(int)
        print(f"Vật thể được nhận diện tại tọa độ: ({x1}, {y1}), ({x2}, {y2}) với độ tin cậy: {confidence:.2f}")

Tip: Bạn có thể điều chỉnh ngưỡng tin cậy để tăng hoặc giảm độ chính xác của mô hình.

Đoạn mã trên sẽ kiểm tra từng kết quả nhận diện và hiển thị tọa độ cùng với độ tin cậy. Đây là bước quan trọng để bạn có thể theo dõi hiệu suất của mô hình YOLOv8n trong quá trình nhận diện vật thể.

Với các bước trên, bạn đã hoàn thành việc xây dựng pipeline nhận diện vật thể với Picamera2 và YOLOv8n. Trong các phần tiếp theo, chúng ta sẽ tìm hiểu cách hiển thị kết quả trên giao diện web sử dụng Flask.