资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

API调用方法

简介

本文档主要说明如何使用翻拍识别API,如有疑问可以通过以下方式联系我们:

  • 在百度云控制台内提交工单,咨询问题类型请选择人工智能服务

接口鉴权

  1. 进入EasyDL零售版的百度云控制台应用列表页面,如下图所示:

1.png

  1. 如果还未创建应用,请点击「创建应用」按钮进行创建。创建应用后,参考鉴权参考文档,使用API Key(AK)和Secret Key(SK)获取access_token

接口调用

请求说明

请求示例

HTTP 方法:POST

商品陈列翻拍识别请求URL: https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture

URL参数:

参数
access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Type application/json

注意:如果出现336001和336002的错误码很可能是因为请求方式错误,与其他图像识别服务不同的是定制化图像识别服务以json方式请求。

Body请求示例:

{
    "image": "<base64数据>"
}

Body中放置请求参数,参数详情如下:

请求参数

参数 是否必选 类型 可选值范围 说明
image string - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 注意请去掉头部

提示:image参数中“去掉头部”指的是图片经base64编码后的头部信息「data:image/jpeg;base64,」,如下图所示:

<?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/rpc/2.0/easydl/v1/retail/recapture?access_token=' . $token;
$bodys = "{\"image\":\"sfasq35sadvsvqwr5q...\"}"
$res = request_post($url, $bodys);

var_dump($res);
package com.baidu.ai.aip;

import com.baidu.ai.aip.utils.HttpUtil;
import com.baidu.ai.aip.utils.GsonUtils;

import java.util.*;

/**
* EasyDL零售版翻拍识别
*/
public class EasydlImageClassify {

    /**
    * 重要提示代码中所需工具类
    * 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 easydlImageClassify() {
        // 请求url
        String url = "https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture";
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("image", "sfasq35sadvsvqwr5q...");

            String param = GsonUtils.toJson(map);

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

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

    public static void main(String[] args) {
        EasydlImageClassify.easydlImageClassify();
    }
}
"""
EasyDL零售版翻拍识别
"""

import json
import base64
import requests
"""
使用 requests 库发送请求
使用 pip(或者 pip3)检查我的 python3 环境是否安装了该库,执行命令
  pip freeze | grep requests
若返回值为空,则安装该库
  pip install requests
"""


# 目标图片的 本地文件路径,支持jpg/png/bmp格式
IMAGE_FILEPATH = "【您的测试图片地址,例如:./example.jpg】"


# 翻拍识别接口地址
MODEL_API_URL = "https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture"

# 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
# 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
ACCESS_TOKEN = "【您的ACCESS_TOKEN】"
API_KEY = "【您的API_KEY】"
SECRET_KEY = "【您的SECRET_KEY】"


print("1. 读取目标图片 '{}'".format(IMAGE_FILEPATH))
with open(IMAGE_FILEPATH, 'rb') as f:
    base64_data = base64.b64encode(f.read())
    base64_str = base64_data.decode('UTF8')
print("将 BASE64 编码后图片的字符串填入 PARAMS 的 'image' 字段")
PARAMS["image"] = base64_str


if not ACCESS_TOKEN:
    print("2. ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")
    auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"\
               "&client_id={}&client_secret={}".format(API_KEY, SECRET_KEY)
    auth_resp = requests.get(auth_url)
    auth_resp_json = auth_resp.json()
    ACCESS_TOKEN = auth_resp_json["access_token"]
    print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
else:
    print("2. 使用已有 ACCESS_TOKEN")


print("3. 向模型接口 'MODEL_API_URL' 发送请求")
request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
response = requests.post(url=request_url, json=PARAMS)
response_json = response.json()
response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
print("结果:\n{}".format(response_str))
#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/rpc/2.0/easydl/v1/retail/recapture";
static std::string easydlImageClassify_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格式
    easydlImageClassify_result = std::string((char *) ptr, size * nmemb);
    return size * nmemb;
}
/**
 * EasyDL零售版翻拍识别
 * @return 调用成功返回0,发生错误返回其他错误码
 */
int easydlImageClassify(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_slist *headers = NULL;
        headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"image\":\"sfasq35sadvsvqwr5q...\"}");
        result_code = curl_easy_perform(curl);
        if (result_code != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(result_code));
            is_success = 1;
            return is_success;
        }
        json_result = easydlImageClassify_result;
        curl_easy_cleanup(curl);
        is_success = 0;
    } else {
        fprintf(stderr, "curl_easy_init() failed.");
        is_success = 1;
    }
    return is_success;
}

返回说明

返回参数

字段 是否必选 类型 说明
log_id number 唯一的log id,用于问题定位
results array(object) 分类结果数组
+name string 分类名称,结果会返回“recapture”和“original”两类,recapture为翻拍,original为原图。
+score number 置信度,分别返回“recapture”和“original”两类的置信度

建议翻拍判定方法

设定一个判定为翻拍图片的阈值,即如果recapture的score大于这个值,则认为这张图片是翻拍。通常有两中对应的业务模式:

注:以下数值均为建议值,实际应用的阈值请结合业务实际情况和实测结果进行设定

  1. 业务里查翻拍的原则是宁可错杀一千,也不愿错放一个的,那么可以把认为是翻拍的阈值放在0.8~0.95。
  2. 业务里查翻拍的原则是允许错放过一些翻拍的图片,但是查到的一定要对,那么可以把认为是翻拍的阈值放在0.98甚至0.99。
上一篇
购买指南
下一篇
错误码