品牌logo识别
百度 官方文档
实现2万类品牌logo识别,接口返回品牌名称,支持接入方自建logo库
基本说明:
接口地址:https://aip.baidubce.com/rest/2.0/image-classify/v2/logo
返回格式:json
请求方式:post
请求示例:https://aip.baidubce.com/rest/2.0/image-classify/v2/logo?access_token=test
请求参数说明:
名称 类型 必填 说明
image string 必填 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式.注意:图片需要base64编码、去掉编码头后再进行urlencode。
custom_lib boolean 选填 是否只检索用户子库,true则只检索用户子库,false(默认)为检索底库+用户子库
返回参数说明:
名称 类型 说明
log_id uint64 唯一的log id,用于问题定位
result_num uint32 识别结果数,标识返回结果数目
result array() 返回结果数组,每一项为一个识别出的logo
+location object 位置信息(左起像素位置、上起像素位置、像素宽、像素高)
++left number 坐起像素位置
++top number 上起像素位置
++width number 像素宽
++height number 像素高
+name string 识别的品牌名称
+probability number 分类结果置信度(0--1.0)
+type number type=0为1千种高优商标识别结果;type=1为2万类logo库的结果;其它type为自定义logo库结果
JSON返回示例:
{
	"log_id": 843411868,
	"result_num": 1,
	"result": [{
		"type": 0,
		"name": "科颜氏",
		"probability": 0.99998807907104,
		"location": {
			"width": 296,
			"top": 20,
			"height": 128,
			"left": 23
		}
	}]
}
服务级错误码参照
错误码 说明
1 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
2 服务暂不可用,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
3 调用的API不存在,请检查后重新尝试
4 集群超限额
6 无权限访问该用户数据
13 获取token失败
14 IAM鉴权失败
15 应用不存在或者创建失败
17 每天请求量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请通过QQ群(659268104)联系群管手动提额
18 QPS超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请通过QQ群(659268104)联系群管手动提额
19 请求总量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请通过QQ群(659268104)联系群管手动提额
100 无效的access_token参数,请检查后重新尝试
110 access_token无效
111 access token过期
282000 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
216100 请求中包含非法参数,请检查后重新尝试
216101 缺少必须的参数,请检查参数是否有遗漏
216102 请求了不支持的服务,请检查调用的url
216103 请求中某些参数过长,请检查后重新尝试
216110 appid不存在,请重新核对信息是否为后台应用列表中的appid
216200 图片为空,请检查后重新尝试
216201 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、JPEG、BMP,请进行转码或更换图片
216202 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096*4096,请重新上传图片
216203 上传的图片base64编码有误,请校验base64编码方式,并重新上传图片
216630 识别错误,请再次请求,如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
216631 识别银行卡错误,出现此问题的原因一般为:您上传的图片非银行卡正面,上传了异形卡的图片或上传的银行卡正品图片不完整
216633 识别身份证错误,出现此问题的原因一般为:您上传了非身份证图片或您上传的身份证图片不完整
216634 检测错误,请再次请求,如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
282003 请求参数缺失
282005 处理批量任务时发生部分或全部错误,请根据具体错误码排查
282006 批量任务处理数量超出限制,请将任务数量减少到10或10以下
282100 图片压缩转码错误
282101 长图片切分数量超限
282102 未检测到图片中识别目标
282103 图片目标识别错误
282114 URL长度超过1024字节或为0
282808 request id xxxxx 不存在
282809 返回结果请求错误(不属于excel或json)
282810 图像识别错误
283300 入参格式有误,可检查下图片编码、代码格式是否有误
336000 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队
336001 入参格式有误,比如缺少必要参数、图片base64编码错误等等,可检查下图片编码、代码格式是否有误。有疑问请通过QQ群(659268104)或工单联系技术支持团队
完整教学代码示例
logo商标识别
curl -i -k 'https://aip.baidubce.com/rest/2.0/image-classify/v2/logo?access_token=【调用鉴权接口获取的token】' --data 'image=【图片Base64编码,需UrlEncode】&custom_lib=true' -H 'Content-Type:application/x-www-form-urlencoded'
<?php
/**
 * 发起http post请求(REST API), 并获取REST请求的结果
 * @param string $url
 * @param string $param
 * @return - http response body if succeeds, else false.
 */
