ucamera

更正文档      贡献说明

概述

ucamera组件是摄像头图像数据处理中间框架,支持不同类型摄像头数据接入,目前已接入wifi摄像头,在使用该组件时,需要使用netmgr网络组件连接网络。

版权信息

Apache 2.0 License

目录结构

├── include
│   ├── ucamera_common.h # 对外头文件
│   ├── ucamera_device.h # 摄像头device相关头文件定义
│   ├── ucamera_service.h # 摄像头service相关头文件定义
│ └── device
│ └── wifi
│ ├── wifi_camera.h # wifi摄像头device注册函数头文件
│ └── dechunk.h
├── package.yaml # 编译配置文件
├── src
│ ├── ucamera_device.c # 摄像头设备相关函数实现
│ ├── ucamera_service.c # 摄像头服务相关函数实现
│ └── device
│ └── wifi
│ ├── wifi_camera.c # wifi摄像头device注册函数实现
│ └── dechunk
│ └── dechunk.c # http数据解析代码实现
└── example
└── ucamera_example.c # 测试用例

依赖组件

  • http

常用配置

def_config: # 组件的可配置项
CONFIG_WIFI_CAMERA_ENABLE: 1 # 使能WiFi摄像头

API说明

使用示例

组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考《AliOS Things集成开发环境使用说明之搭建开发环境》,下载安装。 待开发环境搭建完成后,可以按照以下步骤进行示例的测试。

步骤1 创建或打开工程

打开已有工程

如果用于测试的案例工程已存在,可参考《AliOS Things集成开发环境使用说明之打开工程》打开已有工程。

创建新的工程

组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考《AliOS Things集成开发环境使用说明之创建工程》

步骤2 添加组件

案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖:

depends:
- ucamera: dev_aos # helloworld_demo中引入ucamera组件
- netmgr: dev_aos # helloworld_demo中引入netmgr组件
def_config:
CLI_IOBOX_ENABLE: 1 # 使能文件系统测试命令,例如ls, ll, mkdir, touch, echo等

步骤3 下载组件

在已安装了 的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:

aos install ucamera

上述命令执行成功后,组件源码则被下载到了./components/ucamera路径中。

步骤4 添加示例

在ucamera组件的package.yaml中添加example示例代码

source_file:
- "example/ucamera_example.c" # add ucamera_example.c

WiFi摄像头安装

ucamera测试依赖WiFi摄像头,本案例测试使用ESP32-EYE进行测试。 ESP32-EYE购买链接: https://detail.tmall.com/item.htm?spm=a230r.1.14.1.150d6a6ftZ6h4K&id=611790371635&ns=1&abbucket=3

1. 代码下载

$git clone --recursive https://github.com/espressif/esp-who.git

2. ESP-IDF安装

不同的操作系统安装的步骤也有所差异,请参考官网文档进行安装: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-set-up-env

3. 环境变量设置

这里以Macbook为例进行环境变量设置:

$ cd ~/esp/esp-idf
$ ./install.sh
$ . ./export.sh

注意: 每次重启终端后都需要执行该步骤,否则找不到idf.py命令,或者可以加入到根目录.bashrc中不用每次再输入该命令。

4. ESP32 EYE网络设置

SoftAP模式

默认启动后ESP32 EYE已经开启了SSID为ESP32-Camera的AP,可以使用电脑连接该AP。 image.png 也可以通过修改sdkconfig来改变ssid/password、station连接数量、AP信道、服务器IP等,然后重新进行编译:

<img src="https://img-blog.csdnimg.cn/img_convert/bea6f1ff0946804d77c5a01e3d59271c.png" alt="image.png"/>

5. 分辨率配置

为了减少传输带宽占用,摄像头采集的画面设置为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: 3220 x 240*/
if (res == 0) {
app_mdns_update_framesize(5);/*QVGA*/
}
......
}

6. 代码编译

使用camera_web_server来建立一个web服务器,该Demo中摄像头采集的数据以jpeg格式提供,并且提供了以http请求的方式获取jpeg图像数据。编译需要进入到Demo的目录中:

$cd examples/single_chip/camera_web_server/
$idf.py build

7. 代码烧录

$idf.py -p [port] flash

例如: idf.py -p /dev/cu.SLAB_USBtoUART flash

8. Log监视器

查看串口log,进入到camera_web_server所在目录执行。

$idf.py -p [port] monitor

例如: idf.py -p /dev/cu.SLAB_USBtoUART monitor

9. 检查摄像头画面采集

为了确认ESP32-EYE摄像头是否正常,电脑连接ESP32-EYE的WiFi网络ESP32-Camera,先通过电脑方式查看web界面http://192.168.4.1:80/capture: 抓取当前画面http://192.168.4.1:80/capture: Pasted Graphic.tiff

配置WiFi摄像头IP

在ucamera/package.yaml中配置WiFi摄像头图像数据URL:

WIFICAMERA_URL: "http://192.168.4.1:80/capture"

在ucamera/package.yaml中配置WiFi摄像头图像大小URL:

WIFICAMERA_FRAME_SIZE_CONTROL_URL: "http://192.168.4.1:80/control?var=framesize&val=5" #QVGA 320x240

步骤5 编译固件

在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考《HaaS开发环境haas-studio》中的编译固件部分。

步骤6 烧录固件

文件系统烧录

本组件示例在抓取图像后保存图像到littlefs文件系统,需烧录littlefs文件系统,请将hardware/chip/haas1000/package.yaml文件中以下代码段的注释打开:

program_data_files:
- filename: release/write_flash_tool/ota_bin/littlefs.bin
address: 0xB32000

上述步骤执行后,可参考《AliOS Things集成开发环境使用说明之烧录固件》来烧录固件。

步骤7 打开串口

固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考《AliOS Things集成开发环境使用说明之查看日志》

当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。

步骤8 测试示例

测试步骤:

$ ucamera init # 初始化ucamera
$ netmgr -t wifi -c ESP32-Camera # 连接WiFi摄像头
$ ucamera -t wifi # 获取一帧画面
$ ls /data # 查看是否有capture.jpg文件生成

CLI命令行输入:

ucamera init # 在执行下面的测试命令前,该命令需要优先执行,仅需执行一次即可。

CLI关键日志:

ucamera comp init successfully!

CLI命令行输入:

ucamera -t wifi

CLI关键日志:

ucamera get frame OK! # 测试结果正常确认(说明从wifi摄像头获取到图像数据)
save image to /data/capture.jpg successfully!

CLI命令行输入:

ls /data

CLI关键日志:

capture.jpg # 生成的文件

FAQ

NA