目前通用物体和场景识别支持超过 10 万类常见物体和场景识别,接口返回图片内 1 个或多个物体的名称,并可获取百科信息。适用于图像或视频内容分析、拍照识图等业务场景。
功能介绍
1. 识别物体或场景名称
支持识别动物、植物、商品、建筑、风景、动漫、食材、公众人物等 10 万个常见物体及场景,接口返回大类及细分类的名称结果。
2. 获取百科信息
支持获取图片识别结果对应的百科信息,接口返回百科词条 URL、图片和摘要描述,可选择是否需要返回百科信息。
应用场景
- 图片内容分析与推荐:对用户浏览的图片或观看的视频内容进行识别,根据识别结果给出相关内容推荐或广告展示。广泛应用于新闻资讯类、视频类 app 等内容平台中
- 拍照识图:根据用户拍摄照片,识别图片中物体名称及百科信息,提高用户交互体验,广泛应用于智能手机厂商、拍照识图及科普类 app 中
- 拍照闯关趣味营销:设计线上营销活动,根据用户拍摄照片,自动识别图片中物体信息是否符合活动要求,提升用户交互体验,减少人工审核成本
接口描述
该请求用于通用物体及场景识别,即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中的多个物体及场景标签。
请求说明
- HTTP 方法:
POST
- 请求 URL:
https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general
- URL参数:
access_token
- Header 参数:
Content-Type
=application/x-www-form-urlencoded
- Body 参数:见下表
![d908c5aeadae1d18ba2f4515f56a6e61.png](https://img-blog.csdnimg.cn/img_convert/d908c5aeadae1d18ba2f4515f56a6e61.png)
返回说明
返回参数如下表:
![558446511555e3c67647528f4e117ebc.png](https://img-blog.csdnimg.cn/img_convert/558446511555e3c67647528f4e117ebc.png)
返回示例如下:
{
"log_id": "4269290077301074002",
"result_num": 5,
"result": [
{
"score": 0.203018,
"root": "植物-树",
"baike_info": {
"baike_url": "http://baike.baidu.com/item/%E6%A0%91/2699484",
"image_url": "http://imgsrc.baidu.com/baike/pic/item/6159252dd42a2834218a2c2154b5c9ea15cebfef.jpg",
"description": "树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;"
},
"keyword": "树"
},
{
"score": 0.15084,
"root": "自然风景-其他",
"keyword": "风景"
},
{
"score": 0.100728,
"root": "自然风景-天空",
"keyword": "天空"
},
{
"score": 0.052704,
"root": "商品-工艺品",
"keyword": "工艺品"
},
{
"score": 0.003729,
"root": "商品-工艺品",
"keyword": "佛像"
}
]
}
C++ 代码实现调用
这里假设已经将环境配置好了,环境配置的文章可以参考 Windows 下使用 Vcpkg 配置百度 AI 图像识别 C++开发环境(VS2017)。
为了方便,首先根据返回参数定义了一个结构体,该结构体包括了返回参数中的参数,如下:
struct GeneralInfo {
std::string keyword;
float score;
std::string root;
std::string baikeurl;
std::string imageurl;
std::string baikedesc;
void print() {
std::cout << std::setw(30) << std::setfill('-') << 'n';
std::cout << "keyword: " << keyword << "n";
std::cout << "score: " << std::fixed << std::setprecision(4) << score << "n";
std::cout << "root: " << root << "n";
if (baike