1. 簡介
? ? ? ? Orangepi AIPRO 是一款采用昇騰AI技術路線,集成4核64位處理器+AI處理器的單板計算機,集成圖形處理器,支持8TOPS AI算力,擁有8GB/16GB LPDDR4X,可以外接eMMC模塊,支持雙4K高清輸出。?
? ? ? ? Orange Pi AIpro擁有豐富的擴展接口,包括兩個HDMI輸出、GPIO接口、支持SATA/NVMe SSD 2280的M.2插槽(PCIe 4Lane)、TF插槽、千兆網口、兩個USB3.0、一個USB Type-C 3.0、一個Micro USB(串口打印調試功能)、兩個MIPI攝像頭、一個MIPI屏等,預留電池接口,
Orange Pi AIpro已支持Ubuntu、openEuler操作系統,可以滿足大多數AI算法原型驗證、推理應用開發的需求。
2. 主要特性
- 處理器:昇騰AI處理器(Ascend310B4)64bit 四核處理器,主頻可達 1.5GHz
- 內存:8GB LPDDR4X 內存
- 顯示:支持 HDMI 2.0 最大分辨率可達 4K
- 網絡:支持千兆以太網接口,Wi-Fi 5,藍牙 4.2
- 接口:USB 3.0,USB 2.0,SATA 2.0,PCIe 2.0,I2C,SPI,GPIO 等
- 擴展:支持擴展多種 USB 和 PCIe 設備
3.使用方法
準備工作
- 下載針對 Orangepi AIPRO 的操作系統鏡像文件(Ubuntu、openEuler),并將其燒錄到 SD 卡中。
Ubuntu鏡像
openEuler
- 將 SD 卡插入 Orangepi AIPRO 的 SD 卡槽,并開啟電源。
- 系統將自動完成啟動。
3.1連接串口及網絡
? ? ? 根據Orangepi AIPRO 提供的接口,我們可以很輕易的完成串口終端的登錄和網絡的配置,主要有一下幾種方法:
- 通過HDMI線纜將開發板的HDMI0接口連接到我們的屏幕上,在熟悉的圖形界面上配置wifi密碼和設置以太網固定IP;
- 將開發板的microUSB調試串口通過USB線纜連接到電腦,可以使用串口終端登錄 Linux 系統;(波特率:115200 數據位:8 停止位:1 None Flow Ctrl);
- 如果沒有屏幕,我們可以通過在串口終端中使用nmtui工具來完成網絡配置;
? ?接下來主要通過第三種方式介紹一下WIFI和千兆網絡配置:
? 1.在串口終端輸入下面的命令開始搜索WIFI,ctrl+c退出搜索
nmcli dev wifi
2.配置WIFI名稱與密碼 wifi_name 需要替換為自己的WIFI名稱 wifi_passwd 替換為WIFI密碼
sudo nmcli dev wifi connect wifi_name password wifi_passwd
3.千兆網口的配置
- 通過命令查看網絡連接狀態,Wired connection 1就是千兆有線網絡
nmcli con show
- 輸入下列命令完成千兆有線網絡配置(可根據自己需要設置IP和網關地址)
sudo nmcli con mod "Wired connection 1" ipv4.addresses "192.168.1.110" ipv4.gateway "192.168.1.1" ipv4.dns "8.8.8.8" ipv4.method "manual"
- ?配置完成后 需要reboot生效
- 在千兆網絡端口沒有連接網線時,無法查看端口詳細的配置,此時我們將開發板連接到電腦通過下面的命令就可以查看固定IP是否配置成功
-
ip addr show eth0
-
4. USB深度攝像頭初步測試
? ? ? ?由于Orangepi AIPRO板卡上提供了兩個USB3.0接口可以很方便的連接USB相機,外置的深度相機可以節約AI處理器算力,讓芯片專注于控制場景中的決策工作,手頭剛好有OPENCV AI KIT的深度相機可以在Orangepi AIPRO測試一下。
? ? ? ?得益于Ubuntu系統強大的兼容性,我們可以通過簡單的指令完成環境搭建;
# 安裝依賴項
sudo wget -qO- https://docs.luxonis.com/install_depthai.sh | bash
# 安裝顯控軟件
python3 -m pip install depthai-viewer
# 運行DepthAI Viewer
python3 -m depthai_viewer
5.AI應用樣例體驗
? ? ? ?在Orangepi AIPRO板卡系統中還內置了多個有趣的AI處理案例,大大降低了學習門檻。
? ? ? ?在人像分割場景中,Orangepi AIPRO可以通過訓練好的模型輕松實現深度學習神經網絡PortraitNet,(PortraitNet是實時人像分割模型,該模型可以在移動設備上有效且高效地運行,基于輕量級的 U 形架構,在訓練階段有兩個輔助損失,而在測試階段不需要額外的成本進行肖像推理。兩個輔助損失是邊界損失和一致性約束損失。前者提高了邊界像素的精度,后者增強了復雜光照環境下的魯棒性)。
? ? ? 5.1. 打開內置Jupyter Notebook AI樣例的操作很便捷,只需要下面兩條命令;
cd samples/notebooks/
./start_notebook.sh
?5.2.?運行Jupyter Notebook AI樣例
? ? 5.3.??輸出對比圖像
輸入圖像 | 背景圖像 | 輸出圖像 |
| | |
| | |
? ? ?內置的AI樣例中有很清晰的注釋,在調試過程中很容易理解 各個代碼模塊對應的功能,可以很方便的修改,做到有的放矢。?
class Seg(object):"""人像分割模型推理"""def __init__(self, model_path, model_width, model_height):self._model_path = model_pathself._model_width = model_widthself._model_height = model_heightself.device_id = 0self._dvpp = Noneself._model = Nonedef init(self):"""初始化相關資源"""# Initialize dvppself._dvpp = AclLiteImageProc()# Load modelself._model = AclLiteModel(self._model_path)return const.SUCCESS@utils.display_timedef pre_process(self, image):"""圖片預處理"""image_dvpp = image.copy_to_dvpp()yuv_image = self._dvpp.jpegd(image_dvpp)resized_image = self._dvpp.resize(yuv_image,self._model_width, self._model_height)return resized_image @utils.display_timedef inference(self, input_data):"""模型推理"""return self._model.execute(input_data)@utils.display_timedef post_process(self, infer_output, image_name):"""獲取分割結果"""data = infer_output[0]vals = data.flatten()mask = np.clip((vals * 255), 0, 255)mask = mask.reshape(224, 224, 2)cv2.imwrite(os.path.join(MASK_DIR, image_name), mask[:, :, 0])return mask @utils.display_time
def background_replace(bg_path, ori_path, mask_path):"""將人像分割結果與背景圖片結合"""background = cv2.imread(bg_path)height, width = background.shape[:2]ori_img = cv2.imread(ori_path)mask = cv2.imread(mask_path, 0)mask = mask / 255mask_resize = cv2.resize(mask, (width, height))ori_img = cv2.resize(ori_img, (width, height))mask_bg = np.repeat(mask_resize[..., np.newaxis], 3, 2)result = np.uint8(background * mask_bg + ori_img * (1 - mask_bg))cv2.imwrite(os.path.join(OUTPUT_DIR, os.path.basename(mask_path)), result)def main():"""推理主函數"""os.makedirs(OUTPUT_DIR, exist_ok=True)os.makedirs(MASK_DIR, exist_ok=True)acl_resource = AclLiteResource()acl_resource.init()seg = Seg(MODEL_PATH, MODEL_WIDTH, MODEL_HEIGHT)ret = seg.init()utils.check_ret("seg.init ", ret)images_list = [os.path.join(IMAGE_DIR, img)for img in os.listdir(IMAGE_DIR)if os.path.splitext(img)[1] in const.IMG_EXT]for image_file in images_list:image_name = os.path.basename(image_file)if image_name != 'background.jpg':print('====' + image_name + '====')# read imageimage = AclLiteImage(image_file)# Preprocess the pictureresized_image = seg.pre_process(image)# Inferenceresult = seg.inference([resized_image, ])# Post-processingmask = seg.post_process(result, image_name)# Fusion of segmented portrait and background imagebackground_replace(os.path.join(IMAGE_DIR, 'background.jpg'), \image_file, os.path.join(MASK_DIR, image_name))
6. 總結
- 開箱測試外設功能并完成了Orangepi AIPRO的網絡配置,體驗了流暢的桌面系統;
- 測試了 OPENCV AI KIT USB3.0相機在Orangepi AIPRO的使用;
- 體驗了Orangepi AIPRO內置的豐富AI樣例。
7. 使用體驗
通過這次體驗Orangepi AIPRO板卡,我了解到了華為昇騰在AI領域深耕多年的強大實力,AI的未來不僅是好用的,更是易用的。
Orangepi AIPRO搭載的昇騰AI處理器(Ascend310B4)配合華為完整的開發工具,讓開發者可以高效的實現AI應用程序的開發。
Orangepi AIPRO豐富的IO接口特別靈活,極大的豐富了AI的應用場景,既能很好的完成圖像處理,也能實現控制功能。
8. 注意事項
- 在使用 Orangepi AIPRO 時,需要確認供電輸入符合要求,以確保系統的穩定性和安全性。
- 開發板終端賬號及密碼? 賬號:root? 密碼:?Mind@123? ;??賬號:HwHiAiUser? 密碼:Mind@123
9. 參考資料
- Orangepi AIPRO 官方網站
- Orangepi AIPRO Wiki
- Orangepi AIPRO 硬件文檔
- OrangePI AIPRO 用戶手冊