Trong Bắt đầu với Bộ Kit Khởi động Kria KV260 Vision AI, chúng tôi đã mở hộp và trải nghiệm Bộ Kit Khởi động Kria KV260 Vision AI từ AMD Xilinx. Bảng mạch này cung cấp cho chúng tôi một FPGA và bộ xử lý ARM đủ mạnh để chạy một bản phân phối đầy đủ của Ubuntu trên đó. Trong bài viết này, chúng tôi sẽ xây dựng và chạy ứng dụng SmartCam sử dụng camera Raspberry Pi. Ứng dụng này sẽ có khả năng phát hiện khuôn mặt trong thời gian thực và hiển thị điều đó trên màn hình máy tính của bạn.
Hướng dẫn này theo sau hướng dẫn gốc được tổ chức bởi các bạn tại AMD Xilinx. Bạn sẽ nhận thấy rằng một phần lớn hướng dẫn này rất giống (nếu không muốn nói là giống hệt) với của họ. Phản ứng ban đầu của tôi với hướng dẫn này là cảm thấy choáng ngợp. Tôi có một nền tảng khá tốt về thiết kế FPGA, nhưng việc đi qua từng bước hướng dẫn của họ, đôi khi có thể là thách thức và hơi đáng sợ. Tôi đang tìm kiếm điều gì đó đơn giản và dễ theo dõi hơn. Sau khi xem xét lại các hướng dẫn được viết lại của người khác, tôi không thực sự hài lòng với những gì tôi tìm thấy; do đó, tôi quyết định viết hướng dẫn của riêng mình.
Nếu bạn đang tìm kiếm tất cả các chi tiết rùng rợn, tôi rất khuyên bạn nên xem lại bài hướng dẫn gốc. Có một số bước không được rõ ràng lắm, nhưng tôi cố gắng vượt qua (hoặc thậm chí là bỏ qua) chúng trong bài hướng dẫn này. Quan trọng nhất, vào thời điểm viết bài này, ứng dụng SmartCam mẫu dường như không hoạt động với firmware mới nhất. Trong kho lưu trữ đã được fork của tôi, tôi đã tạo ra các script tự động (và thậm chí là các file flash cuối cùng cần thiết) để giúp bạn khởi chạy demo mà không gặp trở ngại. Với bài hướng dẫn này trong tay, tôi hy vọng bạn sẽ có thể nhanh chóng nhảy vào AI trên các mục tiêu phần cứng và trải nghiệm cảm giác "woah" mà tôi đã có sau khi thành công khởi động demo.
Bạn sẽ cần bộ Kria KV260 Vision Starter Kit từ AMD Xilinx, tất nhiên. Bạn cần phải thiết lập bo mạch của mình, và việc này có thể được thực hiện bằng cách theo dõi hướng dẫn trước đây của tôi, Getting Started with the Kria KV260 Vision AI Starter Kit. Bạn cũng sẽ cần một Raspberry Pi Camera Module V2. Phần V2 này rất quan trọng. Tôi đã thử không thành công khi chạy demo với phiên bản camera V1 rẻ hơn và các loại camera nhái khác (và tôi có thể khẳng định rằng chúng không hoạt động với demo này). Bạn cần cắm cáp ribbon của camera vào cổng J9 trên bo mạch. Cuối cùng, bạn sẽ cần một màn hình (hoặc TV) hỗ trợ HDMI để kết nối với bộ kit KV260 của bạn (và dây cáp HDMI, tất nhiên).
Trước khi bắt đầu với bản demo, bạn cần phải cài đặt cả Docker và ví dụ SmartCam trên thiết bị Kria KV260 của mình (mặc dù chúng ta sẽ không sử dụng ứng dụng SmartCam). Bạn cũng cần Xilinx Vitis (bản cài đặt đầy đủ) phiên bản 2022.1. Lưu ý rằng số phiên bản của Xilinx Vitis rất quan trọng vì hướng dẫn này được xây dựng cụ thể cho phiên bản đó.
Bạn có thể cài đặt Docker bằng cách sử dụng phương pháp Convenience Script. Để làm điều đó, mở một cửa sổ terminal và chạy các dòng lệnh sau:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh --dry-run sudo usermod -aG docker $USER
Để cài đặt gói ứng dụng SmartCam, chạy lệnh sau trong terminal:
sudo apt install -y xlnx-firmware-kv260-smartcam
Bạn cũng cần phải clone fork của tôi từ kho lưu trữ gốc:
git clone --recursive --branch rpi-camera-demo-clean https://github.com/amahpour/kria-vitis-platforms.git
Để mọi thứ trở nên đơn giản nhất có thể, tôi đã viết một script tự động chạy quá trình build một cách tự động. Bạn sẽ không cần phải theo dõi các ảnh chụp màn hình trong hướng dẫn gốc để cập nhật các thiết kế khối hoặc thay đổi bất kỳ mã nào. Hướng dẫn này cố gắng thực hiện build mà không cần phải nhảy vào giao diện người dùng của Vitis. Để chạy script build, cd vào repository đã clone của bạn và chạy các lệnh sau:
cd kv260 ./build_demo.sh
Lưu ý rằng script này được viết với Linux trong tâm trí. Nếu bạn đang chạy trên Windows, tôi rất khuyên bạn nên thiết lập WSL 2 với Ubuntu và cài đặt Xilinx Vitis ở đó (thay vì trên Windows).
Nếu bạn nhận được lỗi phàn nàn rằng không tìm thấy Vivado, có lẽ bạn đã quên chạy source cho cài đặt Xilinx. Chỉ cần chạy lệnh này:
source /tools/Xilinx/Vivado/2022.1/settings64.sh
Chạy script build_demo.sh sẽ hoàn toàn bỏ qua toàn bộ hướng dẫn vì tôi đã bao gồm thiết kế khối cập nhật, tệp ràng buộc chân, và cấu hình dự án trong thư mục kv260/extras/ của repository. Nếu bạn muốn đi qua từng bước của hướng dẫn, tôi rất khuyên bạn nên xem bản gốc.
Nếu mọi thứ diễn ra đúng đắn, bạn sẽ nhận được một tệp bitstream nằm ở
kv260/overlays/examples/smartcam/binary_container_1/link/int/kv260-raspi-dpu.bit.bin.
Quá trình xây dựng có thể mất từ 1-2 giờ. Không phải ai cũng có thời gian cho việc này, vì vậy tôi đã bao gồm tệp bitstream trong thư mục kv260/extras/ như một bản sao lưu.
Tại thời điểm này, chúng ta đã sẵn sàng sao chép các tệp của mình vào bảng KV260 và chạy demo. Bạn có thể chuyển tệp qua ổ USB flash hoặc qua lệnh SCP (secure copy). Bạn cần chuyển những tệp sau:
kv260/extras/kv260-raspi-dpu.bit.bin (hoặc cái được tạo ra như đã nói ở trên)
kv260/extras/kv260-raspi-dpu.dtbo
kv260/extras/kv260-raspi-dpu.xclbin
Một khi quay trở lại thiết bị KV260 của bạn, chúng ta cần di chuyển những tệp này vào phần thư viện nơi firmware thường được tải lên:
sudo mkdir /lib/firmware/xilinx/kv260-raspi-dpu sudo mv kv260-raspi-dpu.bit.bin /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.dtbo /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.xclbin /lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin sudo cp /lib/firmware/xilinx/kv260-smartcam/shell.json /lib/firmware/xilinx/kv260-raspi-dpu/
Bây giờ, chúng ta đã sẵn sàng để khởi chạy ứng dụng. Lưu ý rằng điều này sẽ tắt màn hình của bạn, vì vậy bạn nên thực hiện việc này qua SSH hoặc qua giao diện nối tiếp USB (tức là, cổng USB và sử dụng PuTTY hoặc TeraTerm):
sudo xmutil listapps sudo xmutil unloadapp sudo xmutil loadapp kv260-raspi-dpu sudo xmutil desktop_disable docker run \ --env="DISPLAY" \ -h "xlnx-docker" \ --env="XDG_SESSION_TYPE" \ --net=host \ --privileged \ --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \ -v /tmp:/tmp \ -v /dev:/dev \ -v /sys:/sys \ -v /etc/vart.conf:/etc/vart.conf \ -v /lib/firmware/xilinx:/lib/firmware/xilinx \ -v /run:/run \ -it xilinx/smartcam:latest bash
Trong container Docker, chúng ta cần thực hiện một sửa đổi nhỏ vào một tệp. Điều đó đòi hỏi chúng ta phải cài đặt vim trước:
apt-get update -y && apt-get install -y vim vim /opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json
Sau khi vào vim, nhấn "i" (để "chèn") để bắt đầu chỉnh sửa tệp. Tìm dòng chỉ đến một tệp "xclbin" và cập nhật nó với đường dẫn này:
/lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin
Nhấn phím thoát. Gõ vào ":wq" (để lưu và thoát), sau đó nhấn enter. Sau đó, chúng ta có thể chạy ứng dụng với lệnh (rất dài) sau:
gst-launch-1.0 mediasrcbin name=videosrc media-device=/dev/media0 v4l2src0::io-mode=mmap v4l2src0::stride-align=256 ! video/x-raw, width=1920, height=1080, format=NV12, framerate=30/1 ! tee name=t ! queue ! vvas_xmultisrc kconfig="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json" ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/aiinference.json" ! ima.sink_master vvas_xmetaaffixer name=ima ima.src_master ! fakesink t. ! queue max-size-buffers=1 leaky=2 ! ima.sink_slave_0 ima.src_slave_0 ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/drawresult.json" ! queue ! kmssink driver-name=xlnx plane-id=39 sync=false fullscreen-overlay=true
Nếu mọi thứ hoạt động đúng cách, màn hình (hoặc TV) của bạn sẽ bật trở lại với nguồn cấp từ camera Raspberry Pi. Nó sẽ đặt một hộp màu xanh xung quanh bất kỳ khuôn mặt nào mà nó phát hiện trong nguồn video theo thời gian thực.
Trong bài viết này, chúng tôi đã xem xét hướng dẫn SmartCam với Camera Raspberry Pi và quan sát các phím tắt cần thiết để "chỉ cần làm cho nó hoạt động." Tại thời điểm này, bạn nên đã có SmartCam của riêng mình đang hoạt động trên Kria KV260, phát hiện khuôn mặt trong thời gian thực. Mục tiêu của tôi là đơn giản hóa quy trình để bạn có thể tập trung nhiều hơn vào niềm vui khi thấy AI hoạt động thay vì lúng túng qua hướng dẫn gốc. Hy vọng rằng, hướng dẫn này đã làm cho mọi thứ trở nên rõ ràng và nhanh chóng hơn cho bạn để đạt được khoảnh khắc "nó hoạt động." Bây giờ, đến lượt bạn sáng tạo và khám phá những gì khác bạn có thể làm với bộ kit khởi đầu mạnh mẽ này.
Lưu ý: Tất cả mã cho dự án này có thể được tìm thấy trong kho lưu trữ này.