目录

概念

演示

源码


概念

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接口,实现人脸对比相关推荐

  1. python 人脸比对,python 使用百度AI接口进行人脸对比的步骤

    1. 注册百度云账号 注册百度智能云,提交申请. 创建应用获取AppID,API Key,Secret Key. 2. 安装baidu python api 人脸对比 API 文档 pip insta ...

  2. Java调用百度人脸对比接口进行人脸(图片)对比

    前三步和人脸检测代码一样 在我上一篇博客地址链接:https://blog.csdn.net/weixin_45736927/article/details/104696428 第四步 Token和工 ...

  3. Qt 调用 Windows 接口实现窗口置顶

    前言 用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗 ...

  4. 【java】调用百度开发平台ai接口,完成人脸识别(人脸搜索、人脸对比、人脸检测等)功能--------超详细,适合小白

    基本流程理解: 我们要使用百度提供的接口去实现某些功能,大致流程如下: 1.注册百度开放平台帐号: 浏览器打开http://ai.baidu.com/,进入百度ai的页面,点击右上角的控制台按钮进行登 ...

  5. QT 调用Bartender C#动态库接口

    一.制作可供程序调用的条码标签 ********** 测试使用Bartender 软件版本信息 ********* 1.条码设置 (1)打开bartender建立一个模板文件 (2)标签界面布局 a. ...

  6. 调用百度人脸识别接口实现人脸识别

    调用百度人脸识别接口实现人脸识别 目标: 1.学习使用百度AI开放平台进行人脸识别 2.将学到的内容:JSON数据,HTTP API调用,base64图片编码与解码 import json impor ...

  7. 调用百度接口实现人脸识别

    首先去百度ai开通人脸对比接口应用才有接下来的故事 地址:https://ai.baidu.com/tech/face/compare 1.导入人脸对比SDK,我使用maven自动下载,不嫌麻烦可以下 ...

  8. QT调用C#写的Dll

    QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数 ...

  9. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

最新文章

  1. JavaScript - 数据类型和变量
  2. stm32跑python-简易数据采集分析流程.stm32+python
  3. WCF入门(八)——异常处理2
  4. 2019.1.11英语笔记1
  5. 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
  6. 我的Go+语言初体验——【四、版本更新环境变量配置】
  7. 怎么加快计算机运行速度,怎么加快计算机运行速度?
  8. vue学生作业-图书管理系统
  9. Azkaban 外部接口的使用与开发
  10. 饿了么商品排序怎么实现PHP,PHP实现桶排序算法
  11. 软件测试理论-测试用例和设计方法
  12. C++打印九九乘法表
  13. 未来教育全国计算机考试,未来教育.全国计算机等级考试
  14. 什么是NAT技术与代理服务器
  15. 微信设置“种草昵称”,个性有意思,来看看!
  16. 阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法
  17. 操作系统实验七 地址映射与共享(哈工大李治军)
  18. dell 重装linux系统_预装Linux(Ubuntu)的DELL笔记本重装Windows
  19. linux selinux策略管理与标签
  20. JS 实现别踩白块功能

热门文章

  1. Apache出现AH00558错误解决办法
  2. 实际工作中,一个完整的可视化大屏项目有哪些步骤?
  3. 从月薪8K的分析师到月薪2W,只因我有了这份工具清单!
  4. 死于非命的中国亿万富翁们 1
  5. FreeBSD的起源和发展
  6. 炸锅了!阿里Ant Design前端框架的圣诞彩蛋事件
  7. 经典面试题(5):小心javascript自动插入分号机制
  8. 第七节:在 TypeScript 中什么是类型推论?
  9. pca百分比取多少比较好_母亲节给妈妈发多少红包比较好合适 母亲节红包吉利数字含义...
  10. ROS中自定义复杂数据类型