一、人脸识别
1.获取机器码
人脸识别就是在人脸检测的基础上,除了检测人脸的位置外,还可以检测出这个人是谁(需要先对准人按按钮学习)。
先到 maixhub 按照说明下载模型, 获得模型smodel, 就是 加密版本的kmodel。下载后缀为.smodel模型需要用到机器码。机器码是一机一码的一种加密方式,用于模型文件的加密。如果使用别的机器码去加密或者下载以 smodel 为文件后缀的模型文件,开发板是无法使用该模型文件的。将 key_gen.bin 这个固件通过 Kflash 烧录到开发板上。烧录这个机器码固件之后,开发板是处于一个不能使用的状态(就是什么功能都不能使用,包括IDE也无法连接开发板),上电屏幕只会变成一个白屏。
获取机器码的步骤:https://bbs.sipeed.com/thread/426
使用串口调试助手。波特率为115200,按键复位键,看到机器码,将其复制下来,保存后面会用到。
2.下载并烧录.smodel文件和固件
- 下载 固件 和 .smodel 文件
进入网站,输入自己的机器码,下载三个
.smodel
模型文件,对应地址分别是
0x300000, 0x400000, 0x500000
,文件以自己的机器码命名(注意一定要用自己开发板的机器码下载,否则开发板识别不了加密的
.smodel
文件)
注意:这里有个坑,我用搜狗浏览器下载每次只下一个文件,找了好久的问题,最后用谷歌浏览器下载成功,真坑人啊
到下载站下载并用 kflash 烧录V4模型的固件支持固件,将第一个烧录进开发板,地址为0x000000,如果要使用ide注意要下载支持ide的固件,不然是连接不上ide的,
maixpy_v0.6.2_32_gf1cc361a5_openmv_kmodel_v4_with_ide_support.bin
- 烧录 固件 和 .smodel 文件
将 三个
.smodel
文件烧录到开发板,注意要一个一个烧录,地址不能错
3.断电存储 SD卡
增加了讲按键录入的信息存储到sd卡,断电不丢失。
但是需要在代码中预先定义好名字信息,录入信息的时候,需要按照代码中定义的顺序录入。
开发板上电先判断SD卡是否存在txt文件,若存在文件则读取名称信息,并匹配识别到的人脸
#=================内存卡===================#
feature_file_exists =0for v in os.ilistdir('/sd'):#to check key directorys or files in sd card.sd card should be formated to fat32if v[0]=='features.txt'and v[1]==0x8000:#0x8000 is file
feature_file_exists =1#================内存卡读写操作================#
record_ftr=[]#空列表 用于存储当前196维特征
record_ftrs=[]#空列表 用于存储按键记录下人脸特征, 可以将特征以txt等文件形式保存到sd卡后,读取到此列表,即可实现人脸断电存储。
names =['zhang san','member.2','member.3','member.4','member.5','member.6','member.7','member.8','member.9','member.10']# 人名标签,与上面列表特征值一一对应。
record =[]defsave_feature(feat):withopen('/sd/features.txt','a')as f:
record =ubinascii.b2a_base64(feat)
f.write(record)if(feature_file_exists):print("start")withopen('/sd/features.txt','rb')as f:
s = f.readlines()print(len(s))for line in s:
record_ftrs.append(bytearray(ubinascii.a2b_base64(line)))
4、报错解决:
报错:
only support kmodel V3/V4 now
MaixPy AI 硬件加速基本知识
基本图像变换 和 常用操作
原因:模型未烧录或者烧录地址错误,重新烧录下模型文件
程序理解:
总共用了三个模型, 分别是:
人脸检测模型, 这和前面的人脸检测使用的是同一个模型, 即找到人脸
人脸关键点检测模型,从前面找到的人脸中找到人脸的 眼睛 鼻子 和 嘴巴 的位置
人脸特征提取模型, 从一张人脸图片中得出一个特征值
步骤如下:
1、检测到人脸
2、裁出人脸,找到人脸的眼睛鼻子嘴巴, 这里裁成了128x128的图
3、把人脸图中的脸旋转到标准位置
4、用特征提取模型提取出人脸的特征值
1、加载各种模型
2、运行人脸检测模型,在图片中找到人脸位置并框出人脸
3、将裁出的人脸图片转换成kpu接收的格式
4、运行人脸5点关键点模型,获取到左眼、右眼、鼻子、左嘴角、右嘴角的位置
5、对原始图片人脸图片进行仿射变换,变换为正脸图像,将正脸图像转为kpu格式
6、使用人脸196维特征值模型计算正脸图片的196维特征值,计算得到最终的人脸特征feature
再将得到的人脸特征与之前保存过的人脸特征进行对比得到一组分数,选择其中最大的一个分数,且该分数超过85分(可以自己设置)就认为识别出该人,并根据对应下标从names列表中得到该人的姓名。
参考:
https://www.maixhub.com/modelInfo?modelId=14
https://blog.csdn.net/HuangChen666/article/details/113995079
https://wiki.sipeed.com/soft/maixpy/zh/course/ai/image/face_recognization.html
版权归原作者 Ethernet_Comm 所有, 如有侵权,请联系我们删除。