通過“老板來了”案例,來給開發者演示如何實現一個端云一體AI的AI識別功能。
1. 案例簡介
ucloud_ai_demo是基于云端AI能力實現的AI識別案例,主要有三個部分組成:
通過采集WiFi攝像頭(ESP32)的數據后得到jpeg圖像;
上傳至云端OSS,再通過ucloud_ai組件實現視覺智能開放平臺對圖片識別處理;
通過LCD屏進行畫面顯示及識別結果顯示。
該案例中支持了15種AI能力,通過在aiconfig.h中配置AI_MODEL選擇對應的AI模型,所有的AI模型類型在aiagent_common.h中定義說明,修改后重新編譯即可看到相應的效果。
2. 基礎知識
2.1 基礎目錄結構
├── helloworld.c # 該solution核心打印輸出代碼,入口**application_start**
├── k_app_config.h # 內核組件的配置開關,優先級低于**k_config.h**
├── maintask.c # 系統主任務入口處理,入口**aos_maintask**
├── Makefile # aos make編譯時入口
├── package.yaml # 編譯系統配置文件
└── SConstruct # Makefile => Scon => aostools
├── linkkit_event.c # 連接物聯網平臺時使用的接口
├── main.c # demo應用主程序入口,入口**application_start**
├── maintask.c # 系統主任務入口處理,入口**aos_maintask**
├── Makefile # aos make編譯時入口
├── package.yaml # 編譯系統配置文件
├── SConstruct # Makefile => Scon => aostools
└── ucloud_ai_demo.c # AI識別處理主程序
3. 方案組成
整個方案由HaaS100、WiFi攝像頭、LCD組成。LCD與HaaS100通過SPI連接,HaaS100通過HTTP請求獲取到JPEG數據最終顯示到LCD上。
3.1 WiFi攝像頭安裝
3.1.1 WiFi攝像頭選型
市面上的WiFi攝像頭比較多,在本例中WiFi攝像頭采用ESP官方的ESP32-EYE進行適配,ESP32-CAM是ESP32第三方廠商開發的一款低成本方案,應用也比較廣泛,開發者也可以選擇它作為方案之一,萬能的淘寶上有很多賣家,商家也會提供相應的資料,開發者可以根據自己需要進行調試,購買鏈接如下:
3.1.2 ESP32-EYE開發配置
3.1.2.1 代碼下載
$git clone --recursive https://github.com/espressif/esp-who.git
3.1.2.2 ESP-IDF安裝
不同的操作系統安裝的步驟也有所差異,請參考官網文檔進行安裝:
3.1.2.3 環境變量設置
這里以Macbook為例進行環境變量設置:
$cd ~/esp/esp-idf
$./install.sh
$. ./export.sh
注意: 每次重啟終端后都需要執行該步驟,否則找不到idf.py命令,或者可以加入到根目錄.bashrc中不用每次再輸入該命令。
3.1.2.4 ESP32 EYE網絡設置
SoftAP模式
默認啟動后ESP32 EYE已經開啟了SSID為ESP32-Camera的AP,可以使用電腦連接該AP。
也可以通過修改sdkconfig來改變ssid/password、station連接數量、AP信道、服務器IP等,然后重新進行編譯:
Station模式
ESP32也支持station與SoftAP模式共存,比如想讓ESP32 EYE接入到SSID為haas_test的局域網中,修改sdkconfig中的ssid/password即可。
3.1.2.5 分辨率配置
因為本案例中使用的LCD是320x240的,攝像頭采集的畫面也相應的設置為QVGA(320x240)減少傳輸帶寬占用,esp-who/examples/single_chip/camera_web_server/main/app_httpd.c中添加代碼:
static esp_err_t capture_handler(httpd_req_t *req)
{
camera_fb_t *fb = NULL;
esp_err_t res = ESP_OK;
int64_t fr_start = esp_timer_get_time();
/*set resolution*/
sensor_t *sensor = esp_camera_sensor_get();
sensor->set_framesize(sensor, (framesize_t)5);/*QVGA: 320 x 240*/
if (res == 0) {
app_mdns_update_framesize(5);/*QVGA*/
}
......
}
3.1.2.6 代碼編譯
ESP32-EYE的代碼中提供了多個Demo,使用camera_web_server來建立一個Web服務器,該Demo中攝像頭采集的數據以jpeg格式提供,并且提供了以http請求的方式獲取jpeg圖像數據。編譯需要進入到Demo的目錄中:
$ cd examples/single_chip/camera_web_server/
$ idf.py build
3.1.2.7 代碼燒錄
$ idf.py -p [port] flash
例如: idf.py -p /dev/cu.SLAB_USBtoUART flash
3.1.2.8 Log監視器
查看串口log,進入到camera_web_server所在目錄執行。
$idf.py -p [port] monitor
例如: idf.py -p /dev/cu.SLAB_USBtoUART monitor
所以camera wifi的IP就是192.168.3.135。
3.1.2.9 檢查攝像頭畫面采集
為了確認ESP32-EYE攝像頭是否正常,電腦連接ESP32-EYE的WiFi網絡ESP32-Camera,先通過電腦方式查看Web界面http://192.168.4.1:80/capture: 抓取當前畫面http://192.168.4.1:80/capture:
3.2 LCD連線
使用本測試示例時,需要先連接SPI LCD屏幕。
請選擇購買2.4寸屏。
HaaS100開發板請務必使用V1.1以上的版本,HaaS100擴展口:
LCD與HaaS100接線對應pin腳:
4. Demo體驗
4.2 配置OSS信息
在solutions/ucloud_ai_demo/package.yaml中替換你的OSS信息
OSS_ACCESS_KEY: "Your-Access-Key"
OSS_ACCESS_SECRET: "Your-Access-Secret"
OSS_ENDPOINT: "Your-OSS-Endpoint" #例如: "oss-cn-shanghai-internal.aliyuncs.com"
OSS_BUCKET: "Your-OSS-Bucket" #例如: "cloud-ai-dev"
OSS_ACCESS_KEY以及OSS_ACCESS_SECRET獲取鏈接:https://usercenter.console.aliyun.com/#/accesskey
ENDPOINT默認使用“oss-cn-shanghai-internal.aliyuncs.com”,BUCKET請使用你創建好的Bucket名稱。
4.3 AI模型配置
在components/ai_agent/include/aiconfig.h中配置:
# 配置AI模型為人臉比對
#define AI_MODEL AI_MODEL_COMPARING_FACEBODY
默認是人臉比對。
4.4 配置人臉原始對比圖像
登錄http://oss.console.aliyun.com 上傳你的人臉到4.1中創建的bucket中,并替換路徑到solutions/ucloud_ai_demo/package.yaml:
MYFACE_PATH: "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/CompareFace/CompareFace-left1.png"
4.5 WiFi攝像頭IP配置
wifi camera的http訪問地址,用戶根據自己攝像頭的IP地址進行替換: 在components/ucamera/package.yaml中配置:
WIFICAMERA_URL: "http://192.168.43.166:80/capture"
192.168.43.166替換為3.2.1.7中從log獲取的WiFi攝像頭IP。
4.6 AliOS Things開發環境搭建
案例相關的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發工具,所以首先需要參考《AliOS Things集成開發環境使用說明之搭建開發環境》,下載安裝。 待開發環境搭建完成后,可以按照以下步驟進行示例的測試。
4.7 案例代碼下載
該案例相關的源代碼下載可參考《AliOS Things集成開發環境使用說明之創建工程》。 其中:
選擇解決方案:“云端AI案例”或者“ucloud_ai_demo”
選擇開發板:HaaS100
4.8 代碼編譯、燒錄
-- 固件編譯方法可參考《AliOS Things集成開發環境使用說明之編譯固件》。
4.8.1 文件件系統燒錄
本組件例子中使用到圖片及字體分別存放在代碼中hardware/chip/haas1000/prebuild/data/目錄下ai_demo_image及font目錄,除燒錄ucloud_ai_demo image外,需燒錄littlefs文件系統,請將hardware/chip/haas1000/package.yaml文件中以下代碼段的注釋打開:
program_data_files:
- filename: release/write_flash_tool/ota_bin/littlefs.bin
address: 0xB32000
-- 固件燒錄方法可參考《AliOS Things集成開發環境使用說明之燒錄固件》。
4.9 打開串口
固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《AliOS Things集成開發環境使用說明之查看日志》。
4.10 網絡連接
當串口終端打開成功后,可在串口中輸入聯網命令。因為HaaS100開發板需要連接到云端,因此需要連接到一個可以上外網的路由器,WiFi攝像頭(ESP32-EYE)也只能使用Station模式連接到同一臺路由器。
# 系統起來后在串口輸入配網命令
netmgr -t wifi -c {ssid} {password}
請將ssid修改為您路由器的WiFi名稱,paasword填入路由器的WiFi密碼。
4.11 識別結果響應
網絡設置后,HaaS100將從攝像頭獲取圖像并通過云端識別后輸出置信度的值,人臉位置以及“boss is coming”字樣:
4.11.1 字幕提醒
在HaaS 100的擴展屏上顯示“Warning!!!Boss is coming!!!”: