48浏览
查看: 48|回复: 0

[K10教程] 基于micropython实现人类识别

[复制链接]
AI功能这个东西,官方迟迟没有出教程,于是通过大量查找,发现https://github.com/mocleiri/tensorflow-micropython-examples有一个人类识别的案例,于是编译了K10的固件进行使用。
1.行空板介绍
行空板K10集成ESP32-S3、摄像头、2.8寸彩色LCD、麦克风、扬声器、WiFi蓝牙模块、RGB指示灯及多种传感器和扩展接口于一体;支持图像检测、语音识别、语音合成、mind+图形化编程,MicroPython编程,是一款专为信息科技课程教学需求而研发的开发板
2.TensorFlow-Lite-Mirco介绍
TensorFlow Lite for Microcontrollers(TFLM)是TensorFlow Lite的一个实验性移植版本,专门针对微控制器和其他仅有数千字节内存的设备。以下是关于它的详细介绍:
特点
轻量级:核心运行时在Cortex M3上运行时仅需16KB,加上运行语音关键字检测模型的操作,也只需22KB的空间。这使得它能够在资源极其受限的微控制器上运行。
无需依赖:可以直接在“裸机”上运行,不需要操作系统支持、任何标准C/C++库和动态内存分配,降低了对硬件环境的要求。


低功耗:微控制器通常针对低能耗和小尺寸进行优化,TFLM在这样的设备上运行,有助于实现低功耗的机器学习应用,适合电池供电或能量收集的设备。


功能和组件
C++ API:提供了运行时的C++ API,方便开发者在微控制器上进行开发。


标准FlatBuffer架构:使用标准的TensorFlow Lite FlatBuffer架构,能够与TensorFlow Lite的生态系统兼容。


预生成项目文件:为Arduino、Keil和Mbed等较为流行的嵌入式开发平台预生成了项目文件,方便开发者快速上手。


针对嵌入式平台优化:对多个嵌入式平台进行了优化,以提高在这些设备上的性能。

应用场景

智能家居:可用于家庭安防系统中的人体检测功能,通过在微控制器上运行人体检测模型,实现对家庭环境的实时监控。


工业自动化:在工业设备上部署语音控制功能,通过运行语音识别模型,实现对设备的语音指令控制。


物联网设备:在低功耗物联网设备上运行各种机器学习模型,如环境监测、设备状态预测等,实现设备的智能化。


3.tensorflow micropython介绍


TensorFlow MicroPython 示例项目是一个开源项目,旨在将 TensorFlow Lite for Microcontrollers (TFLM) 集成到 MicroPython 固件中,以便在微控制器上运行机器学习模型。该项目由 Michael O 创建,支持 ESP32 和 RP2040 等微控制器平台。通过该项目,开发者可以轻松地在微控制器上实验和部署 TinyML(微型机器学习)应用。
项目特点

TensorFlow Lite 集成:将 TensorFlow Lite 模型集成到 MicroPython 固件中,使得微控制器能够运行轻量级的机器学习模型。

MicroPython 支持:提供了一个自定义的 MicroPython 固件,允许开发者使用 MicroPython 语言进行开发和实验。

ulab 模块:集成了 ulab 模块,这是一个用于 MicroPython 的科学计算库,提供了类似于 NumPy 的功能。

示例实现:提供了多个 TensorFlow Micro 示例的 MicroPython 实现,包括 hello_world、micro_speech、person_detection 等。

项目目录结构
boards/: 包含不同开发板的配置文件。

ci/: 持续集成相关的配置文件。

docker/: Docker 相关的配置文件。

examples/: 包含多个示例项目,如 micro-speech、person-detection 和 hello-world。

images/: 项目相关的图片文件。

lib/: 包含项目依赖的库文件,如 micropython、micropython-modules、micropython-ulab 和 tensorflow。

src/: 包含项目的源代码,如 micro-speech。

应用案例和最佳实践
语音识别:使用 micro-speech 示例来识别特定的语音命令。

