基于STM32的机器学习(手势识别)

2023-11-02

第一次写博客,希望能给研究单片机AI的同仁一个好的启示。如有不当,多多指正。

STM32自从2019年开始发布AI库以来,网络上关于怎么移植到单片机的资料少得可怜,能找到的也仅仅是新建工程的博客,对我有较大启示的是ST官方的几篇文章。我将对我有启示的文章贴出来供大家参考。

https://blog.csdn.net/qingelife/article/details/78429508?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8.nonecase

https://blog.csdn.net/qq_39505991/article/details/95176720?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-8

http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619025&page=1

https://blog.csdn.net/bigmaxPP/article/details/104500092/

 

1、首先,简单描述下我要做的项目—基于单片机的手势识别。

所用到的传感器是10G的雷达芯片,芯片出来的是中频信号,需要根据这些中频信号做手势识别。

单片机模拟有无目标,当没有目标时,单片机模拟IF输出中频信号,雷达芯片输出LO(本振信号)

,混频器的作用是将LO+IF=RF。 得到的RF输出到芯片的RX接收端口。 芯片会将这个信号再解调出来作为最后的模拟信号输出到单片机。

前期的工作接触过单片机的来说应该都不难,采集中频信号,AD转换。

这些都不难。但重要是对这些信号要进一步处理,包括去交流,求平均值,FFT(加窗),一系列的转换目的就是将时域的信号转换到频域。曾经看过一篇经典的文章来描述时域和频域,时域就是随时间的变化状态的变化,而频域就是从侧面看待这个问题,一切都是静止的,就像每个人的人生看似随时间不断变化,每天充满变数,但从频域的角度来看,侧面就好像很大的机械装置,每个人的人生早已安排好了。很多时域看不出任何特征的信号在频域一目了然。

2、频域信号处理好了就来到了我们的重头戏了——机器学习(AI)

首先神经网络的生成我用的是Python,Python生成神经网络现在已经很成熟了,网上的例程一大堆,我就不多说了,训练好神经网络导出 .h5文件,你的工作就完成一半了。

接下来就用到官方的STM32cubemx,用这个工具生成KEIL5或者其他IDE的工程,接下来的移植就是重中之重了。再移植之前你也考虑好你的单片机ROM和RAM以及主频速度。根据我的经验ROM 512k,RAM 100k,主频100M可以满足初步的需要,STM32F411CEU6是我目前看到性价比最高的。下面的流程是STM32cubummx生成工程的流程,大家可以参考。

 

导入我们的模型计算,点击Analyze,CubeMX会提示我们哪些MCU型号能支持我们使用,当然啦,你也可以直接选STM32F411CEU6,模型官方有手势识别的.h5文件,可以去下载;

 

 

3、单片机移植过程有很多需要注意的地方,有时间我会专门写一篇博客。我将单片机Keil中AI部分贴出来供大家参考。

FFT相关处理

AI处理

 主函数部分

最终串口 输出效果

