虹软人脸识别 - 人脸特征数据的存取
文章目录
一、简介
人脸识别在社会中应用越来越多,提供人脸识别的 API 的公司也很多,如百度、商汤、Face++、虹软、微软等。在简单了解了这些不同企业提供的产品后,发现只有虹软是提供免费离线 SDK 的。使用在线 API,因为网络延迟实时性跟不上。刚开始用的时候还是 2.0 版本,现在已经 3.0 了,实测效果确实不错。在 3.0 后还可以在视频中追踪人脸,避免后重复识别提高了性能。
在网上关于 ArcSoft 的人脸识别 SDK — ArcFace 的开发教程已经很多了,而且 SDK 自带的官方文档也非常简单易懂,就不再重复介绍了。本文的主要内容是怎么使用
SDK 并结合数据库(可选 SQLite 和 MySQL)来保存人脸特征数据以及怎么使用这些特征,中间还包含了和人脸特征相关的部分 API 的使用。
在本文末提供了使用 ArcFace、Qt 编写的示例代码。
二、数据库应用
将数据库的操作封装为一个类,下面介绍封装类的具体实现。
1. 连接数据库
使用封装好的数据库对象连接数据库,具体的细节如下:
- 使用 SQLite
连接数据库的接口(构造函数):
DatabaseSQLite(QString const & database_name);
实现:
database_ = QSqlDatabase::addDatabase("QSQLITE", database_name);
database_.setDatabaseName(database_name);
database_.open();
- 使用 MySQL
连接数据库的接口(构造函数):
DatabaseMySQL::DatabaseMySQL(
QString const & host_name,
QString const & user_name,
QString const & password,
QString const & database_name
);
实现:
database_ = QSqlDatabase::addDatabase("QMYSQL", database_name);
database_.setHostName(host_name);
database_.setUserName(user_name);
database_.setPassword(password);
database_.setDatabaseName(database_name);
database_.open();
2. 建表
在连接上数据库后,如果数据库中不存在相应的表结构,需要立即创建相应的表来存放数据。
- 使用 SQLite
建表:
auto query = QSqlQuery(database_);
query.exec(
"CREATE TABLE IF NOT EXISTS
features(" "\n"
"
id INTEGER PRIMARY KEY
AUTOINCREMENT," "\n"
" name
VARCHAR(32),"
"\n"
" feature BLOB" "\n"
");"
);
- 使用 MySQL
建表:
auto query = QSqlQuery(database_);
query.exec(
"CREATE TABLE IF NOT EXISTS
features(" "\n"
" id
INTEGER PRIMARY KEY AUTO_INCREMENT," "\n"
" name
VARCHAR(32),"
"\n"
" feature BLOB" "\n"