vs2015 c++ 调用百度云API人像分割算法

目的:在本地输入图像,调用百度云上的人像分割算法,实现人像分割。

网址:https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3Ffromai%3D1#/ai/body/app/list

需要用百度账号和密码登录。

1 、创建应用

1)点击“创建应用”

vs2015 c++ 调用百度云API人像分割算法

 

2)填写信息

vs2015 c++ 调用百度云API人像分割算法

 

3)记录信息,vs代码调用接口时需要。

vs2015 c++ 调用百度云API人像分割算法

 

2、 下载SDK

1)点击“SDK下载”,下载api头文件:

vs2015 c++ 调用百度云API人像分割算法

 

2)下载“C++SDK”,可以查看使用说明

vs2015 c++ 调用百度云API人像分割算法

 

3 、创建vs调用

参考说明:https://ai.baidu.com/ai-doc/BODY/ak3cpyv9i

1)安装依赖库libcurl

下载网址:https://curl.haxx.se/download.html

vs2015 c++ 调用百度云API人像分割算法

 

下载红框部分,并解压。

配置环境变量:D:\thirdLib\curl\curl-7.69.1-win64-mingw\bin

配置属性列表:

附加包含目录:D:\thirdLib\curl\curl-7.69.1-win64-mingw\include

附加库目录:D:\thirdLib\curl\curl-7.69.1-win64-mingw\lib

附加依赖项:libcurl.a、libcurl.dll.a

 

2)安装依赖库openssl

下载exe:http://slproweb.com/products/Win32OpenSSL.html

双击,一路”next”即可。

配置环境变量:D:\thirdLib\OpenSSL\OpenSSL-Win64\bin

配置属性列表:

附加包含目录:D:\thirdLib\OpenSSL\OpenSSL-Win64\include

附加库目录:D:\thirdLib\OpenSSL\OpenSSL-Win64\lib

附加依赖项:

4758cca.lib

aep.lib

atalla.lib

capi.lib

chil.lib

cswift.lib

gmp.lib

gost.lib

libeay32.lib

nuron.lib

padlock.lib

ssleay32.lib

sureware.lib

ubsec.lib

 

3)安装依赖库jsoncpp(>1.6.2版本,0.x版本将不被支持)

下载:https://github.com/open-source-parsers/jsoncpp

编译:使用cmake进行编译。

vs2015 c++ 调用百度云API人像分割算法

 

双击打开:JSONCPP.sln

进行编译,生成jsoncpp.lib

 

vs2015 c++ 调用百度云API人像分割算法

附加包含目录:D:\thirdLib\jsoncpp\jsoncpp-master\include

附加库目录:D:\thirdLib\jsoncpp\jsoncpp-master\build\src\lib_json\Release D:\thirdLib\jsoncpp\jsoncpp-master\build\src\lib_json\Release

附加依赖项:jsoncpp.lib

 

测试代码:

#include "body_analysis.h"

#include <opencv2/opencv.hpp>

// 设置APPID/AK/SK

std::string app_id = "xxx";

std::string api_key = "xxxxx";

std::string secret_key = "xxxxx";

aip::Bodyanalysis client(app_id, api_key, secret_key);

void main()

{

             Json::Value result;

             std::string image;

              aip::get_file_content(“test.png”, &image);

              // 调用人像分割

              result = client.body_seg(image, aip::null);

              // 如果有可选参数

              std::map<std::string, std::string> options;

              options["type"] = "labelmap";//labelmap,scoremap,foreground

              // 带参数调用人像分割

              result = client.body_seg(image, options);

              std::string res = result["labelmap"].asString();//转为string,asString(),

              std::string result_dec;//解码结果

              result_dec = aip::base64_decode(res);

              std::vector<char> base64_img(result_dec.begin(), result_dec.end());

              cv::Mat img_decode = cv::imdecode(base64_img, CV_LOAD_IMAGE_COLOR);

              cv::Mat mask = img_decode * 255;

              cv::imwrite(“out.png”, mask);

}