Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | 29-Oct-2021 | - | ||||
resources/ | 29-Oct-2021 | - | ||||
.gitignore | A D | 29-Oct-2021 | 145 | 18 | 15 | |
Makefile | A D | 29-Oct-2021 | 882 | 38 | 27 | |
README.md | A D | 29-Oct-2021 | 12 KiB | 271 | 206 | |
SConstruct | A D | 29-Oct-2021 | 259 | 11 | 4 | |
cp_resources.py | A D | 29-Oct-2021 | 877 | 43 | 25 | |
linkkit_event.c | A D | 29-Oct-2021 | 16.8 KiB | 452 | 248 | |
main.c | A D | 29-Oct-2021 | 2.6 KiB | 104 | 55 | |
maintask.c | A D | 29-Oct-2021 | 1.3 KiB | 62 | 34 | |
package.yaml | A D | 29-Oct-2021 | 4.4 KiB | 111 | 96 | |
ucloud_ai_demo.c | A D | 29-Oct-2021 | 19.1 KiB | 694 | 525 |
README.md
1@page ucloud_ai_demo 老板来了:通过HaaS100实现端云一体人脸识别示例 2 3[更正文档](https://gitee.com/alios-things/ucloud_ai_demo/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html) 4 5# 1. 案例简介 6ucloud_ai_demo是基于云端AI能力实现的AI识别案例,主要有三个部分组成: 71. 通过采集WiFi摄像头(ESP32)的数据后得到jpeg图像; 82. 上传至云端OSS,再通过ucloud_ai组件实现视觉智能开放平台对图片识别处理; 93. 通过LCD屏进行画面显示及识别结果显示。 10 11该案例中支持了15种AI能力,通过在aiconfig.h中配置AI_MODEL选择对应的AI模型,所有的AI模型类型在aiagent_common.h中定义说明,修改后重新编译即可看到相应的效果。 12 13 14# 2. 基础知识 15## 2.1 基础目录结构 16```tree 17├── helloworld.c # 该solution核心打印输出代码,入口**application_start** 18├── k_app_config.h # 内核组件的配置开关,优先级低于**k_config.h** 19├── maintask.c # 系统主任务入口处理,入口**aos_maintask** 20├── Makefile # aos make编译时入口 21├── package.yaml # 编译系统配置文件 22└── SConstruct # Makefile => Scon => aostools 23 24├── linkkit_event.c # 连接物联网平台时使用的接口 25├── main.c # demo应用主程序入口,入口**application_start** 26├── maintask.c # 系统主任务入口处理,入口**aos_maintask** 27├── Makefile # aos make编译时入口 28├── package.yaml # 编译系统配置文件 29├── SConstruct # Makefile => Scon => aostools 30└── ucloud_ai_demo.c # AI识别处理主程序 31``` 32 33# 3. 方案组成 34整个方案由HaaS100、WiFi摄像头、LCD组成。LCD与HaaS100通过SPI连接,HaaS100通过Http请求获取到JPEG数据最终显示到LCD上。 35 36<div align=left display=flex> 37 <img src="https://img-blog.csdnimg.cn/img_convert/ac7f6d577ee932d49790b0e3970b0ae8.png" style="max-width:500px;" /> 38</div> 39 40## 3.1 WiFi摄像头安装 41### 3.1.1 WiFi摄像头选型 42市面上的WiFi摄像头比较多,在本例中WiFi摄像头采用ESP官方的ESP32-EYE进行适配,ESP32-CAM是ESP32第三方厂商开发的一款低成本方案,应用也比较广泛,开发者也可以选择它作为方案之一,万能的淘宝上有很多卖家,商家也会提供相应的资料,开发者可以根据自己需要进行调试,购买链接如下: 43ESP32-EYE: [https://detail.tmall.com/item.htm?spm=a230r.1.14.1.150d6a6ftZ6h4K&id=611790371635&ns=1&abbucket=3](https://detail.tmall.com/item.htm?spm=a230r.1.14.1.150d6a6ftZ6h4K&id=611790371635&ns=1&abbucket=3) 44 45ESP32-CAM: [https://detail.tmall.com/item.htm?spm=a230r.1.14.1.3f543b21XaGDay&id=581256720864&ns=1&abbucket=3](https://detail.tmall.com/item.htm?spm=a230r.1.14.1.3f543b21XaGDay&id=581256720864&ns=1&abbucket=3) 46 47[https://item.taobao.com/item.htm?spm=a230r.1.14.33.150d6a6ftZ6h4K&id=586201030146&ns=1&abbucket=3#detail](https://item.taobao.com/item.htm?spm=a230r.1.14.33.150d6a6ftZ6h4K&id=586201030146&ns=1&abbucket=3#detail) 48 49 50### 3.1.2 ESP32-EYE开发配置 51 52#### 3.1.2.1 代码下载 53```bash 54$git clone --recursive https://github.com/espressif/esp-who.git 55``` 56 57#### 3.1.2.2 ESP-IDF安装 58不同的操作系统安装的步骤也有所差异,请参考官网文档进行安装: 59[https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-set-up-env](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-set-up-env) 60 61#### 3.1.2.3 环境变量设置 62> 这里以Macbook为例进行环境变量设置: 63```bash 64$cd ~/esp/esp-idf 65$./install.sh 66$. ./export.sh 67``` 68注意: 69每次重启终端后都需要执行该步骤,否则找不到idf.py命令,或者可以加入到根目录.bashrc中不用每次再输入该命令。 70 71#### 3.1.2.4 ESP32 EYE网络设置 72> SoftAP模式 73 74默认启动后ESP32 EYE已经开启了SSID为ESP32-Camera的AP,可以使用电脑连接该AP。 75 76<div align=left display=flex> 77 <img src="https://img-blog.csdnimg.cn/img_convert/d0078a4e4bfb521beb04291497d94970.png" style="max-width:300px;" /> 78</div> 79 80也可以通过修改sdkconfig来改变ssid/password、station连接数量、AP信道、服务器IP等,然后重新进行编译: 81<div align=left display=flex> 82 <img src="https://img-blog.csdnimg.cn/img_convert/bea6f1ff0946804d77c5a01e3d59271c.png" style="max-width:600px;" /> 83</div> 84 85> Station模式 86 87ESP32也支持station与SoftAP模式共存,比如想让ESP32 EYE接入到SSID为haas_test的局域网中,修改sdkconfig中的ssid/password即可。 88 89<div align=left display=flex> 90 <img src="https://img-blog.csdnimg.cn/img_convert/1101892b41017e3f74b6ec258605b890.png" style="max-width:600px;" /> 91</div> 92 93#### 3.1.2.5 分辨率配置 94因为本案例中使用的LCD是320x240的,摄像头采集的画面也相应的设置为QVGA(320x240)减少传输带宽占用,esp-who/examples/single_chip/camera_web_server/main/app_httpd.c中添加代码: 95```c 96static esp_err_t capture_handler(httpd_req_t *req) 97{ 98 camera_fb_t *fb = NULL; 99 esp_err_t res = ESP_OK; 100 int64_t fr_start = esp_timer_get_time(); 101 102 /*set resolution*/ 103 sensor_t *sensor = esp_camera_sensor_get(); 104 sensor->set_framesize(sensor, (framesize_t)5);/*QVGA: 320 x 240*/ 105 if (res == 0) { 106 app_mdns_update_framesize(5);/*QVGA*/ 107 } 108 ...... 109} 110``` 111 112#### 3.1.2.6 代码编译 113ESP32-EYE的代码中提供了多个Demo,使用camera_web_server来建立一个web服务器,该Demo中摄像头采集的数据以jpeg格式提供,并且提供了以http请求的方式获取jpeg图像数据。编译需要进入到Demo的目录中: 114```bash 115$ cd examples/single_chip/camera_web_server/ 116$ idf.py build 117``` 118#### 3.1.2.7 代码烧录 119```shell 120$ idf.py -p [port] flash 121``` 122例如: 123idf.py -p /dev/cu.SLAB_USBtoUART flash 124#### 3.1.2.8 Log监视器 125查看串口log,进入到camera_web_server所在目录执行。 126```shell 127$idf.py -p [port] monitor 128``` 129例如: 130idf.py -p /dev/cu.SLAB_USBtoUART monitor 131 132<div align=left display=flex> 133 <img src="https://img-blog.csdnimg.cn/img_convert/cb573d5a42e695269a675ebc5be96c0d.png" style="max-width:600px" /> 134</div> 135 136所以camera wifi的IP就是192.168.3.135。 137 138#### 3.1.2.9 检查摄像头画面采集 139为了确认ESP32-EYE摄像头是否正常,电脑连接ESP32-EYE的WiFi网络ESP32-Camera,先通过电脑方式查看web界面http://192.168.4.1:80/capture: 140抓取当前画面http://192.168.4.1:80/capture: 141 142<div align=left display=flex> 143 <img src="https://img-blog.csdnimg.cn/20210127165159696.png" style="max-width:600px;" /> 144</div> 145 146### 3.2 LCD连线 147使用本测试示例时,需要先连接SPI LCD屏幕。 148 149LCD购买链接[https://item.taobao.com/item.htm?spm=a1z09.2.0.0.768d2e8d9D3S7s&id=38842179442&_u=m1tg6s6048c2](https://item.taobao.com/item.htm?spm=a1z09.2.0.0.768d2e8d9D3S7s&id=38842179442&_u=m1tg6s6048c2) 150 151请选择购买2.4寸屏。 152 153HaaS100开发板请务必使用V1.1以上的版本,HaaS100扩展口: 154<div align=left display=flex> 155 <img src="https://img-blog.csdnimg.cn/img_convert/b18b27ec7957e010d0380e76ebb33e98.png" style="max-width:250px;" /> 156</div> 157 158LCD与HaaS100接线对应pin脚: 159 160<div align=left display=flex> 161 <img src="https://img-blog.csdnimg.cn/img_convert/5b2c8c014991f028978f5743ba22d193.png" style="max-width:250px;" /> 162</div> 163 164# 4. Demo体验 165 166## 4.1 云端功能开通 167 1681. 如没有阿里云账号,请登陆[阿里云官网](http://www.aliyun.com)开通。 1692. 登陆[视觉智能开放平台](https://vision.aliyun.com)免费开通如下功能: 170 171    **[人脸人体](https://vision.aliyun.com/facebody)** 172 **[文字识别](https://vision.aliyun.com/ocr)** 173 **[分割抠图](https://vision.aliyun.com/imageseg)** 174 **[目标检测](https://vision.aliyun.com/objectdet)** 175 1763. 登陆[OSS平台](http://oss.console.aliyun.com)创建bucket: 177```bash 178a. 创建Bucket时地域选择“上海” 179b. 读写权限选择“公共读” 180c. Bucket名称全小写 181``` 182 183## 4.2 配置OSS信息 184在solutions/ucloud_ai_demo/package.yaml中替换你的OSS信息 185 186```yaml 187OSS_ACCESS_KEY: "Your-Access-Key" 188OSS_ACCESS_SECRET: "Your-Access-Secret" 189OSS_ENDPOINT: "Your-OSS-Endpoint" #例如: "oss-cn-shanghai-internal.aliyuncs.com" 190OSS_BUCKET: "Your-OSS-Bucket" #例如: "cloud-ai-dev" 191 192OSS_ACCESS_KEY以及OSS_ACCESS_SECRET获取链接: https://usercenter.console.aliyun.com/#/accesskey 193ENDPOINT默认使用“oss-cn-shanghai-internal.aliyuncs.com”,BUCKET请使用你创建好的Bucket名称。 194``` 195 196## 4.3 AI模型配置 197在components/ai_agent/include/aiconfig.h中配置: 198```sh 199# 配置AI模型为人脸比对 200#define AI_MODEL AI_MODEL_COMPARING_FACEBODY 201``` 202默认是人脸比对。 203 204## 4.4 配置人脸原始对比图像 205登陆http://oss.console.aliyun.com 上传你的人脸到4.1中创建的bucket中,并替换路径到solutions/ucloud_ai_demo/package.yaml: 206```yaml 207MYFACE_PATH: "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/CompareFace/CompareFace-left1.png" 208``` 209 210## 4.5 WiFi摄像头IP配置 211wifi camera的http访问地址,用户根据自己摄像头的IP地址进行替换: 212在components/ucamera/package.yaml中配置: 213```sh 214 WIFICAMERA_URL: "http://192.168.43.166:80/capture" 215``` 216 217192.168.43.166替换为3.2.1.7中从log获取的WiFi摄像头IP。 218 219 220## 4.6 AliOS Things开发环境搭建 221案例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。 222待开发环境搭建完成后,可以按照以下步骤进行示例的测试。 223 224## 4.7 案例代码下载 225该案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)。 226其中: 227> 选择解决方案: “云端AI案例”或者“ucloud_ai_demo” 228 229> 选择开发板: HaaS100 230 231## 4.8 代码编译、烧录 232-- 固件编译方法可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)。 233 234### 4.8.1 文件件系统烧录 235本组件例子中使用到到图片及字体分别存放在代码中hardware/chip/haas1000/prebuild/data/目录下ai_demo_image及font目录,除烧录ucloud_ai_demo image外,需烧录littlefs文件系统,请将hardware/chip/haas1000/package.yaml文件中以下代码段的注释打开: 236 237```yaml 238 program_data_files: 239 - filename: release/write_flash_tool/ota_bin/littlefs.bin 240 address: 0xB32000 241``` 242 243-- 固件烧录方法可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)。 244 245### 4.9 打开串口 246 247固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考[《AliOS Things集成开发环境使用说明之查看日志》](https://help.aliyun.com/document_detail/302382.html)。 248 249 250## 4.10 网络连接 251当串口终端打开成功后,可在串口中输入联网命令。因为HaaS100开发板需要连接到云端,因此需要连接到一个可以上外网的路由器,WiFi摄像头(ESP32-EYE)也只能使用Station模式连接到同一台路由器。 252 253```sh 254# 系统起来后在串口输入配网命令 255netmgr -t wifi -c {ssid} {password} 256``` 257请将ssid修改为您路由器的WiFi名称,paasword填入路由器的WiFi密码。 258 259## 4.11 识别结果响应 260网络设置后,HaaS100将从摄像头获取图像并通过云端识别后输出置信度的值,人脸位置以及“boss is coming”字样: 261 262<div align=left display=flex> 263 <img src="https://img-blog.csdnimg.cn/img_convert/06a60d5c4ac2ef19bc06a0ac62c76fda.png" style="max-width:400px;" /> 264</div> 265 266### 4.11.1 字幕提醒 267在HaaS 100的扩展屏上显示“Warning!!!Boss is coming!!!”: 268<div align=left display=flex> 269 <img src="https://img-blog.csdnimg.cn/img_convert/f62c4a0057d7c30069d51436e6dbf3cd.gif" style="max-width:600px;" /> 270</div> 271