背景
参见LinkSVP例子之一背景介绍。
LinkSVP简介
参见LinkSVP例子之一LinkSVP
介绍。
FaceRecognition人脸识别示例
该示例程序演示了在3519A、3559A平台上如何利用NNIE性能进行人脸识别。
该项目包括主程序、网页、模型数据、人脸数据、rpc通信等环节,是一个完整的人脸识别工程示例。
准备工作
- 参照用户手册搭建开发环境、编译LinkSVP工程、配置网络启动参数。
- 连接好镜头、对焦,放置到适合采集人脸的位置
- 将评估板的HDMI-OUT接显示器(支持1080P即可,程序默认输出1080P60)。
- 上电,运行Face目录
- 运行FaceDetectRecognition程序
- 打开浏览器,访问开发板ip
- 登陆,账号密码均为admin
- 进入高级功能>人脸识别
- 采集阶段需要保持画面中只有一个人脸,进行多角度采集
- 每个角度取不同的命名,比如正脸XX-0,左转15度XX-1,抬头15度XX-2之类的
- 随后可以在界面上看到识别结果
- 识别阶段可以多人,但是需要距离镜头较近才能识别
运行结果
完整工程
完整工程参见:https://gitee.com/LinkPi/LinkSVP/tree/master/FaceRecognition
主要源代码
main.cpp
#include <QCoreApplication>
#include "Link.h"
#include "Worker.h"
#include "maiaXmlRpcServer.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Link::init();
Worker worker;
worker.init();
MaiaXmlRpcServer *rpcServer;
rpcServer = new MaiaXmlRpcServer(8080);
rpcServer->addMethod("addFace", &worker, "addFace");
rpcServer->addMethod("faceBox", &worker, "faceBox");
return a.exec();
}
Worker.cpp
#include "Worker.h"
Worker::Worker(QObject *parent) : QObject(parent)
{
}
void Worker::init()
{
input=Link::create("InputIsp");
input->start();
detect=Link::create("FaceDetect");
detect->start();
recognition=Link::create("FaceRecognition");
recognition->start();
crop=Link::create("Crop");
crop->start();
encV=Link::create("EncodeV");
QVariantMap dataEnc;
dataEnc["width"]=1920;
dataEnc["height"]=1080;
dataEnc["bitrate"]=4096;
dataEnc["rcmode"]="avbr";
encV->start(dataEnc);
mux=Link::create("Mux");
QVariantMap dataMux;
dataMux["path"]="rtmp://127.0.0.1/live/test";
dataMux["mute"]=true;
mux->start(dataMux);
vo=Link::create("OutputVo");
vo->start();
input->linkV(detect);
input->linkV(encV)->linkV(mux);
input->linkV(recognition)->linkV(vo);
detect->linkE(recognition);
connect(recognition,SIGNAL(newEvent(QString,QVariant)),this,SLOT(onNewEvent(QString,QVariant)));
}
bool Worker::addFace(QString name)
{
recognition->invoke("addFace",name);
return true;
}
QVariantList Worker::faceBox()
{
return faceList;
}
void Worker::onNewEvent(QString type, QVariant info)
{
if(type=="face")
{
faceList=info.toList();
// qDebug()<<faceList;
}
}