【DigiKey好物畅享】Espressif Systems ESP32-P4-EYE 玩转AI相机应用
一.前言
ESP32-P4-EYE 是一款基于 ESP32-P4 芯片的视觉开发板,主要面向摄像头应用。ESP32-P4 搭载双核 RISC-V 处理器,支持最大 32 MB PSRAM。另外也支持AI应用,AI+摄像头,自然想到可以作为AI相机的应用,在儿童AI相机玩具市场,个人觉得是不错的应用方向。
本文分享ESP32-P4-EYE作为一个AI 相机的Dem体验。
二.下载固件
可以从以下地址下载固件
https://dl.espressif.com/AE/esp-dev-kits/p4_eye_factory_demo_100.bin
从以下地址下载烧录工具
https://dl.espressif.com/public/flash_download_tool.zip
打开烧录工具
flash_download_tool_3.9.9_R2
选择芯片型号ESP32-P4和工作模式develop,接口为uart,点击OK
按照如下选择待烧录bin文件,地址为0,配置串口,点击START
三.编译固件
安装esp-dl组件
点击compenents manager
在搜索框,输入dl,点击搜索
搜索出来espressif/esp-dl, 点击进入对应的组件页面
点击install进行安装。如果安装不上可以参考后面第5节的介绍。
工程中添加组件到工程,可以看到有以下对应的语句
idf.py add-dependency "espressif/esp-dl^3.2.2"
idf.py add-dependency "espressif/esp-dl^3.1.3"
准备工程
从以下地址下载代码
git clone --recursive https://github.com/espressif/esp-dev-kits.git
点击import project导入工程
选择对应的工程,我这里目录是
D:\esp-dev-kits-master\esp-dev-kits-master\examples\esp32-p4-eye\examples\factory_demo
弹出下拉框,点击choose a container directory
然后点击选择目标文件夹,指定目的位置
输入工程名camera然后回车
代码逻辑
代码依赖以下组件
Coco_detect
Esp_painter
Human_face_detect
Pedestrian_detect
Ui部分代码包括images和screens,components。Fonts等
AI部分代码包括app_aidetect等应用
Video部分代码包括photo,stream等
App部分包括album等
主程序入口位于main.c
app_main
先进行相关的初始化
void app_main(void)
{
// Initialize NVS
ESP_LOGI(TAG, "Initialize NVS");
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// Initialize the flashlight
ESP_LOGI(TAG, "Initialize the flashlight");
ESP_ERROR_CHECK(bsp_flashlight_init());
// Initialize the I2C first (needed for QMA6100)
ESP_LOGI(TAG, "Initialize the I2C");
i2c_master_bus_handle_t i2c_handle;
ESP_ERROR_CHECK(bsp_i2c_init());
bsp_get_i2c_bus_handle(&i2c_handle);
// Initialize the AI detect
ESP_LOGI(TAG, "Initialize the AI detect");
ESP_ERROR_CHECK(app_ai_detect_init());
// Initialize the display
ESP_LOGI(TAG, "Initialize the display");
bsp_display_start();
bsp_display_lock(0);
ui_extra_init();
bsp_display_unlock();
// Initialize the QMA6100 IMU sensor with integrated display auto-rotation
ESP_LOGI(TAG, "Initialize the QMA6100 IMU sensor with display auto-rotation");
ret = app_qma6100_init(i2c_handle);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to initialize QMA6100: %s", esp_err_to_name(ret));
return;
}
// Initialize the storage
ESP_LOGI(TAG, "Initialize the storage");
ESP_ERROR_CHECK(app_storage_init());
// Turn on the display backlight
bsp_display_backlight_on();
// Initialize the application control module
ESP_LOGI(TAG, "Initialize the application control module");
ESP_ERROR_CHECK(app_control_init());
// Initialize the video streaming application
ESP_LOGI(TAG, "Initialize the video streaming application");
ESP_ERROR_CHECK(app_video_stream_init(i2c_handle));
ESP_LOGI(TAG, "Application initialization completed");
}
app_control_init中
注册相关按键操作,比如旋钮的左右旋转操作
ESP_ERROR_CHECK(bsp_knob_register_cb(KNOB_LEFT, knob_left_cb, NULL));
ESP_ERROR_CHECK(bsp_knob_register_cb(KNOB_RIGHT, knob_right_cb, NULL));
然后按钮之后进入对应的函数执行。
编译下载
File ->Open Folder…打开上述demo/camera文件夹
打开esp-idf终端
输入
idf.py menuconfig
可进行配置
点击编译下载监控一体图标
一步进行编译下载运行
四.相机体验
ESP32-P4-EYE可以完整的实现AI相机的功能,可以拍照,摄像,AI检测,我们可以先来体验一番。
相机功能
按菜单进入相机功能
旋转转盘可放大缩小,按下转盘拍照
间隔拍照
菜单进入间隔拍照功能
可设置间隔时间,按下转盘开始拍照,任意按键退出
摄像功能
菜单进入摄像功能
旋转转盘可放大缩小,按下转盘拍摄
AI检测
菜单键入AI检测功能
可设置为行人检测,人脸检测模式
测试看识别率还可以
ALBUM
菜单进入ALBUM功能
可识别目标,比如如下识别出笔记本
U盘功能
菜单进入U盘功能
可接电脑作为U盘,传输文件
设置功能
菜单进入设置功能,可进行相应的设置
五. 遇到问题与总结
组件不能在线安装问题
如前面提到的如果install组件不成功,可以以下手段手动安装
现在对应的组件install界面,直接下载压缩包,然后解压复制(以espressif__esp-dl-v3.2.3为例)到
C:\Users\qinyu\esp\v5.5\esp-idf\components下,目录要提升一层即删除esp-dl这一层,内容直接位于espressif__esp-dl-v3.2.3目录下
组件版本不匹配问题
如果安装组件版本不匹配,或者代码中要求的版本不匹配,可以手动进行版本依赖修改,比如对于espressif__esp-dl安装的是v3.2.3版本,但是代码中要求是==3.1.3,
则直接搜索版本例如==3.1.3
全部替换为自己安装的版本,例如^3.2.2
tinyusb等其他需要的组件也是类似。
六.总结
以上可以看出该ESP32-P4-EYE可以完整的实现AI相机的功能,可以拍照,摄像,AI检测,所以作为儿童AI玩具相机是一个不错的应用场景。得益于官方完备的库和Demo几乎无需过多的开发,直接就可以进行产品应用。作为学习,开发,产品开发等都是非常不错的选择。


