1 需求分析
各种涉车类案件时有发生,如何利用现代化科技手段遏制交通违法,保障交通安全与畅通,提高案件侦破效率,成为亟待解决的问题。随着AI技术的发展,通过利用现有城市治安监控(天网)安装的高清视频采集设备,在指挥中心进行软件的部署安装,大范围实时采集城市高精度的车辆通行记录,对监控视频进行二次分析,利用车牌识别、车型识别、车辆属性分析等技术,迅速定位违法车辆,有效打击违法行为。
2 系统搭建
2.1总体方案
系统综合运用文字识别、图像识别、人脸识别、图像搜索等AI智能识别技术,需要在百度AI开放平台申请车牌识别、车型识别、车辆属性分析API接口,以及人脸检测、人脸比对、人脸搜索等API接口。
首先通过车辆抓拍图片,进行初步分析。识别出车牌、车型、颜色等,为车辆画像。根据车牌号,通过检索判断是否为涉案车辆,如果不是,则进行司机人脸识别,判断是否为涉案人员。如果不是,则继续抓拍。一旦满足涉案人员或涉案车辆任意一条,立即进行密切跟踪锁定,记录车辆轨迹、出现消失时间,启动预警,利用天网系统进行布控。
然后对抓拍图像作进一步分析。通过提取的车牌号,检索车辆所有人的身份证号、照片、住址、手机等详细信息;通过人脸比对,检索驾驶人的身份证号、照片、住址、手机等详细信息(驾驶人与车主可能不是同一人)。根据掌握信息,对涉案机动车进行布控追捕。
2.2平台接入
1.打开https://ai.baidu.com/
进入控制台,选择“图像识别”。
2.创建服务,如图示:
3.输入应用名称、描述,并选择应用类型,这里勾选文字识别和人脸识别下的服务,之后点击“立即创建”按钮。
4.创建完毕,点击“返回应用列表”。
5.此处显示AK,SK,后面程序中会用到
2.3 接口API
程序中用到的API接口文档如下:
1)车牌识别
https://ai.baidu.com/docs#/OCR-API/5116ac95
使用攻略见帖子:https://ai.baidu.com/forum/topic/show/943028
2)车型识别:
https://ai.baidu.com/docs#/ImageClassify-API/fe686c3a
使用攻略见帖子:https://ai.baidu.com/forum/topic/show/943031
3)车辆属性识别:
https://ai.baidu.com/docs#/ImageClassify-API/29196fe3
使用攻略见帖子:https://ai.baidu.com/forum/topic/show/943601
3.核心代码
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import urllib
import urllib.parse
import urllib.request
import base64
import json
#client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id = '******************'
client_secret = '**********************'
#获取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
# 读取图片
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
#获取车牌号信息
def get_chepai(path):
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate"
f = get_file_content(path)
access_token=get_token()
img = base64.b64encode(f)
params = {"custom_lib": False, "image": img}
params = urllib.parse.urlencode(params).encode('utf-8')
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
if content:
license_plates = json.loads(content.decode("utf-8"))
strover = '车牌识别结果: \n '
words_result = license_plates['words_result']
number = words_result['number']
strover += ' 车牌号:{} \n '.format(number)
# print (content)
print (strover)
return content
else:
return ''
#获取汽车型号信息
def get_chexing(path):
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/car"
f = get_file_content(path)
access_token=get_token()
img = base64.b64encode(f)
params = {"top_num":1, "image": img,'baike_num':5}
params = urllib.parse.urlencode(params).encode('utf-8')
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
if content:
# print (content.decode("utf-8"))
cars = json.loads(content.decode("utf-8"))
strover = '车型识别结果: \n '
i = 1
for car in cars['result']:
strover += ' 车型:{} \n 年份:{}\n 准确率:{}\n'.format(car['name'],car['year'],car['score'])
i += 1
color_result = cars['color_result']
strover += ' 车辆颜色: {} \n'.format(color_result)
print (strover)
return content
else:
return ''
#获取车辆属性信息
def get_cheshuxing(path):
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/vehicle_attr"
f = get_file_content(path)
access_token=get_token()
img = base64.b64encode(f)
params = {'image': img}
params = urllib.parse.urlencode(params).encode('utf-8')
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
if content:
# print (content.decode("utf-8"))
cars = json.loads(content.decode("utf-8"))
# print (cars)
strover = '车辆属性识别结果: \n '
vehicle_info = cars['vehicle_info']
strover += ' 车辆类型: {} \n '.format(vehicle_info[0]['attributes']['vehicle_type']['name'])
strover += ' 是否系安全带: {} \n '.format(vehicle_info[0]['attributes']['driver_belt']['score'])
print (strover)
return content
else:
return ''
image_path='F:\paddle\car\s9hc.jpeg'
get_chepai(image_path)
get_chexing(image_path)
get_cheshuxing(image_path)
4.测试结果
采用下图模拟抓拍图片进行测试,测试图片来自网络合成(车牌号为非真实,请勿对号入座)。
车辆相关信息检测结果:
借助高清摄像机抓拍图片,进行人脸检测,人脸检测结果自动和公安机关的可疑人员资料库对比(需要相关权限),发现 相似度高于一定程度,立刻向监控中心报警。在茫茫人海中只要是出现在监控摄像画面中的人脸,通过比对的方式即可在短时间内找到这个人,大大减轻管理人员的工作负荷,同时也进一步的增强了智能化应用的效果。
天网系统已经在应用了
是否已有实现
嚯,居然和我想到一块去了
互联需要更多的权限
各位有好的想法可以加入