不同的手势outdata输出不同的概率,我将概率Round的最终输出结果。至于你想用手势控制外部任何设备就很容易了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32的机器学习(手势识别) 的相关文章

  • 相当于 java PBKDF2WithHmacSHA1 的 Python

    我的任务是构建一个 API 的使用者 该 API 需要带有 UNIX 时间种子值的加密令牌 我看到的示例是使用我不熟悉的 Java 实现的 在阅读文档和其他堆栈文章后一直无法找到解决方案 使用javax crypto SecretKey j
  • Python 3 中的递归搜索 JSON/DICT

    我在 Python 3 中实现了一些 API 这些 API 允许我根据班级代码接收有关学校的信息 但我想知道如何通过类代码获取信息 例子 我输入代码GF528S我希望程序告诉我班级 3C INF 地址 Address 1 Milan 如果可
  • 使用 Python 或 Django 处理收到的电子邮件?

    我了解如何通过 Django 发送电子邮件 但我希望用户能够回复电子邮件 如果他们发送 以及我收到 的电子邮件包含与某个字符串匹配的消息 我将调用一个函数 我已经做了一些谷歌搜索 但除了自己制作脚本之外似乎没有什么好的解决方案 如果有什么东
  • 如何计算总和的平方和?

    我有一笔款项需要加快处理速度 在一种情况下是 S x y k l Fu ku Fv lv Fx kx Fy ly 另一种情况是 S x y S k l Fu ku Fv lv Fx kx Fy ly 2 注意 S indices 是这些索引
  • Python3 http.server:将日志保存到文件中

    我使用Python3 6编写了一个简单的HTTP服务器来重定向所有请求 我写的文件可以找到here https github com kmahyyg learn py3 blob master antiscanhttp py 我可以在 Ub
  • Spark问题中读取大文件 - python

    我已经使用 python 在本地安装了 Spark 并在运行以下代码时 data sc textFile C Users xxxx Desktop train csv data first 我收到以下错误 Py4JJavaError Tra
  • 通过 SSH 的 Pygame 不注册击键(Raspberry Pi 3)

    所以我得到了 raspi 3 和简单的 8x8 LED 矩阵 在玩了一些之后 我决定用 pygame 的事件制作一个简单的蛇游戏 显示在该矩阵上 我之前没有 pygame 的经验 除了 LED 矩阵之外 没有连接任何屏幕 显示器 所以最初的
  • Scrapy 未通过请求回调从项目中的已抓取链接返回附加信息

    基本上 下面的代码会抓取表格的前 5 项 其中一个字段是另一个 href 单击该 href 会提供更多信息 我想收集这些信息并将其添加到原始项目中 所以parse应该将半填充的项目传递给parse next page然后刮掉下一位并返回完成
  • Scrapy 仅抓取每个页面的第一个结果

    我目前正在尝试运行以下代码 但它只保留每个页面的第一个结果 知道可能是什么问题吗 from scrapy contrib spiders import CrawlSpider Rule from scrapy contrib linkext
  • python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件

    示例代码 import subprocess subprocess call java jar temp jar 如何在上面的命令中指定JAVA OPTS 当我使用上述命令时 我收到 java lang OutOfMemoryError 无
  • Flask-Mail - 基于 Flask-Cookiecutter 异步发送电子邮件

    我的烧瓶项目基于烧瓶饼干切割机 https github com sloria cookiecutter flask我需要异步发送电子邮件 发送电子邮件的功能由以下配置米格尔的教程 https blog miguelgrinberg com
  • 如何从分组数据创建直方图

    我正在尝试根据 pandas 中的分组数据创建直方图 到目前为止 我已经能够创建标准线图 但我不知道如何做同样的事情来获取直方图 条形图 我想获得泰坦尼克号事故中幸存者和未幸存者的 2 个年龄直方图 看看年龄分布是否存在差异 来源数据 ht
  • 加载 IPython 笔记本时出错

    一旦我用 Jupyter 打开笔记本文件 它要求我转换文件 我就再也无法在标准 IPython 笔记本中打开它了 我收到以下错误 Error loading notebook Bad Request 2014 12 21 04 13 03
  • 如何在 VS Code 宏中将焦点返回到编辑器,将 Python 文本发送到调试控制台?

    我尝试按键绑定宏以将 python 文本发送到调试控制台并将焦点返回到 Visual Studio Code 中的编辑器 这是我尝试过的 安装了vscode python https marketplace visualstudio com
  • 为什么计算大整数阶乘的“分而治之”方法如此快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python Pandas DateOffset 使用另一列中的值

    我以为这会很容易 但下面的内容并不适合我想要的 只是尝试通过使用另一列中的值将天数添加到预先存在的日期时间列来计算新的日期列 我下面的 偏移 列只有 1 位数字 df new date df orig date apply lambda x
  • Python:Scrapy返回元素后面的所有html,而不仅仅是元素的html

    我遇到了 Scrapy 行为异常的问题 几个月前我编写了一个简单的函数 它返回给定 xpath 处的项目列表 def get html response path sel Selector text response page source
  • 预训练 inception v3 模型的层名称(tensorflow)[重复]

    这个问题在这里已经有答案了 任务是获取a的每层输出预训练的 cnn inceptionv3 https www tensorflow org versions master tutorials image recognition index
  • 在 python 中使用 ftplib 时

    这是导致错误的相关代码 ftp ftplib FTP server ftp login r user r pass change directories to the incoming folder ftp cwd incoming fil
  • 重定向到破折号中的 url

    我正在使用 dash 构建一个仪表板 每当单击特定数据点时 我都会创建一个唯一的 url 如何将用户重定向到此创建的 url 我正在使用下面给出的代码 每当有人单击任何数据点时 单击事件就会触发并执行回调函数 app layout html

