Quay lại Trạm điều khiển
Level: Chuyên giaID: 0016| 29/08/2026

Thị giác Máy tính (Computer Vision): Nhận diện Vật thể với OpenCV

Tích hợp camera cho Raspberry Pi. Xử lý ảnh thời gian thực, lọc màu và nhận diện khuôn mặt cơ bản để robot tự động bám mục tiêu.

Thị giác Máy tính (Computer Vision): Nhận diện Vật thể với OpenCV cùng Ninebot

Chào các đồng chí cùng đam mê, hôm nay tôi - Ninebot - sẽ chia sẻ về việc làm sao để con robot của các bạn không còn "mù" nữa. Chúng ta sẽ không đi lại mấy thứ vỡ lòng như cài đặt Python, mà đi thẳng vào kiến trúc xử lý tín hiệu hình ảnh để đạt được độ trễ thấp nhất trên nền tảng Raspberry Pi.

Tối ưu hóa Pipeline Camera trên Raspberry Pi

Khi làm việc với OpenCV trên RPi, sai lầm lớn nhất là xử lý ảnh ở độ phân giải gốc. Ninebot khuyên các bạn hãy ép pipeline về luồng V4L2 (Video4Linux2). Để giảm thiểu CPU load, chúng ta nên resize frame xuống khoảng 320x240 trước khi đưa vào bộ lọc. Việc này không làm giảm độ chính xác là bao, nhưng lại giúp khung hình đạt ngưỡng 30fps ổn định.

import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)

Lọc màu và Nhận diện Vật thể theo thời gian thực

Để robot bám theo vật thể, thay vì dùng các mô hình Deep Learning nặng nề (vốn làm Ninebot thấy xót cho con chip RPi), hãy sử dụng không gian màu HSV. Bằng cách mask màu mục tiêu, chúng ta có thể tìm tọa độ trọng tâm (centroid) cực nhanh thông qua các moment của hình học.

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_bound, upper_bound)
contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if contours:
    c = max(contours, key=cv2.contourArea)
    M = cv2.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])

Nhận diện Khuôn mặt và Logic Bám đuổi

Sử dụng Haar Cascades tích hợp sẵn trong OpenCV là lựa chọn thực dụng nhất cho bài toán nhận diện khuôn mặt. Khi đã lấy được tọa độ (x, y) của mặt, chúng ta cần một vòng lặp điều khiển PID (Proportional-Integral-Derivative) để điều chỉnh động cơ. Tôi đã từng thử nghiệm logic này trên một khung gầm tự chế của Ninebot và kết quả rất ấn tượng, độ mượt của chuyển động phụ thuộc hoàn toàn vào cách bạn tinh chỉnh tham số P (tỷ lệ) để tránh rung lắc.

Tóm lại, sự kết hợp giữa OpenCV và tư duy tối ưu phần cứng là chìa khóa. Nếu các bạn gặp lỗi trong quá trình biên dịch, hãy nhớ rằng Ninebot cũng từng phải "đập đi xây lại" code rất nhiều lần trước khi thấy kết quả. Chúc anh em thực hiện thành công và đừng để robot của mình đứng yên làm cảnh!

Gặp khó khăn khi nạp code?

Đội ngũ kỹ thuật Ninebot luôn sẵn sàng hỗ trợ bạn debug và giải quyết các vấn đề phần cứng trực tiếp.

Gọi ngay: 091.774.7777