Các động cơ suy luận AI đang trở nên phổ biến hơn ở các hệ thống biên. Chúng ta thấy các thuật toán học máy và thậm chí các mô hình ngôn ngữ lớn được chuyển giao sang các hệ thống nhúng trong không gian sở thích và thương mại. Trong dự án này, chúng ta sẽ xây dựng một bộ phát hiện khuôn mặt thời gian thực sử dụng Orange Pi 5 được cung cấp sức mạnh bởi bộ xử lý Rockchip 3588. Điều này có nghĩa là chúng ta sẽ, trong thời gian thực, phát hiện khuôn mặt con người từ luồng video webcam của chúng ta.
Để bắt đầu, chúng ta sẽ sử dụng một Orange Pi 5, một webcam USB và mã trong kho lưu trữ công khai của tôi. Bạn có thể tham khảo Làm quen với Orange Pi 5 và bộ xử lý Rockchip RK3588 để biết cách thiết lập Orange Pi 5 của mình. Điều tuyệt vời về ví dụ này là nó cũng có thể chạy trên PC hoặc bất kỳ thiết bị nhúng có sức mạnh cao khác chạy Linux (ví dụ, Raspberry Pi 5). Sau khi bạn đã thiết lập và chạy Orange Pi 5 (hoặc thiết bị khác) của mình, chúng ta sẽ cần cài đặt một số thư viện. Ví dụ này được thiết kế xung quanh Linux (cụ thể là chạy Ubuntu), vì vậy chúng ta sẽ giả định rằng bạn có quyền truy cập vào trình quản lý gói Debian. Từ một cửa sổ dòng lệnh, chạy lệnh sau:
sudo apt update -y && sudo apt install -y python3 python3-pip libopencv-dev python3-opencv v4l-utils
Điều này sẽ cài đặt tất cả các gói cần thiết để chạy bản demo. Cài đặt gói OpenCV Python bằng pip:
pip3 install opencv-python
Bạn cũng có thể tham khảo README để biết thêm các bước kiểm tra cài đặt của mình.
Trong AI Vision với Kria KV260 Vision AI Starter Kit, chúng tôi đã trình bày cách xây dựng một động cơ suy luận AI phát hiện khuôn mặt sử dụng FPGA, nhưng mức độ phức tạp rất cao. Trong ví dụ này, chúng tôi sẽ khám phá một cách dễ dàng hơn nhiều để làm cùng một việc đó. Điều này dễ dàng hơn bởi vì chúng tôi chuyển gánh nặng phức tạp sang CPU hoặc GPU, cả hai chúng tôi sẽ khám phá trong bài viết này. Điều thực sự tuyệt vời là cách OpenCV được tối ưu hóa tốt cho máy tính của chúng tôi. Sử dụng thư viện hoàn toàn che giấu đi tất cả các phức tạp của máy học mà chúng tôi đã trải qua khi cố gắng xây dựng mạng nơ-ron của riêng mình trên FPGA.
Mã khá đơn giản. Chúng ta có thể chia nó thành một vài bước:
Phép màu thực sự ở đây nằm trong "Bộ Phân Loại Cascade" mà chúng ta đang tận dụng với OpenCV. Đây là một công cụ dựa trên học máy để phát hiện đối tượng hoạt động qua một loạt các giai đoạn phức tạp dần (tương tự như khái niệm mạng nơ-ron). Hãy nghĩ về nó như một dây chuyền lắp ráp được điều chỉnh tỉ mỉ, nơi mỗi giai đoạn có một nhiệm vụ: phát hiện các đặc điểm cụ thể như cạnh, góc, hoặc hình dạng. Nếu một khu vực của hình ảnh vượt qua tất cả các điểm kiểm tra này, thì nó được đánh dấu là một đối tượng được phát hiện. Nếu không, nó sẽ bị loại bỏ sớm để tiết kiệm thời gian và sức mạnh xử lý.
Bộ phân loại tuần tự là tất cả về tốc độ và hiệu quả. Nó sử dụng các đặc điểm được định nghĩa trước (tức là, các mẫu như cạnh hoặc độ tương phản) và xử lý chúng theo các giai đoạn, làm cho nó hoàn hảo cho các nhiệm vụ thời gian thực trên các thiết bị có khả năng xử lý hạn chế. Mặt khác, mạng nơ-ron hoạt động trong một giải đấu khác. Chúng tự động học các đặc điểm trực tiếp từ dữ liệu nên có thể xử lý các tình huống phức tạp và đa dạng hơn. Tuy nhiên, sức mạnh đó đi kèm với một cái giá: mạng nơ-ron đòi hỏi nhiều tài nguyên và thời gian tính toán hơn nhiều. Bộ phân loại tuần tự nhanh và nhẹ nhưng kém linh hoạt, trong khi mạng nơ-ron mạnh mẽ nhưng đòi hỏi nhiều tài nguyên. Tất cả đều về việc chọn công cụ đúng cho công việc.
Trong trường hợp của chúng ta, chúng ta được sử dụng một mô hình đã được huấn luyện trước, Bộ Phát Hiện Khuôn Mặt Haar Frontal (dưới dạng một tệp XML), biết chính xác những gì cần tìm kiếm trên khuôn mặt và những gì cần lọc ra. Nói một cách thực tế, đây là đủ tốt như một ví dụ đơn giản mà chúng ta đã khám phá. Như đã đề cập ở trên, nó sẽ không chính xác nhưng vẫn đủ tốt cho hầu hết các ví dụ phát hiện khuôn mặt đơn giản.
Để chạy mã, tất cả những gì bạn cần làm là:
python3 face_detection.py --use-gpu
Hoặc bỏ qua cờ --use-gpu nếu bạn không có GPU trên thiết bị của mình (tức là, không sử dụng Orange Pi 5). Tại thời điểm này, một hộp nhỏ nên xuất hiện, và một hộp màu xanh nên xuất hiện trên khuôn mặt của bạn. Trong trường hợp của tôi, một cái đã xuất hiện ngay lập tức:
Dự án này chứng minh sự tiếp cận dễ dàng của việc phát hiện khuôn mặt thời gian thực với các công cụ như OpenCV và các thiết bị như Orange Pi 5. Bằng cách tận dụng Cascade Classifier nhẹ và hiệu quả (thông qua việc tải một tệp XML đã được huấn luyện trước), chúng tôi đã xây dựng một ví dụ chức năng mà không cần đến sự phức tạp của mạng nơ-ron hoặc lập trình FPGA. Mặc dù phương pháp này có những hạn chế của nó, như xử lý ánh sáng đa dạng hoặc góc độ, đây là một điểm xuất phát hoàn hảo để thử nghiệm với AI tại biên.
Chỉ với một vài thư viện và thiết lập tối thiểu, bạn có thể tái tạo dự án này trên một thiết bị nhúng hoặc thậm chí là một PC tiêu chuẩn. Khi các động cơ suy luận AI tiếp tục được cải thiện, hãy mong đợi thấy nhiều mô hình tinh vi hơn được chạy trên các thiết bị hạn chế về tài nguyên, làm cho AI tiên tiến trở nên dễ tiếp cận hơn với mọi người. Để xem kho lưu trữ chứa tất cả mã để bắt đầu, hãy truy cập https://gitlab.com/ai-examples/orange-pi-face-detection.