# Akademi Source: https://docs.t3gemstone.org/tr/academy/academy Eğitim Videoları
# Gemstone Eğitim Videoları

Bu bölüm; Linux dünyası, Gömülü Yazılım ve Geliştirme Kartları konusunda daha önce çalışma yapmamış, Linux kullanmamış başlangıç seviyesinde olanlar için hazırlanmış temel eğitim videoları içermektedir.**(Yapım aşamasında..)**

# Veri Etiketleme Source: https://docs.t3gemstone.org/tr/boards/o1/ai/data-labeling Görüntü İşleme için Veri Etiketleme Bu bölümde kendi modellerinizi eğitmek istediğinizde etiketleme işlemlerinin nasıl yapılacağı hakkında bilgi verilecektir. Label Studio, farklı veri türleri için etiketleme (annotation) ve veri hazırlama sürecini yönetmeye yönelik açık kaynaklı bir platformdur. Görüntü, metin, ses, video veya zaman serisi verileri üzerinde etiketleme yapmayı sağlar ve makine öğrenimi modellerinin eğitiminde kullanılacak veri setlerinin hazırlanmasını kolaylaştırır. Label Studio'yu, edgeai-tensorlab ortamı üzerinden aşağıdaki komutla başlatınız. Bu işlemleri yapmadan önce bir önceki adımda olan edgeai-tensorlab projesinin kurulumunu tamamlamış ve `task box` ile distrobox içinde işlemleri yapmış olmalısınız. ```bash theme={"system"} task label-studio ``` Mevcut bir hesabınız varsa giriş yapabilirsiniz. Henüz bir hesabınız yoksa, "Sign Up" butonuna tıklayarak yeni bir hesap oluşturabilirsiniz. Gerekli bilgileri doldurduktan sonra, "Create Account" butonuna tıklayarak hesabınızı oluşturabilirsiniz. İlk kez kullanıyorsanız, yukarıdakine benzer bir ekran ile karşılaşacaksınız. "Create Project" butonuna tıklayarak yeni bir proje oluşturabilirsiniz. Proje oluştururken, proje adı ve proje açıklaması alanlarını doldurmanız gerekmektedir. Bir sonraki aşama olan dosya yükleme bölümünde, ham fotoğrafları veya etiketlenmiş fotoğrafları arşiv olarak sisteme ekleyebilirsiniz. "Label Setuping" bölümünde projeniz için uygun olan temayı seçmelisiniz. Nesne tespiti için "Object Detection with Bounding Boxes" seçeneği işaretlenmelidir. Bu ekranda modelinizde kullanılacak etiket adlarını girmeniz gerekmektedir. Her bir satır bir etiket olarak tanımlanacaktır. "Add" butonuna tıklayarak etiket adlarını ekleyebilir, eklenen etiketlere tıklayarak renklerini düzenleyebilir veya silebilirsiniz. Tüm etiketleri ekledikten sonra "Save" butonuna basarak projenizi oluşturabilirsiniz. Bu aşamada verilerinizi etiketlemeye başlayabilirsiniz. Seçtiğiniz fotoğrafın altında yer alan etiketlerden birine tıkladıktan sonra, ilgili etiketi fotoğraf üzerinde uygulayabilirsiniz. Fotoğrafı etiketledikten sonra "Submit" butonuna basarak etiketleme işlemini tamamlayabilirsiniz. Tüm fotoğrafları etiketledikten sonra "Export" butonuna basılmalıdır. Açılan ekranda "YOLO With Images" seçeneği işaretlenmeli ve alt tarafta yer alan "Export" butonuna tıklanmalıdır. Bu işlemle kendi veri setinizi başarılı bir şekilde oluşturmuş olursunuz. # Örnek Uygulamalar Source: https://docs.t3gemstone.org/tr/boards/o1/ai/deepx/examples DX-APP Şablonları ve DX-STREAM ile Video İşleme DEEPX, hızlandırıcı modülünü kullanan uygulamaların hızlıca geliştirilebilmesi için iki ayrı referans proje sunmaktadır. **DX-APP**, tek başına çalışabilen örnek uygulama şablonları içermektedir. **DX-STREAM** ise GStreamer tabanlı gerçek zamanlı video işleme hatları kurmaya olanak tanımaktadır. Bu bölümdeki komutların çalıştırılabilmesi için sürücü ve çalışma zamanı kurulumunun tamamlanmış olması gerekmektedir. Kurulumu `dxrt-cli -s` komutu ile doğrulayabilirsiniz. ## DX-APP Örnek Uygulamaları DX-APP; nesne tespiti, sınıflandırma, poz tahmini, segmentasyon, derinlik tahmini ve yüz tanıma gibi görevler için hazır C++ ve Python şablonları içermektedir. ```bash theme={"system"} git clone https://github.com/DEEPX-AI/dx_app.git cd dx_app ``` Derleme araçları ve OpenCV kütüphanesini kuran betiği çalıştırınız. ```bash theme={"system"} ./install.sh --all ``` Örnek uygulamalarda kullanılan modeller ve videolar `setup.sh` betiği ile indirilmektedir. ```bash theme={"system"} # Menü üzerinden kategori ve model seçimi yapılır ./setup.sh # Yalnızca belirli modeller indirilir ./setup.sh --models YoloV7 ResNet50 # İndirilebilecek tüm modeller listelenir ./setup.sh --list ``` Modeller `assets/models`, videolar ise `assets/videos` klasörüne indirilmektedir. ```bash theme={"system"} ./build.sh ``` Derleme sonucunda çalıştırılabilir dosyalar `bin` klasöründe oluşturulmaktadır. Yalnızca ihtiyaç duyduğunuz uygulamayı derlemek isterseniz `./build.sh --target yolov9s_sync` biçiminde hedef belirtebilirsiniz. Kullanılabilir hedefleri `./build.sh --target list` komutu ile listeleyebilirsiniz. Tüm örnekleri menü üzerinden denemek için demo betiğini kullanabilirsiniz. ```bash theme={"system"} ./run_demo.sh ``` Belirli bir örneği doğrudan çalıştırmak da mümkündür. ```bash Python theme={"system"} python3 src/python_example/object_detection/yolov7/yolov7_sync.py \ --model assets/models/yolov7_640x640.dxnn \ --image sample/img/sample_street.jpg ``` ```bash C++ theme={"system"} ./bin/yolov7_sync \ -m assets/models/yolov7_640x640.dxnn \ -i sample/img/sample_street.jpg ``` ### Ortak Komut Satırı Seçenekleri DX-APP içerisindeki tüm örnekler aynı komut satırı seçeneklerini kullanmaktadır. | Seçenek | Açıklama | | ---------------- | ------------------------------------------------------ | | `-m`, `--model` | Çalıştırılacak `.dxnn` model dosyasının yolu | | `-i`, `--image` | Girdi olarak kullanılacak görüntü dosyası veya klasörü | | `-v`, `--video` | Girdi olarak kullanılacak video dosyası | | `-c`, `--camera` | Girdi olarak kullanılacak kamera cihaz numarası | | `-r`, `--rtsp` | Girdi olarak kullanılacak RTSP akış adresi | | `-l`, `--loop` | Çıkarım tekrar sayısı | | `--no-display` | Görselleştirme penceresini devre dışı bırakır | | `--save` | Oluşan çıktıyı dosyaya kaydeder | | `--show-log` | Ayrıntılı günlük çıktısı üretir | `--image`, `--video`, `--camera` ve `--rtsp` seçenekleri birbirinin alternatifidir ve yalnızca biri kullanılabilir. Hiçbiri belirtilmediğinde göreve uygun örnek bir görüntü otomatik olarak seçilmektedir. Geliştirme kartına ekran bağlı değilse veya SSH üzerinden çalışıyorsanız `--no-display` seçeneğini kullanmanız gerekmektedir. Sonucu görüntülemek için `--save` seçeneği ile çıktıyı dosyaya kaydedebilirsiniz. ### Senkron ve Asenkron Şablonlar Örnek uygulamalar `_sync` ve `_async` olmak üzere iki biçimde sunulmaktadır. * **Senkron (`_sync`)** şablonlar; ön işleme, çıkarım ve son işleme adımlarını sırayla yürütmektedir. Tek görüntü üzerinde çalışmak ve hata ayıklamak için uygundur. * **Asenkron (`_async`)** şablonlar; NPU `N` numaralı kareyi işlerken CPU'nun `N+1` numaralı kareyi hazırlamasına olanak tanımaktadır. Video akışlarında kare hızını en üst düzeye çıkarmak için tercih edilmelidir. ## DX-STREAM ile Video İşleme DX-STREAM, GStreamer altyapısına DEEPX NPU desteği ekleyen eklenti kümesidir. Bu sayede kamera, video dosyası veya RTSP akışından gelen görüntüler bir hat (pipeline) içerisinde işlenebilmektedir. ### Eklenti Elemanları | Eleman | Açıklama | | --------------- | --------------------------------------------------------------------------- | | `dxpreprocess` | Görüntüyü modelin beklediği boyuta ve biçime dönüştürür | | `dxinfer` | NPU üzerinde çıkarım işlemini gerçekleştirir | | `dxpostprocess` | Model çıktısını anlamlı üst veriye (sınırlayıcı kutu, sınıf vb.) dönüştürür | | `dxtracker` | Tespit edilen nesneleri kareler arasında takip eder | | `dxosd` | Sonuçları görüntü üzerine çizer | | `dxgather` | Çoklu akışlarda dalları tek çıkışta birleştirir | | `dxrate` | Çıkarım yapılacak kare hızını sınırlandırır | | `dxmsgconv` | Üst veriyi mesaj biçimine dönüştürür | | `dxmsgbroker` | Mesajları harici bir sunucuya (örneğin MQTT) iletir | Kurulu eklentileri ve özelliklerini `gst-inspect-1.0` aracı ile inceleyebilirsiniz. ```bash theme={"system"} gst-inspect-1.0 dxinfer ``` ### Örnek Hat Aşağıdaki hat bir video dosyasını okumakta, YOLO modeli ile nesne tespiti yapmakta ve sonuçları görüntü üzerine çizerek bir video dosyasına kaydetmektedir. ```bash theme={"system"} gst-launch-1.0 urisourcebin uri=file:///home/gemstone/dx_app/assets/videos/snowboard.mp4 ! decodebin ! \ dxpreprocess \ preprocess-id=1 \ resize-width=640 \ resize-height=640 ! \ queue max-size-buffers=1 ! \ dxinfer \ preprocess-id=1 \ inference-id=1 \ model-path=/home/gemstone/dx_app/assets/models/yolov7_640x640.dxnn ! \ queue max-size-buffers=1 ! \ dxpostprocess \ inference-id=1 \ library-file-path=/usr/share/gstdxstream/lib/libpostprocess_yolov7.so \ function-name=PostProcess ! \ queue max-size-buffers=1 ! \ dxosd ! \ videoconvert ! jpegenc quality=85 ! avimux ! \ filesink location=/home/gemstone/output.avi ``` Oluşturulan çıktı `/home/gemstone/output.avi` konumuna kaydedilmiştir. Bu dosya üzerinden erişebilirsiniz. Yukarıdaki görsel, dokümantasyonda GIF olarak paylaşılabilmesi için çözünürlüğü ve süresi düşürülerek oluşturulmuştur. Hattın ürettiği gerçek çıktı, kaynak videonun çözünürlüğünde ve tam uzunluktadır. Hattın çalışma mantığı aşağıdaki gibidir. Video kaynağını okur ve çözer. `uri` özelliğine işlenecek dosyanın yolu verilmektedir. Kareleri `resize-width` ve `resize-height` değerlerine göre yeniden boyutlandırır. `preprocess-id` değeri, sonraki `dxinfer` elemanı ile eşleştirme yapmak için kullanılmaktadır. `model-path` ile belirtilen `.dxnn` modelini NPU üzerinde çalıştırır. `library-file-path` ile belirtilen paylaşımlı kütüphaneyi kullanarak model çıktısını çözümler. Kullanılacak kütüphane, model ailesine göre değişmektedir. Tespit sonuçlarını kare üzerine çizer. Kareleri kodlayıcının beklediği renk biçimine dönüştürür, `quality=85` değeri ile JPEG olarak sıkıştırır ve elde edilen kareleri AVI kapsayıcısında birleştirir. Oluşturulan videoyu `location` ile belirtilen dosyaya yazar. Ekran bağlı sistemlerde çıktıyı dosyaya kaydetmek yerine `videoconvert ! fpsdisplaysink sync=false` ile kare hızı bilgisi eşliğinde doğrudan ekranda görüntüleyebilirsiniz. X11 ortamı bulunmayan kurulumlarda `ximagesink` yerine `kmssink` tercih edilmelidir. `queue` elemanları hattın asenkron çalışmasını sağlamaktadır. Bu elemanlar kaldırıldığında her aşama bir öncekinin bitmesini beklediği için kare hızı düşmektedir. ### Nesne Takibi Eklenmesi Nesne tespitinin ardından `dxtracker` elemanı eklendiğinde, tespit edilen nesnelere kareler arasında kimlik (track ID) atanmaktadır. ```bash theme={"system"} ... ! dxpostprocess ... ! queue max-size-buffers=1 ! dxtracker ! queue ! dxosd ! ... ``` `dxtracker` elemanı sınırlayıcı kutu (bounding box) bilgisine ihtiyaç duymaktadır. Bu nedenle hat içerisinde nesne tespiti adımından sonra yer almalıdır. ## Kaynaklar Örnek uygulama şablonları GStreamer eklentileri ve hazır hatlar Çalışma zamanı kaynak kodu ve API örnekleri Hazır model deposu T3 Gemstone için çekirdek modülü, DX-RT çalışma zamanı ve GStreamer eklentisi Debian paketlerini üreten derleme tarifleri Önceden derlenmiş `.dxnn` modellerinin listelendiği ve indirilebildiği resmi model deposu # Kurulum Source: https://docs.t3gemstone.org/tr/boards/o1/ai/deepx/installation DX-M1 Modülünün Kart Üzerine Kurulumu Bu bölümde, DeepX DX-M1 hızlandırıcı modülünün T3 Gemstone O1 geliştirme kartına takılması, sürücü ve çalışma zamanı paketlerinin kurulması ile kurulumun doğrulanması adımları anlatılmaktadır. Montaj işlemine başlamadan önce kartın güç bağlantısını kesiniz. Kart enerjili durumdayken M.2 modülünün takılması veya çıkarılması, hem modüle hem de karta kalıcı zarar verebilir. DX-M1 modülünü kart üzerindeki M.2 2280 yuvasına yaklaşık 30 derecelik bir açı ile yerleştiriniz ve modülü yatay konuma getirerek sabitleme vidasını sıkınız. Modül tam yük altında 5W'a kadar güç çekmekte ve ısınmaktadır. Sürekli çalışan uygulamalarda modülün soğutucu (heatsink) ile birlikte kullanılması önerilmektedir. DX-M1 modülünün PCIe veri yolu üzerinden sorunsuz şekilde tanınabilmesi için bağlantı hızını ayarlayan `k3-am67a-t3-gem-o1-pcie-link-speed-2.dtbo` overlay dosyasının aktif edilmesi gerekmektedir. Terminal arayüzünden `nano` isimli metin editörünü kullanarak boot klasöründe yer alan `uEnv.txt` dosyasını açınız. ```bash theme={"system"} sudo nano /boot/uEnv.txt ``` Komutu sudo ile kullandığımız için şifre soracaktır. Değiştirmediyseniz Gem-Imager ile imajı yazarken belirlemiş olduğunuz şifreyi kullanmalısınız. `uEnv.txt` dosyasının içinde bu tarz tanımlamalar bulunacaktır. ``` firstboot=0 overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo bootpart=1:1 initrdaddr=0x90000000 fdtoverlayaddr=0x89000000 get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192 get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1 boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr} distro_bootcmd=run args_mmc;run boot_mmc ``` `k3-am67a-t3-gem-o1-pcie-link-speed-2.dtbo` dosya adını `overlays=` satırının sonuna boşluk bırakarak ekleyin. `uEnv.txt` dosyasının son hali böyle olacaktır. Uygun dosya adını `` kısmına yerleştirmeniz gerekmektedir. ``` firstboot=0 overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo bootpart=1:1 initrdaddr=0x90000000 fdtoverlayaddr=0x89000000 get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192 get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1 boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr} distro_bootcmd=run args_mmc;run boot_mmc ``` Overlay dosyasını tanımladıktan sonra, yapılan değişikliklerin sistem tarafından uygulanabilmesi için kartın yeniden başlatılması gerekmektedir. ```bash theme={"system"} sudo reboot ``` `overlays=` satırında yer alan diğer overlay dosyalarını silmeyiniz. Aksi halde daha önce aktif edilmiş overlayler kullanılamaz duruma gelecektir. Kartı yeniden başlattıktan sonra modülün PCIe veri yolunda algılandığını kontrol ediniz. ```bash theme={"system"} sudo apt install pciutils ``` ```bash Terminal theme={"system"} lspci ``` ```bash Output theme={"system"} 00:00.0 PCI bridge: Texas Instruments Device b010 01:00.0 Processing accelerators: Device 1ff4:0000 (rev 01) ``` Çıktıda `Processing accelerators` satırının görünmesi, modülün donanım seviyesinde tanındığını göstermektedir. Modül listelenmiyorsa [Sorun Giderme](/tr/boards/o1/ai/deepx/troubleshooting) bölümündeki **Modül lspci çıktısında görünmüyor** başlığını inceleyebilirsiniz. Paket listesini güncelledikten sonra DeepX sürücü ve çalışma zamanı paketini kurunuz. ```bash theme={"system"} sudo apt update sudo apt install dxrt dx-stream ``` Bu paket; PCIe çekirdek sürücüsünü (`dxrt_driver`, `dx_dma`), DX-RT çalışma zamanını ve `dxrt-cli` gibi yardımcı araçları kurmaktadır. Sürücünün çekirdeğe yüklenebilmesi için kartı yeniden başlatınız. ```bash theme={"system"} sudo reboot ``` SDK'yı kaynak kodundan derlemek isterseniz bizim tarafımızdan yayınlanan [deepx-npu-deepx](https://github.com/t3gemstone/deepx-npu-sdk) deposunu kullanabilirsiniz. Çekirdek modüllerini yükleyin ve ardından servisi yeniden başlatın. ```bash theme={"system"} sudo modprobe dxrt_driver sudo systemctl restart dxrt.service ``` Yukarıdaki `modprobe` komutu modülü yalnızca o an için yüklemektedir. Sürücünün her açılışta otomatik olarak yüklenmesi için modülü `systemd-modules-load` yapılandırmasına ekleyiniz. ```bash theme={"system"} echo dxrt_driver | sudo tee /etc/modules-load.d/dxrt.conf ``` Aşağıdaki komut ile çekirdek modülünün başarıyla yüklenip yüklenmediğini kontrol edebilirsiniz. ```bash Terminal theme={"system"} lsmod | grep dx ``` ```bash Output theme={"system"} dxrt_driver 45056 2 dx_dma 483328 9 dxrt_driver ``` Sürücü tarafından oluşturulan cihaz dosyalarını da kontrol edebilirsiniz. ```bash theme={"system"} ls /dev/dxrt* ``` `dxrt-cli` aracı ile modülün çalışma zamanı tarafından erişilebilir olduğunu doğrulayınız. Aşağıdakine benzer bir çıktı elde edilmesi beklenmektedir. Sürüm ve sıcaklık değerleri kullandığınız donanıma göre farklılık gösterecektir. ```bash Terminal theme={"system"} dxrt-cli --status ``` ```bash Output theme={"system"} DXRT v3.1.0 ======================================================= * Device 0: M1, Accelerator type ---------------- Version -------------------- * RT Driver version : v1.8.0 * PCIe Driver version : v1.6.0 * FW version : v2.4.0 ---------------- Memory --------------------- * Type : LPDDR5 * Size : 3.92 GiB ---------------- NPU ------------------------ * NPU 0: voltage 730 mV, clock 1000 MHz, temperature 48 C * NPU 1: voltage 730 mV, clock 1000 MHz, temperature 47 C * NPU 2: voltage 730 mV, clock 1000 MHz, temperature 48 C ======================================================= ``` Python tarafındaki çıkarım arayüzü `dx_engine` paketi ile sağlanmaktadır. Paketi `pip3` ile kurunuz. ```bash theme={"system"} pip3 install dx_engine ``` Python ile çıkarım yapabilmek için `dx_engine` paketinin kullanılabilir olması gerekmektedir. ```bash theme={"system"} python3 -c "from dx_engine import InferenceEngine; print('dx_engine hazir')" ``` Komut hata vermeden çalıştıysa geliştirme ortamı kullanıma hazırdır. # Giriş Source: https://docs.t3gemstone.org/tr/boards/o1/ai/deepx/introduction DeepX DX-M1 NPU Hızlandırıcı Modülü DeepX, yapay zeka çıkarım işlemlerini düşük güç tüketimi ile gerçekleştirmek amacıyla NPU (Neural Processing Unit / Sinirsel İşlem Birimi) hızlandırıcıları geliştiren bir yarı iletken firmasıdır. T3 Gemstone O1 geliştirme kartı üzerindeki M.2 2280 yuvası PCIe arabirimi sunduğu için, bu yuvaya takılan **DeepX DX-M1** hızlandırıcı modülü ile kartın yapay zeka işlem gücü önemli ölçüde artırılabilmektedir. Geliştirme kartının işlemcisinde yer alan C7x DSP ve MMA birimleri 4 TOPS işlem gücü sunmaktadır. DX-M1 modülü ise tek başına 25 TOPS işlem gücü sağlayarak daha büyük modellerin, daha yüksek çözünürlükte ve daha fazla kare hızı ile çalıştırılmasına olanak tanımaktadır. DX-M1 modülü, kart üzerindeki M.2 2280 yuvasını kullanmaktadır. Bu yuva aynı zamanda NVMe SSD için de kullanıldığından, hızlandırıcı modül ile SSD aynı anda takılamamaktadır. ## Teknik Özellikler | Özellik | Değer | | ------------------- | ------------------------------------- | | Hızlandırıcı | DEEPX DX-M1 | | İşlem Gücü | 25 TOPS (INT8) | | Yerleşik Bellek | 4GB LPDDR5 | | Arabirim | PCIe Gen3, M.2 M-key | | Form Faktör | M.2 2280 | | Güç Tüketimi | 2W - 5W | | Model Formatı | `.dxnn` (ONNX modellerinden derlenir) | | Programlama Arayüzü | C/C++ ve Python | Modüle ait güncel ve ayrıntılı donanım bilgilerine [DEEPX DX-M1 ürün sayfası](https://deepx.ai/products/dx-m1/) üzerinden erişebilirsiniz. ## DXNN Yazılım Geliştirme Kiti DX-M1 modülü, DEEPX tarafından sağlanan **DXNN SDK** ile birlikte kullanılmaktadır. SDK, modelin hazırlanmasından kart üzerinde çalıştırılmasına kadar olan süreci kapsayan bileşenlerden oluşmaktadır. ONNX formatındaki modelleri, bir yapılandırma dosyası eşliğinde NPU üzerinde çalışabilen `.dxnn` formatına derleyen model derleyicisidir. Geliştirme bilgisayarında çalıştırılır. NPU donanımı ile haberleşen çalışma zamanı (runtime) katmanıdır. Model yükleme, girdi/çıktı yönetimi ve çıkarım işlemlerini yürütür. C/C++ ve Python arayüzleri sunar. Hızlandırıcı modülün PCIe üzerinden işletim sistemi tarafından tanınmasını sağlayan çekirdek sürücüsüdür. GStreamer tabanlı görüntü işleme hatları (pipeline) oluşturmak için kullanılan özel eklenti kümesidir. Gerçek zamanlı video akışlarının işlenmesinde kullanılır. Nesne tespiti, sınıflandırma, segmentasyon gibi görevler için hazır örnek uygulamalar içeren şablon projedir. Önceden derlenmiş `.dxnn` modellerinin bulunduğu model deposudur. Derleme adımına ihtiyaç duymadan hızlı denemeler yapmaya olanak tanır. ## Kullanım Alanları * Nesne tespiti (YOLO ailesi modelleri) * Nesne takibi ve çoklu kanal video analizi * Görüntü sınıflandırma * Anlamsal segmantasyon (semantic segmentation) * Poz tahmini (pose estimation) * Optik karakter tanıma (OCR) * Yüz tanıma ## Doküman İçeriği Donanım montajı, sürücü ve çalışma zamanı kurulumu Cihaz durumunun izlenmesi ve Python ile çıkarım yapılması DX-APP örnekleri ve DX-STREAM ile video işleme Sık karşılaşılan hatalar ve çözümleri # Sorun Giderme Source: https://docs.t3gemstone.org/tr/boards/o1/ai/deepx/troubleshooting DX-M1 Kullanımında Sık Karşılaşılan Sorunlar Bu bölümde, DX-M1 hızlandırıcı modülünün kurulumu ve kullanımı sırasında sık karşılaşılan sorunlar ile çözüm önerileri yer almaktadır. Modülün PCIe veri yolunda hiç listelenmemesi, sorunun donanım seviyesinde olduğunu göstermektedir. Sırasıyla aşağıdaki adımları uygulayınız. 1. Kartın enerjisini kesiniz ve modülü yuvasından çıkarıp yeniden takınız. Modülün yuvaya tam oturduğundan ve sabitleme vidasının sıkıldığından emin olunuz. 2. Kullandığınız güç adaptörünün, kart ve modülün toplam tüketimini karşılayabildiğini kontrol ediniz. Yetersiz besleme, modülün PCIe bağlantısını kuramamasına neden olmaktadır. 3. Çekirdek günlüklerinde PCIe bağlantısına ait hata olup olmadığını inceleyiniz. ```bash theme={"system"} sudo dmesg | grep -i pcie ``` `lsmod | grep dx` komutu boş çıktı veriyorsa sürücü çekirdeğe yüklenmemiştir. Öncelikle sürücünün yüklenmeye çalışılırken hata verip vermediğini kontrol ediniz. ```bash theme={"system"} sudo dmesg | grep -i dxrt ``` Sürücüyü elle yüklemeyi deneyebilirsiniz. ```bash theme={"system"} sudo modprobe dxrt_driver ``` `Permission denied` hatası, kullanıcının sürücü tarafından oluşturulan cihaz dosyasına erişim yetkisi olmadığını göstermektedir. Uygulamayı geçici olarak yetkili kullanıcı ile çalıştırabilirsiniz. ```bash theme={"system"} sudo dxrt-cli -s ``` Kalıcı çözüm için cihaz dosyasının sahibi ve izinlerini inceleyerek kullanıcınızı ilgili gruba ekleyebilirsiniz. ```bash theme={"system"} ls -l /dev/dxrt* ``` Python uygulamalarında girdi bufferı `np.zeros()` ile oluşturulduğunda bu hata ile karşılaşılabilmektedir. `np.zeros()` ile ayrılan sanal bellek sayfalarının tümü aynı fiziksel sayfayı işaret etmekte, PCIe DMA sürücüsü ise aynı fiziksel sayfayı birden fazla kez gördüğünde hata üretmektedir. Girdi bufferını aşağıdaki biçimde oluşturunuz. ```python theme={"system"} buffer = np.empty(ie.get_input_size(), dtype=np.uint8) buffer.fill(0) ``` DX-RT çalışma zamanı, yüklenen modelin derleme sürümünü doğrulamaktadır. Modelin, kart üzerindeki çalışma zamanından daha eski bir DX-COM sürümü ile derlenmiş olması bu hataya neden olmaktadır. Kurulu sürümleri kontrol ediniz. ```bash theme={"system"} dxrt-cli -v ``` Kare hızının beklenenin altında kalması genellikle NPU dışındaki adımlardan kaynaklanmaktadır. Öncelikle darboğazın nerede olduğunu belirleyiniz. Modelin NPU üzerindeki saf performansını ölçmek için kıyaslama aracını kullanabilirsiniz. ```bash theme={"system"} run_model -m model.dxnn -b -l 100 -v ``` Bu ölçüm beklenen değerleri veriyor ancak uygulamanız yavaş çalışıyorsa darboğaz ön işleme, son işleme veya görüntüleme adımlarındadır. Bu durumda aşağıdakileri değerlendirebilirsiniz. * Senkron şablon yerine asenkron şablonu kullanınız. Böylece NPU çıkarım yaparken CPU bir sonraki kareyi hazırlayabilir. * Görselleştirmeyi devre dışı bırakınız. * Python ile yazılmış son işleme adımları yerine C++ karşılıklarını kullanınız. Ölçüm de düşük çıkıyorsa modülün sıcaklığını kontrol ediniz. ```bash theme={"system"} dxrt-cli --monitor 1 ``` Sıcaklığın yüksek seyretmesi durumunda donanım kendini korumak amacıyla saat frekansını düşürmektedir. Bu durumda modülün havalandırmasını iyileştirmeniz veya soğutucu kullanmanız gerekmektedir. Derleme işleminin başarılı olması, modelin doğru sonuç üreteceğini garanti etmemektedir. Bu durumun en yaygın iki nedeni bulunmaktadır. * **Ön işleme uyumsuzluğu:** Derleme sırasında yapılandırma dosyasında tanımlanan ön işleme adımları, eğitim sırasında uygulanan adımlarla birebir aynı olmalıdır. Renk uzayı dönüşümü, normalizasyon değerleri ve boyutlandırma yöntemindeki farklılıklar hatalı sonuçlara yol açmaktadır. * **Kalibrasyon veri setinin yetersizliği:** Niceleme sırasında kullanılan görüntülerin, modelin çalışacağı ortamı temsil etmemesi doğruluğun belirgin biçimde düşmesine neden olmaktadır. Model çıktısını doğrulamak için aynı girdi ile ONNX modelinin bilgisayar üzerindeki sonucu ile NPU sonucunu karşılaştırabilirsiniz. Birden fazla süreç (process) NPU'yu aynı anda kullanacaksa, kaynak paylaşımını yöneten `dxrt` hizmetinin çalışıyor olması gerekmektedir. ```bash theme={"system"} systemctl status dxrt ``` Hizmet çalışmıyorsa başlatınız ve açılışta otomatik başlaması için etkinleştiriniz. ```bash theme={"system"} sudo systemctl enable --now dxrt ``` T3 Gemstone O1 geliştirme kartı üzerinde tek bir M.2 2280 yuvası bulunmaktadır. Bu nedenle NVMe SSD ile DX-M1 hızlandırıcı modülü aynı anda kullanılamamaktadır. Ek depolama alanına ihtiyaç duyuyorsanız microSD kart yuvasını veya USB üzerinden bağlanan bir depolama birimini kullanabilirsiniz. ## Destek Sorununuz bu bölümde yer almıyorsa [T3 Gemstone Topluluk Forumu](https://community.t3gemstone.org) üzerinden destek talebinde bulunabilirsiniz. Paylaşım yaparken aşağıdaki bilgileri eklemeniz sorunun daha hızlı çözülmesini sağlamaktadır. ```bash theme={"system"} uname -a lspci lsmod | grep dx dxrt-cli -s dxrt-cli -v ``` # Kullanım Source: https://docs.t3gemstone.org/tr/boards/o1/ai/deepx/usage DX-M1 Modülünün Yönetimi ve Python ile Çıkarım Yapılması Bu bölümde, DX-M1 hızlandırıcı modülünün komut satırı araçları ile yönetilmesi, performansının ölçülmesi ve Python arayüzü kullanılarak çıkarım yapılması anlatılmaktadır. Bu bölümdeki komutların çalıştırılabilmesi için sürücü ve çalışma zamanı kurulumunun tamamlanmış olması gerekmektedir. Kurulum adımları için [Kurulum](/tr/boards/o1/ai/deepx/installation) bölümünü inceleyebilirsiniz. ## Komut Satırı Araçları DX-RT çalışma zamanı ile birlikte aşağıdaki yardımcı araçlar kurulmaktadır. | Araç | Açıklama | | ------------- | ---------------------------------------------------------------------- | | `dxrt-cli` | Cihaz durumu sorgulama, izleme, sıfırlama ve yazılım güncelleme aracı | | `dxtop` | NPU çekirdek kullanımını gerçek zamanlı gösteren izleme aracı | | `run_model` | Derlenmiş bir modelin performansını ölçen kıyaslama (benchmark) aracı | | `parse_model` | `.dxnn` model dosyasının yapısını ve bellek kullanımını inceleme aracı | ### Cihaz Durumunun Sorgulanması Modülün anlık sıcaklık, gerilim ve saat frekansı değerlerini görüntülemek için `--status` seçeneği kullanılmaktadır. ```bash Terminal theme={"system"} dxrt-cli --status ``` ```bash Output theme={"system"} DXRT v3.1.0 ======================================================= * Device 0: M1, Accelerator type ---------------- Version -------------------- * RT Driver version : v1.8.0 * PCIe Driver version : v1.6.0 * FW version : v2.4.0 ---------------- Memory --------------------- * Type : LPDDR5 * Size : 3.92 GiB ---------------- NPU ------------------------ * NPU 0: voltage 730 mV, clock 1000 MHz, temperature 48 C * NPU 1: voltage 730 mV, clock 1000 MHz, temperature 47 C * NPU 2: voltage 730 mV, clock 1000 MHz, temperature 48 C ======================================================= ``` Modüle ait donanım ve sürüm bilgilerini görüntülemek için `--info` seçeneği kullanılmaktadır. ```bash theme={"system"} dxrt-cli --info ``` `dxrt-cli` aracının sık kullanılan seçenekleri aşağıdaki tabloda listelenmiştir. | Seçenek | Açıklama | | --------------------- | ------------------------------------------------------------------ | | `-s`, `--status` | Cihaz durumunu görüntüler | | `-i`, `--info` | Cihaz bilgilerini görüntüler | | `-m`, `--monitor ` | Cihaz durumunu `n` saniyelik aralıklarla sürekli olarak görüntüler | | `-d`, `--device ` | Komutun uygulanacağı cihazı belirtir | | `-r`, `--reset` | NPU çekirdeklerini sıfırlar | | `-u`, `--fwupdate` | Belirtilen dosya ile cihaz yazılımını (firmware) güncelleştirir | | `-v`, `--version` | Sürüm bilgilerini görüntüler | | `-h`, `--help` | Kullanım bilgilerini görüntüler | Örneğin cihaz durumunu 1 saniyelik aralıklarla izlemek için aşağıdaki komutu kullanabilirsiniz. ```bash theme={"system"} dxrt-cli --monitor 1 ``` Modülün sıcaklığının uzun süre yüksek seviyelerde kalması, donanımın kendini korumak amacıyla saat frekansını düşürmesine ve performansın azalmasına neden olmaktadır. Yoğun iş yükü altında çalıştırdığınız uygulamalarda sıcaklık değerlerini `dxrt-cli --monitor` ile takip etmeniz önerilmektedir. ### NPU Kullanımının İzlenmesi Uygulamanız çalışırken NPU çekirdeklerinin ne kadar meşgul olduğunu gözlemlemek için `dxtop` aracını kullanabilirsiniz. ```bash theme={"system"} dxtop ``` Araç, her bir NPU çekirdeği için kullanım oranını, sıcaklığı ve bellek tüketimini gerçek zamanlı olarak göstermektedir. Uygulamadan çıkmak için `q` tuşuna basmanız yeterlidir. ## Hazır Modellerin İndirilmesi NPU yalnızca `.dxnn` biçimine derlenmiş modelleri çalıştırabilmektedir. Bu bölümdeki örnekleri denemek için kendi modelinizi derlemenize gerek bulunmamaktadır; DEEPX model deposunda (Model Zoo) önceden derlenmiş üç yüzden fazla model hazır olarak sunulmaktadır. ### Modellerin İndirilmesi Model deposunun tamamına erişmek ve modelleri kategori bazında indirmek için DX-APP deposundaki `setup.sh` betiği kullanılmaktadır. Betik, indirilen dosyaları `assets/models` klasörüne yerleştirmektedir. Sık kullanılan bazı modellerin dosya adları aşağıdaki tabloda listelenmiştir. | Model | Görev | Dosya adı | | -------------------------- | --------------------- | ---------------------------------------- | | `YoloV5S` | Nesne tespiti | `yolov5-s_640x640.dxnn` | | `YoloV7` | Nesne tespiti | `yolov7_640x640.dxnn` | | `ResNet50` | Sınıflandırma | `resnet50_224x224.dxnn` | | `MobileNetV2` | Sınıflandırma | `mobilenetv2_224x224.dxnn` | | `YOLOv5s_Face` | Yüz tespiti | `yolov5-s-face_640x640.dxnn` | | `yolov5s_seg` | Örnek segmantasyon | `yolov5-s-seg_640x640.dxnn` | | `DeepLabV3PlusMobileNetV2` | Anlamsal segmantasyon | `deeplabv3plus_mobilenetv2_512x512.dxnn` | | `FastDepth_1` | Derinlik tahmini | `fastdepth_224x224.dxnn` | ```bash theme={"system"} git clone https://github.com/DEEPX-AI/dx_app.git cd dx_app # İndirilebilecek modeller listelenir ./setup.sh --list # Yalnızca belirtilen modeller indirilir ./setup.sh --models YoloV5S YoloV7 ResNet50 # Belirtilen görev kategorisindeki modeller indirilir ./setup.sh --category "Object Detection" ``` İndirdiğiniz modelin geçerli olduğunu ve kart üzerinde çalıştığını `run_model -m ./assets/models/yolov5-s_640x640.dxnn -b` komutu ile doğrulayabilirsiniz. Betiğin model indirme ile ilgili seçenekleri aşağıdaki tabloda listelenmiştir. | Seçenek | Açıklama | | -------------------- | ------------------------------------------------------------ | | `--list` | İndirilebilecek modelleri listeler | | `--models ` | Yalnızca adı belirtilen modelleri indirir | | `--category ` | Belirtilen görev kategorisindeki modellerin tamamını indirir | | `--demo-models` | Yalnızca demo betiklerinin kullandığı modelleri indirir | | `--all` | Depodaki tüm modelleri etkileşim gerektirmeden indirir | | `--dry-run` | İndirme yapmadan hangi dosyaların indirileceğini gösterir | | `--workers ` | Eş zamanlı indirme sayısını belirler (varsayılan `4`) | | `--no-force` | Daha önce indirilmiş dosyaları yeniden indirmez | Betik hiçbir seçenek verilmeden çalıştırıldığında kategori ve model seçimi menü üzerinden yapılmaktadır. Kullanılabilir modellerin listesi `scripts/modelzoo_manifest.json` dosyasında tutulmaktadır. `--all` seçeneği depodaki tüm modelleri indirdiğinden onlarca gigabaytlık disk alanı gerektirmektedir. Yalnızca ihtiyaç duyduğunuz modelleri `--models` veya `--category` seçenekleri ile indirmeniz önerilmektedir. ## Model Performansının Ölçülmesi Derlenmiş bir modelin kart üzerindeki gerçek performansını ölçmek için `run_model` aracı kullanılmaktadır. ```bash theme={"system"} run_model -m yolov5-s_640x640.dxnn -b -l 100 -v ``` Ölçüm yapılacak `.dxnn` model dosyasının yolu. Maksimum verim modunda ölçüm yapar. Varsayılan çalışma modudur. Tek çekirdek üzerinde, sıralı olarak tek girdi ile ölçüm yapar. Gerçekleştirilecek çıkarım döngüsü sayısı. Ölçümün saniye cinsinden süresi. Belirtildiğinde `--loops` değerini geçersiz kılar. Ölçüme başlamadan önce yapılacak ısınma turu sayısı. NPU işlem süresi ve gecikme (latency) değerlerini ayrıntılı olarak gösterir. Komut sonucunda NPU işlem süresi, gecikme ve saniyedeki kare sayısı (FPS) değerleri raporlanmaktadır. Bir modelin katman yapısını, bellek kullanımını ve NPU üzerindeki görev dağılımını incelemek için `parse_model -m yolov5-s_640x640.dxnn -v` komutunu kullanabilirsiniz. ## Python ile Çıkarım Yapılması Python uygulamalarında NPU'yu kullanmak için `dx_engine` paketi içerisindeki `InferenceEngine` sınıfı kullanılmaktadır. Temel akış; modelin yüklenmesi, girdi bufferının hazırlanması, çıkarımın çalıştırılması ve sonuçların işlenmesi adımlarından oluşmaktadır. ```python theme={"system"} import numpy as np from dx_engine import InferenceEngine # Derlenmiş model dosyası yüklenir with InferenceEngine("yolov5-s_640x640.dxnn") as ie: # Modelin beklediği boyutta girdi bufferı hazırlanır buffer = np.empty(ie.get_input_size(), dtype=np.uint8) buffer.fill(0) # Çıkarım işlemi çalıştırılır outputs = ie.run([buffer]) for index, output in enumerate(outputs): print(f"çıktı[{index}]: biçim={output.shape}, tip={output.dtype}") ``` Girdi bufferını oluştururken `np.zeros()` kullanılması önerilmemektedir. `np.zeros()` ile ayrılan sanal bellek adreslerinin tümü aynı fiziksel adresi işaret ettiğinden, PCIe DMA sürücüsü aynı fiziksel adresi birden fazla kez gördüğünde `EFAULT` hatası vermektedir. Bu nedenle yukarıdaki örnekte olduğu gibi `np.empty()` ile tampon ayrılıp `fill()` ile doldurulmalıdır. ### Model Bilgilerinin Alınması Girdi ve çıktı katmanlarına ait bilgiler, ön işleme ve son işleme adımlarının doğru yazılabilmesi için çalışma zamanından sorgulanabilmektedir. ```python theme={"system"} from dx_engine import InferenceEngine with InferenceEngine("yolov5-s_640x640.dxnn") as ie: print("Girdi tampon boyutu :", ie.get_input_size()) print("Çıktı tampon boyutu :", ie.get_output_size()) print("Girdi tensörleri :", ie.get_input_tensors_info()) print("Çıktı tensörleri :", ie.get_output_tensors_info()) ``` ### Asenkron Çıkarım Video akışı gibi sürekli veri işlenen uygulamalarda, çıkarım işleminin sonucunu beklemeden yeni kare göndermek performansı artırmaktadır. Bu amaçla `run_async` metodu kullanılmaktadır. Metot, çıkarım tamamlanmasını beklemeden bir iş numarası döndürmektedir. Sonuçların toplanması için iki yöntem bulunmaktadır. Geri çağırma (callback) fonksiyonu kaydedilerek sonuçların otomatik olarak iletilmesi sağlanabilir veya iş numarası ile `wait` metodu kullanılarak sonuç talep edilebilir. ```python Geri Çağırma theme={"system"} import numpy as np from dx_engine import InferenceEngine def on_inference_done(outputs, user_arg): # Son işleme adımları bu fonksiyon içerisinde gerçekleştirilir print("Çıkarım tamamlandı:", user_arg) return 0 with InferenceEngine("yolov5-s_640x640.dxnn") as ie: # Geri çağırma fonksiyonu kaydedilir ie.register_callback(on_inference_done) buffer = np.empty(ie.get_input_size(), dtype=np.uint8) buffer.fill(0) for index in range(10): # Sonuç beklenmeden çıkarım isteği sıraya alınır ie.run_async([buffer], user_arg=index) ``` ```python Bekleme theme={"system"} import numpy as np from dx_engine import InferenceEngine with InferenceEngine("yolov5-s_640x640.dxnn") as ie: buffer = np.empty(ie.get_input_size(), dtype=np.uint8) buffer.fill(0) # Çıkarım istekleri sıraya alınır ve iş numaraları saklanır job_ids = [ie.run_async([buffer], user_arg=index) for index in range(10)] # Sonuçlar iş numaraları ile sırayla toplanır for job_id in job_ids: outputs = ie.wait(job_id) ``` Bu iki yöntem birlikte kullanılmamalıdır. `wait` metodu ile sonuç toplanacaksa `register_callback` ile geri çağırma fonksiyonu kaydedilmemelidir. Geri çağırma fonksiyonu ayrı bir iş parçacığında (thread) çalıştırıldığından, paylaşılan veri yapılarına erişimde kilit kullanılması gerekmektedir. ### Performans Ölçümü ve Cihaz İzleme Çıkarım performansı `run_benchmark` metodu ile ölçülebilmekte, cihaz durumu ise `DeviceStatus` sınıfı ile uygulama içerisinden okunabilmektedir. ```python theme={"system"} import numpy as np from dx_engine import InferenceEngine from dx_engine.device_status import DeviceStatus with InferenceEngine("yolov5-s_640x640.dxnn") as ie: buffer = np.empty(ie.get_input_size(), dtype=np.uint8) buffer.fill(0) fps = ie.run_benchmark(100, [buffer]) print(f"Ortalama FPS: {fps}") status = DeviceStatus.get_current_status(0) print("Sıcaklık :", status.get_temperature(0), "C") print("Çekirdek kullanımı:", status.get_core_utilization(0), "%") print("Kullanılan bellek :", status.get_memory_used()) print("Boş bellek :", status.get_memory_free()) ``` Gecikme ve NPU işlem süresi istatistiklerine `ie.get_latency_mean()` ve `ie.get_npu_inference_time_mean()` metotları ile erişebilirsiniz. ## C/C++ Arayüzü DX-RT, Python arayüzünün yanı sıra C ve C++ arayüzü de sunmaktadır. C++ tarafında aynı iş akışı `dxrt::InferenceEngine` sınıfı ile gerçekleştirilmektedir. ```cpp theme={"system"} #include "dxrt/dxrt_cxx_api.h" #include int main() { // Derlenmiş model dosyası yüklenir dxrt::InferenceEngine ie("yolov5-s_640x640.dxnn"); // Modelin beklediği boyutta girdi bufferı hazırlanır std::vector input(ie.GetInputSize(), 0); // Çıkarım işlemi çalıştırılır auto outputs = ie.Run(input.data()); return 0; } ``` C++ ve Python arayüzlerine ait tüm örnekler, SDK içerisindeki `dx_rt/examples` klasöründe yer almaktadır. # Ekosistem Source: https://docs.t3gemstone.org/tr/boards/o1/ai/ecosystem Görüntü İşleme Yazılım Mimarisi Bu bölümde, görüntü işleme için kullanılan Python/C++ kütüphanelerinin neler olduğu özet olarak belirtilmiştir. İlgili kütüphaneler, hem derin öğrenme modellerinin derlenmesi hem de geliştirme kartına yüklenip çalıştırılması için kullanılmaktadır. Aşağıdaki resimde desteklenen kütüphaneler belirtilmiştir. Geliştiriciler, modellerini önce kendi bilgisayarlarında (örneğin Linux tabanlı bir sistemde) test edip, ardından minimum değişiklikle Gemstone O1 geliştirme kartına aktarabilirler. Böylece geliştirme süreci hızlanır ve donanım bağımlılığı en aza iner. ### Geliştirme Adımları İnternetteki derin öğrenme toplulukları birçok açık kaynaklı ve önceden eğitilmiş model sunmaktadır. Geliştiriciler bu modelleri kendi veri kümeleriyle ince ayar (Transfer Learning) yaparak kullanabilirler. Gemstone bu süreci kolaylaştırmak için ModelZoo adlı model havuzunu sunmaktadır. ModelZoo’daki modeller, ImageNet1k ve COCO gibi endüstri standardı veri kümelerinde eğitilmiş, gömülü sistemler için optimize edilmiştir. Ayrıca geliştiriciler, kendi modellerini de sisteme dahil edebilirler. Modeller, gömülü donanımda çalıştırılmadan önce Host Bilgisayar (PC x86) üzerinde derlenir. Bu süreçte Python veya C++ API’leri kullanılarak modelin belirli katmanları C7x/MMA işlemcilerine aktarılacak şekilde “artifact” dosyaları oluşturulur. Derleme sırasında farklı optimizasyon ve kuantizasyon seçenekleri uygulanabilir. Derleme sonrası üretilen “artifact” dosyaları, modelin gömülü donanım üzerinde çalıştırılmasını sağlar. Bu adımda model, gerçek zamanlı çıkarım işlemleri için kullanıma alınır. # Edge-AI Studio Source: https://docs.t3gemstone.org/tr/boards/o1/ai/edgeai Bulut Üzerinden Görüntü İşleme Modeli Hazırlama Bölüm sonunda aşağıdaki konularında tecrübe edineceksiniz * Gemstone O1 geliştirme kartının görüntü işleme kabiliyetlerini kullanabilmek için gerekli olan modelin Edge-AI üzerinden nasıl hazırlandığı. Edge AI Studio, Texas Instruments tarafından geliştirilen, grafik kullanıcı arayüzü ile veri toplama, veri etiketleme, model eğitimi ve model derleme işlemlerinin yapılmasına olanak sağlayan bir ekosistemdir. TI Model Zoo’daki önceden eğitilmiş modeller arasından seçim yapabilir ve isterseniz kendi verilerinizle yeniden eğiterek doğruluk ve performansı artırabilirsiniz. Edge AI Studio, bulut tabanlı olarak, bilgisayarınıza yüklemeden kullanılabilir. [EdgeAI](https://dev.ti.com/modelcomposer/) adresine giderek yeni bir proje oluşturabilir, mevcut projenize giriş yapabilir veya örnek projeleri inceleyebilirsiniz. Yukarıdaki görselde görüldüğü üzere çeşitli görev türleri seçilebilmektedir. Bu bölümde görüntü işleme uygulaması gerçekleştirileceği için “Sensors” sekmesinde yalnızca kamera sensörü aktif bırakılmıştır. Bu seçime bağlı olarak yapılabilecek görevler “Fotoğraf Sınıflandırma”, “Nesne Tespiti” ve “Anlamsal Segmentasyon” olarak listelenmektedir. “Tools” bölümünde “Model Maker - Processor SDK 10.1” seçilmelidir. Son adımda ise projeye bir isim verilerek proje oluşturma işlemi tamamlanabilir. Bir sonraki ekran olan “Capture” bölümünde, bilgisayarın dosya sisteminden veya bilgisayara bağlı bir görüntü yakalama aygıtından sisteme görüntü eklenebilmektedir. Bir sonraki adım olan “Annotate” bölümünde, fotoğraflardaki tüm nesneleri seçerek modeli eğitmek için sınıflandırma işlemi yapılmalıdır. Bu işlem için yukarıdaki görselde gösterilen “Create Box” seçeneğine tıklanarak, kutu oluşturma aracı ile nesneler işaretlenebilir. Yukarıda görüldüğü üzere bir kutu oluşturulduktan sonra, mevcut tanımlı sınıf isimlerinden biri seçilebilir veya yeni bir metin yazarak farklı bir sınıf oluşturulabilir. Bir sonraki aşama olan model seçimi kısmında, “Device Selection” bölümü Gemstone O1 Geliştirme Kartı için **AM67A seçilmelidir.** “Model Selection” alanında yer alan “Use Recommended” seçeneği işaretlenerek, üst kısımda belirtilen yüksek doğruluk (high accuracy) veya yüksek performans (high performance) seçeneklerinden biri tercih edilerek sistemin önerdiği model kullanılabilir. Eğer modeli manuel olarak seçmek isterseniz, “Use Selected Model” seçeneğini işaretleyerek açılan menüden istediğiniz modeli belirleyebilirsiniz. Cihaz ve model seçimi tamamlandıktan sonra, sistem yaklaşık benchmark değerlerini otomatik olarak görüntüleyecektir. Modelin eğitildiği “Training” bölümünde, belirlenen parametrelere göre eğitim işlemi gerçekleştirilebilir. **Epoch** modelin tüm eğitim verilerini bir kez tamamen görmesi demektir. Epoch sayısını artırmak, modelin veriden daha fazla öğrenmesine izin verir ancak çok fazla epoch overfitting riskini (yani model ezberler bu istenmeyen bir durumdur) arttırır. **Batch**, modelin her adımda işlediği örnek sayısıdır. Bu parametre GPU belleğine göre ayarlanır, yüksek batch değerleri daha stabil ama daha yavaş veya daha fazla bellek ister. **Learning Rate**, modelin hata geri yayılımı (backpropagation) sırasında ağırlıklarını ne kadar değiştireceğini belirleyen katsayıdır. **Weight Decay**, ağırlıkların çok büyük değerlere ulaşmasını engellemek için kayıp fonksiyonuna eklenen bir ceza terimidir. Bu parametreler hakkında önceden bilgi sahibiyseniz değerleri güncellemeniz tavsiye edilir. Ancak, bu kavramlarla ilk kez karşılaşıyorsanız varsayılan ayarları değiştirmeniz önerilmez. Son olarak, “Start Training” butonuna tıklayarak eğitim sürecini başlatabilirsiniz. Eğitim süresi, girdiğiniz veri setinin büyüklüğüne ve seçtiğiniz modele göre değişiklik gösterebilir. Son adımda, yukarıda görüldüğü üzere önceden tanımlanmış ön ayarlardan (preset) size en uygun olanı seçtikten sonra “Start Compiling” butonuna tıklayarak modelin derleme sürecini başlatabilirsiniz. Model oluşturma işlemi tamamlandıktan sonra, “Export Compiled Model” butonuna tıklayarak modeli bilgisayarınıza indirebilirsiniz. # Edge-AI TensorLab Source: https://docs.t3gemstone.org/tr/boards/o1/ai/edgeai-tensorlab Görüntü İşleme Model Derleme Kiti Bu bölümde [edgeai-tensorlab](https://github.com/t3gemstone/edgeai-tensorlab.git) projesi geliştirici bilgisayarına indirilerek geliştirme kartında kullanılabilecek araçlarının kurulumu yapılacaktır. Bölüm bitiminde aşağıdaki konularda tecrübe edineceksiniz. * edgeai-tensorlab bileşenlerinin temel kullanımını deneyimlemek * edgeai-tensorlab ile veri etiketleme ve model derlemeleri yapmak Ubuntu üzerinde `git clone` işlemi yaparak edgeai-tensorlab projesini indir Derleme işlemi yapabilmek için gereksinimleri `setup.sh` isimli scripti çalıştırarak kur edgeai-tensorlab içerisindeki araçları kurulumunu tamamlayarak sistemi hazır hale getir # 1. Hazırlık Derleme işlemleri Ubuntu 22.04 GNU/Linux dağıtımı içeren bilgisayar ile yapıldı. Debian, Fedora, Pardus gibi dağıtımların da kullanılması mümkün olmakla birlikte ilk kez buna benzer derleme araçları kullananlar için Ubuntu 22 veya Ubuntu 24 daha uygun olacaktır. ### 1.1. Bilgisayar Gereksinimleri 1. Ubuntu 22 veya Ubuntu 24 bilgisayar 2. En az 8GB RAM 3. En az 10GB kullanılabilir boş disk alanı Gemstone SDK `Docker` ve `Devbox` gibi araçlara ihtiyaç duymaktadır. Aşağıdaki komutlarla SDK projesi klonlandıktan sonra içerisinde bulunan `setup.sh` isimli script bu kurulumları otomatik yapmaktadır. ```mermaid theme={"system"} flowchart n1@{ label: "**Projeyi indir**" } --- n2@{ label: "**Gereksinimleri Kur**" } n2 --- n3@{ label: "**Devbox Shell Aktifleştir**" } n3 --- n4@{ label: "Distrobox ile Veri Etiketleme ve Model Derleme Ortamını Hazırla." } n5@{ label: "Distrobox ile EdgeAI Label Studio Paket Kurulumlarını Tamamla" } --- n6@{ label: "Label Studio ile Veri Etiketle" } n6 --- n7@{ label: "Edge AI Model Maker ile Model Derle" } n4 --> n5 n1@{ shape: rounded} n3@{ shape: hex} n4@{ shape: hex} n5@{ shape: hex} style n1 fill:#FFDE59 style n7 stroke-width:1px,stroke-dasharray:5 5 style n6 stroke-width:1px,stroke-dasharray:5 5 ``` ### 1.2. Projeyi İndir Ubuntu üzerinde herhangi bir klasörde Terminal açarak aşağıdaki gibi `git clone` komutu ile projeyi klonlayınız. ```bash Terminal lines theme={"system"} git clone https://github.com/t3gemstone/edgeai-tensorlab.git ``` ```bash Output lines theme={"system"} ubuntu@host:~$ git clone https://github.com/t3gemstone/edgeai-tensorlab.git Cloning into 'edgeai-tensorlab'... remote: Enumerating objects: 386468, done. remote: Counting objects: 100% (442/442), done. remote: Compressing objects: 100% (101/101), done. remote: Total 386468 (delta 389), reused 344 (delta 341), pack-reused 386026 (from 2) Receiving objects: 100% (386468/386468), 675.93 MiB | 29.93 MiB/s, done. Resolving deltas: 100% (280871/280871), done. Updating files: 100% (15274/15274), done. ubuntu@host:~$ ``` ### 1.3. Gereksinimleri Kur Klonlama işlemi sonrası aynı terminal ekranından `cd edgeai-tensorlab` komutu ile klasöre girerek `setup.sh` scriptini çalıştırma işlemini yapınız. ```bash Terminal lines theme={"system"} cd edgeai-tensorlab ./setup.sh ``` ```bash Output lines theme={"system"} ubuntu@host:~$ cd edgeai-tensorlab/ ubuntu@host:edgeai-tensorlab$ ./setup.sh 🚀 T3 Gemstone Vision Process Model Development Kit This script downloads and installs the necessary packages 📦 to develop the vision process model for T3 Gemstone boards. Powered by Jetify Devbox, Distrobox, Love and Passion. → requirements... ✓ requirements... [DONE] → docker... ✓ docker... [DONE] ✓ docker-permissions... [DONE] → devbox... ✓ devbox... [DONE] What's the next? 1. Learn how to build 🌍 a new world Read the docs at https://docs.t3gemstone.org 2. Get help and give feedback Join our community at https://community.t3gemstone.org ``` Docker isimli uygulama daha önce sisteminizde kurulu değilse; ilk kez kuruyorsanız, Bilgisayar kullanıcı oturumunu kapatarak yeniden giriş yapmayı unutmayınız. # 2. Derleme Gereksinim kurulum scriptini tamamladıktan sonra Terminal'den sdk klasörü içerisindeyken Devbox Shell aktifleştirerek derleme adımlarına başlayabilirsiniz. ### 2.1. Devbox Konsolunu Aktifleştir Ubuntu paketlerinden farklı versiyonlar içerebilen yazılım paket yönetim sistemi olan **Devbox**'ı aktifleştirerek edgeai-tensorlab için gerekli indirme işlemlerini ve kurulumları tamamlanmasını sağlayınız. ```bash Terminal lines theme={"system"} devbox shell ``` ```bash Output lines theme={"system"} ubuntu@host:~$ cd edgeai-tensorlab ubuntu@host:edgeai-tensorlab$ devbox shell Starting a devbox shell... 📦 devbox:edgeai-tensorlab> ``` ### 2.2. Derleme Ortamını Hazırla Aşağıdaki komut aracılığıyla Distrobox kurulum işlemini gerçekleştiriniz. ```bash Terminal lines theme={"system"} task box ``` ```bash Output lines theme={"system"} 📦 devbox:edgeai-tensorlab> task box task: [box] distrobox-list | grep -q 'gemstone-edgeai' || docker build -f Dockerfile -t gemstone-edgeai:latest . [+] Building 0.1s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.21kB 0.0s => [internal] load metadata for docker.io/library/ubuntu:22.04 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/5] FROM docker.io/library/ubuntu:22.04 0.0s => CACHED [2/5] RUN apt-get update && apt-get upgrade -y && apt- 0.0s => CACHED [3/5] RUN sed -i 's/pam_unix\.so obscure/pam_unix.so minlen=1 0.0s => CACHED [4/5] RUN echo gemstone > /etc/hostname 0.0s => CACHED [5/5] RUN curl --location https://taskfile.dev/install.sh | su 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:9671fd0552dfcab17e321871b140c89b0aa242eabed98 0.0s => => naming to docker.io/library/gemstone-edgeai:latest 0.0s task: [box] distrobox-assemble create --file distrobox.ini - Creating gemstone-edgeai... Creating 'gemstone-edgeai' using image gemstone-edgeai [ OK ] Distrobox 'gemstone-edgeai' successfully created. To enter, run: distrobox enter gemstone-edgeai Successfully copied 2.05kB to /tmp/gemstone-edgeai.os-release Starting container... [ OK ] Installing basic packages... [ OK ] Setting up devpts mounts... [ OK ] Setting up read-only mounts... [ OK ] Setting up read-write mounts... [ OK ] Setting up host's sockets integration... [ OK ] Integrating host's themes, icons, fonts... [ OK ] Setting up distrobox profile... [ OK ] Setting up sudo... [ OK ] Setting up user groups... [ OK ] Setting up user's group list... [ OK ] Adding user... [ OK ] Ensuring user's access... [ OK ] Setting up skel... [ OK ] Executing init hooks... [ OK ] Setting up init system... [ OK ] Firing up init system... [ OK ] Container Setup Complete! task: [box] distrobox-enter --additional-flags "--tty" --name gemstone-edgeai --no-workdir To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. ⚠️ First time user password setup ⚠️ New password: Retype new password: passwd: password updated successfully 🚀 distrobox:workdir> ``` Kurulum işleminin sonuna doğru sizlerden `⚠️ First time user password setup ⚠️` distrobox ortamınıza bir şifre vermeniz istenecektir. Derleme işlemlerini yaparken Terminalden hangi konsol içerisinde bulunduğunuzu ayırt edebilmeniz için bilgisayarınızın şifresinden farklı olarak 1 karakterlik şifre seçebilirsiniz. Son olarak `🚀 distrobox:workdir>` satırını gördüğünüzde artık Gemstone Görüntü İşleme modelleri hazırlamak için hazırsınız! ### 2.3. Paket Kurulumlarını Tamamla Label Studio ve Edge AI Model Maker için gerekli olan kurulumları tamamlayınız. ```bash Terminal lines theme={"system"} task install ``` ```bash Output lines theme={"system"} 📦 devbox:edgeai-tensorlab> task box task: [box] distrobox-list | grep -q 'gemstone-edgeai' || docker build -f Dockerfile -t gemstone-edgeai:latest . [+] Building 0.1s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.21kB 0.0s => [internal] load metadata for docker.io/library/ubuntu:22.04 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/5] FROM docker.io/library/ubuntu:22.04 0.0s => CACHED [2/5] RUN apt-get update && apt-get upgrade -y && apt- 0.0s => CACHED [3/5] RUN sed -i 's/pam_unix\.so obscure/pam_unix.so minlen=1 0.0s => CACHED [4/5] RUN echo gemstone > /etc/hostname 0.0s => CACHED [5/5] RUN curl --location https://taskfile.dev/install.sh | su 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:9671fd0552dfcab17e321871b140c89b0aa242eabed98 0.0s => => naming to docker.io/library/gemstone-edgeai:latest 0.0s task: [box] distrobox-assemble create --file distrobox.ini - Creating gemstone-edgeai... Creating 'gemstone-edgeai' using image gemstone-edgeai [ OK ] Distrobox 'gemstone-edgeai' successfully created. To enter, run: distrobox enter gemstone-edgeai Successfully copied 2.05kB to /tmp/gemstone-edgeai.os-release Starting container... [ OK ] Installing basic packages... [ OK ] Setting up devpts mounts... [ OK ] Setting up read-only mounts... [ OK ] Setting up read-write mounts... [ OK ] Setting up host's sockets integration... [ OK ] Integrating host's themes, icons, fonts... [ OK ] Setting up distrobox profile... [ OK ] Setting up sudo... [ OK ] Setting up user groups... [ OK ] Setting up user's group list... [ OK ] Adding user... [ OK ] Ensuring user's access... [ OK ] Setting up skel... [ OK ] Executing init hooks... [ OK ] Setting up init system... [ OK ] Firing up init system... [ OK ] Container Setup Complete! task: [box] distrobox-enter --additional-flags "--tty" --name gemstone-edgeai --no-workdir To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. ⚠️ First time user password setup ⚠️ New password: Retype new password: passwd: password updated successfully 🚀 distrobox:workdir> ``` # 3. Son Bu bölümü tamamlayarak; Gemstone görüntü işleme modelleri hazırlama ortamını kurdunuz. Sonraki bölüme geçerek veri etiketleme ve Gemstone kartları için model derlemeye başlayabilirsiniz. # Örnekler Source: https://docs.t3gemstone.org/tr/boards/o1/ai/examples Örnek Projeler ### Gerçek Zamanlı Nesne Tespiti Uygulaması Örnek uygulama içinde yer alan bu uygulamada, AM67A SoC üzerindeki C7x/MMA çekirdekleri kullanılarak donanım hızlandırmalı nesne tespiti yapılmasını sağlar. Kamera görüntüsü, GStreamer altyapısı üzerinden alınır; TensorFlow Lite modelinde çıkarım (inference) yapılır ve sonuçlar bir MJPEG sunucusu üzerinden tarayıcıya gerçek zamanlı olarak iletilir. Uygulama, TIDL (TI Deep Learning) delegate kütüphanesini kullanarak model çıkarımını C7x DSP üzerinde çalıştırır. Eğer TIDL delegate bulunamazsa, otomatik olarak CPU üzerinde çalışmaya devam eder. Kaynak kodları T3 Gemstone'un GitHub üzerindeki [examples deposunda](https://github.com/t3gemstone/examples/tree/main/camera) mevcuttur. ### Görsel-İşitsel Konferans Bu demo, sesli komutları algılayarak kameranın odaklandığı alanları kontrol eden ve derin öğrenme ile yüzleri tanıyıp ekranda gösteren, hem ses hem görüntü verilerini işleyen bir işitsel-görsel sistemi göstermektedir. Kaynak kodları Texas Instruments'ın GitHub üzerindeki [edgeai-demo-audio-visual deposunda](https://github.com/TexasInstruments-Sandbox/edgeai-demo-audio-visual) mevcuttur. ### Barkod Okuyucu Barkodlar, envanter yönetimi, varlık takibi, biletleme ve bilgi paylaşımı gibi alanlarda kritik bir rol oynar. Tek boyutlu (1-D) ve iki boyutlu (2-D) barkodlar, bilgiyi görsel bir kodlama biçiminde yoğunlaştırır. 1-D barkodlar için lazer tabanlı tarayıcılar yeterliyken, 2-D barkodlar (ör. QR kodları) için kameralar gereklidir. Kamera tabanlı sistemler genellikle “barkod görüntüleyiciler” olarak adlandırılır. Barkod görüntüleyicilerde en fazla hesaplama gerektiren işlem, barkodu çözmekten ziyade barkodu bulmaktır ve bu aşamada derin öğrenme teknikleri oldukça etkilidir. Bu demo, özel olarak eğitilmiş YOLOX-nano sinir ağını çalıştırarak 1-D ve 2-D barkodları tespit eder. Tespit edilen barkod bölgeleri kırpılır ve zbar açık kaynak kütüphanesi ile çözümleme için gri tonlamaya dönüştürülür. Barkod çözümü, nesne tespiti ile elde edilen sınırlayıcı kutu ile birlikte görüntülenir. Kaynak kodları Texas Instruments'ın GitHub üzerindeki [edgeai-gst-apps-barcode-reader deposunda](https://github.com/TexasInstruments-Sandbox/edgeai-gst-apps-barcode-reader) mevcuttur. ### Akıllı Mağaza Satış Tarayıcısı Perakende ve marketlerdeki self-checkout sistemleri, müşteri deneyimini büyük ölçüde kolaylaştırmıştır. Basit ve kullanıcı dostu kiosklar, müşterilerin ürünlerini tarayıp düşük temasta ödeme yapmalarını sağlar. Bu alan giderek daha otomatik sistemlere doğru ilerlemekte ve müşteriler, barkod aramak veya ürünleri belirli bir şekilde yerleştirmek zorunda kalmadan birden fazla ürünü aynı anda tarayabilmektedir. Bu tür sistemler, süreci hızlandırma, temas yüzeylerini azaltma ve genel verimliliği artırma gibi ek avantajlar sunar. Bu demo, derin öğrenme modeli ile 12 farklı yiyecek türünü (muz, elma, cips paketi, gazlı içecek kutusu vb.) tespit eden otomatik perakende ödeme tarayıcısını göstermektedir. Kaynak kodları Texas Instruments'ın GitHub üzerindeki [edgeai-gst-apps-retail-checkout deposunda](https://github.com/TexasInstruments-Sandbox/edgeai-gst-apps-retail-checkout) mevcuttur. ### İnsan Takibi Görüntü tabanlı insan takibi, perakende, bina otomasyonu, güvenlik ve emniyet gibi birçok alanda uygulanabilir. Bu demo, video akışındaki bireyleri tespit etmek için YOLOX-S-Lite makine öğrenimi modelini kullanır. Modelin çıktısı, sahnedeki insanların hareketlerini takip etmek için kullanılır ve bu süreçte Norfair adlı açık kaynak kütüphane devreye girer. Demo, sahnedeki bireylerin canlı takibini sağlar ve her kişinin mevcut konumunda geçirdiği süreyi gösteren zamanlayıcılar sunar. Ayrıca toplam ziyaretçi sayısı, mevcut doluluk ve bireylerin sahnede geçirdiği sürelerin dağılımı gibi istatistikleri gösteren bir kontrol paneli içerir. Ek olarak, sık ziyaret edilen alanları vurgulayan bir ısı haritası bulunur. Bu özellik, insan davranışlarını anlamak için değerli bilgiler sunar. Örneğin perakende mağazalarında raf düzeninin optimize edilmesine yardımcı olarak müşteri deneyimini iyileştirebilir. Kaynak kodları Texas Instruments'ın GitHub üzerindeki [edgeai-gst-apps-people-tracking deposunda](https://github.com/TexasInstruments-Sandbox/edgeai-gst-apps-people-tracking) mevcuttur. # Kurulum Source: https://docs.t3gemstone.org/tr/boards/o1/ai/installation T3 Edge AI Paketi Kurulumu Bu bölümde, T3 Gemstone O1 geliştirme kartına Edge AI paketinin nasıl kurulacağı hakkında bilgi verilecektir. Bu paketler sayesinde yapay zeka hızlandırıcılarını kullanarak görüntü işleme işlemlerini gerçekleştirebileceksiniz. ```bash theme={"system"} sudo apt update ``` Sistem paket listesini güncel tutmak, kurulum sırasında oluşabilecek bağımlılık hatalarını önler. ```bash theme={"system"} sudo apt install t3-gem-o1-edgeai ``` Bu komut, Edge AI geliştirme araçlarını ve kütüphanelerini tek seferde kurar. Terminal arayüzünden `nano` isimli metin editörünü kullanarak boot klasöründe yer alan `uEnv.txt` dosyasını açınız. ```bash theme={"system"} sudo nano /boot/uEnv.txt ``` Komutu sudo ile kullandığımız için şifre soracaktır. Değiştirmediyseniz Gem-Imager ile imajı yazarken belirlemiş olduğunuz şifreyi kullanmalısınız. `uEnv.txt` dosyasının içinde bu tarz tanımlamalar bulunacaktır. ``` firstboot=0 overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo bootpart=1:1 initrdaddr=0x90000000 fdtoverlayaddr=0x89000000 get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192 get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1 boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr} distro_bootcmd=run args_mmc;run boot_mmc ``` `k3-am67a-t3-gem-o1-edgeai-apps.dtbo` dosya adını `overlays=` satırının sonuna boşluk bırakarak ekleyin. `uEnv.txt` dosyasının son hali böyle olacaktır. Uygun dosya adını `` kısmına yerleştirmeniz gerekmektedir. ``` firstboot=0 overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo bootpart=1:1 initrdaddr=0x90000000 fdtoverlayaddr=0x89000000 get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192 get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1 boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr} distro_bootcmd=run args_mmc;run boot_mmc ``` Overlay dosyasını tanımladıktan sonra, yapılan değişikliklerin sistem tarafından uygulanabilmesi için kartın yeniden başlatılması gerekilmektedir. ```bash theme={"system"} sudo reboot ``` ```bash theme={"system"} sudo su source /opt/t3-edgeai-env ``` Bu komutlar, `root` kullanıcısına geçmenizi ve Edge AI için gerekli olan ortam değişkenlerini yükleminizi sağlar. Not: Yapay zeka hızlandırıcılarının kullanılması sebebiyle işlemler donanım seviyesinde gerçekleştirilmektedir. Bu nedenle ilgili adımların root kullanıcısı altında yürütülmesi gerekmektedir. # Giriş Source: https://docs.t3gemstone.org/tr/boards/o1/ai/introduction Edge-AI Edge AI (Edge Artificial Intelligence), yapay zekâ işlemlerinin bulutta değil, verinin toplandığı cihazın üzerinde (edge’de) gerçekleştirilmesi anlamına gelir. Yani veriler sensör, kamera, drone, IoT cihazı gibi uç noktada işlenir; analiz için sürekli buluta gönderilmez. Amaç: Gecikmeyi azaltmak, gizliliği artırmak ve ağ trafiğini düşürmektir. Yapay zeka ve görüntü işleme projelerinde, büyük miktarda veri kullanılmakta ve yüksek işlem gücü gerekmektedir. AM67A işlemcisi, bu tür hesaplamaları hızlandırmak için özel bir donanım birimi olan **MMA** (Matrix Multiply Accelerator / Matris Çarpım Hızlandırıcısı) içerir. Bu birim, görüntü verilerini ve yapay zeka modellerini hızlı bir şekilde işler. MMA, işlemciye bağlı olarak çalışır ve ana CPU’nun yükünü hafifleterek hesaplamaların daha verimli olmasını sağlar. Kartın işlemcisi ayrıca C7x Dijital Sinyal İşlemcisi (DSP) ile birlikte çalışarak farklı türde hesaplamaları (tensor, vektör, skaler) yüksek hız ve düşük enerji tüketimi ile yapabilir. MMA’nın kendi hafıza ve veri taşıma sistemi bulunur, böylece veriler hızlı bir şekilde işlenir ve enerji tasarrufu sağlanır. Dokümantasyonun bu bölümünde, Geliştirme Kartında bulunan "Yapay Zeka Kabiliyeti" kavramının ne olduğu, hangi araçların nerelerde hangi amaçla kullanılacağına değinilecek ve örnek projeler anlatılacaktır. Geliştirme kartındaki temel Yapay Zeka kabiliyet ve kullanım mantığı, önceden eğitilmiş çeşitli modellerin MMU/C7x modülleriyle hızlandırılmış biçimde yürütülerek görev icra etmesi ve CPU/MCU tarafından bu sonuçlara ulaşabilmesi üzerine kuruludur. 2 adet Derin Öğrenme Hızlandırıcısı bulunmaktadır ve 4 TOPS (Trillion Operations Per Second/Saniyede kaç trilyon operasyon gerçekleştiği) işlem gücüne sahiptir. Aşağıdaki tabloda [tahmini olarak hangi teknolojiler](https://community.t3gemstone.org/t/do-you-really-need-100-tops-right-sizing-ai-performance-for-real-world-edge-applications/369) için ne kadarlık işlem gücü gerektiği belirtilmiştir. | Kullanım Yeri | Yaklaşık İşlem Gücü | | -------------------------------------- | ------------------- | | Nesne algılama (örneğin YOLOv5s) | 1-2 TOPS | | Yüz tanıma | 1 TOPS | | Anomali tespiti (titreşim verileriyle) | 0.5 TOPS | | Plaka tanıma | 2 TOPS | | Sesli komut işleme | 1 TOPS | | Optik karakter tanıma (OCR) | 1.5-3 TOPS | # DSPLIB Source: https://docs.t3gemstone.org/tr/boards/o1/ai/libraries/dsplib Hızlandırma çipleri ile dijital sinyal işleme fonksiyonların kullanımı DSPLIB kütüphanesini kullanan C7 tabanlı MCU projeleri, işlemcide yer alan DSP hızlandırıcı biriminden faydalanarak çalışır. Bu sayede filtreleme, konvolüsyon, korelasyon ve benzeri temel DSP işlemleri donanımsal olarak hızlandırılır ve gerçek zamanlı uygulamalarda yüksek performans elde edilir. ## Örnek Proje DSPLIB kütüphanesinin entegrasyonunu referans alarak inceleyebileceğiniz çalışır bir örnek proje, T3 Gemstone GitHub'daki `examples` reposu içerisinde yer alan `MCU` dizini altında sunulmaktadır. Examples reposunun içinde `devbox shell` içindeyken aşağıdaki komutu çalıştırmalısınız. ```bash theme={"system"} PROJECT=mcu task clean build ``` `examples/mcu/dsplib_demo/j722s-evm/c75ss0-0_freertos/ti-c7000` ve `examples/mcu/dsplib_demo/j722s-evm/c75ss1-0_freertos/ti-c7000` içinde yer alan `dsplib_demo.out` dosyası artık C7 çekirdeklerinde çalıştırlabilir hale gelmiştir. Geliştirme kartı üzerinde çalıştırmak için [Derlenmiş projenin U-Boot aşamasında çalıştırılması](/tr/boards/o1/peripherals/mcu#2-8-derlenmiş-projenin-u-boot-aşamasında-çalıştırılması) bölümündeki adımları takip edebilirsiniz. Bu örnek projede üretilen çıktılar UART1 arabirimi üzerinden iletilmektedir. İlgili pin bağlantılarına [Pinout dokümantasyonundan](/tr/boards/o1/peripherals/introduction#1-pinout) ulaşabilirsiniz. DSPLIB örnek projesinin çıktılarının terminal görüntüsü aşağıdaki gibidir. ```bash theme={"system"} DSPLIB Demo start ------------------------------------ T3 Gemstone DSPLIB Test ------------------------------------ 0.716499 + nane-308 = 0.716499 0.135435 + 0.785398 = 0.920833 0.509235 + 1.57080 = 2.08003 0.541196 + 2.35619 = 2.89739 0.192425 + 3.14159 = 3.33402 0.383086 + 3.92699 = 4.31008 0.563632 + 4.71239 = 5.27602 0.245671 + 5.49779 = 5.74346 0.0562966 + nane-308 = 0.0562966 0.991528 + 0.785398 = 1.77693 0.479954 + 1.57080 = 2.05075 0.973097 + 2.35619 = 3.32929 0.798400 + 3.14159 = 3.93999 0.0669125 + 3.92699 = 3.99390 ``` ## Mevcut MCU Projesine MakeFile Üzerinden Entegre Etme DSPLIB kütüphanesini mevcut MCU projenize entegre edebilmek için, SDK’ya ait kök dizin yolunu ve kullanacağınız `.cpp` dosyasını tanımlamanız gerekmektedir. ```makefile theme={"system"} SDK_ROOT_PATH := ${MCU_PLUS_SDK_PATH}/.. FILES_cpp := \ dsplib_demo.cpp \ ``` Ardından, include edilen klasörler listesine (`INCLUDES_common` değişkeni) DSPLIB’in `src` dizinini aşağıdaki şekilde eklemelisiniz. DSPLIB sürümünüze göre pathi değiştirmeniz gerekbilir. ```makefile theme={"system"} -I${SDK_ROOT_PATH}/dsplib/src \ ``` Derleyiciye ait FLAGS parametrelerine (`CFLAGS_common` değişkeni), kütüphanenin doğru şekilde derlenebilmesi için gerekli olan aşağıdaki tanımlamaları eklemeniz gerekmektedir. ```makefile theme={"system"} -DMCU_PLUS_SDK \ -DBUILD_C7X \ -DSOC=j722s \ --silicon_version=7524 \ ``` Kütüphane yol tanımlarına (`LIBS_PATH_common` değişkeni), DSPLIB’in derlenmiş kütüphane dizinini eklemelisiniz. ```makefile theme={"system"} -i${SDK_ROOT_PATH}/dsplib/lib/Release \ ``` Dahil edilen kütüphane dosyaları listesine (`LIBS_common` değişkeni) DSPLIB kütüphanesinin adını aşağıdaki gibi eklemeniz gerekmektedir. ```makefile theme={"system"} -lDSPLIB_C7524.lib \ -lDSPLIB_common_C7524.lib \ ``` Projede .cpp dosyalarının derlenebilmesi için, `OBJS` ve `DEPS` tanımlarının yapıldığı satırın hemen altına aşağıdaki eklemelerin yapılması gerekmektedir. ```makefile theme={"system"} OBJS += $(FILES_cpp:%.cpp=%.obj) DEPS := $(FILES:%.cpp=%.dpp) vpath %.cpp $(FILES_PATH) $(OBJDIR)/%.obj %.obj: %.cpp @echo Compiling: j722s:c75ss0-0:freertos:ti-c7000 $(OUTNAME): $< $(CC) $(CFLAGS) $(INCLUDES) $(DEFINES) -ppd=$(OBJDIR)/$(basename $@).dpp -ppa -fr=$(OBJDIR)/ -fp=$< ``` Bu adımların tamamlanmasının ardından DSPLIB kütüphanesi, projeye Makefile üzerinden başarıyla entegre edilmiş olacaktır. ## Mevcut CPP Dosyasına DSPLIB Entegrasyonu Makefile üzerinden gerekli yapılandırmalar tamamlandıktan sonra, DSPLIB kütüphanesini kullanabilmek için ilgili header dosyasını projenizde yer alan .cpp dosyasına eklemeniz gerekmektedir. Bu adımın ardından, mevcut projeniz içerisinde DSPLIB’e ait fonksiyonları ve tanımlamaları doğrudan kullanabilirsiniz. DSPLIB kütüphanesinde yer alan modüllerin tamamına [bu bağlantı üzerinden](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j722s/10_01_00_04/exports/docs/dsplib/docs/user_guide/index.html) ulaşabilirsiniz. ```cpp theme={"system"} #include ``` Bu işlem ile birlikte DSPLIB entegrasyonu tamamlanmış olacaktır. # Giriş Source: https://docs.t3gemstone.org/tr/boards/o1/ai/libraries/introduction Hızlandırma çipleri ile ileri seviye fonksiyonların kullanımı AM67A Serisi SoC’lerde yer alan C7x DSP çekirdekleri, yüksek performanslı sinyal ve görüntü işleme görevleri için optimize edilmiştir. Bu çekirdekler, Texas Instruments tarafından sağlanan optimize kütüphaneler aracılığıyla düşük seviyeden ileri seviyeye uzanan geniş bir uygulama yelpazesinde kullanılabilmektedir. ### DSPLIB DSPLIB (Digital Signal Processing Library), düşük seviye sinyal işleme fonksiyonları için yüksek verimlilik sağlayan bir kütüphanedir. Bu kütüphane üzerinden FFT, FIR/IIR filtreleme, korelasyon, konvolüsyon ve matris işlemleri gibi temel DSP algoritmaları donanım hızlandırmalı şekilde gerçekleştirilebilir. Bu fonksiyonlar, C7 çekirdeklerinin paralel işleme kapasitesinden faydalanarak yüksek hızda çalışır ve özellikle görüntü ön işleme aşamalarında (örneğin gürültü azaltma, sinyal filtreleme) önemli performans kazançları sağlar. DSPLIB Kullanıcı Kılavuzuna [buradan](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/11_01_00_04/exports/docs/dsplib/docs/user_guide/index.html) ulaşabilirsiniz. ### VXLIB VXLIB (Vision Acceleration Library), düşük seviyeli görüntü işleme fonksiyonlarını içeren, OpenVX standardı ile uyumlu bir kütüphanedir. Kenar tespiti, histogram hesaplama, morfolojik işlemler, renk uzayı dönüşümleri gibi temel görüntü işleme adımları bu kütüphane ile optimize şekilde gerçekleştirilebilir. VXLIB, DSPLIB ile birlikte kullanıldığında görüntü işleme hattının tüm aşamalarında (ön işleme, özellik çıkarımı, segmentasyon) yüksek verimlilik sağlar. VXLIB Kullanıcı Kılavuzuna [buradan](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/11_01_00_04/exports/docs/vxlib_11_00_00_01/docs/user_guide/index.html) ulaşabilirsiniz. ### MATHLIB MATHLIB, temel ve ileri düzey matematiksel işlemler (trigonometrik fonksiyonlar, logaritmik hesaplamalar, üstel işlemler, karekök, vektörel matematik vb.) için optimize edilmiş fonksiyonlar sunan bir kütüphanedir. Bu kütüphane, özellikle yoğun matematiksel hesaplamalar içeren gerçek zamanlı DSP/MCU uygulamalarında C7 çekirdeklerinin donanımsal kapasitesinden en verimli şekilde yararlanılmasını sağlar. MATHLIB Kullanıcı Kılavuzuna [buradan](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j722s/latest/exports/docs/mathlib/docs/user_guide/index.html) ulaşabilirsiniz. ### Potansiyel Kullanım Yerleri Bu üç kütüphane bir arada kullanıldığında, AM67A SoC üzerindeki C7 çekirdekleri sadece düşük seviye işleme değil, aynı zamanda karmaşık görüntü analitiği, matematiksel hesaplama süreçleri ve gerçek zamanlı görüntü optimizasyonu gibi ileri seviye uygulamaların da temelini oluşturabilir. Örneğin: * VXLIB ile görüntü tabanlı özellik çıkarımı * MATHLIB ile yoğun matematiksel hesaplamaların yüksek performansla yürütülmesi * DSPLIB ile sinyal ön işleme Bu sayede sistem genelinde CPU üzerindeki yük azaltılırken, enerji verimliliği yüksek ve gerçek zamanlı çalışabilen görüntü işleme ve matematiksel hesaplama çözümleri geliştirilebilir. ## Edge AI Robotics ve Yazılım Ekosistemi Aşağıdaki tabloda Texas Instruments tarafından sağlanan Edge AI projeleri bulunmaktadır. ### Repository Tablosu | Repository | Açıklama | | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **[edgeai-robotics-sdk](https://github.com/TexasInstruments/edgeai-robotics-sdk)** | Robotik uygulamalar için temel framework ve API'lar sağlar. TI işlemcilerinde robotik ve bilgisayarlı görü uygulamalarının geliştirilmesini kolaylaştırır. | | **[edgeai-robotics-demos](https://github.com/TexasInstruments/edgeai-robotics-demos)** | Hazır robotik demo uygulamaları ve örnek kodlar içerir. Hızlı başlangıç ve prototipleme için idealdir. | | **[edgeai-tidl-tools](https://github.com/TexasInstruments/edgeai-tidl-tools)** | Derin öğrenme modellerinin TI işlemcilerinde çalıştırılması için gerekli araçları ve örnekleri içerir. | | **[edgeai-tiovx-apps](https://github.com/TexasInstruments/edgeai-tiovx-apps)** | TI OpenVX (TIOVX) tabanlı bilgisayarlı görü uygulamaları ve örneklerini içerir. Performans optimizasyonu için önemlidir. | | **[edgeai-gst-plugins](https://github.com/TexasInstruments/edgeai-gst-plugins)** | TI platformları için optimize edilmiş GStreamer plugin'leri içerir. Video işleme ve AI için gerekli olan pipeline'ları oluşturmayı sağlar. | | **[edgeai-app-stack](https://github.com/TexasInstruments/edgeai-app-stack)** | Edge AI uygulamaları için gerekli olan tüm yazılımları, sistem konfigürasyonları ve entegrasyon araçlarını içerir. | | **[edgeai-tensorlab](https://github.com/TexasInstruments/edgeai-tensorlab)** | Model optimizasyonu, kalibrasyon ve analiz araçları. Model performansını iyileştirmek için kullanılır. (Daha basit versiyonuna [buradan](/tr/boards/o1/ai/edgeai-tensorlab) ulaşabilirsiniz.) | | **[edgeai-gst-apps](https://github.com/TexasInstruments/edgeai-gst-apps)** | Bu örnek uygulama sayesinde geliştiricilerin AI işlem hatlarını (pipeline) model değişiklikleri, kamera kaynakları veya çıktı yöntemleriyle nasıl yapılandıracaklarını hızlıca anlamalarına ve özelleştirmelerine olanak tanır. | | **[edgeai-tiovx-kernels](https://git.ti.com/cgit/edgeai/edgeai-tiovx-kernels)** | TI OpenVX (TIOVX) çerçevesi için özel geliştirilmiş, derin öğrenme tabanlı özel çekirdek (kernel) işlevlerini içerir. | | **[edgeai-dl-inferer](https://git.ti.com/cgit/edgeai/edgeai-dl-inferer)** | AI modellerini çalıştırmak için derin öğrenme kütüphaneleri sağlar. | | **[edgeai-apps-utils](https://git.ti.com/cgit/edgeai/edgeai-apps-utils)** | Edge AI uygulamaları için ortak yardımcı programlar ve paylaşılan kütüphaneler koleksiyonudur. | ### Bağımlılık İlişkileri ```mermaid theme={"system"} flowchart TB A["edgeai-gst-apps"] --> n1["edgeai-gst-plugins"] n1 --> n3["edgeai-dl-inferer"] & n4["edgeai-tiovx-modules"] & n7["edgeai-apps-utils"] n4 --> n6["edgeai-tiovx-kernels"] n6 --> n7 n5["edgeai-tiovx-apps"] --> n7 & n6 n3 --> n7 A@{ shape: rounded} n1@{ shape: rounded} n3@{ shape: rounded} n4@{ shape: rounded} n7@{ shape: rounded} n6@{ shape: rounded} n5@{ shape: rounded} ``` # MATHLIB Source: https://docs.t3gemstone.org/tr/boards/o1/ai/libraries/mathlib Hızlandırma çipleri ile matematiksel fonksiyonların kullanımı MATHLIB kütüphanesini kullanan C7 tabanlı MCU projeleri, işlemcide yer alan AI Hızlandırıcı (C7x DSP / MMA) biriminden faydalanarak çalışmaktadır. Bu sayede matematiksel işlemler, vektörel hesaplamalar ve yoğun hesaplama gerektiren fonksiyonlar donanımsal hızlandırma ile yürütülür ve uygulama performansı önemli ölçüde artırılır. ## Örnek Proje MATHLIB kütüphanesinin entegrasyonunu referans alarak inceleyebileceğiniz çalışır bir örnek proje, T3 Gemstone GitHub'daki `examples` reposu içerisinde yer alan `MCU` dizini altında sunulmaktadır. Examples reposunun içinde `devbox shell` içindeyken aşağıdaki komutu çalıştırmalısınız. ```bash theme={"system"} PROJECT=mcu task clean build ``` `examples/mcu/mathlib_demo/j722s-evm/c75ss0-0_freertos/ti-c7000` ve `examples/mcu/mathlib_demo/j722s-evm/c75ss1-0_freertos/ti-c7000` içinde yer alan `mathlib_demo.out` dosyası artık C7 çekirdeklerinde çalıştırlabilir hale gelmiştir. Geliştirme kartı üzerinde çalıştırmak için [Derlenmiş projenin U-Boot aşamasında çalıştırılması](/tr/boards/o1/peripherals/mcu#2-8-derlenmiş-projenin-u-boot-aşamasında-çalıştırılması) bölümündeki adımları takip edebilirsiniz. Bu örnek projede üretilen çıktılar UART1 arabirimi üzerinden iletilmektedir. (İlgili pin bağlantılarına [Pinout dokümantasyonundan](/tr/boards/o1/peripherals/introduction#1-pinout) ulaşabilirsiniz.) MATHLIB örnek projesinin çıktılarının terminal görüntüsü aşağıdaki gibidir. ```bash theme={"system"} ----------------------------- T3 Gemstone MATHLIB Test ----------------------------- acos( 1.00000) = nane-308 acos( 0.970942) = 0.241660 acos( 0.885456) = 0.483319 acos( 0.748511) = 0.724983 acos( 0.568065) = 0.966644 acos( 0.354605) = 1.20830 acos( 0.120537) = 1.44997 acos( -0.120537) = 1.69163 acos( -0.354605) = 1.93329 acos( -0.568065) = 2.17495 acos( -0.748511) = 2.41661 acos( -0.885456) = 2.65827 acos( -0.970942) = 2.89993 acos( -1.00000) = 3.14159 acos( 1.00000) = nane-308 acos( 0.970942) = 0.241660 acos( 0.885456) = 0.483319 acos( 0.748511) = 0.724983 acos( 0.568065) = 0.966644 acos( 0.354605) = 1.20830 acos( 0.120537) = 1.44997 acos( -0.120537) = 1.69163 acos( -0.354605) = 1.93329 acos( -0.568065) = 2.17495 acos( -0.748511) = 2.41661 acos( -0.885456) = 2.65827 acos( -0.970942) = 2.89993 acos( -1.00000) = 3.14159 ``` ## Mevcut MCU Projesine MakeFile Üzerinden Entegre Etme Mathlib kütüphanesini mevcut MCU projenize entegre edebilmek için, SDK’ya ait kök dizin yolunu ve kullanacağınız `.cpp` dosyasını tanımlamanız gerekmektedir. ```makefile theme={"system"} SDK_ROOT_PATH := ${MCU_PLUS_SDK_PATH}/.. FILES_cpp := \ mathlib_demo.cpp \ ``` Ardından, include edilen klasörler listesine (`INCLUDES_common` değişkeni) MATHLIB’in `src` dizinini aşağıdaki şekilde eklemelisiniz. ```makefile theme={"system"} -I${SDK_ROOT_PATH}/mathlib/src \ ``` Derleyiciye ait FLAGS parametrelerine (`CFLAGS_common` değişkeni), kütüphanenin doğru şekilde derlenebilmesi için gerekli olan aşağıdaki tanımlamaları eklemeniz gerekmektedir. ```makefile theme={"system"} -DMCU_PLUS_SDK \ -DBUILD_C7X \ -DSOC=j722s \ --silicon_version=7524 \ ``` Kütüphane yol tanımlarına (`LIBS_PATH_common` değişkeni), MATHLIB’in derlenmiş kütüphane dizinini eklemelisiniz. ```makefile theme={"system"} -i${SDK_ROOT_PATH}/mathlib/lib/Release \ ``` Dahil edilen kütüphane dosyaları listesine (`LIBS_common` değişkeni) mathlib kütüphanesinin adını aşağıdaki gibi eklemeniz gerekmektedir. ```makefile theme={"system"} -lMATHLIB_C7524.lib \ ``` Projede .cpp dosyalarının derlenebilmesi için, `OBJS` ve `DEPS` tanımlarının yapıldığı satırın hemen altına aşağıdaki eklemelerin yapılması gerekmektedir. ```makefile theme={"system"} OBJS += $(FILES_cpp:%.cpp=%.obj) DEPS := $(FILES:%.cpp=%.dpp) vpath %.cpp $(FILES_PATH) $(OBJDIR)/%.obj %.obj: %.cpp @echo Compiling: j722s:c75ss0-0:freertos:ti-c7000 $(OUTNAME): $< $(CC) $(CFLAGS) $(INCLUDES) $(DEFINES) -ppd=$(OBJDIR)/$(basename $@).dpp -ppa -fr=$(OBJDIR)/ -fp=$< ``` Bu adımların tamamlanmasının ardından MATHLIB kütüphanesi, projeye Makefile üzerinden başarıyla entegre edilmiş olacaktır. ## Mevcut CPP Dosyasına MATHLIB Entegrasyonu Makefile üzerinden gerekli yapılandırmalar tamamlandıktan sonra, MATHLIB kütüphanesini kullanabilmek için ilgili header dosyasını projenizde yer alan .cpp dosyasına eklemeniz gerekmektedir. Bu adımın ardından, mevcut projeniz içerisinde MATHLIB’e ait fonksiyonları ve tanımlamaları doğrudan kullanabilirsiniz. MATHLIB kütüphanesinde yer alan modüllerin tamamına [bu bağlantı üzerinden](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j722s/latest/exports/docs/mathlib/docs/user_guide/modules.html) ulaşabilirsiniz. ```cpp theme={"system"} #include ``` Bu işlem ile birlikte MATHLIB entegrasyonu tamamlanmış olacaktır. # VXLIB Source: https://docs.t3gemstone.org/tr/boards/o1/ai/libraries/vxlib Hızlandırma çipleri ile görüntü işleme fonksiyonların kullanımı VXLIB kullanan C7 tabanlı MCU projeleri, işlemcide yer alan DSP hızlandırıcı çekirdeği üzerinden çalışır. Bu sayede görüntü işleme, filtreleme, özellik çıkarımı ve yoğun matris/piksel işlemleri donanımsal olarak hızlandırılır ve gerçek zamanlı uygulamalarda performans önemli ölçüde artırılır. VXLIB, aşağıdaki temel görüntü işleme yeteneklerini sağlar: * Görüntü filtreleme * İstatistiksel bilgi çıkarımı * Özellik tespiti * Takip ve tanıma * Düşük seviye piksel işleme Bu çekirdekler, aşağıdaki uygulama alanlarında temel yapı taşı olarak kullanılabilir: * Video Analitiği * Video Gözetimi * Otomotiv Görüntü İşleme * Gömülü Görüntü İşleme * Oyun ve Eğlence Görüntü Sistemleri * Endüstriyel Makine Görüsü * Tüketici Elektroniği * Artırılmış Gerçeklik ## Örnek Proje VXLIB kütüphanesinin entegrasyonunu referans alarak inceleyebileceğiniz çalışır bir örnek proje, T3 Gemstone GitHub'daki `examples` reposu içerisinde yer alan `MCU` dizini altında sunulmaktadır. Examples reposunun içinde `devbox shell` içindeyken aşağıdaki komutu çalıştırmalısınız. ```bash theme={"system"} PROJECT=mcu task clean build ``` `examples/mcu/vxlib_demo/j722s-evm/c75ss0-0_freertos/ti-c7000` ve `examples/mcu/vxlib_demo/j722s-evm/c75ss1-0_freertos/ti-c7000` içinde yer alan `vxlib_demo.out` dosyası artık C7 çekirdeklerinde çalıştırlabilir hale gelmiştir. Geliştirme kartı üzerinde çalıştırmak için [Derlenmiş projenin U-Boot aşamasında çalıştırılması](/tr/boards/o1/peripherals/mcu#2-8-derlenmiş-projenin-u-boot-aşamasında-çalıştırılması) bölümündeki adımları takip edebilirsiniz. Bu örnek projede üretilen çıktılar UART1 arabirimi üzerinden iletilmektedir. İlgili pin bağlantılarına [Pinout dokümantasyonundan](/tr/boards/o1/peripherals/introduction#1-pinout) ulaşabilirsiniz. VXLIB örnek projesinin çıktılarının terminal görüntüsü aşağıdaki gibidir. ```bash theme={"system"} VXLIB Demo start ------------------------ T3 Gemstone VXLIB Test ------------------------ Non-Padded 3x3 Box Filter Input Image 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, Output Image 6, 7, 8, 11, 12, 13, 16, 17, 18, ``` ## Mevcut MCU Projesine MakeFile Üzerinden Entegre Etme VXLIB kütüphanesini mevcut MCU projenize entegre edebilmek için, SDK’ya ait kök dizin yolunu ve kullanacağınız `.cpp` dosyasını tanımlamanız gerekmektedir. ```makefile theme={"system"} SDK_ROOT_PATH := ${MCU_PLUS_SDK_PATH}/.. FILES_cpp := \ vxlib_demo.cpp \ ``` Ardından, include edilen klasörler listesine (`INCLUDES_common` değişkeni) VXLIB’in `src` ve `src/common` dizinlerini aşağıdaki şekilde eklemelisiniz. VXLIB sürümünüze göre pathi değiştirmeniz gerekbilir. ```makefile theme={"system"} -I${SDK_ROOT_PATH}/vxlib_10_01_00_02/src \ -I${SDK_ROOT_PATH}/vxlib_10_01_00_02/src/common \ ``` Derleyiciye ait FLAGS parametrelerine (`CFLAGS_common` değişkeni), kütüphanenin doğru şekilde derlenebilmesi için gerekli olan aşağıdaki tanımlamaları eklemeniz gerekmektedir. ```makefile theme={"system"} -DMCU_PLUS_SDK \ -DBUILD_C7X \ -DSOC=j722s \ --silicon_version=7524 \ ``` Kütüphane yol tanımlarına (`LIBS_PATH_common` değişkeni), VXLIB’in derlenmiş kütüphane dizinini eklemelisiniz. ```makefile theme={"system"} -i${SDK_ROOT_PATH}/vxlib_10_01_00_02/lib/Release \ ``` Dahil edilen kütüphane dosyaları listesine (`LIBS_common` değişkeni) VXLIB kütüphanesinin adını aşağıdaki gibi eklemeniz gerekmektedir. ```makefile theme={"system"} -lVXLIB_C7524.lib \ -lVXLIB_common_C7524.lib \ ``` Projede .cpp dosyalarının derlenebilmesi için, `OBJS` ve `DEPS` tanımlarının yapıldığı satırın hemen altına aşağıdaki eklemelerin yapılması gerekmektedir. ```makefile theme={"system"} OBJS += $(FILES_cpp:%.cpp=%.obj) DEPS := $(FILES:%.cpp=%.dpp) vpath %.cpp $(FILES_PATH) $(OBJDIR)/%.obj %.obj: %.cpp @echo Compiling: j722s:c75ss0-0:freertos:ti-c7000 $(OUTNAME): $< $(CC) $(CFLAGS) $(INCLUDES) $(DEFINES) -ppd=$(OBJDIR)/$(basename $@).dpp -ppa -fr=$(OBJDIR)/ -fp=$< ``` Bu adımların tamamlanmasının ardından VXLIB kütüphanesi, projeye Makefile üzerinden başarıyla entegre edilmiş olacaktır. ## Mevcut CPP Dosyasına VXLIB Entegrasyonu Makefile üzerinden gerekli yapılandırmalar tamamlandıktan sonra, VXLIB kütüphanesini kullanabilmek için ilgili header dosyasını projenizde yer alan .cpp dosyasına eklemeniz gerekmektedir. Bu adımın ardından, mevcut projeniz içerisinde VXLIB’e ait fonksiyonları ve tanımlamaları doğrudan kullanabilirsiniz. VXLIB kütüphanesinde yer alan modüllerin tamamına [bu bağlantı üzerinden](https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j722s/10_01_00_04/exports/docs/vxlib_10_01_00_02/docs/user_guide/index.html) ulaşabilirsiniz. ```cpp theme={"system"} #include #include #include ``` Bu işlem ile birlikte VXLIB entegrasyonu tamamlanmış olacaktır. # Model Hazırlama Source: https://docs.t3gemstone.org/tr/boards/o1/ai/process Görüntü İşleme İçin Model Hazırlama Bu bölümde, görüntü işleme işlemlerinde nesne tanıma vb. amaçlar için nasıl model hazırlandığına değinilecektir. Önceki bölümde anlatılan `edgeai-tensorlab` edgeai-tensorlab projesinin kurulumunu tamamladıysanız 3 adımda modelinizi derleyebilirsiniz. edgeai-tensorlab projesi çalışmaya hazır hale getir ve distrobox içerisine gir Hazırlanmak istenilen modele göre config dosyasını düzenle Model derlemesini başlat ## 1. Yapılandırma Dosyaları Yapılandırma dosyaları, EdgeAI-ModelMaker aracının eğitimden derlemeye kadar tüm akışı yapılandırılabilir şekilde yürütmesini sağlar. Kullanıcı bu dosyalarda proje özelinde parametreleri tanımlayarak kendine özgü modeli oluşturabilir. Örnek olması amacıyla `configs` klasörünün içinde 4 ana görüntü işleme tipi için örnek yapılandırma dosyası verilmiştir. ## 2. Nesne Sınıflandırma EdgeAI Model Maker içerisinde yer alan nesne sınıflandırma (object classification) konfigürasyon dosyası, model eğitimi ve değerlendirme süreçlerini tanımlamak için kullanılır. Bu dosya içinde veri kümesinin yolu, eğitim parametreleri (örneğin batch size, epoch sayısı ve öğrenme oranı), model mimarisi (örneğin MobileNetV2 veya RegNetX) ve optimizasyon ayarları gibi bilgileri içerir. Aşağıda örnek bir nesne sınıflandırma yapılandırma dosyasının içeriği yer almaktadır. ```yaml theme={"system"} common: target_module: 'vision' task_type: 'classification' target_device: 'AM67A' # run_name can be any string, but there are some special cases: # {date-time} will be replaced with datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # {model_name} will be replaced with the name of the model run_name: '{date-time}/{model_name}' dataset: # enable/disable dataset loading enable: True #False # max_num_files: [1000, 250] #None # Image Classification Dataset Examples: # ------------------------------------- # Example 1, (known datasets): 'oxford_flowers102' # dataset_name: oxford_flowers102 # ------------------------------------- # Example 2, give a dataset_name and input_data_path. # input_data_path could be a path to zip file, tar file, folder OR http, https link to zip or tar files # for input_data_path these are provided with this repository as examples: # 'http://software-dl.ti.com/jacinto7/esd/modelzoo/08_06_00_01/datasets/animal_classification.zip' # ------------------------------------- dataset_name: animal_classification input_data_path: 'http://software-dl.ti.com/jacinto7/esd/modelzoo/08_06_00_01/datasets/animal_classification.zip' training: # enable/disable training enable: True #False # Image Classification model chosen can be changed here if needed # options are: 'mobilenet_v2_lite', 'regnet_x_400mf', 'regnet_x_800mf' model_name: 'mobilenet_v2_lite' # training_epochs: 15 #30 # batch_size: 64 #8 #32 # learning_rate: 0.005 # num_gpus: 0 #1 #4 compilation: # enable/disable compilation enable: True #False # tensor_bits: 8 #16 #32 ``` Yukarıdaki YAML dosyasını kendi ihtiyaçlarına göre düzenleyebilirisiniz. Veri Kümesinin Adı Veri Kümesinin Yolu (İnternet sitesi veya dosya sisteminizden bir yol girebilirsiniz.) Nesne sınıflandırma için kullanacağınız temel modeli girmeniz beklenmektedir.\ Şu anda desteklenen modeller: `mobilenet_v2_lite`, `regnet_x_400mf`, `regnet_x_800mf` Eğitimde kullanılacak epoch sayısı Eğitimde kullanılacak batch boyutu Öğrenme oranı Kullanılacak GPU sayısı ### 2.1. MobileNet V2 MobileNet V2, Google tarafından geliştirilen, özellikle gömülü sistemler ve mobil cihazlar gibi kısıtlı donanımlarda yüksek verimlilik sağlayan bir evrişimsel sinir ağı (CNN) mimarisidir. Model, önceki sürüm olan MobileNet V1’e göre daha az parametreyle daha yüksek doğruluk sunar. Bunu, Inverted Residual Block ve Linear Bottleneck adı verilen iki temel yapı sayesinde başarır. Bu özellikler sayesinde: * Model boyutu küçülür. * Hesaplama maliyeti azalır. * Gerçek zamanlı uygulamalarda yüksek hız elde edilir. EdgeAI Model Maker içinde yer alan bu konfigürasyon dosyasında, bu mimarinin lite (daha düşük kaynak tüketimli) sürümüne ait parametreleri içerir ve genellikle nesne sınıflandırma görevlerinde kullanıldığı için tercih edilmiştir. ### 2.3. RegNet RegNet, Facebook AI Research (FAIR) tarafından geliştirilen bir ölçeklenebilir ağ mimarisi ailesidir. RegNet modelleri, yapılandırma parametreleri (örneğin kanal sayısı, blok sayısı, genişlik oranı) sistematik olarak değiştirilebilen bir tasarım felsefesine sahiptir. Bu sayede, küçük gömülü cihazlardan büyük sunucu ortamlarına kadar farklı donanımlarda aynı mimari mantık korunarak modeller oluşturulabilir. * RegNetX-400MF: 400 milyon FLOP civarında işlem maliyetine sahip, hafif bir sürümdür. * RegNetX-800MF: Daha yüksek doğruluk sunan, orta seviye kaynaklara uygun bir sürümdür. Bu modeller, özellikle verimlilik ve doğruluk dengesine ihtiyaç duyulan sınıflandırma projelerinde tercih edilir. ## 3. Nesne Tespiti EdgeAI Model Maker içerisinde yer alan nesne tespiti (object detection) konfigürasyon dosyası, model eğitimi ve değerlendirme süreçlerini tanımlamak için kullanılır. Aşağıda örnek bir nesne sınıflandırma yapılandırma dosyasının içeriği yer almaktadır. ```yaml theme={"system"} common: target_module: 'vision' task_type: 'detection' target_device: 'AM67A' # run_name can be any string, but there are some special cases: # {date-time} will be replaced with datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # {model_name} will be replaced with the name of the model run_name: '{date-time}/{model_name}' dataset: # enable/disable dataset loading enable: True #False # max_num_files: [750, 250] #None # Object Detection Dataset Examples: # ------------------------------------- # Example 1, (known datasets): 'widerface_detection', 'pascal_voc0712', 'coco_detection', 'udacity_selfdriving', 'tomato_detection', 'tiscapes2017_driving' # dataset_name: widerface_detection # ------------------------------------- # Example 2, give a dataset name and input_data_path. # input_data_path could be a path to zip file, tar file, folder OR http, https link to zip or tar files # for input_data_path these are provided with this repository as examples: # 'http://software-dl.ti.com/jacinto7/esd/modelzoo/08_06_00_01/datasets/tiscapes2017_driving.zip' # 'http://software-dl.ti.com/jacinto7/esd/modelzoo/08_06_00_01/datasets/animal_detection.zip' # ------------------------------------- # Example 3, give image folders with annotation files (require list with values for both train and val splits) # dataset_name: coco_detection # input_data_path: ["./data/projects/coco_detection/dataset/train2017", # "./data/projects/coco_detection/dataset/val2017"] # input_annotation_path: ["./data/projects/coco_detection/dataset/annotations/instances_train2017.json", # "./data/projects/coco_detection/dataset/annotations/instances_val2017.json"] # ------------------------------------- dataset_name: tiscapes2017_driving input_data_path: 'http://software-dl.ti.com/jacinto7/esd/modelzoo/08_06_00_01/datasets/tiscapes2017_driving.zip' training: # enable/disable training enable: True #False # Object Detection model chosen can be changed here if needed # options are: 'yolox_s_lite', 'yolox_tiny_lite', 'yolox_nano_lite', 'yolox_pico_lite', 'yolox_femto_lite', 'yolov7_l_lite' model_name: 'yolox_nano_lite' # training_epochs: 15 #30 # batch_size: 8 #32 # learning_rate: 0.005 # num_gpus: 0 #1 #4 compilation: # enable/disable compilation enable: True #False # tensor_bits: 8 #16 #32 ``` Yukarıdaki YAML dosyasını kendi ihtiyaçlarına göre düzenleyebilirisiniz. Veri Kümesinin Adı Veri Kümesinin Yolu (İnternet sitesi veya dosya sisteminizden bir yol girebilirsiniz.) Nesne sınıflandırma için kullanacağınız temel modeli girmeniz beklenmektedir.\ Şu anda desteklenen modeller: `yolox_s_lite`, `yolox_tiny_lite`, `yolox_nano_lite`, `yolox_pico_lite`, `yolox_femto_lite`, `yolov7_l_lite` Eğitimde kullanılacak epoch sayısı Eğitimde kullanılacak batch boyutu Öğrenme oranı Kullanılacak GPU sayısı ### 3.1. Yolo Nedir ? ***YOLO (You Only Look Once)***, gerçek zamanlı nesne tespiti için geliştirilmiş derin öğrenme tabanlı bir algoritmadır. YOLO, bir görüntüdeki nesnelerin sınıflarını ve konumlarını tek bir ileri besleme işlemiyle tahmin eder. Bu yaklaşım, geleneksel iki aşamalı yöntemlerden (örneğin R-CNN) farklı olarak, hem sınıflandırma hem de konumlandırma işlemlerini tek bir evrede gerçekleştirir. YOLO algoritması, girdiyi bir ızgara yapısına böler. Her hücre, görüntüde belirli bir bölgeyi temsil eder ve bu bölgedeki olası nesneler için: * Sınıf olasılıklarını, * Koordinat bilgilerini (x, y, genişlik, yükseklik), * Güven skorlarını (confidence score) tahmin eder. Böylece model, görüntüdeki tüm nesneleri aynı anda analiz ederek yüksek hızda çıktı üretir. YOLO’nun en önemli avantajı, hız ve gerçek zamanlılık sağlamasıdır. Özellikle gömülü sistemlerde, robotik uygulamalarda ve otonom araçlarda bu özellik büyük önem taşır. Bununla birlikte, küçük boyutlu nesnelerde veya yoğun sahnelerde doğruluk oranı diğer yöntemlere kıyasla daha düşük olabilir. Zaman içerisinde YOLO algoritması farklı sürümlerle geliştirilmiştir. YOLOv1’den YOLOv11’e kadar gelen versiyonlarda hem model mimarisi hem de performans anlamında önemli iyileştirmeler yapılmıştır. ### 3.2. Anahtar Nokta Tespiti EdgeAI Model Maker içerisinde yer alan anahtar nokta tespiti (keypoint detection) konfigürasyon dosyası, model eğitimi ve değerlendirme süreçlerini tanımlamak için kullanılır. Anahtar Nokta Tespiti, bir görüntü üzerindeki belirli noktaların (örneğin insan vücudundaki eklemler, yüz üzerindeki referans noktaları veya nesnelerin karakteristik köşe noktaları) konumlarını tespit etmeye yönelik modelin eğitim ve değerlendirme parametrelerini tanımlar. Aşağıda örnek bir yer alan anahtar nokta tespiti yapılandırma dosyasının içeriği yer almaktadır. ```yaml theme={"system"} common: target_module: 'vision' task_type: 'keypoint_detection' target_device: 'AM67A' # run_name can be any string, but there are some special cases: # {date-time} will be replaced with datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # {model_name} will be replaced with the name of the model run_name: '{date-time}/{model_name}' # Need to modify later according to the data loaders dataset: # enable/disable dataset loading enable: True #False # specify annotation prefix (of th annotation file) if needed - default is 'instances'. # annotation_prefix: person_keypoints # specify split names (of th annotation file) if needed - default is ['train', 'val']. # split_names: ['train2017', 'val2017'] # specify max number of files to get split (of th annotation file) if needed - default is [750, 250]. # max_num_files: [750, 250] #None # ------------------------------------- # Keypoint Detection Dataset Examples: # # ------------------------------------- # Example 1, (known datasets): 'coco_kpts' # dataset_name: coco_keypoint_detection # # ------------------------------------- # Example 2, give a dataset name and input_data_path. # dataset_name: coco_keypoints_val2017 # input_data_path could be a path to zip file, tar file, folder OR http, https link to zip or tar files # input_data_path: "./data/downloads/datasets/coco_keypoints_val2017" # # ------------------------------------- # Example 3, give image folders with annotation files (require list with values for both train and val splits) # dataset_name: coco_keypoint_detection # input_data_path: ["./data/projects/coco_keypoint_detection/dataset/train2017", # "./data/projects/coco_keypoint_detection/dataset/val2017"] # input_annotation_path: ["./data/projects/coco_keypoint_detection/dataset/annotations/person_keypoints_train2017.json", # "./data/projects/coco_keypoint_detection/dataset/annotations/person_keypoints_val2017.json"] # # ------------------------------------- # This simple dataset can be constucted by taking images in val2017 and putting in images folder # and then taking person_keypoints_val2017.json and renaming it at annotations/instances.json dataset_name: coco2017_subset_ccby_x8 input_data_path: http://tensorlabdata2.dhcp.ti.com/pub/projects/edgeai-algo/data/datasets/modelmaker/public/coco2017_subset_ccby_x8.zip input_annotation_path : data/projects/coco2017_subset_ccby_x8/dataset/annotations/person_keypoints.json training: # enable/disable training enable: True #False # Keypoint Detection model chosen can be changed here if needed # Available models: yolox_s_keypoint model_name: 'yoloxpose_tiny_lite' # training_epochs: 15 # batch_size: 16 #16 # learning_rate: 0.001 # num_gpus: 1 compilation: # enable/disable compilation enable: True #False # tensor_bits: 8 #16 #32 ``` Yukarıdaki YAML dosyasını kendi ihtiyaçlarına göre düzenleyebilirisiniz. Etiket dosyasının öneki. Varsayılan değer 'instances' olarak tanımlıdır. Veri kümesindeki eğitim ve doğrulama bölümlerinin adlarını belirtir. Eğitim ve doğrulama bölümlerinden yüklenecek maksimum dosya sayısını sınırlar.\ Örneğin `[750, 250]` değeri, 750 eğitim ve 250 doğrulama örneği yükler. Veri Kümesinin Adı Veri Kümesinin Yolu (İnternet sitesi veya dosya sisteminizden bir yol girebilirsiniz.) Veri kümesine ait etiket dosyasının (annotation file) yerel yolunu tanımlar. Anahtar nokta tespiti için kullanacağınız temel modeli girmeniz beklenmektedir.\ Şu anda desteklenen modeller: `yolox_s_keypoint`, `yoloxpose_tiny_lite` Eğitimde kullanılacak epoch sayısı Eğitimde kullanılacak batch boyutu Öğrenme oranı Kullanılacak GPU sayısı ### 3.3. YOLOX-Pose Nedir? YOLOX-Pose, popüler YOLOX (You Only Look Once - eXtended) mimarisinin bir uzantısı olup, insan vücudu üzerindeki anahtar noktaları (keypoints) tespit etmek için tasarlanmış bir derin öğrenme modelidir. Bu model, klasik nesne tespitine ek olarak, tespit edilen her kişi için eklem konumlarını (örneğin omuz, dirsek, diz, ayak bileği gibi) koordinat bazında tahmin eder. ### 3.4. YOLOX-S-Keypoint Nedir? YOLOX-S-Keypoint, YOLOX-S modelinin anahtar nokta tespiti (keypoint detection) için uyarlanmış versiyonudur. Temel olarak, YOLOX-S’in hızlı ve hafif nesne tespit yeteneklerini, insan veya nesne üzerindeki belirli noktaların (keypoints) tahmini yapmak üzere genişletir. ## 4. Görüntü Segmantasyonu EdgeAI Model Maker içerisinde yer alan görüntü segmentasyonu (Image Segmentation) konfigürasyon dosyası, model eğitimi ve değerlendirme süreçlerini tanımlamak için kullanılır. Görüntü segmentasyonu (Image Segmentation), bir görüntüyü anlamlı bölgelere ayırma işlemidir. Her pikselin, görüntüdeki nesne veya arka planla ilişkili bir sınıfa ait olduğu belirlenir. Bu sayede, sadece nesnelerin konumu değil, tam şekilleri ve sınırları da belirlenmiş olur. Aşağıda örnek bir yer alan anahtar nokta tespiti yapılandırma dosyasının içeriği yer almaktadır. ```yaml theme={"system"} common: target_module: 'vision' task_type: 'segmentation' target_device: 'AM67A' # run_name can be any string, but there are some special cases: # {date-time} will be replaced with datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # {model_name} will be replaced with the name of the model run_name: '{date-time}/{model_name}' # Need to modify later according to the data loaders dataset: # enable/disable dataset loading enable: True #False # max_num_files: [750, 250] #None # specify annotation prefix (of th annotation file) if neded - default is 'instances'. #annotation_prefix: 'stuff' # Semantic Segmentation Dataset Examples: # ------------------------------------- # Example 1, (known datasets): 'widerface_detection', 'pascal_voc0712', 'coco_detection', 'udacity_selfdriving', 'tomato_detection', 'tiscapes2017_driving' # dataset_name: widerface_detection # ------------------------------------- # Example 2, give a dataset name and input_data_path. # input_data_path could be a path to zip file, tar file, folder OR http, https link to zip or tar files # for input_data_path these are provided with this repository as examples: # 'http://software-dl.ti.com/jacinto7/esd/modelzoo/latest/datasets/tiscapes2017_driving.zip' # 'http://software-dl.ti.com/jacinto7/esd/modelzoo/latest/datasets/animal_detection.zip' # ------------------------------------- # Example 3, give image folders with annotation files (require list with values for both train and val splits) # dataset_name: coco_detection # input_data_path: ["./data/projects/coco_detection/dataset/train2017", # "./data/projects/coco_detection/dataset/val2017"] # input_annotation_path: ["./data/projects/coco_detection/dataset/annotations/instances_train2017.json", # "./data/projects/coco_detection/dataset/annotations/instances_val2017.json"] # ------------------------------------- dataset_name: tiscapes2017_driving input_data_path: "http://software-dlasdasdas.ti.com/jacinto7/esd/modelzoo/latest/datasets/tiscapes2017_driving.zip" training: # enable/disable training enable: True #False # Semantic segmentation model chosen can be changed here if needed # REGNETx800MF: fpn_aspp_regnetx800mf_edgeailite # UNET-MOBILENET: unet_aspp_mobilenetv2_tv_edgeailite # DEEPLABV3plus-MOBILENET: deeplabv3plus_mobilenetv2_tv_edgeailite model_name: 'deeplabv3plus_mobilenetv2_tv_edgeailite' #training_epochs: 15 #30 #batch_size: 32 #8 #learning_rate: 0.001 #num_gpus: 0 1 2 3 compilation: # enable/disable compilation enable: True #False # tensor_bits: 8 #16 #32 ``` Yukarıdaki YAML dosyasını kendi ihtiyaçlarına göre düzenleyebilirisiniz. Etiket dosyasının öneki. Varsayılan değer 'instances' olarak tanımlıdır. Veri kümesindeki eğitim ve doğrulama bölümlerinin adlarını belirtir. Eğitim ve doğrulama bölümlerinden yüklenecek maksimum dosya sayısını sınırlar.\ Örneğin `[750, 250]` değeri, 750 eğitim ve 250 doğrulama örneği yükler. Veri Kümesinin Adı Veri Kümesinin Yolu (İnternet sitesi veya dosya sisteminizden bir yol girebilirsiniz.) Anahtar nokta tespiti için kullanacağınız temel modeli girmeniz beklenmektedir.\ Şu anda desteklenen modeller: `fpn_aspp_regnetx800mf_edgeailite`, `unet_aspp_mobilenetv2_tv_edgeailite`, `deeplabv3plus_mobilenetv2_tv_edgeailite` Eğitimde kullanılacak epoch sayısı Eğitimde kullanılacak batch boyutu Öğrenme oranı Kullanılacak GPU sayısı ### 4.1. REGNETx800MF Bu model, görüntüdeki nesneleri detaylı bir şekilde ayırmak için kullanılır. Farklı boyutlardaki nesneleri iyi tanır ve daha karmaşık görevlerde yüksek doğruluk sağlar. Daha çok endüstriyel ve gömülü sistemlerde tercih edilir. ### 4.2. UNET-MOBILENET Hafif ve hızlı bir segmentasyon modelidir. Düşük kaynak kullanımı ile mobil cihazlar ve küçük bilgisayarlar için uygundur. Görüntüdeki nesnelerin sınırlarını net bir şekilde çıkarır. ### 4.3. DEEPLABV3plus-MOBILENET Hafif ama detaylı sonuçlar verir. Görüntüdeki nesnelerin alanını ve sınırlarını doğru bir şekilde tahmin eder. Edge cihazlarda orta seviyede doğruluk ve hız isteyen uygulamalar için uygundur. # Model Kullanma Source: https://docs.t3gemstone.org/tr/boards/o1/ai/usage Görüntü İşleme Uygulaması Hazırlama Bu bölümde, kendi veri setinizle veya hazır olarak edindiğiniz görüntü işleme modellerini nasıl kullanacağınız hakkında bilgi verilecektir. ```bash theme={"system"} sudo su source /opt/t3-edgeai-env ``` Bu komutlar, `root` kullanıcısına geçmenizi ve Edge AI için gerekli olan ortam değişkenlerini yükleminizi sağlar. Ortam değişkeni dosyası yoksa [Edge AI Kurulumu](/tr/boards/o1/ai/installation) bölümünden ilgili paketi kurabilirsiniz. ## Edge AI GStreamer Apps Bu proje, Texas Instruments tarafından sağlanan ve T3 Gemstone O1 gibi cihazlarda yapay zeka uygulamalarını hızla geliştirmek için kullanılabilecek bir açık kaynak referans uygulamaları koleksiyonudur. Temel olarak, GStreamer tabanlı bir mimariyle çalışmakta olup Texas Instruments işlemcileri ve SoC donanımları üzerinde görüntü işleme, nesne algılama, akış (streaming) ve diğer yapay zeka iş akışlarını gerçekleştirmek için hazır çözümler sunmaktadır. Kurulum bölümündeki Edge AI kurulumunu yaptığınız zaman `/opt/edgeai-gst-apps` klasöründen bu projeye erişebilirsiniz. Configs klasörü içinde birden fazla uygulama için örnekler mevcuttur. Python ve C++ dillerinde projeyi çalıştırmanıza olanak sağlamaktadır. Örneğin `configs/image_classification.yaml` içerisinde yer alan config aşağıdaki gibidir. ```yaml theme={"system"} title: "Image Classification" log_level: 2 inputs: input0: source: /dev/video-usb-cam0 format: jpeg width: 1280 height: 720 framerate: 30 input1: source: /opt/edgeai-test-data/videos/video0_1280_768.h264 format: h264 width: 1280 height: 768 framerate: 30 loop: True input2: source: /opt/edgeai-test-data/images/%04d.jpg width: 1280 height: 720 index: 0 framerate: 1 loop: True models: model0: model_path: /opt/model_zoo/TVM-CL-3090-mobileNetV2-tv topN: 5 model1: model_path: /opt/model_zoo/TFL-CL-0000-mobileNetV1-mlperf topN: 5 model2: model_path: /opt/model_zoo/ONR-CL-6360-regNetx-200mf topN: 5 outputs: output0: sink: kmssink width: 1920 height: 1080 overlay-perf-type: graph output1: sink: /opt/edgeai-test-data/output/output_video.mkv width: 1920 height: 1080 output2: sink: /opt/edgeai-test-data/output/output_image_%04d.jpg width: 1920 height: 1080 output3: sink: remote width: 1920 height: 1080 port: 8081 host: 127.0.0.1 encoding: jpeg overlay-perf-type: graph flows: flow0: [input2,model1,output0,[320,150,1280,720]] ``` Yukarıdaki YAML dosyasını kendi ihtiyaçlarına göre düzenleyebilirisiniz. Uygulamanın başlığı. Log çıktılarında ve arayüzde referans olarak kullanılır. Log detay seviyesini belirler. 0: minimal, 5: debug İşlenecek giriş veri kaynakları. Giriş kaynağının yolu. Giriş veri formatı. Örneğin: jpeg, h264 Giriş görüntü genişliği (piksel) Giriş görüntü yüksekliği (piksel) Giriş kare hızı (FPS) Döngü ile tekrar edecek mi? Kullanılacak modeller Modelin dosya yolu. Modelden alınacak top-N tahmin sayısı. Çıkış hedefleri Çıkış yolu Streaming çözünürlüğü genişliği (piksel) Streaming çözünürlüğü yüksekliği (piksel) Streaming yapılacak host IP Streaming port numarası Streaming görüntü formatı Performans grafiği overlay türü Veri akışını tanımlar. Veri akışını tanımlar: input → model → output. Opsiyonel olarak ROI (x,y,width,height) belirtebilirsiniz. Görüntü işleme adımlarına başlamadan önce `root` olarak oturum açtığınızdan ve ortam değişkenlerini yüklediğinizden emin olunuz. ```bash Python theme={"system"} cd /opt/edgeai-gst-apps/apps_python && ./app_edgeai.py ../configs/image_classification.yaml ``` ```bash C++ theme={"system"} # Projeyi derleyiniz cd /opt/edgeai-gst-apps && ./scripts/compile_cpp_apps.sh # Script ile uygulamayı derledikten sonra aşağıdaki komut ile örnek uygulamayı çalıştırabilirsiniz. cd /opt/edgeai-gst-apps/apps_cpp && ./bin/Release/app_edgeai ../configs/image_classification.yaml ``` Görüntü işlemeyi sonra erdirmek için bir defa `CTRL + C` kombinasyonuna basarak sonlandırabilirsiniz. YAML dosyasında çıkış dosyasında değişiklik yapmadıysanız `/opt/edgeai-test-data/output/output_video.mkv` üzerinden çıktıya erişebilirsiniz. ## Mevcut Python Kodunuza Entegre Etme TensorFlow Lite, modelleri varsayılan olarak cihazın CPU'sunda (Merkezi İşlem Birimi) çalıştırır. "Delegate" (Temsilci/Vekil), TFLite modelinizdeki hesaplamaların bir kısmını veya tamamını CPU yerine daha özelleşmiş bir donanıma "devretme" (delegate etme) mekanizmasıdır. Bu özel donanımları (örneğin T3 Gemstone O1 Geliştirme Kartı içerisinde yer alan görüntü işleme hızlandırıcıları) kullanabilmek için gereken paylaşımlı kütüphane dosyasını (.so, .dll vb.) yüklemeniz gerekmektedir. Görüntü işleme adımlarına başlamadan önce `root` olarak oturum açtığınızdan ve ortam değişkenlerini yüklediğinizden emin olunuz. ```python Python lines theme={"system"} #!/usr/bin/python3 import numpy as np from tflite_runtime.interpreter import Interpreter from tflite_runtime.interpreter import load_delegate # 1. Edge AI delegate kütüphanesini yükle try: edgetpu_delegate = load_delegate('/usr/lib/libtidl_tfl_delegate.so') delegates_list = [edgetpu_delegate] print("Edge TPU bulundu ve yüklendi.") except (ValueError, OSError): delegates_list = [] # TPU bulunamazsa, normal CPU'da çalıştır print("Edge TPU bulunamadı, CPU kullanılacak.") # 2. Modeli yükle ve Interpreter'ı başlatırken delegate'i kullan interpreter = Interpreter( model_path="modelinizin_adi.tflite", experimental_delegates=delegates_list ) # 3. Kalan standart TFLite adımları... interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() # ... (Giriş verisini ayarla, modeli çalıştır, vb.) ``` # Kart Özellikleri Source: https://docs.t3gemstone.org/tr/boards/o1/introduction T3 Gemstone O1
Texas Instruments AM67A işlemcisi tabanlı yüksek performanslı geliştirme kartı
Dört çekirdekli 64-bit ARM Cortex-A53 @1.4 GHz, Linux gibi üst düzey işletim sistemlerini çalıştırır İki adet tek çekirdekli ARM Cortex-R5F @800 MHz, gerçek zamanlı MCU uygulamalarını çalıştırır İki adet 2 TOPS (toplam 4 TOPS) derin öğrenme hızlandırıcısı, AI uygulamalarını çalıştırır 50 GFLOPS hesaplama gücü, OpenGL ES 3.2, OpenCL 1.2 EP ve Vulkan 1.2 API'leri ile tam uyumlu LPDDR4 sistem belleği Kartın microSD kart olmadan çalışabilmesini sağlayan yerleşik flash depolama alanı # Ana İşlem Platformu Dört çekirdekli 64-bit ARM Cortex-A53 @1.4 GHz, çok çekirdekli ARM/GPU işlemciler, DSP, AI hızlandırıcıları Yüksek performanslı grafik işleme için gelişmiş GPU x32 bit genişlikte yüksek hızlı sistem belleği # Depolama Yerleşik flash depolama Konfigürasyon depolaması için I2C uyumlu seri EEPROM Yüksek hızlı SDR104 modunu destekler Yüksek kapasiteli NVMe SSD destekler # Ağ Bağlantıları Wi-Fi 5 (802.11a/b/g/n/ac), SDIO 3.0 arayüzü
Bluetooth 5.0, UART arayüzü
Yüksek hızlı kablolu bağlantı için RJ45 Gigabit Ethernet portu Otomotiv uygulamaları için CAN FD dönüştürücü
# I/O Arayüzleri 5Gbps yüksek hızlı işlemi destekler USB cihaz modu ve Power Delivery (PD) destekler Birçok kamera modülünü destekler, örneğin Raspberry Pi Kamera V2 Birçok dokunmatik ekranı destekler, örneğin Raspberry Pi 7" veya Waveshare 7" ve 10.1" ekranları Harici ekranlar için tam boyut HDMI çıkışı *** 1 İki porttan biri DSI yeteneği ile çoklandırılmıştır, çift CSI veya bir CSI & bir DSI yapılandırmaları arasında seçim yapabilirsiniz Varsayılan pin çıkışı Raspberry Pi ile uyumludur Cortex-R5 MCU çekirdeklerinin hata ayıklaması için ARM Cortex 10-pin JTAG konnektörü Hata ayıklama ve sistem yönetimi için seri konsola erişim sağlayan 3-pin 2.54mm konnektörü # Yerleşik Sensörler İvmeölçer, jiroskop ve manyetometre ile 9-Eksen MEMS Hareket İzleme sensörü 24-bit barometrik basınç sensörü Nem ve sıcaklık sensörü # Güç ve Sistem Kontrolü USB Power Delivery desteği ile birincil güç girişi Alternatif güç girişi Farklı boot modları ve yapılandırmalarını seçmek için donanım anahtarı Kartı kapatmak ve açmak için özel düğme Sistem izleme ve kullanıcı geri bildirimi için programlanabilir durum göstergeleri PWM fan kontrolü ile aktif soğutma çözümleri için 4-pin JST SH konnektör Harici pil bağlantısı (2-pin JST SH) ile I2C RTC modülü # Donanım Tasarımı Source: https://docs.t3gemstone.org/tr/boards/o1/pcb PCB ve Donanım Tasarım Detayları Yapım aşamasında.. # Kamera Source: https://docs.t3gemstone.org/tr/boards/o1/peripherals/camera Kamera Bölüm bitiminde aşağıdaki konularda deneyim kazanacaksınız * Gemstone O1 geliştirme kartına fiziksel CSI kamera bağlantısı yapmak. * Overlay ekleyerek yazılım bağlantısını sağlamak ### CSI Nedir? CSI (Camera Serial Interface), mobil cihazlarda ve gömülü sistemlerde yüksek çözünürlüklü kameralar için tasarlanmış bir seri veri yoludur. Bu arayüz, MIPI (Mobile Industry Processor Interface) ittifakı tarafından geliştirilmiş olup, işlemci ile kamera sensörü arasında yüksek hızda, güvenilir bir şekilde görüntü ve video verisi aktarımını sağlar. Genellikle akıllı telefonlar, dronlar ve mini cep bilgisayarlarla kullanılan kameralarda tercih edilir. ### Adımlar Kamera ile Gemstone O1 geliştirme kartı arasındaki kablonun doğru bir şekilde bağlanması gerekmektedir. CSI kameranın çalışması için boot partition'da yer alan uEnv.txt dosyasına ilgili overlay eklenmelidir. Tüm bu adımları tamamladıktan sonra kartı yeniden başlatmak yeterli olacaktır. ### 1. Kablo Bağlantısının Yapılması Kamera ile Gemstone O1 geliştirme kartı arasındaki kablonun doğru bir şekilde bağlanması için aşağıda yer alan fotoğraftaki gibi bir bağlantı yapmanız gerekmektedir. İki sokete de CSI kablosunu bağlayabilirsiniz burada önemli olan taktığınız soketin CSI'ını etkinleştiren overlayi eklemeniz gerekmektedir. * Kablonun bakır yollarının yer aldığı kısım soketin beyaz kısmına bakmalıdır. * Ethernet soketine uzak olan konnektör CSI0, yakın olan konnektör ise CSI1'dir. ### 2. Overlay Eklenmesi Desteklenen kameraların overlaylerini aşağıdaki komut ile listeleyebilirsiniz. ```bash Terminal theme={"system"} ls /boot/overlays/ | grep "csi" ``` ```bash Output theme={"system"} k3-am67a-t3-gem-o1-csi0-imx219.dtbo* k3-am67a-t3-gem-o1-csi0-ov5640.dtbo* k3-am67a-t3-gem-o1-csi1-imx219.dtbo* ``` Terminal arayüzünden `nano` isimli metin editörünü kullanarak boot klasöründe yer alan `uEnv.txt` dosyasını açınız. ```bash theme={"system"} sudo nano /boot/uEnv.txt ``` Komutu sudo ile kullandığımız için şifre soracaktır. Değiştirmediyseniz Gem-Imager ile imajı yazarken belirlemiş olduğunuz şifreyi kullanmalısınız. `uEnv.txt` dosyasının içinde bu tarz tanımlamalar bulunacaktır. ``` firstboot=0 overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo bootpart=1:1 initrdaddr=0x90000000 fdtoverlayaddr=0x89000000 get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192 get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1 boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr} distro_bootcmd=run args_mmc;run boot_mmc ``` Bir önceki komutla elde ettiğiniz dosya adını `overlays=` satırının sonuna boşluk bırakarak ekleyin. Örneğin CSI0 (ethernete uzak olan konnektör) konnektörüne IMX219 kamerasını bağladığınızda `k3-am67a-t3-gem-o1-csi0-imx219.dtbo` dosya adını kullanmalısınız. `uEnv.txt` dosyasının son hali böyle olacaktır. Uygun dosya adını `` kısmına yerleştirmeniz gerekmektedir. ``` firstboot=0 overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo bootpart=1:1 initrdaddr=0x90000000 fdtoverlayaddr=0x89000000 get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192 get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1 boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr} distro_bootcmd=run args_mmc;run boot_mmc ``` ### 3. Kartın Yeniden Başlatılması `reboot` komutu ile kart yeniden başlatılmalı. ```bash theme={"system"} sudo reboot ``` ### 4. `gem-camera-setup` Scriptinin Çalıştırılması Aşağıdaki komut aracılığıyla karta bağlı olan kameraların kurulumu sağlanmalıdır. ```bash Terminal theme={"system"} sudo /usr/local/bin/gem-camera-setup ``` ```bash Output theme={"system"} IMX219 Camera 0 detected device = /dev/video-imx219-cam0 name = imx219 format = [fmt:SRGGB8_1X8/1920x1080] subdev_id = /dev/v4l-imx219-subdev0 isp_required = yes ``` Yukarıdakine benzer bir çıktı almanız durumunda karta kamerayı başarıyla bağlamışsınızdır. ### 5. Kamera Ayarları Başlangıçta aşağıdaki komut, bir kamera sensörünün çekirdek sürücüsü (kernel driver) ile kullanıcı alanı (user space) uygulamaları arasında doğru bir iletişim kurulmasını sağlamak için kullanılır. Komut çalıştırıldığında, IMX219 kamera sensörünün video çıkışı 640x480 çözünürlüğe ve SRGGB8 formatına ayarlanır. Bu ayar, sonraki aşamada bu veri akışını kullanacak olan uygulamaların (örneğin, bir kamera uygulaması veya gstreamer) doğru veriyi almasını sağlar. ```bash theme={"system"} media-ctl -V '"imx219 5-0010":0[fmt:SRGGB8_1X8/640x480 field:none]' ``` Kameranın desteklediği formatlara aşağıdaki komuttan ulaşabilirsiniz. ```bash theme={"system"} v4l2-ctl -d /dev/video-imx219-cam0 --list-formats ``` `/dev/video-imx219-cam0` kısmına `gem-camera-setup` scriptinin çıktısında belirtilen cihazı girmelisiniz. Aşağıda yer alan ayarlar, kameranın kazanç ve pozlama değerlerini makul bir varsayılan değere ayarlar. Görüntünüzün soluk, çok karanlık veya hatta boş olduğunu fark ederseniz, kendi aydınlatma ortamınıza göre bu parametreleri ayarlamanız gerekebilir. Görüntüyü düzgün gözlemlemiyorsanız, bu ayarların yanlış olduğunun bir işareti olabilir. ```bash İç Mekan Işığı theme={"system"} v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=digital_gain=2048 v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=analogue_gain=230 v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=exposure=1750 ``` ```bash Doğal Işık theme={"system"} v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=digital_gain=1000 v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=analogue_gain=100 v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=exposure=1000 ``` ### 6. Fotoğraf Çekme Aşağıdaki komutu çalıştırarak .jpg formatında görüntü yakalayabilirsiniz. ```bash theme={"system"} gst-launch-1.0 -v v4l2src num-buffers=5 device=/dev/video-imx219-cam0 io-mode=dmabuf ! \ video/x-bayer, width=1920, height=1080, framerate=30/1, format=rggb ! \ bayer2rgb ! videoconvert ! jpegenc ! \ multifilesink location="imx219-image-%d.jpg" ``` ### 7. Video Çekme Aşağıdaki komutu çalıştırarak .mp4 formatında bir video kaydı (100 kare) çekebilirsiniz. ```bash theme={"system"} gst-launch-1.0 v4l2src device=/dev/video-imx219-cam0 num-buffers=100 io-mode=dmabuf ! \ video/x-bayer, width=640, height=480, format=rggb,depth=8 ! \ queue ! bayer2rgb ! queue ! videoconvert ! video/x-raw,format=NV12 ! \ queue ! v4l2h264enc ! queue ! h264parse ! mp4mux ! filesink location=t3-gem-o1.mp4 ``` # CAN Bus Source: https://docs.t3gemstone.org/tr/boards/o1/peripherals/canbus Controller Area Network (CAN) Bölüm bitiminde Gemstone geliştirme kartında sanal CAN arayüzü oluşturma hakkında bilgi sahibi olacaksınız. Gemstone işletim sisteminde sanal CAN arayüzü oluşturularak herhangi ilave donanıma gerek kalmadan bu arayüz üzerinden veri iletişimi sağlanabilmektedir. * Gemstone işletim sistemine bağlandıktan sonra sanal CAN arayüzü oluşturabilmek için `kernel-module-vcan-6.1.83-ti` modülünü kurunuz. ```bash theme={"system"} sudo apt install picocom kernel-module-vcan-6.1.83-ti ``` * `modprobe` komutu ile kurulan modülü aktif ediniz. ```bash theme={"system"} sudo modprobe vcan ``` * Aşağıdaki komutları takip ederek sanal CAN arayüzünü oluşturunuz. ```bash theme={"system"} sudo ip link add dev vcan0 type vcan sudo ip link set up vcan0 ``` * `can-test.sh` isimli bir script dosyası oluşturunuz ve dosyayı açınız. ```bash theme={"system"} touch can-test.sh nano can-test.sh ``` * Aşağıdaki kodu kopyalayıp `can-test.sh` dosyasına yapıştırınız. Dosyayı kaydedip kapatınız. ```bash theme={"system"} #!/bin/bash while : do cansend vcan0 123 #AABBCCDDEE112233 sleep 1 done ``` * `cansend` ve `candump` gibi CAN paketleri gönderim alım komutlarını kullanabilmek için `can-utils` paketini kurunuz. ```bash theme={"system"} sudo apt install can-utils ``` 1. İki adet terminal açınız. 2. İlk terminalden CAN arayüzünü dinleme işlemini başlatınız. ```bash theme={"system"} candump vcan0 ``` 3. İkinci terminalden can-test.sh scriptini çalıştırınız. ```bash theme={"system"} ./can-test.sh ```