K210识别应用:基于yolov2模型的数字识别控制舵机

          注:此文章转载于本人的微信公众号:Young L童鞋                                   

                                       关注我,走进嵌入式江湖 

电赛期间,在实验室学长的引领下入手了一块K210,在很多比赛中,K210的作用是用来做视觉部分,当然也可以用到OpenMv,但是由于自带计算卷积人工神经网络加速器 KPU,对于一些要跑深度学习模型的任务,K210成了首选,而本次自己做的也是用  K210基于yolov2模型去做数字识别,通过串口发送给STM32C8T6实现控制舵机。

1.数据集的制作与模型训练

本次用一共识别了数字"3"、"4"、"5",每个数字先拍摄280张照片,然后用LabelImg来打标签(之前用的微软官方的VoTT,结果发现无法生成标签文件,这里强烈推荐LabelImg)然后用学长推荐的Mx yolov3进行神经网络本地训练。

K210识别应用:基于yolov2模型的数字识别控制舵机_第1张图片

   

     需要的图片                                            进行训练

训练出来后会生成一个tflite文件,用Mx_yolov3自带的模型转换软件转换为kmodel,至此,模型训练结束。

             

K210识别应用:基于yolov2模型的数字识别控制舵机_第2张图片

              转化后的Kmodel模型      转换模型      训练完后tflite文件      

2.K210上位机的实现  

k210有内置的flash 存储空间,但是,由于kmodel文件很大,内置Flash 太小,不推荐(之前队伍也买了块k210,后来莫名奇妙坏了,估计就是flash不够,烧录坏了)所以就直接用SD卡脱机运行。

        

K210识别应用:基于yolov2模型的数字识别控制舵机_第3张图片

这里是K210的代码,其它的不用说明,主要就是串口的传输:首先在代码3、4行按定义了7引脚和6引脚为串口Tx和Rx的两个端口,在5行定义串口传输,没有奇偶校验,波特率为115200,在10行定义clsses数组(注意里面的初始化一定要和标签文件里的顺序相同,不然在后面识别出后会出现传输出错的情况) 

最后在18行用串口传输出去(这里我在写在了Draw_rectangle语句的后面,这样才做到没识别到就不用传输,识别到并画框了才传输数据)

        

K210识别应用:基于yolov2模型的数字识别控制舵机_第4张图片

这里是用屏幕观察识别的情况,用于调试,可以看出能准确识别出数字,后面脱机的时候把屏幕拆了,因为没找到合适的固定地方,转动时容易把屏幕的线扯坏

   K210识别应用:基于yolov2模型的数字识别控制舵机_第5张图片

这里用的是Xcom查看串口传输情况,结合上一张图,可以看出K210识别出了数字"3",并且通过串口准确地传输了出来。

3.C8T6下位机的实现

下位机的编写用的是Cubemx HAl库 写的程序,底层配置是图形式编程,很简单 ,用了定时器3的通道1(虽然使能了通道2但一直没用)和串口引脚,在下位机接收数据时,用的时中断处理,这里之前一直遇到一个坑,就是在写中断回调函数时,我直接在中断缓冲区里面去读取数据,后来发现一直只能触发一次中断,识别一次就不能识别了,后来才发现不能这么做,在收取中断数据后,要进行一次数据的转存才可以。

              

K210识别应用:基于yolov2模型的数字识别控制舵机_第6张图片

  

                        cubemx 的配置

                      

K210识别应用:基于yolov2模型的数字识别控制舵机_第7张图片

                                                 C8T6代码

4.演示视频   

                                                               

VID20220807220843

你可能感兴趣的:(单片机)