猪百岁 发表于 2021-2-26 18:34:04

【MaixPy 教程】用mixly玩转K210——人脸追踪

## 【MaixPy 教程】用mixly玩转K210——人脸追踪



## 准备阶段
### 所需要材料



1. 需要一个舵机云台(可以3D打印mini 舵机云台或者在某宝买一个)
2. MaixPy dock 一个
3. 9克舵机(sg90)两个
4. 杜邦线若干
### 云台组装
1. 组装X轴舵机(ps:控制摄像头水平方面的移动)



2. 组装y轴方面的舵机(ps:可以控制摄像头竖直方向的移动)

![](https://img-blog.csdnimg.cn/20200428115948129.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

3. 使用 公对母 杜邦线连接 舵机信号线 与dock
>舵机线定义为:红色:5V;褐色:GND;黄色:信号线。

我们将底部舵机的信号线连接至dock的16脚,第二个舵机的信号线连接至17脚。(如果连接反,后面的动作会异常,交换两根线即可【mixly中自己重新写入了io-17、io-16】)

![](https://img-blog.csdnimg.cn/20200428140842435.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

## 程序编写
### 刷入人脸检测模型

人脸模型可以在maixhub下载或者百度网盘下载(链接: https://pan.baidu.com/s/1007krAq_oZspySxmnAVPkw 提取码: caeg 复制这段内容后打开百度网盘手机App,操作更方便哦)

![](https://img-blog.csdnimg.cn/20200428141835790.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

下載好模型,用kflash_gui把人脸检测模型刷入到dock的flash的地址:0x300000。(或者是将模型文件保存到TF卡中)

![](https://img-blog.csdnimg.cn/20200428142221426.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

## 人脸检测
1、首先将我们的摄像头、显示屏、和KPU进行初始化后,获取摄像头的图片,用yolo2运行网络积木块,获取图像的信息,返回一个字典(我们需要用到的是"x",“y”,“w”,"h"等键所对应的值)。具体操作如下:

![](https://imgkr2.cn-bj.ufileos.com/fbfa0081-0058-4315-92d1-28dda180976b.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=AU83D4CXSN4HPna0rCarq8DSn7w%253D&Expires=1614412062)

2、标记人脸部分,在机器视觉指令中找到绘制矩形和绘制十字积木块、用矩形解析积木块将code中i数据解析后的"x","y","w","h"显示在屏幕上,具体操作如下:

![](https://img-blog.csdnimg.cn/20200428145543467.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

![](https://img-blog.csdnimg.cn/20200428145903564.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

## 人脸追踪

首先我们需要定义两个定时器和初始化兩個舵机

```
PWM: 脉宽调制模块, 硬件支持的PWM, 可以指定任意引脚(0到47引脚)
每个 PWM 依赖于一个定时器, 即当定时器与 PWM 功能绑定后, 不能作为普通定时器使用了。
因为有 3 个定时器, 每个定时器有 4 个通道, 即最大可以同时产生 12 路 PWM 波形
```

![](https://img-blog.csdnimg.cn/20200428150202298.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

我们的摄像头的帧大小是320 * 240,我们需要对检测的摄像头检测到不同位置的脸,采取不同的操作:看下图:

![](https://img-blog.csdnimg.cn/20200428151856879.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

如果人脸的中心x位置小于150,让水平舵机 变量X轴 = X轴 -2,如果人脸中心的x位置大于170,让水平舵机 变量Y轴 = Y轴 + 2.如果人脸中心的Y位置小于110,让水平舵机 变量Y轴 = Y轴 +2,如果人脸中心的Y位置大于130,让水平舵机 变量Y轴 = Y轴 - 2,再结合舵机角度的范围进行判断。具体程序如下:

![](https://img-blog.csdnimg.cn/202004281524155.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RvbnljYXJzb24=,size_16,color_FFFFFF,t_70#pic_center)

**注:**
1、由于人距离摄像的远近会改变人脸中心,x,y的变化,为了更好的演示效果,我将检测到的人脸大小規定在一定的范围内。
2、可以加入PID算法,让舵机转动更加精准

## 程序演示
https://player.youku.com/embed/XNDY1MjI5MTMxNg==

原文地址:https://blog.csdn.net/tonycarson/article/details/105808550?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161431257516780274159398%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161431257516780274159398&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~hot_rank-13-105808550.pc_search_result_hbase_insert&utm_term=maixpy
页: [1]
查看完整版本: 【MaixPy 教程】用mixly玩转K210——人脸追踪