python画像分析,python图像算法
Ai技术的发展催生了智慧城市,智慧交通是其中非常重要的一部分。百度AI交通统计(动态版)可以检测图片中的所有机动车,并返回每辆车的类型、坐标位置和运动轨迹。应用于智能交通领域,可以方便地监控城市道路交通,实现交通拥堵预警。利用大数据挖掘交通流规律,可以合理引导交通流。此外,对于一些限行城市,还可以通过车牌识别、车型识别等技术对违规车辆进行监控。
一.平台准入
这一步比较简单,就不细说了。参考以前的文件:
https://ai.baidu.com/forum/topic/show/943028
二。接口API分析
1.接口API:
https://ai.baidu.com/docs#/ImageClassify-API/0d270ea1
(1)接口描述
根据连续视频图片的传入顺序,对车辆进行检测和跟踪,返回每辆车的坐标位置和车型(包括轿车、货车、公交车、摩托车、三轮车五大类)。在原始图像中的指定区域,可以根据车辆轨迹判断进入/离开该区域的行为,统计该区域内各种车辆的交通流量,并返回带有统计值和跟踪框的渲染图像。
注意:邀请测试的界面不能在控制台中直接调用,但是可以通过提交工单申请开放测试权限。
(2)要求解释
所需信息包括:
请求URL:3359aip.baidubce.com/rest/2.0/image-classify/v1/traffic流程
header:content-type:application/x-www-form-urlencoded
(3)返回例子。
发现2辆汽车,1辆卡车,3条轨道,1辆卡车离开该地区:
{
“车辆编号”:
{
汽车:2,
卡车:1,
.
三轮车:0
},
“车辆信息”:
[
{
ID:3
位置:
{
左:100,
顶部:200,
宽度:200,
高度:400,
}
类型:汽车
},
{
ID: 5
位置:
{
左边:400,
顶部:200,
宽度:200,
高度:400,
}
类型:汽车
},
{
ID: 6
位置:
{
左边:600,
顶部:200,
宽度:300,
高度:400,
}
类型:卡车
}
],
“车辆数量”:
{
汽车:
{
in:0,
out:0
},
“卡车”:
{
in:0
out:1
},
.
}
}
2.获取访问令牌
#client_id是官网收购的AK,client_secret是官网收购的SK。
client _ id=[百度云应用的AK]
client _ secret=[百度云应用的SK]
#获取令牌
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(主机)
request . add _ header( Content-Type , application/JSON;charset=UTF-8 )
response=urllib . request . urlopen(request)
token_content=response.read()
如果令牌_内容:
token _ info=JSON . loads(token _ content . decode( utf-8 ))
令牌密钥=令牌信息[访问令牌]
返回令牌_密钥
三。鉴定结果
识别:选择一个渲染输出图片,结果只能用“牛X”来形容。车辆识别结果准确,车辆分类基本正确。远处车辆的识别度不高,当然可能受清晰画质等因素影响。
处理速度:每张图片的处理时间为1-2s,与视频相比略有卡顿。
四。源代码共享
# -*-编码:utf-8 -*-
#!/usr/bin/env python
导入操作系统
导入请求
导入base64
导入json
从pprint导入pprint
导入时间
导入io
从io导入字节
导入cv2
将numpy作为np导入
从PIL进口图片
导入全球
#client_id是官网收购的AK,client_secret是官网收购的SK。
API _ key= 77 IBV 7kv yo 8 bmh 3 fovlzxc 6d
secret _ key= edk vnt 56 ce 1 ful db 0 oczyhwo 3 upk siez
class Traffic_flowRecognizer(对象):
def __init__(self,api_key,secret_key):
self.access_token=self。_ get _ access _ token(API _ key=API _ key,secret_key=secret_key)
自我。API _ URL= https://AIP . baidubce . com/rest/2.0/image-classify/v1/traffic _ flow ?访问令牌= \
self.access _令牌
#获取令牌
@静态方法
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={} .格式(api_key,secret_key)
rp=requests.post(api)
如果rp.ok:
rp_json=rp.json()
print(rp_json[access_token])
返回rp_json[访问令牌]
否则:
打印(=获取访问令牌时出错!)
定义get_result(自身,参数):
rp=requests.post(self .API_URL,data=params)
如果rp.ok:
打印(=成功!得到结果: )
rp_json=rp.json()
pprint(rp_json)
返回rp_json
否则:
打印(=错误!令牌无效或网络错误!)
打印(参考内容)
不返回
#识别车流量
定义检测(自身):
###对视频进行抽帧后,连续读取图片
WSI _面具_路径= E:/刘彻/仇真/#存放图片的文件夹路径
PATH=glob。glob(OS。路径。加入(WSI _掩码_路径, *。jpg ))
paths.sort()
data_list=[]
c=1
对于路径中的路径:
f=打开(路径,“经常预算”)
img _ str=base64。b 64编码(f . read())
数据列表.追加
params={area:1,269,400,269,400,180,1180 , case_id:1214, case_init:false , image:data_list, show:true}
tic=time.clock()
rp_json=self.get_result(参数)
toc=time.clock()
打印(单次处理时长: %.2f %(toc - tic) s )
img_b64encode=rp_json[image]
img _ b64 decode=base64。b64解码(img _ b64编码)# base64解码
#显示检测结果图片
image=io .字节数(img_b64decode)
img=Image.open(image)
img.show()
#存储检测结果图片
file=open( E:/刘彻/out/ str(c) .jpg , wb )
file.write(img_b64decode)
file.close()
c=c 1
if __name__==__main__ :
recognizer=Traffic _ flow recognizer(API _ key,secret_key)
recognizer.detect()
五。意见建议
1.目前应用程序接口接口支持传入图片流,视频预处理比较复杂,后续是否有直接传入视频流的接口,这样的话对用户会更加友好。
2.对输入图片质量还要有一定要求,由于拍摄场景的原因,距离远、夜晚光线不好等造成图片模糊,均会影响识别效果,所以调用接口需要对抓拍图片进行筛选,建议明确图片质量要求。
3.渲染后输出的图片,车辆信息文本输出格式建议优化,如前面图示,输出文本仅打印出一部分,而且分的太开,颜色也不明显。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。