随机推荐

  • H - Nine Packs Kattis - ninepacks

    题目链接 题意就是在a数组中找出x个数 b数组中找出y个数 且x个数之和等于y个数之和 本想着用暴力的写法 但是出来之后不对 因为此题并不是连续的 还可以跳着取数 下面是WA的代码 include
  • 基于Web的网络在线考试系统

    基于Web的网络在线考试系统 一 系统简介 本系统是一种基于Web的网络在线考试系统 各个模块主要从JSP Servlet JDBC JavaBean四部分技术角度出发搭建框架 其中Servlet是运行在服务器端的程序 被Web服务器 To
  • YARN 状态机的原理和使用

    有了异步处理 为什么还需要状态机 可以保存对象当前的状态 当接收到一个事件后 可以根据不同的状态 可以方便的决定怎么处理 如接收到用户发送的KILL事件时 当Job的状态为正在初始化时 只要把启动的进程kill就可以 当Job的状态为正在运
  • 快手app sig3 42位、48位参数分析

    免责任声明 任何可操作性的内容与本文无关 文章内容仅供参考学习 如有侵权 损害贵公司利益 请联系作者 会立刻马上进行删除 在抓包的时候 会发现有几个非常重要的参数 sig 和 sig3 然后sig参数的计算逻辑大概就是对请求url 后面的参
  • 1:1病例对照匹配的Python实现步骤详解

    这周接到一个活 因为某个课题研究需要 须把脑卒中患者的名单和一份健康人 对照 名单按照 性别相同 乡镇地址相同 年龄相差3岁以内 作为匹配条件进行1 1的匹配 现将思考及实现的过程逐一记录并在此分享 希望能给大家有所借鉴与帮助 拿到这份数据
  • VM-基本功能

    VMware专题 介绍 VM 基本功能 一 VMware Tools基本特性 二 快照功能 三 Template技术介绍 1 用Template技术批量部署虚拟机 先创建自定义规范 2 部署虚拟机 四 创建虚拟机参数说明 五 虚拟机内存技术
  • [记录]GAN学习之路[持续更新]

    目录 一 原始GAN 二 WGAN GP 三 pix2pix 四 CycleGAN 一 原始GAN 通俗解释 GAN由生成器 Generator 和判别器 Discriminator 组成 生成器负责生成假的图片来骗过判别器 而判别器需要不
  • mesh 模拟加入噪音数据,并根据每个三角形集群的数量进行去噪处理(附open3d python 代码)

    本篇文章对三角网格模型进行分割和去噪处理 其中包括以下主要步骤 1 使用Open3D库中的 o3d io read triangle mesh 函数读取PLY格式的三角网格模型 2 生成小立方体作为噪声 并将其添加到原始的三角网格模型中 3
  • response.sendRedirect(url)中的url问题

    servlet实现跳转页面时 对于重定向response sendRedirect url 对于参数url 一直引用的是本地上的html而且使用的是绝对路径 但是这个不能实现重定向 后来了解到这个url应该是指向在任何服务器上的项目的url
  • 【Tensorflow2.0】7、全流程model.fit模型训练方法

    文章目录 第一种方法直接用keras的fit方法 以fashion mnist为例 配置超参数 选择指定显卡及自动调用显存 准备数据 使用tf data来准备训练集和测试集 准备模型定义 开始定义模型 用functional方法 打印模型结
  • SoapUI 5.2.1测试接口

    俗话说 好记性不如烂笔头 今天我们就来介绍下SopaUI如何测试接口 首先我们新建一个WebService public class WebService System Web Services WebService WebMethod p
  • 双指针实现链表反转

    题目 定义一个函数 输入一个链表的头节点 反转该链表并输出反转后链表的头节点 示例 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL 输出 5 gt 4 gt 3 gt 2 gt 1 gt NULL 代码实现 Definit
  • 华为OD机试 -查找两个字符串a,b中的最长公共子串(C++ & Java & JS & Python)

    描述 查找两个字符串a b中的最长公共子串 若有多个 输出在较短串中最先出现的那个 注 子串的定义 将一个字符串删去前缀和后缀 也可以不删 形成的字符串 请和 子序列 的概念分开 数据范围 字符串长度1 300 1 length 300 进
  • hadoop 2.6遇到的DataNode无法启动问题

    一 问题描述 当我们多次格式化文件系统 hadoop namenode format 时 会出现DataNode无法启动 多次启动中发现有NameNode节点 并没有DataNode节点 如图所示 二 查看问题 回头看启动过程 注意如下 l
  • php在远程获取图片生成文件为空文件

    之前遇到一个很坑爹的问题 就是去获取远程图片的文件流生成本地文件时 发现生成的是空白文件 说明只是创建了文件 没把文件流写进去 之前一直以为是网站设置了权限什么的东西 最后百度了下发现了原来是php ini的openssl没开启 解决方法就
  • 由于电脑出现msvcr110.dll提示错误的解决方法

    最近 我在尝试运行一款新的软件时 突然遇到了一个错误提示 提示说缺少msvcr110 dll文件 导致软件无法启动 在使用电脑过程中 我们常常会遇到一些系统文件丢失的问题 其中 msvcr110 dll是Windows操作系统中的一个重要的
  • 读书笔记-视觉综述翻译_数据集介绍

    4 数据集介绍 4 1 计算机视觉 4 1 1 目标识别 诸如ImageNet 160 PASCAL VOC和Microsoft COCO之类的大规模公开可用数据集的出现 推动了新颖的计算机视觉算法 特别是深度学习技术 的发展 用于对象等识
  • 解决c++错误:redefinition of class xxx

    错误类型 redefinition of class xxx 错误点 一般出现错误 redefinition of class xxx 同时也会有错误 previous definition of class xxx 解决方法 一般来说出错
  • 【机器学习实战】7、利用 AdaBoost 元算法提高分类性能

    文章目录 7 1 集成方法 7 1 1 bagging 自举汇聚法 7 1 2 随机森林 Random Forest RF 7 1 3 boosting 提升方法 7 1 4 Bagging Boosting二者之间的区别 7 1 5 总结
  • 基于STM32的机器学习(手势识别)

    第一次写博客 希望能给研究单片机AI的同仁一个好的启示 如有不当 多多指正 STM32自从2019年开始发布AI库以来 网络上关于怎么移植到单片机的资料少得可怜 能找到的也仅仅是新建工程的博客 对我有较大启示的是ST官方的几篇文章 我将对我