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
Kria board üzerinde varsayılan olarak çalışan uygulama Fan kontrol uygulaması. Çünkü SOM kartı üzerindeki fan'ın kontrol pini MPSoC 'nin PL tarafındaki bir IO pinine bağlı. Bu yüzden kontrol PL tarafındaki donanım ile sağlanmakta. Bu uygulama unload edilince Board üzerindeki fan'ın hızında değişiklik gözlemlemeliyiz. Akabinde aşağıdaki komutu çalıştırarak asıl uygulamamız olan kv260-smartcam uygulamasını yüklemiş oluruz:

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. 


Uygulama tarafından işlenmek üzere video dosyalarını aşağıdaki linklerden indirebiliriz. Herhangi bir seçtiğimiz videoyu mp4 formatında Kria board'a direkt olarak veya bilgisayarımıza indirebiliriz.

İndirilen mp4 formatındaki dosya 'ffmpeg' uygulaması kullanılarak .h264 formatına dönüştürülür. Bu format smartcam uygulaması için zorunludur. Sadece h264 formatındaki dosya DPU tarafından işlenecektir. Eğer Kria board yerine bilgisayara indirip orada dönüşüm yapılacaksa dönüştürme işlemi tamamlandıktan sonra .h264 uzantılı yeni dosyanın Kria Board'a SFTP uygulaması ile dosya transferi protokolü kullanılarak aktarılması gerekir. Bunu yaparken de Docker'ın da erişimi olan '/tmp' klasörü en uygun lokasyondur. Dönüştürme işlemi aşağıdaki komut ile gerçekleştirilir:

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ç:



REFRANSLAR

https://xilinx.github.io/kria-apps-docs/kv260/2022.1/build/html/docs/smartcamera/docs/app_deployment.html#run-the-application

Yorumlar

Bu blogdaki popüler yayınlar

KV260 Kria Starter Kit Series: 3 - Petalinux Install and Boot

KV260 Kria Starter Kit Series: 1 - Power and Boot Up