? ?大家好,今天給大分享一個OrangePi AIpro(20T)采用昇騰作為主控芯片的開發板,開箱以及對應功能的詳細實現。
第一:板子基本介紹
? ? ?接通電源給對應的開發板上電,觀察其中的現象,如下:
? ? ? 注意事項:開發板上有電源對應的Type-C接口,不要接錯了。
? ? ?
1:控制啟動設備3個撥碼開關
? ? ? 開發板的linux系統下支持從TF卡、EMMC和SSD啟動,具體從哪個設備啟動是通過3個撥碼開關進行選擇的,啟動之前要檢查一下。? ?
? ? ?從圖上可以清晰的看出來對應系統的啟動方式。
? ? ? 注意事項:切換撥碼開關后必須重新拔插電源上電才能啟動設備選擇生效。通過開發板復位按鍵來復位系統是不會讓撥碼開關設置配置生效的。
2:開發利用調試串口的方法?
? ? ? 開發板默認使用uart0做為調試串口。需要注意的是,uart0的tx和rx引腳同時接到了兩個地方,所以有兩種使用調試串口的方法:
? ? ? ?第一種方法:
? ? ? ?uart0 的 tx 和 rx 引腳接到了 40 pin 擴展接口中的 8 號和 10 號引腳,此種方式需要準備一個 3.3v 的 USB 轉 TTL 模塊和相應的杜邦線,然后才能正常使用開發板的調試串口功能。
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 第二種方法:
? ? ? ? ?uart0 的 tx 和 rx 引腳還接到了開發板的 CH343P 芯片上,再通過 CH343P 芯片引出到 Type-C USB 接口上。此種方式只需要一根 Type-C USB 接口的數據線將開發板連接到電腦的 USB 接口就可以開始使用開發板的調試串口功能了,無需購買 USB 轉 TTL 模塊。這種方法是推薦的方法。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 注意事項:上面的兩種方式只能二選一,請不要同時使用。
第二:環境搭建與測試
1:Windows平臺使用調試串口方法
? ? ? ? ? ? ?1、直接安裝對應的超級終端軟件。
? ? ? ? ? ? ?2、選擇串口波特率為115200.
? ? ? ? ? ? ?3、點擊“OK”按鈕后會進入下面的界面,此時啟動開發板就能看到串口的輸出信息了。
2:利用Windows PC將linux鏡像燒寫到TF卡的方法
? ? ? 1、要有一張大容量的TF卡,TF 卡的傳輸速度必須為 class10 級或 class10 級以上,建議使用閃迪等品牌的 TF 卡。
? ? ? 2、然后把 TF 卡插入讀卡器,再把讀卡器插入電腦。
? ? ? 3、下載想要燒錄的 Linux 鏡像壓縮包。
? ? ? 4、下載用于燒錄 Linux 鏡像的軟件——balenaEtcher,下載地址為:
? ? ? ? ? ? ?https://www.balena.io/etcher/
? ? ? 5、進入 balenaEtcher 下載頁面后,點擊綠色的下載按鈕會跳到軟件下載的地方。
? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?6、選擇下載 Portable 版本的 balenaEtcher,Portable 版本無需安裝,雙擊打
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? 并進行雙擊打開。
? ? ? ? ? ? ??
? ? ? ? ? 7、使用 balenaEtcher 燒錄 Linux 鏡像的具體步驟如下所示:
? ? ? ? ?
? ? ? ? ??
? ? ? ? ? ? 8、成功燒錄完成后 balenaEtcher 的顯示界面如下圖所示,如果顯示綠色的指示圖
? ? ? ? ? ? ??
注意事項:啟動系統前請確保撥碼開發撥到了TF卡啟動的位置了。撥碼開關的使用請參考說明。
3:Ubuntu Xfce桌面系統使用
? ? ? ? ?進入 Ubuntu 鏡像的下載鏈接后可以看到下圖所示的兩個 ubuntu 鏡像,他們的
? ? ? ? ? ? ? ?
? ? ? ? Linux系統功能適配情況:
? ? ? ? ? ? ??
4:利用開發板無線連接
? ? ? 1、使用 nmcli dev wifi 命令掃描周圍的 WIFI 熱點。
? ? ? ? ? ? 命令:nmcli dev wifi
? ? ? 2、然后使用 nmcli 命令連接掃描到的 WIFI 熱點,其中:
? ? ? a. wifi_name 需要換成想連接的 WIFI 熱點的名字。
? ? ? ?b. wifi_passwd 需要換成想連接的 WIFI 熱點的密碼。
? ? ? ? ? ? 命令:sudo nmcli dev wifi connect wifi_name passwordwifi_passwd
? ? 開發板中使用的交叉編譯工具鏈如下:
第三:香橙派開發板AI實現? ?
1、人工智能目標檢測
? ? ?SSD(Single Shot MultiBox Detector)是一種流行且高效的單階段目標檢測算法,它在處理速度和檢測精度之間取得了良好的平衡。與傳統的兩階段方法(如 R-CNN 系列)不同,SSD 在單個網絡前向傳遞中直接預測目標的邊界框和類別,無需先生成候選區域。這種方法不僅加快了目標檢測速度,而且簡化了檢測流程。
? ? ?將SSD人工智能算法(算法代碼詳見sample文件夾),放入歐拉實驗平臺,點擊運行。
? ??
實現現象如下:
2、人工智能實現文字識別
? ? ? ? 該人文字識別主要是將圖像中的文字區域轉化為字符信息,能夠提取豐富的信息特征,采用ResNet算法模型,提取網絡信息,其中包含轉換后的om模型和測試圖片,詳細實現如下:
? ? ?找到源碼,存放在歐拉平臺,雙擊點開。
? ? ?
? ? ? 打開圖片文字轉化代碼,利用CNN網絡提取豐富的特征信息,進行識別。
? ? 提示編譯成功的效果,注意觀察啟動的現象。
? 最終成功輸出的結果如下:
3、人工智能遠程聊天實現
? ? ? ?利用人工智能開發板作為服務器,收集遠程客戶端發送過來的信息,處理完畢之后也可以將對應的信息發送給客戶端,實現遠距離自由聊天功能。
? ? ? 詳細代碼如下(歡迎評論區交流學習)
? ? ? ?服務器代碼實現:
//服務器代碼的具體實現
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>//1聲明對應線程的個數
pthread_t pthread_max[5] = {0};void *broadcast_clt(void *arg)
{int i;long a = (long )arg;char buf[100] = {0};printf("a = %ld\r\n",a);//獲取客戶端的clifdint clifd = pthread_max[a];printf("clifd = %d\r\n",clifd);//獲取對應客戶端發過來的信息while(1){//獲取內容recvrecv(clifd,buf,100,0);printf("clifd = %d\r\n",clifd);//將獲取到的內容轉發給其他的客戶端for(i = 0; i < 5; i++){if((pthread_max[i] !=0) && (pthread_max[i] !=clifd)){//傳輸對應buf的內容send(pthread_max[i],buf, 100, 0);}}usleep(500); }}int main(int argc , char *argv[])
{//定義變量int clifd;socklen_t addrlen=sizeof(struct sockaddr);long i;pthread_t tid[10];//2 定義實現socket函數int serfd = -1;int new_sfd = -1;serfd = socket(AF_INET, SOCK_STREAM, 0);//3 定義實現bind函數#define SERVER_IP "192.168.1.111"#define PORT_NUM 1111typedef struct sockaddr SA;typedef struct sockaddr_in SIN; SIN seraddr;SIN cliaddr;bzero(&seraddr,sizeof(SIN)); //功能類似memset()seraddr.sin_family=AF_INET;seraddr.sin_port=htons(PORT_NUM);seraddr.sin_addr.s_addr=inet_addr(SERVER_IP); //對IP地址進行轉化//將服務器地址信息與套接字進行綁定//實現本機地址重復使用int ret;int reuse = 1;ret = setsockopt(serfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));ret = bind(serfd,(SA*)&seraddr,sizeof(SA));if(ret == -1){perror("connect failed\r\n");exit(0);}//利用listen函數監聽ret = listen(serfd,10);if(ret == -1){perror("listen failed\r\n");exit(0);}while(1){//進入到循環函數里面完成通信clifd = accept(serfd,(SA*)&cliaddr,&addrlen);if(clifd == -1){perror("accept failed\r\n");exit(0);}printf("accept success\r\n");printf("clifd = %d\r\n",clifd);//保存一下對應的值for(i = 0; i < 5; i++){if(pthread_max[i] == 0){pthread_max[i] = clifd;pthread_create(&tid[i], NULL, broadcast_clt, (void *)i);break;}}}//收回對應的文件描述符close(serfd);for(i = 0; i < 5; i++){if(pthread_max[i] > 0){close(pthread_max[i]);}}exit(0);}
? ? ? 客戶端代碼具體實現:
//客戶端代碼實現
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <string.h>
#include <semaphore.h>
#include <stdlib.h>char send_buf[100] = {0};
char recv_buf[100] = {0};void * send_srv(void *arg)
{long a = (long)arg; //文件描述符int b = (int)a;int send_len;//發生數據while(1){scanf("%s",send_buf);//發送對應的字符串send_len = send(b,send_buf,sizeof(send_buf),0);if(send_len == -1){perror("failed\r\n");exit(0);}printf("send success\r\n");}pthread_exit(NULL);
}void *recv_srv(void *arg)
{long a = (long)arg; //文件描述符int b = (int)a;//接受數據while(1){recv(b,recv_buf,100,0);printf("recv_buf : %s\r\n",recv_buf);}pthread_exit(NULL);
}int main(int argc , char *argv[])
{//定義變量pthread_t tid1,tid2;//建立通信端口socketint serfd;serfd = socket(AF_INET,SOCK_STREAM,0);if(serfd == -1){perror("socket failed\r\n");exit(0);}//綁定對應的地址信息connect#define SERVER_IP "192.168.1.111"#define PORT_NUM 1111typedef struct sockaddr SA;typedef struct sockaddr_in SIN; SIN seraddr;bzero(&seraddr,sizeof(SIN)); //功能類似memset()seraddr.sin_family=AF_INET;seraddr.sin_port=htons(PORT_NUM);seraddr.sin_addr.s_addr=inet_addr(SERVER_IP); //對IP地址進行轉化//將服務器地址信息與套接字進行綁定int ret;ret = connect(serfd,(SA*)&seraddr,sizeof(SA));if(ret == -1){perror("connect failed\r\n");exit(0);}//提示一下客戶端創建成功printf("connect success\r\n");long send_cfd = (long )serfd;pthread_create(&tid1, NULL, send_srv, (void *)send_cfd);pthread_create(&tid2, NULL, recv_srv, (void *)send_cfd);//等待對應的線程運行結束pthread_join(tid1,NULL);pthread_join(tid2,NULL);exit(0);}
?第一步:利用ubuntu中的sftp通信傳輸AI開發板
第二步:在AI開發板上編譯服務器代碼
? ?? ? ? 開發板上的編譯命令:
? ? ? ? ?aarch64-linux-gnu-gcc -pthread service.c -o ser??
第三步:在個人電腦上實現客戶端代碼編譯
第四:任意聊天具體實驗現象
第四:產品評價
? ? ? ?經過這兩天操作香橙派開發板,感觸頗深,硬件和系統的穩定性還是非常好的,基本上這塊板子的所有外設和人工智能的實例都操作完了,還是非常容易上手的。
? ? ? ?可以使用的操作系統也非常豐富,香橙派AiPro支持Ubuntu、openEuler等操作系統,這為用戶提供了更多的選擇空間,同時也方便了用戶根據自己的需求進行開發和部署。
? ? ? 總體感受:香橙派開發板性能優越,易于上手,各種開發工具包齊全,非常適合新手,后期將繼續分享優秀的人工智能項目,歡迎大家評論和相互交流學習。