Qt调用face++的http接口,实现人脸对比
目录
概念
演示
源码
概念
Qt中有QNetworkAccessManager、QHttpMultiPart、QJsonArray、QHttpPart,可以实现发送http数据包,其中QNetworkAccessManager中有个函数,可以实现Get或者Post方法。
演示
程序运行截图如下:
加入图片后,点击提交,可活得face++返回的json数据,其中就有一个confidence值,这个值就是可信度!
比如下面这两种刘德华的照片如下图所示:
如果是两张不同的图片
源码
程序结构如下:
widget.ui如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QHttpPart>QT_BEGIN_NAMESPACE
class QNetworkAccessManager;
class QNetworkReply;
QT_END_NAMESPACEnamespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void loadLeftLabel();void loadRightLabel();void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;QHttpPart setHttpPart(QByteArray body, QVariant value);QHttpPart imageHttpPart(const QString &fileName, QVariant value);protected slots:void finished(QNetworkReply *reply);void btnClicked();private:Ui::Widget *ui;QString m_leftFileName;QString m_rightFileName;QNetworkAccessManager *m_manager;
};#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMouseEvent>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QFileDialog>
#include <QByteArray>
#include <QHttpMultiPart>
#include <QJsonArray>
#include <QMap>
#include <QJsonDocument>
#include <QJsonObject>
#include <QMessageBox>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("CSDN IT1995");m_manager = new QNetworkAccessManager(this);connect(ui->okPushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicked()));connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));\
}Widget::~Widget()
{delete ui;
}void Widget::loadLeftLabel()
{QString fileName = QFileDialog::getOpenFileName(this, "选择图片", qApp->applicationDirPath(), "Image Files (*.png *.jpg *.bmp)");if(!fileName.isEmpty()){m_leftFileName = fileName;ui->face1Label->clear();ui->face1Label->setPixmap(QPixmap(fileName));return;}ui->face1Label->clear();ui->face1Label->setText("face1");m_leftFileName = "";
}void Widget::loadRightLabel()
{QString fileName = QFileDialog::getOpenFileName(this, "选择图片", qApp->applicationDirPath(), "Image Files (*.png *.jpg *.bmp)");if(!fileName.isEmpty()){m_rightFileName = fileName;ui->face2Label->clear();ui->face2Label->setPixmap(QPixmap(fileName));return;}ui->face2Label->clear();ui->face2Label->setText("face1");m_rightFileName = "";
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{int currentX = event->pos().x();int currentY = event->pos().y();int leftPicStartX = ui->face1Label->pos().x();int leftPicEndX = leftPicStartX + ui->face1Label->width();int leftPicStartY = ui->face1Label->pos().y();int leftPicEndY = leftPicStartY + ui->face1Label->height();int rightPicStartX = ui->face2Label->pos().x();int rightPicEndX = rightPicStartX + ui->face2Label->width();int rightPicStartY = ui->face2Label->pos().y();int rightPicEndY = rightPicStartY + ui->face2Label->height();//left Pictureif((leftPicStartX < currentX) && (leftPicEndX > currentX)&& (leftPicStartY < currentY) && (leftPicEndY > currentY)){qDebug() << "left Picture";loadLeftLabel();}//right Pictureif((rightPicStartX < currentX) && (rightPicEndX > currentX)&& (rightPicStartY < currentY) && (rightPicEndY > currentY)){qDebug() << "right Picture";loadRightLabel();}QWidget::mouseReleaseEvent(event);
}QHttpPart Widget::setHttpPart(QByteArray body, QVariant value)
{QHttpPart part;part.setHeader(QNetworkRequest::ContentDispositionHeader, value);part.setBody(body);return part;
}QHttpPart Widget::imageHttpPart(const QString &fileName, QVariant value)
{QHttpPart imagePart;imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, value);QByteArray fileFlow;QFile file(fileName);if(file.open(QIODevice::ReadOnly)){fileFlow = file.readAll();imagePart.setBody(fileFlow.toBase64());}return imagePart;
}void Widget::finished(QNetworkReply *reply)
{QByteArray responseData = reply->readAll();QMap<QString, QVariant> map;QJsonDocument document;map = document.fromJson(responseData).toVariant().toMap();qDebug() << responseData;float confidence = map.value("confidence").toFloat();QMessageBox::information(this, "tip", "The confidence is " + QString::number(confidence));
}void Widget::btnClicked()
{QString apiKey = "XqIypFbRHDRJ2LmBfMwO531E8wnZ0FVm";QString apiSecret = "TBS_8r7czQ3_ZLmox-jv9E3tOLyjIjop";QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart = setHttpPart(apiKey.toLatin1(), QVariant("form-data; name=\"api_key\""));multiPart->append(keyPart);QHttpPart secret = setHttpPart(apiSecret.toLatin1(), QVariant("form-data; name=\"api_secret\""));multiPart->append(secret);QHttpPart faceImage1;faceImage1 = imageHttpPart(m_leftFileName, "form-data; name=\"image_base64_1\"");multiPart->append(faceImage1);QHttpPart faceImage2;faceImage2 = imageHttpPart(m_rightFileName, "form-data; name=\"image_base64_2\"");multiPart->append(faceImage2);QUrl url("https://api-cn.faceplusplus.com/facepp/v3/compare");QNetworkRequest request;request.setUrl(url);QNetworkReply *reply = m_manager->post(request, multiPart);multiPart->setParent(reply);
}
Qt调用face++的http接口,实现人脸对比相关推荐
- python 人脸比对,python 使用百度AI接口进行人脸对比的步骤
1. 注册百度云账号 注册百度智能云,提交申请. 创建应用获取AppID,API Key,Secret Key. 2. 安装baidu python api 人脸对比 API 文档 pip insta ...
- Java调用百度人脸对比接口进行人脸(图片)对比
前三步和人脸检测代码一样 在我上一篇博客地址链接:https://blog.csdn.net/weixin_45736927/article/details/104696428 第四步 Token和工 ...
- Qt 调用 Windows 接口实现窗口置顶
前言 用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗 ...
- 【java】调用百度开发平台ai接口,完成人脸识别(人脸搜索、人脸对比、人脸检测等)功能--------超详细,适合小白
基本流程理解: 我们要使用百度提供的接口去实现某些功能,大致流程如下: 1.注册百度开放平台帐号: 浏览器打开http://ai.baidu.com/,进入百度ai的页面,点击右上角的控制台按钮进行登 ...
- QT 调用Bartender C#动态库接口
一.制作可供程序调用的条码标签 ********** 测试使用Bartender 软件版本信息 ********* 1.条码设置 (1)打开bartender建立一个模板文件 (2)标签界面布局 a. ...
- 调用百度人脸识别接口实现人脸识别
调用百度人脸识别接口实现人脸识别 目标: 1.学习使用百度AI开放平台进行人脸识别 2.将学到的内容:JSON数据,HTTP API调用,base64图片编码与解码 import json impor ...
- 调用百度接口实现人脸识别
首先去百度ai开通人脸对比接口应用才有接下来的故事 地址:https://ai.baidu.com/tech/face/compare 1.导入人脸对比SDK,我使用maven自动下载,不嫌麻烦可以下 ...
- QT调用C#写的Dll
QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数 ...
- python实现简单的api接口-简单实现Python调用有道API接口(最新的)
# ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...
最新文章
- JavaScript - 数据类型和变量
- stm32跑python-简易数据采集分析流程.stm32+python
- WCF入门(八)——异常处理2
- 2019.1.11英语笔记1
- 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
- 我的Go+语言初体验——【四、版本更新环境变量配置】
- 怎么加快计算机运行速度,怎么加快计算机运行速度?
- vue学生作业-图书管理系统
- Azkaban 外部接口的使用与开发
- 饿了么商品排序怎么实现PHP,PHP实现桶排序算法
- 软件测试理论-测试用例和设计方法
- C++打印九九乘法表
- 未来教育全国计算机考试,未来教育.全国计算机等级考试
- 什么是NAT技术与代理服务器
- 微信设置“种草昵称”,个性有意思,来看看!
- 阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法
- 操作系统实验七 地址映射与共享(哈工大李治军)
- dell 重装linux系统_预装Linux(Ubuntu)的DELL笔记本重装Windows
- linux selinux策略管理与标签
- JS 实现别踩白块功能