Hello,
I have problem when I recorded the python program face_detection.py to SD. It has an error message. Please explain and help me correct it.
Thank you very much
Sincerely yours
Denis B
face_detection.py - Chương trình phát hiện khuôn mặt cho OpenMV H7R2
Được tạo bởi Gemini dựa trên yêu cầu của bạn.
import sensor # Thư viện để điều khiển cảm biến camera
import time # Thư viện để đo thời gian và điều khiển độ trễ
import image # Thư viện để xử lý hình ảnh, bao gồm phát hiện đối tượng
— Cài đặt cảm biến camera —
Đặt lại cảm biến về trạng thái mặc định
sensor.reset()
Đặt định dạng pixel thành GRAYSCALE (ảnh xám)
Phát hiện khuôn mặt hoạt động hiệu quả nhất và nhanh nhất trên ảnh xám.
sensor.set_pixformat(sensor.GRAYSCALE)
Đặt kích thước khung hình thành HQVGA (160x120 pixels)
Kích thước này cung cấp sự cân bằng tốt giữa hiệu suất và độ chính xác cho phát hiện khuôn mặt.
sensor.set_framesize(sensor.HQVGA)
Bỏ qua một số khung hình ban đầu để cảm biến ổn định độ phơi sáng và cân bằng trắng.
Điều này giúp đảm bảo chất lượng hình ảnh tốt ngay từ đầu.
sensor.skip_frames(time=2000) # Bỏ qua khung hình trong 2000ms (2 giây)
— Tải Haar Cascade cho phát hiện khuôn mặt —
Haar Cascade là một tập hợp các tính năng được huấn luyện để nhận diện các đối tượng cụ thể,
trong trường hợp này là khuôn mặt.
“frontalface” là mô hình tích hợp sẵn để phát hiện khuôn mặt phía trước.
‘stages=25’ sử dụng tất cả 25 giai đoạn của cascade, cung cấp độ chính xác cao nhất.
Bạn có thể giảm số lượng giai đoạn để tăng tốc độ nhưng có thể giảm độ chính xác.
face_cascade = image.HaarCascade(“frontalface”, stages=25)
In thông tin về Haar Cascade đã tải (ví dụ: đường dẫn, số lượng giai đoạn).
Điều này hữu ích cho việc gỡ lỗi.
print(face_cascade)
— Khởi tạo đồng hồ để tính toán FPS (Frames Per Second) —
Đồng hồ này sẽ giúp chúng ta theo dõi hiệu suất của chương trình.
clock = time.clock()
— Vòng lặp chính của chương trình —
Vòng lặp này sẽ chạy liên tục để chụp ảnh, phát hiện khuôn mặt và hiển thị kết quả.
while (True):
# Đánh dấu thời gian bắt đầu của khung hình hiện tại để tính toán FPS.
clock.tick()
# Chụp một bức ảnh từ cảm biến camera.
img = sensor.snapshot()
# --- Tìm các đối tượng (khuôn mặt) trong ảnh ---
# img.find_features() sử dụng Haar Cascade để quét ảnh và tìm các đối tượng.
# 'face_cascade': Mô hình Haar Cascade đã tải.
# 'threshold=0.75': Ngưỡng độ tin cậy. Giá trị cao hơn (gần 1.0) sẽ dẫn đến ít phát hiện hơn
# nhưng độ chính xác cao hơn (ít sai sót). Giá trị thấp hơn sẽ tăng số lượng
# phát hiện nhưng có thể có nhiều dương tính giả hơn.
# 'scale=1.35': Hệ số tỷ lệ. Giá trị này xác định mức độ thay đổi kích thước của cửa sổ quét
# giữa các lần lặp. Giá trị nhỏ hơn (gần 1.0) cho phép phát hiện các đối tượng
# nhỏ hơn nhưng sẽ chậm hơn. Giá trị lớn hơn sẽ nhanh hơn nhưng có thể bỏ lỡ
# các đối tượng nhỏ.
objects = img.find_features(face_cascade, threshold=0.75, scale=1.35)
# --- Vẽ hình chữ nhật xung quanh các khuôn mặt đã phát hiện ---
# Duyệt qua danh sách các đối tượng (khuôn mặt) đã tìm thấy.
# Mỗi 'r' là một tuple (x, y, width, height) đại diện cho vị trí và kích thước của khuôn mặt.
for r in objects:
# Vẽ một hình chữ nhật trên ảnh tại vị trí của khuôn mặt.
# 'r' cung cấp tọa độ và kích thước.
img.draw_rectangle(r)
# --- In FPS ---
# In ra số khung hình mỗi giây hiện tại.
# Lưu ý: FPS thực tế trên OpenMV IDE có thể thấp hơn một chút do việc truyền dữ liệu
# khung hình qua USB.
print(clock.fps())