开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
车辆分析

    车辆属性识别

    接口描述

    传入单帧图像,检测图片中所有车辆,返回每辆车的类型和坐标位置,可识别小汽车、卡车、巴士、摩托车、三轮车、自行车6大类车辆,并针对小汽车识别11种外观属性,包括:是否有车窗雨眉、是否有车顶架、副驾驶是否有人、驾驶位是否系安全带、遮阳板是否放下、车辆朝向等

    当前主要适用于普通监控场景,如道路、停车场等,无人机高空拍摄的图片,因车辆目标较小,识别效果可能欠佳,后续会扩展支持超高空拍摄场景,如有该场景的需求,请通过QQ群或提交工单,详细沟通测试情况。

    注:

    1、邀测的接口,不能直接在控制台调用,可通过QQ群(659268104)联系群管、或提交工单申请开通测试权限

    2、邀测的接口,暂未封装服务端SDK,只能通过API调用

    普通监控场景示例图片:

    请求说明

    请求示例

    HTTP 方法:POST

    请求URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr

    URL参数:

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

    Header如下:

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

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

    请求参数

    参数 是否必选 类型 取值范围 说明
    image 和url二选一 string 0-255彩色图像(base64编码) 图像数据,Base64编码字符串,不超过4M。最短边至少50px,最长边最多4096px。支持图片格式:jpg/bmp/png。 注意:图片的base64编码是不包含图片头的,如(data:image/jpg;base64,)
    url 和image二选一 string - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少50px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效。
    type string 是否选定某些属性输出对应的信息,可从12种输出属性中任选若干,用英文逗号分隔(例如vehicle_type,roof_rack,skylight)。默认输出全部属性

    附:type字段说明

    ID type 说明 类别数 类别
    0 vehicle_type 车辆类型 6 小汽车、卡车、公交车、摩托、三轮车、自行车
    1 window_rain_eyebrow 是否有车窗雨眉 2 无车窗雨眉、有车窗雨眉
    2 roof_rack 是否有车顶架 2 无车顶架、有车顶架
    3 skylight 是否有天窗 2 无天窗、有天窗
    4 in_car_item 是否有车内摆放物 2 无车内摆放物、有车内摆放物
    5 rearview_item 是否有后视镜悬挂物 2 无后视镜悬挂物、有后视镜悬挂物
    6 copilot 副驾驶是否有人 2 副驾驶无人、副驾驶有人
    7 driver_belt 驾驶位是否系安全带 2 驾驶位未系安全带、驾驶位系安全带
    8 copilot_belt 副驾驶位是否系安全带 2 副驾驶位未系安全带、副驾驶位系安全带
    9 driver_visor 驾驶位遮阳板是否放下 2 驾驶位遮阳板未放下、驾驶位遮阳板放下
    10 copilot_visor 副驾驶位遮阳板是否放下 2 副驾驶位遮阳板未放下、副驾驶位遮阳板放下
    11 direction 车辆朝向 8 正前方,右前方,正右方,右后方,正后方,左后方,正左方,左前方

    请求代码示例

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

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

    curl -i -k 'https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr?access_token=【调用鉴权接口获取的token】' --data 'image=【图片Base64编码,需UrlEncode】' -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/v1/vehicle_attr?access_token=' . $token;
    $img = file_get_contents('[本地文件路径]');
    $img = base64_encode($img);
    $bodys = array(
        'image' => $img
    );
    $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;
    
    /**
    * 车辆分析—车辆属性识别
    */
    public class VehicleAttr {
    
        /**
        * 重要提示代码中所需工具类
        * 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 vehicle_attr() {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr";
            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) {
            VehicleAttr.vehicle_attr();
        }
    }
    # encoding:utf-8
    
    import requests
    import base64
    
    '''
    车辆分析—车辆属性识别
    '''
    
    request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr"
    # 二进制方式打开图片文件
    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())
    #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/v1/vehicle_attr";
    static std::string vehicle_attr_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格式
        vehicle_attr_result = std::string((char *) ptr, size * nmemb);
        return size * nmemb;
    }
    /**
     * 车辆分析—车辆属性识别
     * @return 调用成功返回0,发生错误返回其他错误码
     */
    int vehicle_attr(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 = vehicle_attr_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 VehicleAttr
        {
            // 车辆分析—车辆属性识别
            public static string vehicle_attr()
            {
                string token = "[调用鉴权接口获取的token]";
                string host = "https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr?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;
            }
        }
    }

    返回说明

    返回参数

    字段 是否必选 类型 说明
    vehicle_num int 检测到的车辆框数目
    vehicle_info object数组 每个车辆检测框的具体信息
    +location object 检测到的车辆框位置
    ++left int 检测框左坐标
    ++top int 检测框顶坐标
    ++width int 检测框宽度
    ++height int 检测框高度
    +attributes object数组 包含所有车辆属性内容
    ++vehicle_type object 车辆类型
    +++name string 如"小汽车"
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值
    ++window_rain_eyebrow object 是否有车窗雨眉
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大(即有车窗雨眉),实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.02
    ++roof_rack object 是否有车顶架
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.01
    ++skylight object 是否有天窗
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.5
    ++in_car_item object 是否有车内摆放物
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.35
    ++rearview_item object 是否有后视镜悬挂物
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.4
    ++copilot object 副驾驶是否有人
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.55
    ++driver_belt object 驾驶位是否系安全带
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.75
    ++copilot_belt object 副驾驶位是否系安全带
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.85
    ++driver_visor object 驾驶位遮阳板是否放下
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.2
    ++copilot_visor object 副驾驶位遮阳板是否放下
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值,推荐阈值0.1
    ++direction object 车辆朝向
    +++name string 如"正前方"
    +++score float 对应概率分数,分数越大代表属性的正向取值可能性越大,实际应用中可根据测试情况选取合适的score阈值

    返回示例

    未检测到任何车辆:

        {
            "vehicle_num": 0,
            "vehicle_info":
            [
                {
                    "location":
                    {
                        "left": 0,
                        "top": 0,
                        "width": 0,
                        "height": 0
                        "score": 0
                     }
                    "attributes":
                    {
                    }
                }
            ]
        }

    检测到2辆小汽车:

        {
             "vehicle_num": 2,
             "vehicle_info":
             [
                {
                    "location":
                    {
                        "left": 100,
                        "top": 200,
                        "width": 200,
                        "height": 400
                    }
                    "attributes":
                    {
                        "vehicle_type":
                        {
                            "name": "小汽车",
                            "score": 0.852
                        }
                         "window_rain_eyebrow":
                        {
                            "score": 0.937
                        }
                        "roof_rack":
                        {
                            "score": 0.889
                        }
                        "skylight":
                        {
                            "score": 0.925
                        }
                        "in_car_item":
                        {
                            "score": 0.774
                        }
                        "rearview_item":
                        {
                            "score": 0.774
                        }
                        "copilot":
                        {
                            "score": 0.711
                        }
                        "driver_belt":
                        {
                            "score": 0.633
                        }
                        "copilot_belt":
                        {
                            "score": 0.721
                        }
                        "driver_visor":
                        {
                            "score": 0.455
                        }
                        "copilot_visor":
                        {
                            "score": 0.455
                        }
                        "direction":
                        {
                            "name": "正前方",
                            "score": 0.455
                        }
                    }
                }
                {
                    "location":
                    {
                        "left": 400,
                        "top": 200,
                        "width": 200,
                        "height": 400
                    }
                    "attributes":
                    {
                        "vehicle_type":
                        {
                            "name": "小汽车",
                            "score": 0.921
                        }
                        "window_rain_eyebrow":
                        {
                            "score": 0.918
                        }
                        "roof_rack":
                        {
                            "score": 0.850
                        }
                        "skylight":
                        {
                            "score": 0.714
                        }
                        "in_car_item":
                        {
                            "score": 0.787
                        }
                        "rearview_item":
                        {
                            "score": 0.787
                        }
                        "copilot":
                        {
                            "score": 0.711
                        }
                        "driver_belt":
                        {
                            "score": 0.633
                        }
                        "copilot_belt":
                        {
                            "score": 0.721
                        }
                        "driver_visor":
                        {
                            "score": 0.455
                        }
                        "copilot_visor":
                        {
                            "score": 0.455
                        }
                        "direction":
                        {
                            "name": "右前方",
                            "score": 0.455
                        }
                    }
                 }
             ]
        }
    上一篇
    车流统计(邀测)
    下一篇
    车辆分割(邀测)