使用QT进行百度图像识别API调用
先上视频:
完成思路:
1、先去百度智能云免费创建一个图片识别应用“点击我”,创建成功后可以获得API Key与Secret Key,后续我们将通过这两个key获取access_token,很简单,通过查看官网文档可以知道获取的方法,post获取之后就可以在返回的json字符串中看到,我们将它保存下来后续使用,需要注意的是access_token的有效期为30天,需要每30天进行定期更换。
2、首先新建页面布局,我使用qtcreator,这里是很简单的布局,在编辑器中拖动绘制即可,comboBox用来切换是哪种识别方式,两个按键分别用来打开图片与识别图片,整体界面如下图所示:
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开发板上。
注意:程序中目前是我的认证信息,仅作为测试使用,长期使用请自行申请。
代码下载地址(不包含移植ARM开发板新增的代码):点击我
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。