- 2024-10-30
-
上传了资料:
【2024 DigiKey 创意大赛】智能空调感应器_代码
- 2024-10-20
-
发表了主题帖:
【2024 DigiKey 创意大赛】智能空调感应器
本帖最后由 奇迹12 于 2024-10-30 22:58 编辑
一、作品简介
本项目主要实现了一个智能空调感应器,当摄像头检测到房间内有人时会自动打开空调,同时该设备还支持远程网页控制。
二、系统框图
本项目主要实现当摄像头检测到房间内有人时会自动打开空调,还支持远程网页控制,两大主要功能,设计思路如下:
人体识别:该部分使用openMV完成,运行神经网络模型,识别环境中是否有人,当发现环境中有人时,产生一个信号发送给esp32进行处理。
网页控制:该部分由esp32完成,esp32实现上网功能,作为一个服务器对外开发,实现一个内置网页,当发现有手机连入该服务器,并访问服务器的网页时,将该网页返回给手机端,用户可以通过手机上的网页对设备进行控制。
控制核心:由esp32完成,负责接收openMV和网页传来的控制信号,当满足空调打开条件时打开空调,本文中使用LED点亮作为演示。
使用的板卡是以下两个:
OpenMV摄像头是一款小巧,低功耗,低成本的电路板,它帮助你很轻松的完成机器视觉(machine vision)应用。你可以通过高级语言Python脚本(准确的说是 MicroPython ),而不是C/C++。Python的高级数据结构使你很容易在机器视觉算法中处理复杂的输出。但是,你仍然可以完全控制OpenMV。你可以很容易的使用外部终端触发拍摄或者或者执行算法,也可以把算法的结果用来控制IO引脚。
STM32H743VI ARM Cortex M7 处理器,480 MHz ,1MB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。这个处理器有以下的IO接口。
全速 USB (12Mbs) 接口,连接到电脑。当插入OpenMV摄像头后,你的电脑会出现一个虚拟COM端口和一个“U盘”。
μSD卡槽拥有100Mbs读写,这允许你的OpenMV摄像头录制视频,和把机器视觉的素材从SD卡提取出来。
一个SPI总线高达54Mbs速度,允许你简单的把图像流数据传给LCD扩展板,WiFi扩展板,或者其他控制器。
一个 I2C总线,CAN总线, 和两个异步串口总线 (TX/RX) ,用来链接其他控制器或者传感器。
一个12-bit ADC 和一个12-bit DAC。
3个 I/O 引脚用于舵机控制.
所有的IO口都可以用于,中断和PWM(板子上有10个I/O引脚)。
一个RGB LED(三色), 两个高亮的 850nm IR LED(红外).
可拆卸的摄像头模块系统,允许OpenMV Cam H7与不同的感光元件模组连接:
OpenMV4 H7默认配置的MT9M114 感光元件处理640×480 8-bit 灰度图或者640×480 16-bit RGB565彩色图像可以达到40 FPS;当分辨率低于320×240可以达到80FPS。大多数简单的算法可以运行40~80FPS以上。你的 OpenMV 摄像头有一个2.8mm焦距镜头在一个标准M12镜头底座上。如果你想使用更多的特殊的镜头,你可以很容易的安装。
对于专业的机器视觉应用,你可以购买我们的全局快门摄像头模组mt9V034。
对于红外热成像机器视觉应用,您可以购买我们的FLIR Lepton 红外热成像模组。
3.7V 锂离子电池接口,用于业余爱好者机器人应用。
ESP32-C6-DevKitC-1 是一款入门级开发板,使用带有 8 MB SPI flash 的通用型模组 ESP32-C6-WROOM-1(U)。该款开发板具备完整的 Wi-Fi、低功耗蓝牙、Zigbee 及 Thread 功能。
板上模组大部分管脚均已引出至两侧排针,开发人员可根据实际需求,轻松通过跳线连接多种外围设备,同时也可将开发板插在面包板上使用。
代码部分:
人体识别
while True:
clock.tick()
img = sensor.snapshot()
flag = 0
for i, detection_list in enumerate(
net.detect(img, thresholds=[(math.ceil(min_confidence * 255), 255)])
):
if i == 0:
continue # background class
if len(detection_list) == 0:
continue # no detections for this class?
print("********** %s **********" % labels[i])
flag = 1
for d in detection_list:
[x, y, w, h] = d.rect()
center_x = math.floor(x + (w / 2))
center_y = math.floor(y + (h / 2))
print(f"x {center_x}\ty {center_y}")
img.draw_circle((center_x, center_y, 12), color=colors[i], thickness=2)
if flag == 1:
p_out.high()#设置p_out引脚为高
else:
p_out.low()#设置p_out引脚为低
print(clock.fps(), "fps", end="\n")
esp32处理部分:
void loop() {
dnsServer.processNextRequest(); // 处理 DNS 请求
server.handleClient(); // 处理来自客户端的 HTTP 请求
if(LOW == digitalRead(0) && count > 100){
identify_flag = 0;
}
else if(HIGH == digitalRead(0)){
identify_flag = 1;
count = 0;
}
count++;
if(control_flag == 1 || identify_flag == 1)
rgbLedWrite(RGB_BUILTIN, 0, 0, RGB_BRIGHTNESS);
else
rgbLedWrite(RGB_BUILTIN, 0, 0, 0);
}
三、各部分功能说明
openmv识别人体
控制网页
人体识别控制
手机网页控制
四、作品源码
download.eeworld.com.cn/detail/奇迹12/634849
五、作品功能演示视频
[localvideo]f2c0f979629c1affe5bfe3de394da3b5[/localvideo]
六、项目总结
很高兴能参加这个活动,我收获了很多新的知识,也完整完成了一个小项目,很开心。
- 2024-08-17
-
发表了主题帖:
【2024 DigiKey 创意大赛】物料开箱
等了很久快递终于到了。
东西是真的很精致,使用塑料盒装着。
openmv排针没焊,我把它焊上了。、
下一步就开始搞代码了。
- 2024-08-04
-
回复了主题帖:
【Vllink Basic2】3.有线速度测试
秦天qintian0303 发表于 2024-8-3 19:14
keil限制,dap最大只能为10MHz,这玩意能突破不
有一种操作是在设备端实现,设置10MHz,设备端可以给到更高的频率,比如15MHz。
- 2024-08-03
-
发表了主题帖:
【Vllink Basic2】5.串口测试
本帖最后由 奇迹12 于 2024-8-3 12:06 编辑
今天测一下Vllink Basic2串口信号是否稳定,对于串口信号来说,稳定可以体现在两个方面,一是波形是否准确,二是收发是否不丢包。
这次打算就从这两方面入手进行测试,本次选取了三个频率进行测试,分别是115200、1000000、3000000。
首先进行波形测试,定时发送0x55数据,定时设为10ms,使用示波器查看波形,看看效果。
115200
1000000
3000000
可以看到波形还是比较好的(由于示波器比较垃圾3mhz时候测试的波形不好看,实际信号估计还是不错的),频率也正确。
稳定性测试,短接Vllink Basic2 tx与rx,定时发送数据,定时设为10ms,看看发送接受数据量是否一致,是否存在丢包。
115200
1000000
3000000
稳定性很好,不存在丢包现象。
压力测试,使用下载器下载,同时进行回环测试,定时设为1ms,看看是否丢包。
115200
1000000
3000000
综合来看Vllink Basic2串口还是很不错的,完全足以应付日常使用。
-
发表了主题帖:
【Vllink Basic2】4.无线速度测试
本帖最后由 奇迹12 于 2024-8-3 11:56 编辑
今天测试一下Vllink Basic2无线性能。
这次的测试与有线速度测试的方式类似。
选择的板卡是NXP的N947;使用的环境是keil;下载速度通通选择最高(由于keil限制,dap最大只能为10MHz)。
程序继续使用上次的程序,大约765.8KB。编译结果如下:
Program Size: Code=10424 RO-data=773736 RW-data=12 ZI-data=2388
性能测试方式,由于Keil无法单独打印烧写速度,只能通过统计时间来预估,这里通过在上一次烧写即将结束的时候按住F8进行下一次烧写,然后统计时间间隔。该时间是包含擦除,烧写和校验的,由于无线烧写速度比较慢,每个设备测试三次,统计出平均值。
先看一下空间的无线信号,可以看到只有Vllink Basic2的信号孤零零的在这里,没有干扰源的存在。
Vllink Basic2 V1 超近距离
时间分别是83s、83s、84s,平均值为83.3s。
Vllink Basic2 V2 超近距离
时间分别是73s、70s、68s,平均值为70.3s。
Vllink Basic2 V2 距离2m,无障碍
时间分别是67s、70s、68s,平均值为68.3s。
Vllink Basic2 V2 距离5m,无障碍
时间分别是71s、71s、69s,平均值为70.3s。
Vllink Basic2 V2 距离5m,中间有道门
时间分别是68s、69s、69s,平均值为68.3s。
Vllink Basic2 V2 距离10m,有承重墙
无信号,无法连接。
最终结果:
设备
下载时间
距离
障碍
平均速度(该速度包含擦除校验)
Vllink Basic2 V1
27s
有线
无
28.6KB/s
Vllink Basic2 V2
16.4s
有线
无
46.69KB/s
Vllink Basic2 V1
83.3s
超近
无
9.19KB/s
Vllink Basic2 V2
70.3s
超近
无
10.89KB/s
Vllink Basic2 V2
68.3s
2m
无
11.21KB/s
Vllink Basic2 V2
70.3s
5m
无
10.89KB/s
Vllink Basic2 V2
68.3s
5m
门
11.21KB/s
Vllink Basic2 V2
无信号
10m
承重墙
无信号
可以看到Vllink Basic2还是非常稳定的,在不同距离的表现可以说是区别不大(和信道干净有很大原因),5g频道承重墙无法穿透也很正常。
-
发表了主题帖:
【Vllink Basic2】3.有线速度测试
本帖最后由 奇迹12 于 2024-8-3 00:43 编辑
最近事情有点多,要不是管理员提醒差点忘了这个事了。。。。
今天继续评测Vllink Basic2,这次从有线下载速度开始。
一开始本想使用h7开发板加RAM下载的方式测试下载的极限速度,后来想了一下这种场景比较少,不符合我们日常使用的习惯,这次就改成完整的擦除、下载、校验过程。
之前也研究过DAP实现,也尝试移植过DAP源码。世面的上的DAP大都使用开源版本,并未做适配,只能说能用,使用体验还是很差的,更别说支持两种通信协议与jtag了。
先说一下本次测试的方式吧。
这次选择的板卡是NXP的N947;使用的环境是keil;下载速度通通选择最高(由于keil限制,dap最大只能为10MHz)。
程序搞了个很大的程序,大约765.8KB。编译结果如下:
Program Size: Code=10424 RO-data=773736 RW-data=12 ZI-data=2388
性能测试方式,由于Keil无法单独打印烧写速度,只能通过统计时间来预估,这里通过在上一次烧写即将结束的时候按住F8进行下一次烧写,然后统计时间间隔。该时间是包含擦除,烧写和校验的,每个设备测试五次,统计出平均值。
下面请出本次对比的设备,他们分别是MCU-Link(NXP家的DAP,为板卡板载)、Vllink Basic2、Jlink V11 edu。
首先先测试Vllink Basic2 CMSIS-DAP HID协议,也就是V1版
时间分别是27s、27s、27s、27s、27s,平均值为27s。
Vllink Basic2 V2
时间分别是16s、17s、16s、16s、17s,平均值为16.4s。
MCU-Link
时间分别是11s、11s、11s、11s、11s,平均值为11s。
Jlink V11 edu
这里虽然设置了50MHz的速度,但是看打印只有15MHz。
时间分别是20s、21s、21s、20s、21s,平均值为20.6s。
最终结果:
设备
下载时间
平均速度(该速度包含擦除校验)
Vllink Basic2 V1
27s
28.6KB/s
Vllink Basic2 V2
16.4s
46.69KB/s
MCU-Link
11s
69.62KB/s
Jlink V11 edu
20.6s
37.17KB/s
没想到Jlink V11 edu居然是最慢的,Vllink Basic2还是表现可以的,比较强。
MCU-Link速度远超其他设备,我怀疑NXP对MCU-Link在keil上的使用做了优化,也就是当识别到用户使用keil下载且下载速度为10MHz时,自动切换到更高的速度。
这里也建议作者可以加入这个功能,也算另一种方式解除了keil对于dap速度的限制。
- 2024-07-08
-
回复了主题帖:
【Vllink Basic2】2.基本配置与在线升级
秦天qintian0303 发表于 2024-7-7 08:26
这么开就有新的固件了,更新的还挺快的,我也赶紧去看看
最新的更新倒是不涉及性能,主要是小灯提示
-
回复了主题帖:
【Vllink Basic2】1.初识
wangerxian 发表于 2024-6-30 11:51
想看看后面下载和调试的效果。
挺不错的,下一篇系统测测
- 2024-07-06
-
发表了主题帖:
【Vllink Basic2】2.基本配置与在线升级
本帖最后由 奇迹12 于 2024-7-6 15:58 编辑
前几天突然发现Vllink Basic2出新版本固件了,今天就来测试一下他的在线升级与配置功能。
首先试试在线升级,先下载最新的固件。
https://vllogic.com/update/vllink_basic2
解压后就能看到升级网页,也可用在线版本。
https://vllogic.com/_static/tools/update/
按住设备上的按键接入电脑。点击Connect Vllink Device。
选择设备,如果没发现,就重新将设备按住按键连接电脑。
点击选择文件选择固件,点击Update进行升级。
进度条走完后设备会自动复位。
不过升级之后网页没有提示,只能通过设备是否服务进行判断。
下面测试一下升级是否能识别错误的升级文件(这个操作还是有点冒险的,请不要乱实验)
选择了个图片,看看能否升级
点击Update后进度条居然走动了(差一点点走满),不过设备没有自动复位,重新上电之后发现设备还是可以正常使用的,版本号无变化。
不过也没有升级提示,如果用户误操作也不能判断自己操作错了,比如把下载的zip包直接作为升级文件用了,或者选择了其他程序的固件。也没提示,容易迷茫。
下面试一下配置功能,直接在有线模式或无线ap模式下连接到电脑上(如果处于无线sta模式下可通过长按5s按键或双击按键的方式切换工作模式)
配置说明很清晰,可惜暂时没支持图像界面配置
简单试了一下,错误配置会自动忽略,无变化。
- 2024-06-29
-
发表了主题帖:
【Vllink Basic2】1.初识
非常感谢电子工程世界(EEWorld)和 le062 赞助的 Vllink Basic2 高速无线调试器,很幸运自己能得到这次试用的机会。
先来一张全家福
内容物有
两个 Vllink Basic2 调试器
两条 Type-C 数据线
杜邦线若干
一份简易上手指南
再来两张特写
板子设计的非常小巧优美,主控采用爱科微的AIC8800M,性能很强大,足以胜任dap大业。
先简单试试有线模式,直接连接到电脑,双击按键切换模式到有线模式,连接好板卡。
打开下载配置界面可以发现识别到了两个一个是CMSIS-DAP v1,一个是CMSIS-DAP v2
点击下载非常顺畅,初步来看Vllink Basic2 高速无线调试器DAP部分兼容性还是可以的,不需要捣鼓USB驱动啥的,使用方便。
- 2024-06-24
-
回复了主题帖:
测评入围名单: 高速无线调试器(WiFi6免干扰),追加了4个
个人信息无误,确认可以完成测评分享计划
- 2024-05-16
-
发表了主题帖:
【2023 DigiKey大赛参与奖】开箱帖 MCX A153
感谢digikey和EEWORLD提供的机会,
采购了MCX A153、树莓派的配件和一个TF卡。
快递是非常大的一个箱子
全家福
拆箱特写
- 2024-01-11
-
回复了主题帖:
【DigiKey创意大赛】自助计价系统+项目汇总提交
HonestQiao 发表于 2024-1-11 08:37
大佬你家里是开超市的吗?
这个非常实用啊!
哈哈,这可没有,电子打工狗一枚
- 2024-01-08
-
发表了主题帖:
【DigiKey创意大赛】自助计价系统+项目汇总提交
自助计价系统
作者:奇迹12
一、作品简介
本项目是基于seeed的wio lite ai板卡设计的一款具有智能识别食物类型,智能计价的自助计价系统。本设备运行本地神经网络识别,无需联网。用户将取好的餐盘放到设备下面,摄像头会自动采集图像,识别出来餐盘里面的食物类型,并自动计算价格。
二、系统框图
设计思路:
本设计主要有四个阶段构成:
1.图像采集,这里我使用部分网上数据集与自己拍摄的图像作为训练数据集,主要数据以网上数据为主。
2.模型训练量化,使用ST提供的工具进行。
3.驱动开发。
4.模型部署。
硬件介绍:
Seeed Studio Wio Lite AI单板是一款功能强大的AI视觉开发板,基于STM32H725AE芯片。STM32H725AE芯片是一款Arm® Cortex®-M7 32位550MHz高性能微处理器。Cortex-M7内核具有浮点单元 (FPU) 精度,支持Arm双精度(符合IEEE 754标准)和单精度数据处理指令与类型。
Seeed Studio Wio Lite AI单板具有16MB SPI NOR闪存、8MB PSRAM、双频2.4GHz/5GHz Wi-Fi和蓝牙® 5.1。Wio Lite板设有一个40引脚FPC端口(用于LCD RGB565或RGB888 )和一个24引脚FPC端口(用于DCMI摄像头)。得益于这些特性和端口,该板成为视觉项目的高性价比解决方案。此外,在这个套件包含 200万像素的 DCMI 摄像头和2.8英寸电阻触摸屏 RGB LCD,这使得很容易设计一个视觉项目。
硬件框图:
软件流程图:
三、各部分功能说明
部署模型:
主要代码:
1.显示初始化
/* USER CODE BEGIN LTDC_Init 0 */
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_5, GPIO_PIN_SET); //使能的LCD背光
HAL_Delay(100);
ST7789V_Init();
/* USER CODE END LTDC_Init 0 */
LTDC_LayerCfgTypeDef pLayerCfg = {0};
/* USER CODE BEGIN LTDC_Init 1 */
/* USER CODE END LTDC_Init 1 */
hltdc.Instance = LTDC;
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
hltdc.Init.HorizontalSync = 9;
hltdc.Init.VerticalSync = 3;
hltdc.Init.AccumulatedHBP = 19;
hltdc.Init.AccumulatedVBP = 5;
hltdc.Init.AccumulatedActiveW = 259;
hltdc.Init.AccumulatedActiveH = 325;
hltdc.Init.TotalWidth = 297;
hltdc.Init.TotalHeigh = 327;
hltdc.Init.Backcolor.Blue = 0;
hltdc.Init.Backcolor.Green = 0;
hltdc.Init.Backcolor.Red = 0;
if (HAL_LTDC_Init(&hltdc) != HAL_OK)
{
Error_Handler();
}
pLayerCfg.WindowX0 = 0;
pLayerCfg.WindowX1 = 240;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = 320;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
pLayerCfg.FBStartAdress = (uint32_t)LCD_BUFFER;
pLayerCfg.ImageWidth = 240;
pLayerCfg.ImageHeight = 320;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
{
Error_Handler();
}
2.摄像头配置
const unsigned char OV2640_UXGA[][2] =
{
0xff, 0x00,
0x2c, 0xff,
0x2e, 0xdf,
0xff, 0x01,
0x3c, 0x32,
0x11, 0x00,
0x09, 0x02,
0x04, 0xA0,//0x04, 0xd0, /*0x80,*/
0x13, 0xe5,
0x14, 0x48,
0x2c, 0x0c,
0x33, 0x78,
0x3a, 0x33,
0x3b, 0xfB,
0x3e, 0x00,
0x43, 0x11,
0x16, 0x10,
0x4a, 0x81,
0x21, 0x99,
0x24, 0x40,
0x25, 0x38,
0x26, 0x82,
0x5c, 0x00,
0x63, 0x00,
0x46, 0x3f,
0x0c, 0x38,/*0x3c*/
0x61, 0x70,
0x62, 0x80,
0x7c, 0x05,
0x20, 0x80,
0x28, 0x30,
0x6c, 0x00,
0x6d, 0x80,
0x6e, 0x00,
0x70, 0x02,
0x71, 0x94,
0x73, 0xc1,
0x3d, 0x34,
0x5a, 0x57,
0x12, 0x00,
0x11, 0x00,
0x17, 0x11,
0x18, 0x75,
0x19, 0x01,
0x1a, 0x97,
0x32, 0x36,
0x03, 0x0f,
0x37, 0x40,
0x4f, 0xbb,
0x50, 0x9c,
0x5a, 0x57,
0x6d, 0x80,
0x6d, 0x38,
0x39, 0x02,
0x35, 0x88,
0x22, 0x0a,
0x37, 0x40,
0x23, 0x00,
0x34, 0xa0,
0x36, 0x1a,
0x06, 0x02,
0x07, 0xc0,
0x0d, 0xb7,
0x0e, 0x01,
0x4c, 0x00,
0xff, 0x00,
0xe5, 0x7f,
0xf9, 0xc0,
0x41, 0x24,
0xe0, 0x14,
0x76, 0xff,
0x33, 0xa0,
0x42, 0x20,
0x43, 0x18,
0x4c, 0x00,
0x87, 0xd0,
0x88, 0x3f,
0xd7, 0x03,
0xd9, 0x10,
0xd3, 0x80, /*0x82*/
0xc8, 0x08,
0xc9, 0x80,
0x7d, 0x00,
0x7c, 0x03,
0x7d, 0x48,
0x7c, 0x08,
0x7d, 0x20,
0x7d, 0x10,
0x7d, 0x0e,
0x90, 0x00,
0x91, 0x0e,
0x91, 0x1a,
0x91, 0x31,
0x91, 0x5a,
0x91, 0x69,
0x91, 0x75,
0x91, 0x7e,
0x91, 0x88,
0x91, 0x8f,
0x91, 0x96,
0x91, 0xa3,
0x91, 0xaf,
0x91, 0xc4,
0x91, 0xd7,
0x91, 0xe8,
0x91, 0x20,
0x92, 0x00,
0x93, 0x06,
0x93, 0xe3,
0x93, 0x02,
0x93, 0x02,
0x93, 0x00,
0x93, 0x04,
0x93, 0x00,
0x93, 0x03,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x93, 0x00,
0x96, 0x00,
0x97, 0x08,
0x97, 0x19,
0x97, 0x02,
0x97, 0x0c,
0x97, 0x24,
0x97, 0x30,
0x97, 0x28,
0x97, 0x26,
0x97, 0x02,
0x97, 0x98,
0x97, 0x80,
0x97, 0x00,
0x97, 0x00,
0xc3, 0xef,
0xff, 0x00,
0xba, 0xdc,
0xbb, 0x08,
0xb6, 0x24,
0xb8, 0x33,
0xb7, 0x20,
0xb9, 0x30,
0xb3, 0xb4,
0xb4, 0xca,
0xb5, 0x43,
0xb0, 0x5c,
0xb1, 0x4f,
0xb2, 0x06,
0xc7, 0x00,
0xc6, 0x51,
0xc5, 0x11,
0xc4, 0x9c,
0xbf, 0x00,
0xbc, 0x64,
0xa6, 0x00,
0xa7, 0x1e,
0xa7, 0x6b,
0xa7, 0x47,
0xa7, 0x33,
0xa7, 0x00,
0xa7, 0x23,
0xa7, 0x2e,
0xa7, 0x85,
0xa7, 0x42,
0xa7, 0x33,
0xa7, 0x00,
0xa7, 0x23,
0xa7, 0x1b,
0xa7, 0x74,
0xa7, 0x42,
0xa7, 0x33,
0xa7, 0x00,
0xa7, 0x23,
0xc0, 0xc8,
0xc1, 0x96,
0x8c, 0x00,
0x86, 0x3d,
0x50, 0x92,
0x51, 0x90,
0x52, 0x2c,
0x53, 0x00,
0x54, 0x00,
0x55, 0x88,
0x5a, 0x50,
0x5b, 0x3c,
0x5c, 0x00,
0xd3, 0x04, /*04*/
0x7f, 0x00,
0xda, 0x00,
0xe5, 0x1f,
0xe1, 0x67,
0xe0, 0x00,
0xdd, 0x7f,
0x05, 0x00,
0xff, 0x00,
0xe0, 0x04,
0xc0, 0xc8,
0xc1, 0x96,
0x86, 0x3d,
0x50, 0x92,
0x51, 0x90,
0x52, 0x2c,
0x53, 0x00,
0x54, 0x00,
0x55, 0x88,
0x57, 0x00,
0x5a, 0x50,
0x5b, 0x3c,
0x5c, 0x00,
0xd3, 0x04,
0xe0, 0x00,
0xFF, 0x00,
0x05, 0x00,
0xDA, 0x08,
0xda, 0x09,
0x98, 0x00,
0x99, 0x00,
0x00, 0x00,
0xff, 0x01,
0x11, 0x00,
// 0x12, 0x10,
// 0x2a, 0x00,
// 0x2b, 0x00,
// 0x46, 0x87,
// 0x47, 0x00,
// 0x3d, 0x33,
// 0xff, 0x00,
// 0xe0, 0x04,
// 0xc0, 0xc8,
// 0xc1, 0x96,
// 0x86, 0x35,
// 0x50, 0x80,
// 0x51, 0x90,
// 0x52, 0x2c,
// 0x53, 0x00,
// 0x54, 0x00,
// 0x55, 0x88,
// 0x57, 0x00,
// 0x5a, 0x78,//480
// 0x5b, 0x44,//272
// 0x5c, 0x00,
// 0xd3, 0x04,
// 0xe0, 0x00,
};
3.模型加载
network_handle = AI_HANDLE_NULL;
/* Creating the network */
ai_network_create(&network_handle, AI_NETWORK_DATA_CONFIG);
/* Initialize param structure for the activation and weight buffers */
const ai_network_params params = AI_NETWORK_PARAMS_INIT(
AI_NETWORK_DATA_WEIGHTS(ai_network_data_weights_get()),
AI_NETWORK_DATA_ACTIVATIONS(activations)
);
/* Initializing the network */
ai_network_init(network_handle, ¶ms);
/*Retrieve network descriptor*/
ai_network_get_info(network_handle, &desc_report);
/*Copy descriptor info*/
ai_input[0]= desc_report.inputs[0];
ai_output[0]= desc_report.outputs[0];
return desc_report.inputs->data;
4.业务代码
uint8_t person_flag;
//转换图像为模型可处理的大小
int i,j;
for(i=0; i<224; i++)
{
for(j=0; j<224; j++)
{
uint16_t bg_color = ((uint16_t *)_OV2640->frame->buffer)[i*320 + j];
network_input[3*i*224 + 3*j + 0] = ((bg_color>>11)&0xff)<<3;
network_input[3*i*224 + 3*j + 1] = ((bg_color>>5)&0x3f)<<2;
network_input[3*i*224 + 3*j + 2] = (bg_color&0x1f)<<2;
}
}
ai_run(network_input, network_output);
for(int i=0;i<192;i++)
{
LCD_Draw_Point(i+64, 192+24,0xf100);
LCD_Draw_Point(192+64,i+24, 0xf100);
LCD_Draw_Point(i+64, 0+24, 0xf100);
LCD_Draw_Point(64, i+24, 0xf100);
}
uint8_t numm = network_max();
LCD_Draw_Image(0, 0, 320, 240, (uint16_t *)_OV2640->frame->buffer);
if(numm != 0)
{
for(int i=0;i<5;i++)
{
if(output_labels[numm][i] == -1)
{
LCD_Draw_String(i*32+8, 0, 320, 240, 32, (char*)jiage[numm]);
LCD_Draw_hanzi(i*32+32+8, 0, 44, 0);
break;
}
LCD_Draw_hanzi(i*32, 0, output_labels[numm][i], 0);
}
}
OV2640_DMA_Config(_OV2640->frame->buffer, (_OV2640->frame->length)/4);
功能演示:
四、作品源码
https://download.eeworld.com.cn/detail/%E5%A5%87%E8%BF%B912/630683
五、作品功能演示视频
[localvideo]e07ecd4186073cf54d98580443cd7900[/localvideo]
六、项目总结
折腾了挺久,终于把这个项目完成了,或许并不完美,但是还是很开心的。
【DigiKey“智造万物,快乐不停”创意大赛】器件开箱 https://bbs.eeworld.com.cn/thread-1260338-1-1.html
【DigiKey创意大赛】食堂自助计价系统+图像采集完成 https://bbs.eeworld.com.cn/thread-1267195-1-1.html
七、其他
-
加入了学习《活动视频合集》,观看 【DigiKey创意大赛】自助计价系统演示视频
- 2024-01-06
-
上传了资料:
【DigiKey创意大赛】自助计价系统代码
- 2023-12-24
-
加入了学习《 【DigiKey“智造万物,快乐不停”创意大赛】车内氧浓度监测警报器》,观看 【DigiKey“智造万物,快乐不停”创意大赛】车内氧浓度监测警报器
- 2023-12-17
-
发表了主题帖:
【DigiKey创意大赛】食堂自助计价系统+图像采集完成
本帖最后由 奇迹12 于 2023-12-17 21:41 编辑
感谢Digikey和EEWORLD开展的活动,本次活动我参赛的项目是 《食堂自助计价系统》,选择的板卡是seeed的wio lite ai。
对于ai图像识别来说,数据集十分重要,这一次我采用板卡摄像头进行图像拍摄,将拍摄的图像存储到tf卡中,通过电脑进行出来。
今天写一下图像采集部分与数据保存部分。
不得不说ST一整套开发工具确实方便,很容易就完成了代码编写,效果如下。
按一下板子上面的按键就可以把图片保存到tf卡里面。
接下来就是一张张拍照,训练,得加把劲了。