ucamera

更新时间: 2023-04-13 18:27:23

更正文档

概述

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说明

参考 ucamera_aos_api

使用示例

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

步骤1 创建或打开工程

打开已有工程

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

创建新的工程

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

步骤2 添加组件

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

depends:
  - ucamera: master # helloworld_demo中引入ucamera组件
  - netmgr: master  # 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-CAM进行测试。 ESP32-EYE购买链接

1. 代码下载

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

2. ESP-IDF安装

不同的操作系统安装的步骤也有所差异,请参考官网文档进行安装。

3. 环境变量设置

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

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

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

4. ESP32 EYE网络设置

SoftAP模式

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

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:

配置WiFi摄像头IP

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

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

步骤5 编译固件

在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考《AliOS Things集成开发环境使用说明之编译固件》

步骤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 # 生成的文件

上一篇: trace 下一篇: ucloud_ai