「弱小和无知不是生存的障碍,傲慢才是」|

shumei52

园龄:1年7个月粉丝:9关注:1

使用QT进行百度图像识别API调用

此篇文章在2022年2月21日被记录
先上视频:

完成思路:
1、先去百度智能云免费创建一个图片识别应用“点击我”,创建成功后可以获得API Key与Secret Key,后续我们将通过这两个key获取access_token,很简单,通过查看官网文档可以知道获取的方法,post获取之后就可以在返回的json字符串中看到,我们将它保存下来后续使用,需要注意的是access_token的有效期为30天,需要每30天进行定期更换。

2、首先新建页面布局,我使用qtcreator,这里是很简单的布局,在编辑器中拖动绘制即可,comboBox用来切换是哪种识别方式,两个按键分别用来打开图片与识别图片,整体界面如下图所示:

img

3、控件分别注册回调函数:

    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_comboBox_currentIndexChanged(int index);

4、在线识别过程中,使用的是https通信,图片数据需要转换为base64格式,设置头部"Content-Type","application/x-www-form-urlencoded",其中,不同的识别类型具有不同的url,为此使用switch case进行切换:

    switch (index) {
    case 0 : post_url="https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general";break;
    case 1 : post_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/object_detect";break;
    case 2 : post_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/animal";break;
    case 3 : post_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/plant";break;
    case 4 : post_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/classify/ingredient";break;
    case 5 : post_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/multi_object_detect";break;
    }

然后在url中添加accessToken;

    QUrl url=post_url+"?access_token="+accessToken;

到此可以尝试进行一次通信,如果需要移植到arm开发板上的话,还需要配置ssl加密通信:

    QSslConfiguration config;//config SSL in arm
    config.setPeerVerifyMode(QSslSocket::VerifyNone);
    config.setProtocol(QSsl::TlsV1_0);
    request.setSslConfiguration(config);

5、获取到返回的数据后,在回调函数对数据进行解析,五种结果对应的结果格式并不统一,这里分别用五种方法对数据进行解析:

 if (reply->error() == QNetworkReply::NoError)
 {
     QString bytes = reply->readAll();
     qDebug() << bytes;//print recive data
     switch (ui->comboBox->currentIndex()) {
            case 0:advanced_general_json(bytes);break;
            case 1:object_detect_json(bytes);break;
            case 2:animal_json(bytes);break;
            case 3:plant_json(bytes);break;
            case 4:ingredient_json(bytes);break;
            case 5:multi_object_detect_json(bytes);break;
     }
 }

6、完成,并且可以通过qmake移植到linux开发板上。

注意:程序中目前是我的认证信息,仅作为测试使用,长期使用请自行申请。

本文作者:shumei52

本文链接:https://www.cnblogs.com/shumei52/p/18595048

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   shumei52  阅读(35)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起