前言
看此文之前,建议先看一下另一篇文章:基于 qt c++和百度智能云API的人脸图像识别应用实例
本文仅对人脸对比部分做描述。
人脸对比概述
上传两张图像数据,计算人脸的相似度。
效果图
接口代码
1、Qimage转base64编码,构造json数据,发起post请求。
void BaiduFaceOnline::FaceMatch(const QImage& image1, const QImage& image2)
{
QString img1_base64 = image2base64_str(image1);
QString img2_base64 = image2base64_str(image2);
QJsonObject post_data1;
post_data1.insert("image", img1_base64);
post_data1.insert("image_type", "BASE64");
QJsonObject post_data2;
post_data2.insert("image", img2_base64);
post_data2.insert("image_type", "BASE64");
QJsonArray img_array;
img_array.append(post_data1);
img_array.append(post_data2);
QJsonDocument document;
document.setArray(img_array);
QByteArray post_param = document.toJson(QJsonDocument::Indented);
QUrl url(FaceMatchUrl + "?access_token=" + AccToken);
NetRequest.setUrl(url);
NetRequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json")); //接口固定
connect(NetAccManager,&QNetworkAccessManager::finished,this,&BaiduFaceOnline::FaceMatchReply);
NetAccManager->post(NetRequest,post_param);
}
2、接收反馈,解析json数据,使用信号发送至UI。
void BaiduFaceOnline::FaceMatchReply(QNetworkReply* reply)
{
if (reply->error() != QNetworkReply::NoError)
{
QMessageBox::warning(0,"","请求错误!");
return;
}
else
{
QByteArray content = reply->readAll();
QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(content, &jsonError); // 转化为 JSON 文档
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError))
{
if (doucment.isObject())
{
QJsonObject root_object = doucment.object();
if (root_object.take("error_code").toInt() == 0 && root_object.take("error_msg").toString() == "SUCCESS")
{
QJsonObject result_object = root_object.take("result").toObject();
emit MatchReply("相似度:" + QString::number(result_object.take("score").toDouble()));
}
}
}
reply->deleteLater();
}
disconnect(NetAccManager,&QNetworkAccessManager::finished,this,&BaiduFaceOnline::FaceMatchReply);
}
源码地址
人脸检测、对比、识别示例源码
无需积分,关注我即可下载。欢迎在评论区提出您的意见和建议,一起探讨。
软件版本
qt 5.12.10