Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索
生活随笔
收集整理的這篇文章主要介紹了
Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
參考文檔Qt+百度AI實(shí)現(xiàn)人臉識(shí)別之人臉檢測(cè)_畫(huà)繭自縛-CSDN博客
本文檔對(duì)于以上文檔進(jìn)行精簡(jiǎn),參考以上文檔實(shí)現(xiàn)百度AI人臉庫(kù)管理-人臉?biāo)阉?#xff1b;百度AI接口一通具通,可以以此方法擴(kuò)展。
.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();//設(shè)置請(qǐng)求地址? https需要從百度AI文檔獲取,access_token可使用在線post獲取QUrl url("https://aip.baidubce.com/rest/2.0/face/v3/search?""access_token=24.fa26056b5893cf31d965a6d99b6f9eb4");QNetworkRequest request(url);//設(shè)置數(shù)據(jù)提交格式,這個(gè)不能自己隨便寫(xiě),每個(gè)平臺(tái)的格式可能不一樣,百度AI要求的格式為application/jsonrequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));//將要檢測(cè)的圖片進(jìn)行BASE64編碼QImage image("image/my.jpg");QByteArray ba;QBuffer buffer(&ba);buffer.open(QIODevice::WriteOnly);//以png格式將圖片數(shù)據(jù)寫(xiě)入baimage.save(&buffer, "png");//將圖片進(jìn)行BASE64編碼QString imgData = QString(ba.toBase64());buffer.close();//打包請(qǐng)求參數(shù) ;需要什么參數(shù)可查看具體的百度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);//發(fā)送請(qǐng)求manager->post(request, post_param);//把數(shù)據(jù)返回函數(shù)設(shè)置成槽函數(shù),當(dāng)請(qǐng)求完成時(shí)自動(dòng)進(jìn)入數(shù)據(jù)返回函數(shù)。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){//判斷是否是對(duì)象,然后開(kāi)始解析數(shù)據(jù)if(document.isObject()){QJsonObject obj = document.object();//解析反饋的人臉屬性結(jié)果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人臉庫(kù)管理分組ID,score是與庫(kù)中人臉的相識(shí)度。
總結(jié)
以上是生活随笔為你收集整理的Linux下QT软件使用C++语言调用百度AI接口实现人脸库人脸搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DM数据库创建分区表并进行SQL LOA
- 下一篇: linux 其他常用命令