KV260 Kria Starter Kit Series: 2 - Smartcam Application (Ubuntu)
Ubuntu 22.04 işletim sistemimizi başarılı şekilde karta yükleyip boot ettikten sonra sıradaki adım Xilinx'in hali hazırda sunduğu AI Accelerated uygulamalarından birini Kria Board üzerinde çalıştırmak olacak. Bunun için ilk uygulamamız Smartcam isimli bir Face Detection uygulaması.
Öncelikle Ubuntu oturumumuzu açtıktan sonra bir upgrade yapmamız gerekecek. Aksi takdirde zaten mevcut AI ugulamalarını çalıştırmak mümkün olmayacaktır. Bunu ben değil Xilinx bizzat kendisi söylüyor. Bu upgrade işlemi gerçekleştirilirken ben bazı sorunlarla karşılaştım ve ilk başta çözümün nerede olduğunu bulamadım ama daha sonra uygulamayı çalıştırmakla meşgulken aşağıdaki Xilinx dökümantasyonuna ulaştım ve burada upgrade sırasında oluşabilecek sorunlar ve çözümleri hakkında bilgilerin yer aldığnı farkettim:
https://xilinx.github.io/kria-apps-docs/kv260/2022.1/build/html/docs/kria_starterkit_linux_boot.html
Dolayısıyla Smartcam uygulamasını çalıştırma adımına geçmeden önce bu Ubuntu güncelleme işleminin düzgün bir şekilde tamamlandığından emin olmamız lazım. Şimdi bu işlemleri düzgünce hallettiğimizi varsayarak uygulamanın kurulumu ve çalıştırılması aşamasına geçebiliriz.
Öncelikle kv260-smartcam firmware paketini indirmemiz gerekiyor:
ubuntu@kria:~$ sudo apt search xlnx-firmware-kv260
ubuntu@kria:~$sudo apt install xlnx-firmware-kv260-smartcam
Sırasıyla yukarıdaki komutları çalıştırdıktan sonra smartcam uygulamasını board'a indirmiş olacağız. Şimdi sırada en kritik adımlardan biri var. İndirdiğimiz firmware paketi bitstream ve device tree overlay (dtbo) dosyalarını içermektedir. Bu oldukça Linux kernel ile alakalı kısım. Yani donanım tarafını ilgilendiren altyapı. Tabi ki bitstream olması da PL içerisinde kullanılacak donanım dosyasının olduğu anlamına gelir. Geri kalan firmware kısmı ise Ubuntu işletim sisteminde çalıştıracağımız üst katman yazılım ile aradaki iletişimi kuracak olan gömülü sistem yazılımıdır. Şimdi buradan sonra uygulamayı sağlıklı bir şekilde çalıştırabilmek için desktop ortamı devre dışı bırakılmalıdır:
sudo xmutil desktop_disable
Tüm bu işlemleri yaparken tabi ki 'xmutil' utilityden faydalanıyoruz. Bu arada desktop_disable yerine desktop_enable çağrılınca da tekrar desktop ortamı geri gerilmiş oluyor. Bu olay bu kadar basit.
Firmware'i indirdikten sonra yükleme işlemine geçiyoruz. Aşağıdaki komutu çalıştırıp öncelikle mevcut çalışmakta ya da mount edilmiş uygulamaları bir kontrol ediyoruz.
sudo xmutil listapps
Bu komutun çıktısı olarak '-1' durumuna sahip olan uygulamalar aktif edilmemiş, '0' olanlar ise aktif olan uygulamalardır. Yalnızca bir uygulama çalışır vaziyette olabilir. Eğer halihazırda bir accelerator/firmware çalışmaktaysa önce onu 'unload' etmemiz lazım
sudo xmutil unloadapp
sudo xmutil loadapp kv260-smartcam
Docker Uygulamasını Çalıştırma
Bu noktaya kadar smartcam uygulaması için gerekli ortamın bir kısmını halletmiş olduk ama en kritik aşama burasıydı. Eğer bu ilk aşamada bir hata yaptıysak bundan sonrasında uygulamamızın düzgün çalışmaması durumuyla karşılaşacağız. Bunu ben tecrübe ettim. Dolayısıyla karşılaşacağımız hata mesajlarıyla ilgili çözümlere ulaşacağımız linki de paylaşmak istedim:
https://xilinx.github.io/kria-apps-docs/faq/build/html/docs/faq.html
Burada sık sorulan sorular ve firmware yükleme sırasında karşılaşılan sorunlar ve onların çözümü üzerine birçok bilgi mevcut.
Docker kısmı için öncelikle 2022.1 Docker imajını çekmemiz lazım.
docker pull xilinx/smartcam:2022.1
Eğer birden fazla docker uygulaması çalıştırmak istiyorsak ve SD kartımızda alan problemi varsa o zaman istedigimiz docker container'ını kaldırabiliriz:
docker rmi --force <other containers>
yüklü olan imajlar da şu komut ile görüntülenebilir:
docker images
Şimdi sırada docker uygulamasını çalıştırmak var:
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:2022.1 bash
Böylece smartcam docker imajını yani yazılım altyapısını çalıştırmış oluruz.
ffmpeg -i input-video.mp4 -c:v libx264 -pix_fmt nv12 -vf scale=1920:1080 -r 30 output.nv12.h264
Finalde ise uygulamayı Docker içerisinde çalıştırmak ve sonuçları gözlemleme kısmı kaldı. Be uygulamayı gerçekleştirirken işlenmek üzere hazır video dosyası kullandım ama isterseniz MIPI ya da USB kamera arayüzünü (kullanacağınız kameranın cinsine bağlı) kullanarak da görüntü verisi elde edebilirsiniz. Şimdilik statik dosyalarla devam ediyoruz. Ben aşağıdaki komutu Docker içerisinde /tmp dizinine 'cd' komutuyla eriştikten sonra çalıştırdım:
smartcam --file ./test.h264 -i h264 -W 1920 -H 1080 -r 30 --target dp
'target' olarak network üzerinden video stream protokolü olan RTSP kullanılabilir veya uygulamanın, çıktı olarak yine statik bir dosya üretmesini ve sonradan kendimiz çalıştırabilir hale getirme imkanı da mevcut. Ben hedef çıkış olarak DP yani display portu seçtim ve board üzerine bu porta bağlı olan monitörümden görüntü elde etmek istedim. Sonuç:
Yorumlar
Yorum Gönder