function request_post($url = '', $param = '')
{
    if (empty($url) || empty($param)) {
        return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    // 初始化curl
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $postUrl);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    // 要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    // post提交方式
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    // 运行curl
    $data = curl_exec($curl);
    curl_close($curl);

    return $data;
}

$token = '[调用鉴权接口获取的token]';
$url = 'https://aip.baidubce.com/rest/2.0/image-classify/v2/logo?access_token=' . $token;
$img = file_get_contents('[本地文件路径]');
$img = base64_encode($img);
$bodys = array(
    'image' => $img,
    'custom_lib' => true
);
$res = request_post($url, $bodys);
var_dump($res);
package com.baidu.ai.aip;

import com.baidu.ai.aip.utils.Base64Util;
import com.baidu.ai.aip.utils.FileUtil;
import com.baidu.ai.aip.utils.HttpUtil;

import java.net.URLEncoder;

/**
* logo商标识别
*/
public class Logo {

    /**
    * 重要提示代码中所需工具类
    * FileUtil,Base64Util,HttpUtil,GsonUtils请从
    * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
    * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
    * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
    * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
    * 下载
    */
    public static String logo() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo";
        try {
            // 本地文件路径
            String filePath = "[本地文件路径]";
            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "image=" + imgParam + "&custom_lib=" + true;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = "[调用鉴权接口获取的token]";

            String result = HttpUtil.post(url, accessToken, param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        Logo.logo();
    }
}
# encoding:utf-8
import base64
import urllib
import urllib2

'''
logo商标识别
'''

request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo"

# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())

params = {"custom_lib":true,"image":img}
params = urllib.urlencode(params)

access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib2.urlopen(request)
content = response.read()
if content:
    print content
#include <iostream>
#include <curl/curl.h>

// libcurl库下载链接:https://curl.haxx.se/download.html
// jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
const static std::string request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo";
static std::string logo_result;
/**
 * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
 * @param 参数定义见libcurl文档
 * @return 返回值定义见libcurl文档
 */
static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
    // 获取到的body存放在ptr中,先将其转换为string格式
    logo_result = std::string((char *) ptr, size * nmemb);
    return size * nmemb;
}
/**
 * logo商标识别
 * @return 调用成功返回0,发生错误返回其他错误码
 */
int logo(std::string &json_result, const std::string &access_token) {
    std::string url = request_url + "?access_token=" + access_token;
    CURL *curl = NULL;
    CURLcode result_code;
    int is_success;
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.data());
        curl_easy_setopt(curl, CURLOPT_POST, 1);
        curl_httppost *post = NULL;
        curl_httppost *last = NULL;
        curl_formadd(&post, &last, CURLFORM_COPYNAME, "image", CURLFORM_COPYCONTENTS, "【base64_img】", CURLFORM_END);
        curl_formadd(&post, &last, CURLFORM_COPYNAME, "custom_lib", CURLFORM_COPYCONTENTS, "true", CURLFORM_END);

        curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
        result_code = curl_easy_perform(curl);
        if (result_code != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s
",
                    curl_easy_strerror(result_code));
            is_success = 1;
            return is_success;
        }
        json_result = logo_result;
        curl_easy_cleanup(curl);
        is_success = 0;
    } else {
        fprintf(stderr, "curl_easy_init() failed.");
        is_success = 1;
    }
    return is_success;
}
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web;

namespace com.baidu.ai
{
    public class Logo
    {
        // logo商标识别
        public static string logo()
        {
            string token = "[调用鉴权接口获取的token]";
            string host = "https://aip.baidubce.com/rest/2.0/image-classify/v2/logo?access_token=" + token;
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.KeepAlive = true;
            // 图片的base64编码
            string base64 = FileUtils.getFileBase64("[本地图片文件]");
            String str = "image=" + HttpUtility.UrlEncode(base64) + "&custom_lib=" + true;
            byte[] buffer = encoding.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string result = reader.ReadToEnd();
            Console.WriteLine("logo商标识别:");
            Console.WriteLine(result);
            return result;
        }
    }
}