开车如果不知道“海燕系统”,恐怕你要被罚款罚到腿软了。
以往在电影中出现的场景,已经在“海燕系统”中实现了。“海燕系统”不仅能完成智能辨认抓拍,还能对采集来的大数据进行二次分析,识别出车辆的车标、细分车型、车身颜色、年检标、车摆物、是否系安全带等一系列细节信息。利用百度提供的API接口,我们可以搭建自己的“海燕系统”,本文先从利用车辆属性识别API,识别司机是否系安全带说起。
一.平台接入
此步骤比较简单,不多阐述。可参照之前文档:
https://ai.baidu.com/forum/topic/show/943028
二.分析接口文档
1. 接口API
https://ai.baidu.com/docs#/ImageClassify-API/29196fe3
(1)接口描述
检测图片中所有车辆,返回每辆车的类型和坐标位置,可识别小汽车、卡车、巴士、摩托车、三轮车、自行车6大类车辆,并针对小汽车识别11种外观属性,包括:是否有车窗雨眉、是否有车顶架、副驾驶是否有人、驾驶位是否系安全带、遮阳板是否放下、车辆朝向等。
(2)请求说明
需要用到的信息有:
请求URL:https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr
Header格式:Content-Type:application/x-www-form-urlencoded
请求参数:
附:type字段说明
(3)返回示例
{'log_id': 8296612782826163523, 'vehicle_info': [{'attributes': {'copilot': {'score': 0.9637151956558228}, 'copilot_belt': {'score': 0.2371468544006348}, 'copilot_visor': {'score': 0.01172924041748047}, 'direction': {'name': '正前方', 'score': 0.7401106357574463}, 'driver_belt': {'score': 0.7797645330429077}, 'driver_visor': {'score': 0.001996934413909912}, 'in_car_item': {'score': 0.9681501984596252}, 'rearview_item': {'score': 0.9463440775871277}, 'roof_rack': {'score': 0.08109265565872192}, 'skylight': {'score': 0.9997358918190002}, 'vehicle_type': {'name': '小汽车', 'score': 0.9998549222946167}, 'window_rain_eyebrow': {'score': 0.0002390742301940918}}, 'location': {'height': 386, 'left': 316, 'top': 153, 'width': 381}}], 'vehicle_num': 1}
2.获取access_token
#client_id 为官网获取的AK, client_secret 为官网获取的SK client_id =【百度云应用的AK】 client_secret =【百度云应用的SK】 #获取token def get_token(): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret request = urllib.request.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib.request.urlopen(request) token_content = response.read() if token_content: token_info = json.loads(token_content.decode("utf-8")) token_key = token_info['access_token'] return token_key
三.识别结果
识别结果:
车辆个数: 1
是否系安全带: 0.7797645330429077
花费时长: 1.76 s
识别结果方面:可以看出,识别结果还是不错。识别出了驾驶位系了安全带,副驾驶位有人且未系安全带。
处理速度方面:处理时间1.76s,可以接受。
四.源码共享
# -*- coding: utf-8 -*- #!/usr/bin/env python import os import requests import base64 import json from pprint import pprint import time #client_id 为官网获取的AK, client_secret 为官网获取的SK api_key = '****************' secret_key = '******************' class LandmarkRecognizer(object): def __init__(self, api_key, secret_key): self.access_token = self._get_access_token(api_key=api_key, secret_key=secret_key) self.API_URL = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr' + '?access_token=' \ + self.access_token #获取token @staticmethod def _get_access_token(api_key, secret_key): api = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \ '&client_id={}&client_secret={}'.format(api_key, secret_key) rp = requests.post(api) if rp.ok: rp_json = rp.json() # print(rp_json['access_token']) return rp_json['access_token'] else: print('=> Error in get access token!') def get_result(self, params): rp = requests.post(self.API_URL, data=params) if rp.ok: # print('=> Success! got result: ') rp_json = rp.json() pprint(rp_json) return rp_json else: print('=> Error! token invalid or network error!') print(rp.content) return None #识别车辆属性 def detect(self, img_path): f = open(img_path, 'rb') strover = '识别结果:' img_str = base64.b64encode(f.read()) params = {'image': img_str} tic = time.clock() rp_json = self.get_result(params) toc = time.clock() # pprint(rp_json) vehicle_num = rp_json['vehicle_num'] strover += '车辆个数: {} \n '.format(vehicle_num) vehicle_info = rp_json['vehicle_info'] strover += '是否系安全带: {} \n '.format(vehicle_info[0]['attributes']['driver_belt']['score']) print(strover) print('花费时长: '+'%.2f' %(toc - tic) +' s') if __name__ == '__main__': recognizer = LandmarkRecognizer(api_key, secret_key) img = 'F:\paddle\s9.jpeg' recognizer.detect(img)
五.意见建议
尝试了多张图片,总体识别准确率不高。由于拍摄场景的原因,距离远、车前玻璃反光、夜晚光线不好等造成图片模糊,均会影响识别效果,所以调用接口需要对抓拍图片进行筛选,建议API接口添加图片质量控制参数。
那感觉训练预测的时候都要切图了
细节都能看清
想必高清摄像头分辨率是非常大的……666
嗯呐,目标检测是基础
这个场景,也许目标检测更合适?
只要有网络就可以啊,互联网或者移动互联网
现在安全带检测都用什么网络 来做啊
海燕系统真的牛
gif无法上传
未完待续