基于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的机器学习(手势识别) 的相关文章

  • python导入模块时如何避免一直写模块名?

    我用math最近模块很多 我不想写math sqrt x and math sin x 每时每刻 我想缩短它并写sqrt x and sin x How 对于较长的模块名称 通常会缩短它们 例如 import numpy as np 然后您
  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • KFold 和 ShuffleSplit CV 有什么区别?

    看起来 KFold 每次迭代对象时都会生成相同的值 而 Shuffle Split 每次都会生成不同的索引 它是否正确 如果是这样 其中一个相对于另一个有什么用处 cv cross validation KFold 10 n folds 2
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • Django - 电子邮件发送两次

    每当我使用如下所示的电子邮件设置从views py调用下面的方法时 电子邮件的两份副本都会发送给收件人 并且我收到如下所示的错误 def sendEmailBasic request msg EmailMessage Request Cal
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 如何在 Python 中从 HTML 页面中提取 URL [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须用Python 编写一个网络爬
  • 求解不等式系统时“多项式错误:仅允许使用单变量多项式”

    我想找到以下两个常数的区间cons1 and cons2我写了下面的代码 from sympy import Poly from sympy import Abs from sympy solvers inequalities import
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

    我已经研究 asyncio 模块 功能几天了 因为我想将它用于我的应用程序的 IO 绑定部分 并且我认为我现在对它的工作原理有一个合理的理解 或者在至少我认为我已经理解了以下内容 任一时刻 任一线程中只能运行一个异步事件循环 一旦一切都设置
  • 如何正确消除字典中的元素直到只剩下一个字符串

    我真的需要这方面的帮助 def get winner dict winner new dict for winner in dict winner first letter winner 0 value dict winner winner
  • 在Python中从日期时间中减去秒

    我有一个 int 变量 它实际上是秒 让我们调用这个秒数X 我需要得到当前日期和时间 以日期时间格式 减去的结果X秒 Example If X是 65 当前日期是2014 06 03 15 45 00 那么我需要得到结果2014 06 03
  • 为什么用字符串和时间增量转置 DataFrame 会转换数据类型?

    这种行为对我来说似乎很奇怪 id列 字符串 在转置后转换为时间戳df如果另一列是时间增量 import pandas as pd df pd DataFrame id 00115 01222 32333 val 12 14 170 df v

随机推荐

  • 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官方的几篇文章 我将对我