作為地球上最具性價比的嵌入式視覺應(yīng)用開發(fā)平臺,Digilent Zybo-Z7 去年一經(jīng)推出,就憑借華麗麗升級的Zynq器件與各種板載外設(shè)接口,俘獲了眾多Zynq愛好者的芳心。這還不算這一業(yè)界標桿性的入門級Zynq-7000平臺還免費附贈SDSoC Vochuer!
這一贈可謂激起千層浪,對于垂涎SDSoC已久的Digilent社區(qū)用戶而言,識貨者此等福利當然不會錯過。然,作為版主,在下也因此收到了不少關(guān)于SDSoC開發(fā)的問題。繼上一篇我們聊了聊“如何在Zynq開發(fā)板上入門SDSoC開發(fā)工具”,為響應(yīng)Digilent開源社區(qū)用戶的需求,今天我們就再來一發(fā)「SDSoC勾搭OpenCV指南」,教你如何用Zybo-Z7創(chuàng)建一個基于OpenCV的SDSoC項目。
在開篇之前提醒一下:
1. 在本教程中,使用的SDSoC版本是2015.4。
2. OpenCV要求Linux易于使用,因為它會使用到許多庫,例如pthread.。。本文中不會介紹任何裸機配置方面的內(nèi)容。
1. 軟硬件清單
● SDSoC
● Zybo Z7
● 包含Linux內(nèi)核+根文件系統(tǒng)的平臺
● 裝有Linux系統(tǒng)的計算機
2. 獲取OpenCV
這一步你至少可以有兩個選擇,一種是下載并交叉編譯庫( docs.opencv.org/2.4/doc/tutorials/introduction/crosscompilation/arm_crosscompile_with_cmake );第二種是獲取一個已經(jīng)交叉編譯好的庫。在這一教程中,我們事先已經(jīng)在SDSoC安裝文件夾中建立好了OpenCV 2.4.5版本。
3. 修改平臺
這里我們需要將編譯好的庫添加到你想要用于項目的SDSoC平臺的根文件系統(tǒng)中。在這步操作之后,可執(zhí)行文件(你的應(yīng)用程序)將能夠加載庫。 在Zybo Z7平臺中使用的文件系統(tǒng)鏡像類型是initramfs。如果你手頭的是另一種鏡像類型,你可以在Xilinx wiki上得到更多的所需信息:+and+Modify+a+Rootfs
3.1 將根文件系統(tǒng)復(fù)制到臨時文件夾中
將位于平臺的啟動文件夾中名為“uramdisk.image.gz”的存檔復(fù)制黏貼到一個臨時文件夾中。打開終端,并進入該文件夾。
3.2 去掉U-BOOT頭文件以獲得CPIO存檔
dd if=uramdisk.image.gz bs=64 skip=1 of=ramdisk.gz
3.3 將新的CPIO存檔壓縮到一個新創(chuàng)建的文件夾中
mkdir my_root
gunzip -c ramdisk.gz | sh -c ‘cd my_root/ && sudo cpio -i’
3.4 復(fù)制庫與頭文件(-P保存鏈接)
sudo cp -p /opt/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/opencv/lib/* my_root/lib/
sudo cp -r /opt/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/opencv/include/* my_root/usr/include/
3.5 壓縮到CPIO和GUNZIP
sudo sh -c ‘cd my_root/ && find 。 | cpio -H newc -o’ | gzip -9 》 my_ramdisk.image.gz
3.6 添加U-BOOT頭文件
mkimage -A arm -T ramdisk -C gzip -d my_ramdisk.image.gz my_uramdisk.image.gz
這里需要確保文件的權(quán)限設(shè)置為755:
sudo chmod 755 。/my_uramdisk.image.gz
3.7 在平臺中更換新創(chuàng)建的鏡像
cp 。/my_uramdisk.image.gz /pathToZyboPlatform/boot/uramdisk.image.gz
4. 在SDSoC中創(chuàng)建并配置一個新項目
在SDSoC中創(chuàng)建并配置一個新項目
4.1 添加包含路徑
創(chuàng)建一個新項目,選擇你修改后的平臺,然后選擇你想要使用Linux。在project explorer(左側(cè)面板)中右鍵單擊項目,然后點擊屬性。 進入“C/C ++ build” - 》“設(shè)置” - 》 “SDS ++編譯器” - 》“目錄”,為所選的“build/debug/estimate配置”添加OpenCV的包含路徑(/opt/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/opencv/include),如下圖所示:
4.2 鏈接庫
完成后,轉(zhuǎn)到SDS ++ linker‘s configuration,在“庫”下,添加要在項目中使用的庫及其所在的路徑(我這里是: /opt/Xilinx/SDSoC/2015.4/SDK/2015.4/data/embeddedsw/ThirdParty/opencv/lib )
4.3 添加-RPATH-LINK
最后,你需要指定路徑,使得鏈接器能夠搜索OpenCV所需的依賴關(guān)系(libs)。 轉(zhuǎn)到SDS ++linker configuration,在“Miscellaneous” - 》“Linker Flag”下添加以下行(-Wl,-rpath-link = / opt / Xilinx / SDSoC / 2015.4 / SDK / 2015.4 / data / embeddedsw / ThirdParty / opencv /LIB)。 -Wl選項向工具鏈表明選項-rpath-link = 。。.將被提供給鏈接器。
5.進行測試
到這里,我們就要進行本文中最令人興奮的部分:測試! 以下代碼將對一張圖像進行FAST特征點檢測:
創(chuàng)建你的程序,完成之后將“sd_card”文件夾中的內(nèi)容復(fù)制到目標SD卡中,這里不要忘記在根目錄下添加一個測試圖像(有興趣嘗試的朋友,可以點擊本帖附件,獲取本教程所使用的圖像源文件)。
boot操作完成后,使用以下命令在目標上運行可執(zhí)行文件:
cd /mnt
。/00_ocv_helloworld.elf Buildings.jpg ocv.jpg
如果一切順利的話,則可執(zhí)行文件會生成一個輸出圖像“ocv.jpg”,如下所示:
6. 總結(jié)
我們將構(gòu)建的庫添加到SDSoC平臺中使用的Linux根文件系統(tǒng)中。然后,我們基于這個新的SDSoC平臺配置了一個新的項目,其中包含正確的包含路徑和鏈接。
到這里,你就可以隨意使用OpenCV啦!
評論
查看更多