一、硬件介绍
(1)主芯片STM32F407VET6
1.支持单精度浮点运算,芯片硬件资源包括192KB内部RAM,512KB-1MB的FLASH(具体看芯片型号),采用分散内存架构128KB内部SRAM,64KB高速RAM,CPU可以直接访问此部分的内存(访问速度为CPU主频速度),因此通常采用内部SRAM图像采集和显示,采用CCM-RAM进行图像处理和识别,能充分发挥M4内核的优势.
2.具有DCMI数字图像采集接口,直接采集并口摄像头图像并使用DMA传输,包含USB,PWM,USRT,SPI,I2C,CAN等众多外设,还可以采用FMC驱动并口屏和扩展外部SRAM,采用SPI、QSPI外挂FLASH或者SD卡。
内部SRAM 起始地址 0x2000000 长度 0x20000 (128KB)
CCM RAM 起始地址 0x1000000 长度 0x10000 (64KB)
QVGA图像大小:RGB5656:320x240x2/1024=150KB
灰度图Y8: 320x240/1024=75KB
F407主芯片最大可以处理QVGA分辨率的图像,处理采用RGB格式时要采用分快内存进行处理,采用灰度图时可直接采用内部SRAM进行采集和处理。
(2)摄像头
OV7670、OV7725,OV2640等OV系列的摄像头都是OV公司的CMOS数字摄像头,硬件接口上都采用了并行时序,一般FPC接口的采用DVP标准,2.54接口的按照实际生产商接口顺序而定,引脚定义一般包含VSYNC(场信号)、HSYNC(行信号)、PCLK(像素时钟信号)、XCLK(外部时钟)、D0-D7数据信号、SCL/SDA(SCCB接口兼容I2C协议),PWDN(接GND),RST(拉高),一般STM32图像采集方法是:以外部时钟为例,将PA8配置成外部时钟输出,输出符合摄像头的采集时钟,采用SCCB接口配置好摄像头的寄存器(包括图像采集的时钟倍频分频,图像采集分辨率,图像采集的行和列的起始位置和结束位置,图像效果,3A,DSP,伽马曲线,镜头矫正等等),之后按照摄像头的时序进行图像采集(具体时序和寄存器配置查看对应摄像头的数据手册)。
(3)LCD液晶屏
ST7735,ST7789,ILI系列都有SPI驱动的液晶显示屏,最重要的是LCD的读写时序配置以及LCD参数配置,具体的可以查看对应的液晶IC数据手册
(4)舵机
舵机一般有SG90(塑料齿)、MG90S(金属齿)、MG995/996等,驱动方法都是采用PWM信号驱动。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。
以180度角度伺服为例,那么对应的控制关系:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
以168M主频的F407主芯片控制舵机,首先设置一个20ms周期的PWM波系统主频168M,
TIM外设时钟2分频//自动重装载值为2000,
分频系数840168/2/840=0.1M 0.1M/2000=50Hz 20ms周期的PWM波
0度----0.5/202000=50;
45度----1.0/20
2000=100;
90度----1.5/202000=150;
135度----2.0/20
2000=200;
180度----2.5/20*2000=250;

二、图像采集处理