图像分类:通过集成 TensorFlow Lite 模型,实现简单的图像分类任务,例如使用 person-detection 示例来检测图像中是否有人。

传感器数据处理:结合传感器数据,实现实时数据处理和预测,例如使用加速度传感器数据进行姿态识别。

典型生态项目
Edge Impulse:一个用于开发嵌入式机器学习应用的平台。通过集成 TensorFlow MicroPython 示例项目,可以在 Edge Impulse 上训练模型并将其部署到微控制器上。

OpenMV:一个开源的机器视觉平台,支持 MicroPython。通过 TensorFlow MicroPython 示例项目,可以在 OpenMV 上运行 TensorFlow Lite 模型,实现更复杂的机器视觉任务。

MicroPython-ulab:一个用于 MicroPython 的科学计算库,类似于 NumPy。通过结合 TensorFlow MicroPython 示例项目和 ulab,可以在微控制器上进行高效的数值计算和机器学习推理。


4.开发流程
首先,我们使用Edge Impulse训练模型,并刷入固件。

接着,把模型放到根目录部署代码
最后,迭代使用即可。
5.部署代码
我们在这里先不训练模型,直接使用官方示例person-detection(人类检测),改了文件代码引脚后,参考代码如下:
  1. # 运行人员检测模型
  2. # 此版本从 K10 板上的 OV2640 摄像头读取图像
  3. import sys
  4. import microlite
  5. import camera
  6. from machine import Pin
  7. import time  # 导入 time 模块
  8. # 初始化摄像头,读取 96x96 像素的灰度图像
  9. try:
  10.     # 使用 K10 板上的 OV2640 传感器
  11.     camera.init(0, d0=8, d1=10, d2=11, d3=9, d4=18, d5=16, d6=15, d7=6,
  12.                        format=camera.GRAYSCALE, framesize=camera.FRAME_96X96, fb_location=camera.PSRAM,
  13.                        xclk_freq=camera.XCLK_10MHz,
  14.                        href=5, vsync=4, reset=-1, pwdn=-1,
  15.                        sioc=48, siod=47, xclk=7, pclk=17)
  16. except:
  17.     print("摄像头初始化失败")  # 中文输出:摄像头初始化失败
  18.     sys.exit()
  19. mode = 1
  20. test_image = bytearray(9612)
  21. def handle_output(person):
  22.     if person > 10:
  23.         print("检测到人")  # 中文输出:检测到人
  24.     else:
  25.         print("未检测到人")  # 中文输出:未检测到人
  26. def input_callback(microlite_interpreter):
  27.     inputTensor = microlite_interpreter.getInputTensor(0)
  28.     for i in range(0, len(test_image)):
  29.         inputTensor.setValue(i, test_image[i])
  30.         print("已将 %d 字节数据加载到输入张量" % (len(test_image)))  # 中文输出
  31. def output_callback(microlite_interpreter):
  32.    outputTensor = microlite_interpreter.getOutputTensor(0)
  33.     not_a_person = outputTensor.getValue(0)
  34.     person = outputTensor.getValue(1)
  35.     print("'不是人' = %d, '是人' = %d" % (not_a_person, person))  # 中文输出
  36.     handle_output(person)
  37. # 读取模型文件
  38. person_detection_model_file = open('person_detect_model.tflite', 'rb')
  39. person_detection_model = bytearray(300568)
  40. person_detection_model_file.readinto(person_detection_model)
  41. person_detection_model_file.close()
  42. # 创建解释器
  43. interp = microlite.interpreter(person_detection_model, 136*1024, input_callback, output_callback)
  44. # 从摄像头持续读取图像并将其传递给模型进行推理
  45. while True:
  46.     test_image = camera.capture()
  47.     interp.invoke()
  48.     time.sleep(1)  # 增加 1 秒的延迟,避免检测过于频繁
  49. camera.deinit()
复制代码
6.效果
把脸凑到摄像头前识别不到人,当人出现在摄像头里是才会识别到。基于micropython实现人类识别图1


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail