微光_cPtBzP · 2023年10月06日 · 四川

【聆思CSK6 LNN工具体验】面部解锁的简单实现

背景

聆思CSK6 提供一套关于面部识别(人脸边界框、人脸标定点、头部姿态角度、人脸识别特征等功能)的sdk,基于此基础进行面部解锁应用的简单开发。

实现原理

拉取代码

lisa zep create --from-git [https://cloud.listenai.com/zephyr/applications/app_algo_fd_sample_for_csk6.git](https://cloud.listenai.com/zephyr/applications/app_algo_fd_sample_for_csk6.git)

修改配置

打开PC端图像预览功能
打开 项目的根目录下找到 的 prj.conf 文件,将 CONFIG_WEBUSB=n 改为CONFIG_WEBUSB=y

编译代码
lisa zep build -b csk6011a_nano

此处出现过一次编译后的固件电脑报摄像头错误,此时通过运行以下命令重新编译后烧录修复:
lisa zep update
lisa zep build -b csk6001a_nano -p

烧录固件

lisa zep flash

烧录资源文件

板卡在我电脑上识别到的是/dev/ttyACM0,因此命令中使用的是/dev/ttyACM0

lisa zep exec cskburn -s /dev/ttyACM0 -C 6 0x400000 ./resource/cp.bin -b 748800

lisa zep exec cskburn -s /dev/ttyACM0 -C 6 0x500000 ./resource/res.bin -b 748800

电脑下载摄像头查看工具

git clone https://cloud.listenai.com/zephyr/applications/csk_view_finder_spd.git

安装驱动

在windows环境中需要安装相对应的驱动来进行识别和使用:
https://tool.listenai.com/csk-view-finder-spd/driver.html
进入该网址,按照示意进行安装。

void compare_start()
{
if (fr.get_new_feature) {
uint16_t cnt = 0;
uint8_t done = 0;
fr.get_new_feature = false;

fd_cmd_compare_feature_data_t data;
fd_cmd_compare_feature_result_t result;
data.feature_dim = FD_MAX_FEATURE_DIMS;
data.feature_src = fr.feature_nvs;
data.feature_dst = fr.feature;

// 获取存储的数据数量
storage_get_data_cnt(&cnt);
// 遍历存储的数据
for (uint32_t i = 0; i < cnt; i++) {

// 读取存储的数据
storage_read_data(i, (void *)fr.feature_nvs, sizeof(fr.feature));
// 比较人脸特征
ret = fd_control(fr.fd, FD_CMD_COMPARE_FEATURE, &data, &result);
if (ret != 0) {
LOG_ERR("检测未通过,或建议重新录入");
}

// 如果相似度大于0.95,设置done为1

if (result.score > 0.95) {
done = 1;
}

}
// 如果done为1,发送成功消息;否则发送失败消息
if (done) {

webusb_send_message("通过检测");

} else {

webusb_send_message("检测未通过,或建议重新录入");

}
} else {
// 未检测到人脸特征,发送失败消息并打印日志
webusb_send_message("检测未通过,或建议重新录入");
LOG_INF("未检测到人脸");
}
}

void add_new()
{
// 如果检测到新的人脸特征
if (fr.get_new_feature) {
uint16_t cnt = 0;
fr.get_new_feature = false;
char *txt = csk_malloc(64);

// 将新的人脸特征写入存储区
storage_write((void *)fr.feature, sizeof(fr.feature));

// 获取存储的数据数量
storage_get_data_cnt(&cnt);
// 格式化消息并发送成功消息
sprintf(txt, "面部数据注册成功, 数量:%d", cnt);
webusb_send_message(txt);
csk_free(txt);
LOG_INF("face feature save success"); // 打印日志
} else {
webusb_send_message("face_recognize: fail"); // 发送消息
LOG_INF("not detected face feature"); // 打印日志
}
}

效果验证

原有代码已经有对应逻辑代码,只需要对原有代码进行简单的修改和增加打印语句来完成功能:
如果面部识别结果不存在对应的面部信息则提示不存在对应面部信息,可在录入后重新识别,如果存在对因面部信息则提示通过识别
实际修改代码不多。

实现效果

录入面部信息后,进行验证返回验证成功.使用查看工具(使用ie浏览器打开),进行注册和对比:
 title=
从日志可看出,注册和比对成功,可通过日志打印处进行引脚io控制器件或者通过传输协议控制远端器件进行控制,来达到面部解锁的功能使用。
另一方面,对于面部的三轴数据还可用于颈椎病、坐姿等的监控和警报,对于打工人的日常办公健康是很有好处的。

遇到问题

使用firefox和360浏览器无法使用预览和烧录

使用的是ie浏览器进行操作

在linux环境下烧录和预览工具也无法使用

建议

本来想对关键点进行人脸部的情绪判断,发现很多部分接口没有更详细的介绍或者就没有介绍,如果能把一些数据的必要接口全部给出来,开发就会更自由方便了。再一个是如果预览工具和网页烧录工具在linux环境也能使用就更方便了。

推荐阅读
关注数
5175
内容数
100
聆思科技官方专栏,专注AIOT芯片,持续分享有趣的解决方案。商务合作微信:listenai-csk 技术交流QQ群:825206462
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息