1.硬件配置流程
(1)DCMI_GPIO配置DCMI配置
包含行HSYNC、场VSYNC、以及像素信号PCLK,以及数据信号,采用8bit模式进行采集,即每一个像素时钟传入DCMI_DR数据寄存器8位数据。将对应GPIO口配置成DCMI复用模式,并配置同步时钟,行场和像素同步,打开DCMI帧中断,配置中断优先级,值越小优先级越高。DMA配置,配置DMA通道为DCMI采集通道,配置外设地址、目标传输地址、存储器类型、增量模式、传输数据长度等参数,若采用双缓冲需配置DMA为双缓存模式,打开DMA传输完成中断,并配置中断优先级。
(2)摄像头配置时钟配置
采用外部时钟,即STM32F4的输出时钟给摄像头工作,基础时钟为12MHz,摄像头内会根据时钟寄存器配置为其工作的时钟。寄存器配置,采用i2c通讯配置摄像头寄存器使其能正常出图像。图像分辨率配置,通过修改摄像头输出画面的起始位置和结束位置,分别配置行和列的窗位置,使其能够输出目标大小的图像。
(3)PWM配置
将舵机控制口配置成PWM输出模式,并根据预分频系统和重加载值配置成20ms的PWM输出,根据舵机控制方法输出PWM进行舵机控制
2.中断处理流程
(1)DCMI行场中断采集流程
采用DMA从数据寄存器中传输数据,以word为单位(4字节)进行FIFO传递(先进先出),要求目标图像必须是RGB565格式,在DCMI中断处理函数中,每次行中断产生时改变DMA的传输地址(每次传输一行数据),在场中断中结束采集并将采集结束标志置1,在主函数中进行判断和处理。
(2)DCMI&DMA双缓存图像采集流程
采用DMA从数据寄存器中传输数据,以word为单位进行传输,采用双缓存(每个缓存设置成一行图像数据的长度,这样每次只传1行数据保证准确性)进行DMA传输,即一个缓存中数据传完,切换到另外一个缓存进行传输,形成乒乓操作。当一个缓存传输完会产生DMA中断,在DMA中断中将图像数据从这个缓存中复制到目标图像缓存(要根据DMA判断是否另外一个缓存正在使用才能复制),这样在帧中断到来时可以将整个图像全部传输到目标图像缓存中,这种方式可以采集RGB5656图像也可以直接采集灰度图(在行复制中只提取Y分量)。若数据是分块存储,则需要将数据复制到对应的缓存快中。DCMI中断处理函数当检测到DCMI中断,先关闭DCMI采集和DMA传输,进入图像显示和图像处理函数,当图像识别完成后,再打开DCMI和DMA继续进行图像采集。
3.主函数流程时钟配置
采用RCC时钟配置将系统主频配置成192MHz,具体方法是系统时钟源输入为HSE外部晶时钟12MHz,配置初始倍频器PLL为192MHz(内部计算方法是基础时钟/分频参数*倍频参数,具体需要看时钟配置过程)然后2分频给总线时钟,最后8分频给外设时钟,外设使用时会根据总线时钟分频得到自己的工作时钟。外设初始化,串口、GPIO、LCD、I2C、OV7670、TIME、DCMI、DMA初始化,初始化完成后开始图像采集。主循环,判断图像采集完成标志位,若采集完则进行图像处理,包括LCD显示、图像识别、输出信息、PID追踪等。
三、图像识别算法介绍
1.颜色识别追踪算法
(1)RGB转HSL颜色空间
本模块中采用的颜色识别在HSL(色度、饱和度、亮度),根据RGB转HSL颜色公式转换得到
(2)颜色阈值
判断在HSL颜色空间中,每种颜色有对应得颜色阈值范围,根据每种颜色的阈值范围可以判断图像中每个像素点的阈值是否满足条件颜色阈值可以输出每帧图像的中心点HSL值进行标定(或者计算区域范围的HSL值进行标定)
(3)目标位置计算
采用隔行隔列的方法加快目标位置计算,统计图像中所有满足颜色阈值的像素点坐标的和,再除以像素总数(注意是满足颜色阈值的像素点)就可以得到目标的中心点位置(X,Y)
(4)舵机PID计算
根据目标的实际中心点(X,Y)和期望的目标位置(centerX,centerY)图像中心,进行PID误差反馈计算,可以得到舵机需要输出的PWM值,这里直接采用定时器需要输出的比较值进行简化计算加快处理。
(5)控制追踪
在定时器中断中处理PWM输出值控制舵机运动,可以实时控制舵机位置进行目标追踪多目标的颜色识别可以采用同样的方法,区别只是在颜色阈值判断时增加不同名称的统计值,然后根据统计值计算不同目标的中心位置。
2.二维码识别
这里直接采用ATK的二维码识别库稍作修改,只支持英文和字符的二维码,不支持中文,不做具体原理介绍F4单板在不外扩内存的情况下可以实现240x240分辨率的二维码识别,具体方法可以查看代码中的实现过程
3.寻迹识别
(1)二值化处理
采用灰度均值或者中值进行二值化处理,处理后的图像为二值化矩阵,可以将整副图像分成几个ROI区域进行处理,一般从上到下分成3块区域,分别计算每块区域的线段位置;
(2)目标行统计
统计图像中每行所包含的白点(白线0xff)(或者黑线0x00)数目,判断行的上下边界作为目标的上下边界线
(3)目标列统计
统计图像中每列所包含的白点(白线0xff)(或者黑线0x00)数目,判断列的左右边界作为目标的左右边界线
(4)输出目标信息
采用边界对角线计算每段线段的中心位置和偏向角,根据线段位置即可计算小车前进和左右。

3.人体检测和追踪
(1)人体检测触发机制
采用红外热释电模块(GPIO设置为信号输入,检测热释电的信号触发)如果检测到高电平说明有人在设备范围内(1s钟读取一次,由于热释电模块会延时保持一段时间后关闭,导致低电平,所以只能做触发开关,不能作为人一直在设备区域内的凭据),有热释电模块(程序中置一个标志位)触发人体运动检测算法

(2)人体运动检测
采用隔帧差分的方法,每次在图像采集完成标志中计算采集的帧ID,每两帧复位一次帧ID,每次保存上一帧的图像到一个缓存中,在下一帧到来时进行帧差分(如果有环境干扰和噪声,在这次差分时已经去掉了很大一部分,因为两帧之间时间够短,可以认为环境变化不大),将差分后的图像再进行一次滤波,之后进行腐蚀膨胀腐蚀,进一步去除杂点,做完去噪之后进行二值化分割(采用OSTU自适应二值化算法,可以有效去除环境干扰和摄像头因素,之前有采用均值分割和固定阈值分割,最后发现这个效果比较好),将分割之后得到二值化矩阵

(3)人体区域检测和目标追踪
将二值化矩阵进行像素统计,超过目标像素阈值认为区域内有人体移动,则可进行移动跟踪(二值化时将白点作为人体有效目标),由于背景变化会存在一部分是背景带来的目标区域,因此下一步采用隔像素进行扫描和统计像素点区域内的白点坐标,最终可以计算出人体目标的中心点位置,根据舵机当前的位置和期望的位置(图像中心)进行PID计算,得到舵机需要移动的位置,转换成PWM值控制舵机追踪。

