實物
為AI而生
打開盒子
配置
扛把子的
作為業界首款基于昇騰深度研發的AI開發板,Orange Pi AIpro無論在外觀上、性能上還是技術服務支持上都非常優秀。采用昇騰AI技術路線,集成圖形處理器,擁有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模塊,支持雙4K高清輸出,8/20 TOPS AI算力。
其豐富的接口更是賦予了Orange Pi AIpro強大的可拓展性。包括兩個HDMI輸出、GPIO接口、Type-C電源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆網口、兩個USB3.0、一個USB Type-C 3.0、一個Micro USB、兩個MIPI攝像頭、一個MIPI屏等,預留電池接口。
在操作系統方面,Orange Pi AIpro支持Ubuntu、openEuler操作系統,滿足大多數AI算法原型驗證、推理應用開發的需求,可廣泛適用于AI邊緣計算、深度視覺學習及視頻流AI分析、視頻圖像分析、自然語言處理、智能小車、機械臂、人工智能、無人機、云計算、AR/VR、智能安防、智能家居等領域,覆蓋 AIoT各個行業。
開機進入
作為一個AI產品,必須有一個人機交互的界面才行。大家都在跑算法,于是我就開始進行整理著手整理搭建Qt的環境。
1、下載源碼
wget https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz
待下載完成,將源碼包拷貝到/opt/目錄下
依次執行命令
cd /opt
sudo mkdir qt
mv qt-everywhere-src-5.12.12.tar.xz qt
cd qt
tar -xf qt-everywhere-src-5.12.12.tar.xz
cd qt-everywhere-src-5.12.12。
接下來需要執行配置configure的的操作,因為執行的過程中出現了很多其他的問題,所以這里就把配置文件進行整理,方便后面是使用,配置文件如下:
./configure --prefix=/home/qt -opensource -shared -static -compile-examples -xcb
這個選項關系到界面能否正常顯示出來。
等待一個執行完成。
當然處理過程會有些問題了,例如這種
只需要在報錯的文件中進行加入頭文件#include 就好了。
執行gmake,等待gmake執行完成后,執行make install. 即可以在對應的目錄下面看看安裝文件。
運行程序的時候會出現qt找不到font文件,
那么需要進行一個操作將windows的font文件夾傳過去就好了。
freeRDP
下載代碼:wget https://github.com/FreeRDP/FreeRDP/archive/refs/heads/stable-2.0.zip
安裝依賴庫:
sudo apt-get install build-essential git-core debhelper cdbs dpkg-dev autotools-dev cmake pkg-config xmlto libssl-dev docbook-xsl xsltproc libxkbfile-dev libx11-dev libwayland-dev libxrandr-dev libxi-dev libxrender-dev libxext-dev libxinerama-dev libxfixes-dev libxcursor-dev libxv-dev libxdamage-dev libxtst-dev libcups2-dev libpcsclite-dev libasound2-dev libpulse-dev libjpeg-dev libgsm1-dev libusb-1.0-0-dev libudev-dev libdbus-glib-1-dev uuid-dev libxml2-dev
然后執行
mkdir build
cd build
cmake …/
make
make install
如圖所示
接下來可以通過他來連接我的windows了。
從頭cpu占用率來看,跑FreeRDP一點問題都沒有。
樣例測試
切換root用戶,到/opt/opi_test_test/下面
如圖所示:
跑一個視頻解碼程序
需要講test.mp4文件拷貝到data文件夾下面。
代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include "acllite_dvpp_lite/ImageProc.h"
#include "acllite_dvpp_lite/VideoRead.h"using namespace std;
using namespace acllite;
int main()
{int32_t deviceId = 0;int32_t saveNum = 10;string videoPath = "../data/test.mp4";string outPath = "./out_pic/output";AclLiteResource aclResource(deviceId);bool ret = aclResource.Init();CHECK_RET(ret, LOG_PRINT("[ERROR] InitACLResource failed."); return 1);VideoRead cap(videoPath, deviceId);CHECK_RET(cap.IsOpened(), LOG_PRINT("[ERROR] Open test.mp4 failed."); return NULL);ImageData frame;LOG_PRINT("[INFO] Start to decode...");for(int i=0; i<saveNum; i++) {string outPic = outPath + to_string(i) + ".yuv";ret= cap.Read(frame);if(!ret){break;}SaveBinFile(outPic, frame.data.get(), frame.size);}LOG_PRINT("[INFO] Frame read end.");return 0;
}
執行bash
接下來看看運行效果
解碼的yuv數據在 out文件夾下面
跑一個視頻編碼的程序
將YUV數據拷貝到data文件夾下面
程序代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include "acllite_dvpp_lite/ImageProc.h"
#include "acllite_dvpp_lite/VideoWrite.h"using namespace std;
using namespace acllite;
int main()
{int32_t deviceId = 0;int32_t saveNum = 10;string filePath = "../data/test.yuv";string outFile = "../out/result.h264";uint32_t width = 1920;uint32_t height = 1080;AclLiteResource aclResource(deviceId);bool ret = aclResource.Init();CHECK_RET(ret, LOG_PRINT("[ERROR] InitACLResource failed."); return 1);VideoWrite testWriter(outFile, width, height);CHECK_RET(testWriter.IsOpened(), LOG_PRINT("[ERROR] open %s failed.", outFile.c_str()); return 1);void* image;void* imageInfoBuf;uint32_t imageInfoSize = YUV420SP_SIZE(width,height);CHECK_RET(ReadBinFile(filePath, image, imageInfoSize), LOG_PRINT("[ERROR] ReadBinFile failed."); return NULL);imageInfoBuf = CopyDataToDevice((void *)image, imageInfoSize);ImageData dst(SHARED_PTR_DEV_BUF(imageInfoBuf), imageInfoSize, width, height, PIXEL_FORMAT_YUV_SEMIPLANAR_420);LOG_PRINT("[INFO] Start to encode...");for(int i=0; i<saveNum; i++) {ret = testWriter.Write(dst);CHECK_RET(ret, LOG_PRINT("[ERROR] Write image to h264 failed."); return NULL);}testWriter.Release();LOG_PRINT("[INFO] Frame write end.");return 0;
}
編譯運行,在out文件夾下面有個h264文件如下:
總結
1、從使用的情況看來,qt可以正常運行,需要多折騰
2、xfreerdp這種應用也可以很流暢的運行。
3、硬解碼和編碼這塊來說沒有任何問題,對于桌面的h264數據編解碼可以在滿足絕大多數的場景。
4、結合qt和xfreerdp這個軟件的開發,以及編解碼的處理,這款開發板,可以作為桌面級云終端產品的選型,并且性能遠遠足夠使用,在云服務客戶端,瘦客戶端方面可以進行相關的推廣。