vs2015 c++ 调用百度云API人像分割算法
目的:在本地输入图像,调用百度云上的人像分割算法,实现人像分割。
需要用百度账号和密码登录。
1 、创建应用
1)点击“创建应用”
2)填写信息
3)记录信息,vs代码调用接口时需要。
2、 下载SDK
1)点击“SDK下载”,下载api头文件:
2)下载“C++SDK”,可以查看使用说明
3 、创建vs调用
参考说明:https://ai.baidu.com/ai-doc/BODY/ak3cpyv9i
1)安装依赖库libcurl
下载网址:https://curl.haxx.se/download.html
下载红框部分,并解压。
配置环境变量: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进行编译。
双击打开:JSONCPP.sln
进行编译,生成jsoncpp.lib
附加包含目录: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);
}