API调用方法
更新时间:2023-11-29
简介
本文档主要说明如何使用翻拍识别API,如有疑问可以通过以下方式联系我们:
- 在百度云控制台内提交工单,咨询问题类型请选择人工智能服务
接口鉴权
- 进入EasyDL零售版的百度云控制台应用列表页面,如下图所示:
- 如果还未创建应用,请点击「创建应用」按钮进行创建。创建应用后,参考鉴权参考文档,使用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请求示例:
Plain Text
1{
2 "image": "<base64数据>"
3}
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
image | 是 | string | - | 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 注意请去掉头部 |
提示:image参数中“去掉头部”指的是图片经base64编码后的头部信息「data:image/jpeg;base64,」,如下图所示:
1<?php
2/**
3 * 发起http post请求(REST API), 并获取REST请求的结果
4 * @param string $url
5 * @param string $param
6 * @return - http response body if succeeds, else false.
7 */
8function request_post($url = '', $param = '')
9{
10 if (empty($url) || empty($param)) {
11 return false;
12 }
13
14 $postUrl = $url;
15 $curlPost = $param;
16 // 初始化curl
17 $curl = curl_init();
18 curl_setopt($curl, CURLOPT_URL, $postUrl);
19 curl_setopt($curl, CURLOPT_HEADER, 0);
20 // 要求结果为字符串且输出到屏幕上
21 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
22 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
23 // post提交方式
24 curl_setopt($curl, CURLOPT_POST, 1);
25 curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
26 // 运行curl
27 $data = curl_exec($curl);
28 curl_close($curl);
29
30 return $data;
31}
32
33$token = '[调用鉴权接口获取的token]';
34$url = 'https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture?access_token=' . $token;
35$bodys = "{\"image\":\"sfasq35sadvsvqwr5q...\"}"
36$res = request_post($url, $bodys);
37
38var_dump($res);
1package com.baidu.ai.aip;
2
3import com.baidu.ai.aip.utils.HttpUtil;
4import com.baidu.ai.aip.utils.GsonUtils;
5
6import java.util.*;
7
8/**
9* EasyDL零售版翻拍识别
10*/
11public class EasydlImageClassify {
12
13 /**
14 * 重要提示代码中所需工具类
15 * FileUtil,Base64Util,HttpUtil,GsonUtils请从
16 * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
17 * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
18 * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
19 * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
20 * 下载
21 */
22 public static String easydlImageClassify() {
23 // 请求url
24 String url = "https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture";
25 try {
26 Map<String, Object> map = new HashMap<>();
27 map.put("image", "sfasq35sadvsvqwr5q...");
28
29 String param = GsonUtils.toJson(map);
30
31 // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
32 String accessToken = "[调用鉴权接口获取的token]";
33
34 String result = HttpUtil.post(url, accessToken, "application/json", param);
35 System.out.println(result);
36 return result;
37 } catch (Exception e) {
38 e.printStackTrace();
39 }
40 return null;
41 }
42
43 public static void main(String[] args) {
44 EasydlImageClassify.easydlImageClassify();
45 }
46}
1"""
2EasyDL零售版翻拍识别
3"""
4
5import json
6import base64
7import requests
8"""
9使用 requests 库发送请求
10使用 pip(或者 pip3)检查我的 python3 环境是否安装了该库,执行命令
11 pip freeze | grep requests
12若返回值为空,则安装该库
13 pip install requests
14"""
15
16
17# 目标图片的 本地文件路径,支持jpg/png/bmp格式
18IMAGE_FILEPATH = "【您的测试图片地址,例如:./example.jpg】"
19
20
21# 翻拍识别接口地址
22MODEL_API_URL = "https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture"
23
24# 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
25# 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
26ACCESS_TOKEN = "【您的ACCESS_TOKEN】"
27API_KEY = "【您的API_KEY】"
28SECRET_KEY = "【您的SECRET_KEY】"
29
30
31print("1. 读取目标图片 '{}'".format(IMAGE_FILEPATH))
32with open(IMAGE_FILEPATH, 'rb') as f:
33 base64_data = base64.b64encode(f.read())
34 base64_str = base64_data.decode('UTF8')
35print("将 BASE64 编码后图片的字符串填入 PARAMS 的 'image' 字段")
36PARAMS["image"] = base64_str
37
38
39if not ACCESS_TOKEN:
40 print("2. ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")
41 auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"\
42 "&client_id={}&client_secret={}".format(API_KEY, SECRET_KEY)
43 auth_resp = requests.get(auth_url)
44 auth_resp_json = auth_resp.json()
45 ACCESS_TOKEN = auth_resp_json["access_token"]
46 print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
47else:
48 print("2. 使用已有 ACCESS_TOKEN")
49
50
51print("3. 向模型接口 'MODEL_API_URL' 发送请求")
52request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
53response = requests.post(url=request_url, json=PARAMS)
54response_json = response.json()
55response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
56print("结果:\n{}".format(response_str))
1#include <iostream>
2#include <curl/curl.h>
3
4// libcurl库下载链接:https://curl.haxx.se/download.html
5// jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
6const static std::string request_url = "https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/recapture";
7static std::string easydlImageClassify_result;
8/**
9 * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
10 * @param 参数定义见libcurl文档
11 * @return 返回值定义见libcurl文档
12 */
13static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
14 // 获取到的body存放在ptr中,先将其转换为string格式
15 easydlImageClassify_result = std::string((char *) ptr, size * nmemb);
16 return size * nmemb;
17}
18/**
19 * EasyDL零售版翻拍识别
20 * @return 调用成功返回0,发生错误返回其他错误码
21 */
22int easydlImageClassify(std::string &json_result, const std::string &access_token) {
23 std::string url = request_url + "?access_token=" + access_token;
24 CURL *curl = NULL;
25 CURLcode result_code;
26 int is_success;
27 curl = curl_easy_init();
28 if (curl) {
29 curl_easy_setopt(curl, CURLOPT_URL, url.data());
30 curl_easy_setopt(curl, CURLOPT_POST, 1);
31 curl_slist *headers = NULL;
32 headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
33 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
34 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"image\":\"sfasq35sadvsvqwr5q...\"}");
35 result_code = curl_easy_perform(curl);
36 if (result_code != CURLE_OK) {
37 fprintf(stderr, "curl_easy_perform() failed: %s\n",
38 curl_easy_strerror(result_code));
39 is_success = 1;
40 return is_success;
41 }
42 json_result = easydlImageClassify_result;
43 curl_easy_cleanup(curl);
44 is_success = 0;
45 } else {
46 fprintf(stderr, "curl_easy_init() failed.");
47 is_success = 1;
48 }
49 return is_success;
50}
返回说明
返回参数
字段 | 是否必选 | 类型 | 说明 |
---|---|---|---|
log_id | 是 | number | 唯一的log id,用于问题定位 |
results | 否 | array(object) | 分类结果数组 |
+name | 否 | string | 分类名称,结果会返回“recapture”和“original”两类,recapture为翻拍,original为原图。 |
+score | 否 | number | 置信度,分别返回“recapture”和“original”两类的置信度 |
建议翻拍判定方法
设定一个判定为翻拍图片的阈值,即如果recapture的score大于这个值,则认为这张图片是翻拍。通常有两中对应的业务模式:
注:以下数值均为建议值,实际应用的阈值请结合业务实际情况和实测结果进行设定
- 业务里查翻拍的原则是宁可错杀一千,也不愿错放一个的,那么可以把认为是翻拍的阈值放在0.8~0.95。
- 业务里查翻拍的原则是允许错放过一些翻拍的图片,但是查到的一定要对,那么可以把认为是翻拍的阈值放在0.98甚至0.99。