STM32F4图像识别相关推荐

  1. AI芯片加速图像识别

    AI芯片加速图像识别 AI chip accelerates image recognition 法国研究机构CEA-Leti和LIST在2020年VLSI研讨会上展示了一种概念验证芯片,该芯片集成了 ...

  2. 深度学习与传统图像识别

    深度学习与传统图像识别 概述 传统方法中特征提取主要依赖人工设计的提取器,需要有专业知识及复杂的调参过程,同时每个方法都是针对具体应用,泛化能力及鲁棒性较差. 深度学习主要是数据驱动进行特征提取,根据 ...

  3. 使用 Inception-v3,实现图像识别(Python、C++)

    目录 简介 使用 Python API 使用 C++ API 简介 对于我们的大脑来说,视觉识别似乎是一件特别简单的事.人类不费吹灰之力就可以分辨狮子和美洲虎.看懂路标或识别人脸.但对计算机而言,这些 ...

  4. 计算机视觉:Bag of words算法实现图像识别与搜索

    计算机视觉:bag of words算法实现图像识别与搜索 原理 综述 基础流程 结果与解析 数据集 结果与解析 总结 源代码 出现的错误及解决方案 原理 综述 Bag of words,顾名思义,就 ...

  5. v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...

    人工智能专题作品解析-- APPInventor安卓应用开发 <AI图像识别简单应用> 本程序使用APPInventor 2019桌面板. 一.思路 平时忙于工作和学习,很少涉猎其它领域的 ...

  6. 10分钟搭建你的第一个图像识别模型 | 附完整代码

    (图片由AI科技大本营付费下载自视觉中国) 作者 | Pulkit Sharma 译者 | 王威力 来源 | 数据派THU(ID:DatapiTHU) [导读]本文介绍了图像识别的深度学习模型的建立过 ...

  7. 阿里AI摘图像识别竞赛WebVision桂冠,万物识别准确率创世界纪录

    近日,第三届图像识别竞赛WebVision中,阿里AI击败了全世界150多支参赛队伍,获得冠军. WebVision由谷歌.美国卡耐基梅隆大学.苏黎世联邦理工大学等机构联合全球视觉技术领域顶级学术会议 ...

  8. 网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!

    编辑 | Jane 出品 | AI科技大本营 AI科技大本营给大家推荐了很多有意思.适合开发者们的工具,比如代码修复神器.帮小白快速分析 Error.PDF 翻译工具.变量命名神器等等. 今天,营长要 ...

  9. 全球首个开源图像识别系统上线!

    Datawhale开源 方向:图像识别,贡献者:百度团队 图像识别已经深深融入我们生活的方方面面,小到人脸解锁.支付.打卡.酒店入住,摄像头中的违规驾驶识别,网购明星同款时的以图搜图,大到自动驾驶汽车 ...

  10. 冠军方案分享:ICPR 2020大规模商品图像识别挑战赛冠军解读

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨新智元 编辑丨极市平台 赛题介绍 随着互联网技术和电子商务的迅 ...

最新文章

  1. 共话数据智能新经济,首届市北·GMIS 2019全球数据智能峰会隆重召开
  2. oracle增量备份如何恢复,【Oracle】增量备份和全库备份怎么恢复数据库
  3. node.js 针对不同的请求路径(url) 做出不同的响应
  4. 说说C#的async和await
  5. Python 入门到精通(—)初识Python
  6. 非主流图片制作工具_图片制作工具怎么用?有什么功能。
  7. 9.3. where 优化
  8. Linux重置mysql密码
  9. linux运行maya,Debian5.0下成功安装Maya2009!!
  10. loadrunner11压力测试设置
  11. 用Python爬取QQ音乐评论并制成词云图
  12. 在线心语日历批量生成工具
  13. 解决Laragon的nginx/apache重启后网站配置文件被修改的问题 - This file has been modified by another program - 文件auto.conf
  14. Excel 导入Access 不能找到表达式中引用的字段的解决方案
  15. CocosCreator中使用Animation制作动画
  16. python利用近似公式计算π_python如何利用公式计算π
  17. 自定义字体 Typeface ttf
  18. Deer-ui:一个简单高效的react组件库
  19. SSM学生选课管理系统项目中问题总结(未完待续)
  20. C语言中freopen函数

热门文章

  1. 洋桃开发板笔记(五 ) Flash闪存的使用
  2. Webgl开发输入框兼容问题及开发注意的问题
  3. C++实现二阶行列式的计算
  4. SQL 2008R2 误删除数据恢复方法(一)
  5. 32位程序使用超过4G的内存
  6. 人在烟火间(外两章)
  7. 两度转向,做社区团购,生鲜电商留给美团的时间并不多
  8. 如何在Word中快速制作组织结构图?没想到可以如此简单
  9. 传奇java手游_Java手机游戏神灯传奇代码JAVA游戏源码下载
  10. buuctf——(HDCTF2019)Maze