图像识别

    门脸识别


    门脸识别包含两项能力:

    1. 一项为基于文字识别技术的门脸文字识别,在百度云控制台的文字识别类别中
    2. 一项是基于图片检索技术的门脸图片识别(在百度云控制台的名称为门脸识别),在百度云控制台的图像识别类别中

    下面分别介绍两项能力的接口使用方法。

    门脸文字识别

    针对含有门脸/门头的图片进行专项优化,支持识别门脸/门头上的文字内容。

    申请邀测权限

    该接口正在邀测中,请加入QQ群(ID:1009661589)或提交工单申请邀测权限。

    加入QQ群后私信管理员或群主提供联系方式和应用APPID,如未创建应用,请参考下一小节内容进行创建。

    创建应用

    如果已在百度云控制台创建图像识别应用,该部分可以跳过。

    1. 进入文字识别在百度云的控制台,如下图所示

    facade-ocr-console1.png

    1. 创建应用

    点击「创建应用」后,按要求填入相应信息后完成应用创建。

    请求说明

    请求示例

    HTTP 方法:POST

    请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/facade

    URL参数:

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

    Header如下:

    参数
    Content-Type application/x-www-form-urlencoded

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

    请求参数

    参数 是否必选 类型 可选值范围 说明
    image string - 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效

    请求代码示例

    提示一:使用示例代码前,请记得替换其中的示例Token、图片地址或Base64信息。

    提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。

    curl -i -k 'https://aip.baidubce.com/rest/2.0/ocr/v1/facade?access_token=【调用鉴权接口获取的token】' --data 'image=【图片Base64编码,需UrlEncode】' -H 'Content-Type:application/x-www-form-urlencoded'
    # encoding:utf-8
    
    import requests
    import base64
    
    '''
    门脸文字识别
    '''
    
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/facade"
    # 二进制方式打开图片文件
    f = open('[本地文件]', 'rb')
    img = base64.b64encode(f.read())
    
    params = {"image":img}
    access_token = '[调用鉴权接口获取的token]'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())
    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;
    
    /**
    * 门脸文字识别
    */
    public class facade {
    
        /**
        * 重要提示代码中所需工具类
        * 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 facade() {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/facade";
            try {
                // 本地文件路径
                String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取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) {
            WebImage.webImage();
        }
    }
    #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/ocr/v1/facade";
    static std::string webImage_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格式
        webImage_result = std::string((char *) ptr, size * nmemb);
        return size * nmemb;
    }
    /**
    * 门脸文字识别
    * @return 调用成功返回0,发生错误返回其他错误码
    */
    int webImage(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_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\n",
                        curl_easy_strerror(result_code));
                is_success = 1;
                return is_success;
            }
            json_result = webImage_result;
            curl_easy_cleanup(curl);
            is_success = 0;
        } else {
            fprintf(stderr, "curl_easy_init() failed.");
            is_success = 1;
        }
        return is_success;
    }
    <?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/ocr/v1/facade?access_token=' . $token;
    $img = file_get_contents('[本地文件路径]');
    $img = base64_encode($img);
    $bodys = array(
        'image' => $img
    );
    $res = request_post($url, $bodys);
    
    var_dump($res);
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace com.baidu.ai
    {
        public class WebImage
        {
            // 门脸文字识别
            public static string webImage()
            {
                string token = "[调用鉴权接口获取的token]";
                string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/facade?access_token=" + token;
                Encoding encoding = Encoding.Default;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
                request.Method = "post";
                request.KeepAlive = true;
                // 图片的base64编码
                string base64 = getFileBase64("[本地图片文件]");
                String str = "image=" + HttpUtility.UrlEncode(base64);
                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("门脸文字识别:");
                Console.WriteLine(result);
                return result;
            }
    
            public static String getFileBase64(String fileName) {
                FileStream filestream = new FileStream(fileName, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Read(arr, 0, (int)filestream.Length);
                string baser64 = Convert.ToBase64String(arr);
                filestream.Close();
                return baser64;
            }
        }
    }

    返回说明

    返回参数

    字段 是否必选 类型 说明
    log_id uint64 唯一的log id,用于问题定位
    words_result_num uint32 识别结果数,表示words_result的元素个数
    words_result array[] 定位和识别结果数组
    +words string 识别结果字符串

    返回示例

    {
        "log_id": 341559937361307312,
        "words_result_num": 3,
        "words_result": [
                {
                "words": "千千超市"
                },
                {
                "words": "No"
                },
                {
                "words": "701"
                }
        ]
    }

    门脸识别(门脸图片识别)

    该请求用于检测和识别图片中的门脸信息。即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中门脸的名称、位置和置信度。

    申请邀测权限

    该接口正在邀测中,请加入QQ群(ID:1009661589)或提交工单申请邀测权限。

    加入QQ群后私信管理员或群主提供联系方式和应用APPID,如未创建应用,请参考下一小节内容进行创建。

    创建应用

    如果已在百度云控制台创建图像识别应用,该部分可以跳过。

    1. 进入图像识别在百度云的控制台,如下图所示

    yun1.png

    1. 创建应用

    按要求填入相应信息后完成应用创建

    1. 自建门脸库

    当公库识别效果欠佳时,可以在应用列表页面,点击进入应用详情页面,在页面最下方可申请创建门脸库,完成创建后即可获得800W张图库容量的私有门脸库,如下图所示,之后可通过调用门脸入库接口完成门脸图片入库,提高识别效果。

    facade.png

    接口鉴权

    1. 进入图像识别的百度云控制台应用列表页面,如下图所示:

    2.png

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

    门脸识别—检索

    接口描述:用于识别门脸信息

    请求说明

    HTTP 方法:POST

    请求URL: https://aip.baidubce.com/rest/2.0/realtime_search/v1/facade

    URL参数:

    参数
    access_token 通过API Key和Secret Key获取的access_token,参考鉴权认证机制文档

    Header如下:

    参数
    Content-Type application/x-www-form-urlencoded

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

    请求参数

    参数 是否必选 类型 可选值范围 说明
    image string - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式.注意:图片需要base64编码、去掉编码头后再进行urlencode。
    threshold number 0-1 默认0.9,可自定义阈值,支持精确到小数点后两位
    custom_lib number - 默认0。0为只检索公库;1为只检索自建库;2为检索公库+自建库。其余数字为默认只检索公库

    返回说明

    返回参数

    字段 是否必选 类型 说明
    log_id uint64 唯一的log id,用于问题定位
    result_num uint32 识别结果数,标识返回结果数目
    result array() 返回结果数组,每一项为一个识别出的门脸
    +location object 位置信息(左起像素位置、上起像素位置、像素宽、像素高)
    ++left number 坐起像素位置
    ++top number 上起像素位置
    ++width number 像素宽
    ++height number 像素高
    +contsign string 门脸库内图片的签名,可用于调用「门脸识别-删除」接口删除门脸库中图片
    +brief string 识别的门脸信息
    +probability number 分类结果置信度(0--1.0)
    +type number 标识返回的识别结果为公库或自建库,type=0时,为公库;type=1时,为自建库

    门脸识别—入库

    接口描述:用于为自建门脸库上传门脸图片

    当公库识别效果欠佳时,可以在控制台创建应用并创建门脸库,如下图所示,并通过调用门脸入库接口完成门脸图片入库,提高识别效果。

    facade.png

    门脸图片入库说明

    入库的门脸图片需要是待识别门脸的紧致包围盒图像,以下图举例

    1570689844561.jpeg

    如果要识别的是上图中的门脸“云之家超市”,那么需要入库的图片应该是仅包含“云之家超市”的图片,如下图所示:

    yunzhijia.png

    请求说明

    HTTP 方法:POST

    请求URL: https://aip.baidubce.com/rest/2.0/realtime_search/v1/facade/add

    URL参数:

    参数
    access_token 通过API Key和Secret Key获取的access_token,参考鉴权认证机制文档

    Header如下:

    参数
    Content-Type application/x-www-form-urlencoded

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

    请求参数

    参数 是否必选 类型 可选值范围 说明
    image string - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式.注意:图片需要base64编码、去掉编码头后再进行urlencode。
    brief string - 必须为json格式,最长支持512字节,识别时接口返回,可以填入门脸名称、图片名称、门脸地理位置等信息

    返回说明

    返回参数

    字段 是否必选 类型 说明
    log_id uint64 唯一的log id,用于问题定位
    contsign string 门脸库内图片的签名,可用于调用「门脸识别-删除」接口删除门脸库中图片

    门脸识别—删除

    接口描述:用于删除自建门脸库中的门脸图片

    请求说明

    HTTP 方法:POST

    请求URL: https://aip.baidubce.com/rest/2.0/realtime_search/v1/facade/delete

    URL参数:

    参数
    access_token 通过API Key和Secret Key获取的access_token,参考鉴权认证机制文档

    Header如下:

    参数
    Content-Type application/x-www-form-urlencoded

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

    请求参数

    参数 是否必选 类型 可选值范围 说明
    image string - base64编码后的图片数据(和cont_sign二选一)。要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式. 注意:图片需要base64编码、去掉编码头后再进行urlencode。
    cont_sign string - 门脸库内图片的签名(和image二选一,image优先级更高)

    返回说明

    返回参数

    字段 是否必选 类型 说明
    log_id uint64 唯一的log id,用于问题定位

    错误码

    若请求错误,服务器将返回的JSON文本包含以下参数:

    • error_code:错误码。
    • error_msg:错误描述信息,帮助理解和解决发生的错误。

    例如Access Token失效返回:

    {
      "error_code": 110,
      "error_msg": "Access token invalid or no longer valid"
    }

    需要重新获取新的Access Token再次请求即可。

    错误码 错误信息 描述
    1 Unknown error 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
    2 Service temporarily unavailable 服务暂不可用,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
    3 Unsupported openapi method 调用的API不存在,请检查后重新尝试
    4 Open api request limit reached 集群超限额
    6 No permission to access data 无权限访问该用户数据
    13 Get service token failed 获取token失败
    14 IAM Certification failed IAM鉴权失败
    15 app not exsits or create failed 应用不存在或者创建失败
    17 Open api daily request limit reached 每天请求量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请通过QQ群(659268104)联系群管手动提额
    18 Open api qps request limit reached QPS超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请通过QQ群(659268104)联系群管手动提额
    19 Open api total request limit reached 请求总量超限额,已上线计费的接口,请直接在控制台开通计费,调用量不受限制,按调用量阶梯计费;未上线计费的接口,请通过QQ群(659268104)联系群管手动提额
    100 Invalid parameter 无效的access_token参数,请检查后重新尝试
    110 Access token invalid or no longer valid access_token无效
    111 Access token expired access token过期
    216100 invalid param 请求中包含非法参数,请检查后重新尝试
    216101 not enough param 缺少必须的参数,请检查参数是否有遗漏
    216102 service not support 请求了不支持的服务,请检查调用的url
    216103 param too long 请求中某些参数过长,请检查后重新尝试
    216110 appid not exist appid不存在,请重新核对信息是否为后台应用列表中的appid
    216200 empty image 图片为空,请检查后重新尝试
    216201 image format error 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、JPEG、BMP,请进行转码或更换图片
    216202 image size error 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096*4096,请重新上传图片
    216203 image size error 上传的图片base64编码有误,请校验base64编码方式,并重新上传图片
    216630 recognize error 识别错误,请再次请求,如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
    216631 recognize bank card error 识别银行卡错误,出现此问题的原因一般为:您上传的图片非银行卡正面,上传了异形卡的图片或上传的银行卡正品图片不完整
    216633 recognize idcard error 识别身份证错误,出现此问题的原因一般为:您上传了非身份证图片或您上传的身份证图片不完整
    216634 detect error 检测错误,请再次请求,如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
    216681 item has existed 添加入库的图片已经在库里,完全相同(Base64编码相同)的图片不能重复入库
    282000 internal error 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队。
    282003 missing parameters: {参数名} 请求参数缺失
    282005 batch  processing error 处理批量任务时发生部分或全部错误,请根据具体错误码排查
    282006 batch task  limit reached 批量任务处理数量超出限制,请将任务数量减少到10或10以下
    282100 image transcode error 图片压缩转码错误
    282101 image split limit reached 长图片切分数量超限
    282102 target detect error 未检测到图片中识别目标
    282103 target recognize error 图片目标识别错误
    282110 urls not exit URL参数不存在,请核对URL后再次提交
    282111 url format illegal URL格式非法,请检查url格式是否符合相应接口的入参要求
    282112 url download timeout url下载超时,请检查url对应的图床/图片无法下载或链路状况不好,您可以重新尝试一下,如果多次尝试后仍不行,建议更换图片地址
    282113 url response invalid URL返回无效参数
    282114 url size error URL长度超过1024字节或为0
    282808 request id: xxxxx not exist request id xxxxx 不存在
    282809 result type error 返回结果请求错误(不属于excel或json)
    282810 image recognize error 图像识别错误
    283300 Invalid argument 入参格式有误,可检查下图片编码、代码格式是否有误
    336000 Internal error 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(659268104)或工单联系技术支持团队
    336001 Invalid Argument 入参格式有误,比如缺少必要参数、图片base64编码错误等等,可检查下图片编码、代码格式是否有误。有疑问请通过QQ群(659268104)或工单联系技术支持团队
    上一篇
    地标识别
    下一篇
    图像多主体检测