Qt之调用百度API

近几年来,语音识别、图像识别等AI技术发展得如火如荼。国内外各大科技巨头积极布局(各大AI 开放平台一览),百度是其中比较优秀的一家。百度希望通过百度大脑来实现战略转型,从一家无恶不作的广告推送、流量变现公司转型为一个高大上的AI开放平台。本篇文章介绍了如何利用Qt来调用百度云的AI接口实现图像识别。

本次设计的最终效果如下

官方的新手指南对如何接入AI开放平台做了详尽的引导。下面介绍如何利用Qt进行AI接口调用,本次调用以身份证为例。

阅读完新手指南后,获得了Access_Token,将其保存在QString中

QString accessToken = "24.48d309c18be44c2e73fc9e91162be40e.2592000.1592381475.282335-19936265";

准备好如下三个对象用于发送请求与接受返回数据

QNetworkRequest request;
url.setUrl("https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"  + "?access_token=" + accessToken );
request.setUrl(url);//设置完url的request

QNetworkReply *reply;//用于接受返回数据

QNetworkAccessManager *manager;//用于管理请求数据的发送

图片base64转码

void BaiDuAI::getImageData(QString filePath)
{
    QImage img(filePath);
    imageLabel->setScaledContents(true);
    imageLabel->setFixedSize(imageLabel->width(), imageLabel->height());
    imageLabel->setPixmap(QPixmap::fromImage(img));

    QByteArray imageData;
    QBuffer buffer(&imageData);
    img.save(&buffer, "jpg");
    imgBase64 = QString( imageData.toBase64(QByteArray::OmitTrailingEquals) );
    buffer.close();
    identifyImage(manager, imgBase64, request);
}

发送请求数据

void BaiDuAI::identifyIDCard(QNetworkAccessManager *manager,
                                  QString imgBase64,
                                  QNetworkRequest request)
{
    QHttpMultiPart *mulPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

    QHttpPart part1;
    part1.setRawHeader("Content-Type","application/x-www-form-urlencoded");
    part1.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data;name=\"%1\"").arg("image")));
    part1.setBody(imgBase64.toUtf8());
    QHttpPart part2;
    part2.setRawHeader("Content-Type","application/x-www-form-urlencoded");
    part2.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data;name=\"%1\"").arg("id_card_side")));
    part2.setBody("front");

    mulPart->append(part1);
    mulPart->append(part2);

    //发送数据
    QNetworkReply *reply = manager->post(request, mulPart);
    mulPart->setParent(reply);
}

处理返回数据

void BaiDuAI::handleIDCardReply(QNetworkReply *re, QTextBrowser *imageIdentify)
{
    QByteArray replyData;
    QNetworkReply *reply = re;
    replyData = reply->readAll();
    //imageIdentify->setText(replyData);

    //Json数据解析
    QJsonDocument document = QJsonDocument::fromJson(replyData.data());
    if( !document.isNull() )
    {
        QString result;
        QJsonObject jsonObject = document.object();
        QJsonObject jsonObject1 = jsonObject.value(QString("words_result")).toObject();
        QJsonObject::const_iterator it = jsonObject1.constBegin();
        QJsonObject::const_iterator end = jsonObject1.constEnd();
        while (it != end) {
            QString key = it.key();
            QString value = it.value().toObject().value("words").toString();
            QString pair = key + ": " + value + "\n";
            result += pair;
            it++;
        }
        imageIdentify->setText(result);
    }
}

支持拖拽上传图片的Label

class JLabel : public QLabel
{
    Q_OBJECT
public:
    explicit JLabel(QWidget *parent = nullptr) : QLabel(parent)
    {
        setAcceptDrops(true);
    }
protected:
    void dragEnterEvent(QDragEnterEvent *event)
    {
        event->acceptProposedAction();
    }
    void dropEvent(QDropEvent *event)
    {
        QString filePath = event->mimeData()->urls().first().toLocalFile();
        emit imageArrived(filePath);
    }
signals:
    void imageArrived(QString filePath);

};

总结

拖拽图片上传,触发getImageData,getImageData对图片进行base64转码,并调用identifyIDCard;identifyIDCard发送请求数据;当请求数据到来,handleIDCardReply负责进行处理。

扩展阅读

Qt封装百度人脸识别+图像识别

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Qt是一个跨平台的应用程序开发框架,而百度AI则是百度公司提供的人工智能服务平台。要实现Qt调用百度AI的人脸识别解锁功能,可以按照以下步骤进行: 1. 首先,在百度AI平台上注册一个账号,并创建一个人脸识别的应用。获取该应用的API Key和Secret Key,以便后续使用。 2. 在Qt项目中,引入百度AI提供的SDK(软件开发工具包),这个SDK可以提供与百度AI平台进行通信的接口。 3. 在Qt代码中,使用SDK提供的函数调用方式,实现人脸识别解锁功能。具体步骤如下: a. 初始化百度AI SDK,将API Key和Secret Key传入进行认证。 b. 将待识别的人脸图像传入SDK的人脸检测接口,提取图像中的人脸信息。 c. 将提取到的人脸信息传入SDK的人脸比对接口,与已注册的人脸信息进行比对。 d. 根据比对结果,判断是否为有效用户,进而进行解锁操作。 4. 在Qt界面中集成该人脸识别解锁功能,可以通过摄像头实时捕捉人脸图像,并调用SDK进行人脸识别。在界面上展示识别结果,如解锁成功或失败的提示。 总的来说,Qt调用百度AI的人脸识别解锁需要引入百度AI提供的SDK,并通过SDK提供的接口函数实现人脸检测和比对的功能。在Qt界面中通过摄像头捕捉人脸图像,进行实时的人脸识别操作,以实现人脸识别解锁。 ### 回答2: Qt是一款功能强大的跨平台应用程序开发框架,可以用于开发各种类型的应用程序,包括人脸识别解锁功能。而百度AI的人脸识别技术是一种基于人脸图像进行人脸检测、人脸比对和人脸搜索的先进技术。下面将介绍如何使用Qt调用百度AI的人脸识别解锁。 首先,我们需要在百度AI开放平台上注册账号并创建一个人脸识别应用。在创建应用后,我们将得到一个API Key和Secret Key,这将用于调用百度AI的人脸识别接口。 接下来,在Qt中创建一个新的项目。我们可以使用Qt提供的网络请求类QNetworkAccessManager来发送HTTP请求。通过发送HTTP POST请求到百度AI的人脸识别接口,将待识别的人脸图像数据传输给服务器。 在调用人脸识别接口时,需要注意接口的请求参数。首先,需要指定人脸识别接口的URL,以及携带API Key和Secret Key的请求头信息。其次,在请求体中,需要传输待识别的人脸图像数据。可以将人脸图像数据进行Base64编码后作为请求参数发送。同时,可以指定一些可选的参数,如人脸识别的阈值、检测的最大人脸数等。发送请求后,服务器会返回一个识别结果,我们可以根据接口返回的JSON数据进行解析和处理,以获取人脸识别的结果。 最后,在Qt的界面中添加一个调用人脸识别解锁功能的按钮。当用户点击该按钮时,应用程序将调用百度AI的人脸识别接口进行解锁验证。根据接口返回的结果,我们可以判断是否解锁成功,并在界面中显示相应的提示信息。 总之,通过Qt调用百度AI的人脸识别解锁,我们可以实现一种安全、快速的人脸识别解锁功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值