Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索
生活随笔
收集整理的這篇文章主要介紹了
Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考文檔Qt+百度AI實現人臉識別之人臉檢測_畫繭自縛-CSDN博客
本文檔對于以上文檔進行精簡,參考以上文檔實現百度AI人臉庫管理-人臉搜索;百度AI接口一通具通,可以以此方法擴展。
.h部分
#ifndef BAIDUAI_H #define BAIDUAI_H#include <QObject> #include <iostream> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> class BaiduAI : public QObject {Q_OBJECT public:explicit BaiduAI(QObject *parent = nullptr);QNetworkAccessManager *manager; signals:public slots:void replay(QNetworkReply*);};#endif // BAIDUAI_H.cpp部分
#include "baiduai.h" #include <QBuffer> #include <QJsonObject> #include <QJsonDocument> #include <QImage> #include <QJsonArray> #include <QDebug> BaiduAI::BaiduAI(QObject *parent) : QObject(parent) {this->manager = new QNetworkAccessManager();//設置請求地址? https需要從百度AI文檔獲取,access_token可使用在線post獲取QUrl url("https://aip.baidubce.com/rest/2.0/face/v3/search?""access_token=24.fa26056b5893cf31d965a6d99b6f9eb4");QNetworkRequest request(url);//設置數據提交格式,這個不能自己隨便寫,每個平臺的格式可能不一樣,百度AI要求的格式為application/jsonrequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));//將要檢測的圖片進行BASE64編碼QImage image("image/my.jpg");QByteArray ba;QBuffer buffer(&ba);buffer.open(QIODevice::WriteOnly);//以png格式將圖片數據寫入baimage.save(&buffer, "png");//將圖片進行BASE64編碼QString imgData = QString(ba.toBase64());buffer.close();//打包請求參數 ;需要什么參數可查看具體的百度AI接口文檔QJsonObject post_data;QJsonDocument document;post_data.insert("image", imgData);post_data.insert("image_type", "BASE64");post_data.insert("group_id_list", "admin");document.setObject(post_data);QByteArray post_param = document.toJson(QJsonDocument::Compact);//發送請求manager->post(request, post_param);//把數據返回函數設置成槽函數,當請求完成時自動進入數據返回函數。connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replay(QNetworkReply*))); }void BaiduAI::replay(QNetworkReply* reply) {QByteArray replyData;replyData = reply->readAll();qDebug()<<"reply data is:"<<QString(replyData);QJsonParseError json_error;QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error);if(json_error.error == QJsonParseError::NoError){//判斷是否是對象,然后開始解析數據if(document.isObject()){QJsonObject obj = document.object();//解析反饋的人臉屬性結果if(obj.contains("result")){QJsonObject resultObj = obj.take("result").toObject();//解析人臉屬性if(resultObj.contains("user_list")){QJsonArray faceArray = resultObj.take("user_list").toArray();for(int i = 0; i < faceArray.size(); i++){QJsonObject faceObj = faceArray.at(i).toObject();if(faceObj.contains("group_id")){QString str = faceObj.take("group_id").toString();qDebug()<<"group_id="<<str;}if(faceObj.contains("score")){int score = faceObj.take("score").toDouble();;qDebug()<<"score="<<score;}}}}}}reply->deleteLater();}//效果圖 group_id是百度AI人臉庫管理分組ID,score是與庫中人臉的相識度。
總結
以上是生活随笔為你收集整理的Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DM数据库创建分区表并进行SQL LOA
- 下一篇: 关于RDP协议的分析(一) - Linu