这里简单的记录下怎么用这个百度ai来统计人流量,也在网上找了很多的多目标追踪的方法,都不是太理想,百度这个算好的了,但是由于我的摄像头角度的问题,和百度预设的角度不一样,效果不算理想,如果角度高度满足百度官方文档的要求的话,效果应该会不错。官方文档:https://ai.baidu.com/docs#/Body-API/ab92bcdc
这篇只是想记录下自己的代码,现在代码能力很弱,记录下。
import os import urllib from urllib.request import urlopen import re import base64 import numpy as np import cv2 # 要检测的图片的位置 这个是一个文件夹,百度说最好是保持在3-5fps,一开始用的是25fps的,效果巨差 img_path = "/data/data_processing/data_0521/image2" # 读文件夹下的jpg images = os.listdir(img_path) images = sorted(images) # 百度的官方文档里写的 request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_tracking" # 便利图片 for i in images: f = open(img_path+'/'+i, 'rb') # 这里要把图片转换为base64的格式,传给百度 img = base64.b64encode(f.read()) # 这里的参数百度的官方文档都有解释,自己去看就好,这里不细说,主要就是area要自己定,https://ai.baidu.com/docs#/Body-API/ab92bcdc params = {"area": "1, 1, 1279, 1, 1279, 360, 1, 360","case_id":1,"case_init": "false", "dynamic": "true", "image": img,"show":"true"} # 百度的官方文档里写的 params = urllib.parse.urlencode(params).encode("utf-8") # access_token是自己的保密信息,不要泄露,怎么获取参考http://ai.baidu.com/docs#/Auth/top 把你的AK,SK带入就好,会返回access_token的 # 下面都是官方代码 # 官方代码是python2我的是py3 其中urllib有蛮大的差多的,请自己如果跑不通请自己百度 access_token = '自己去生成' 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 = urlopen(request) content = response.read().decode('utf-8') # 这里的content就是返回的结果 if content: print(i) print(content) # 返回的内容很蛋疼,返回的content是一个str,其中有in和out,但是这个in和out是指的当前帧的in和out,不会自动累加, # 我是在选择参数那里加上了show = true,会返回一个很长的base64的图片格式信息,在网上找格式转换,在图片中,它的in和out回自动累加 # 一开始只能手动的粘贴复制,去网上查看返回的图片,最后写了代码,可以直接批量保存读取 # 试着用正则化来提取image的base64编码段,这里的正则化还有待加强,暂时先这样吧(就是懒),正则化不常用,每次都忘记 # 这里的正则化的目的主要是读取返回的base64的信息,来图像化。 relink = '"image": "(.*)",' info = re.findall(relink, content) # 这里用opencv来显示base64的图像 str_to_bytes = bytes(info[0], encoding="utf8") img_b64decode = base64.b64decode(str_to_bytes) # base64解码 img_array = np.fromstring(img_b64decode, np.uint8) # 转换np序列 img = cv2.imdecode(img_array, cv2.COLOR_BGR2RGB) # 转换Opencv格式 # 保存在自己的文件夹下 cv2.imwrite('/data/data_processing/data_0522/image/'+i,img) # cv2.imshow("img", img) # cv2.waitKey(100) request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_tracking"就先记录到这里,其实效果还是不太满意,但是现在的目标追踪还是不太成熟,自己的摄像头角度设置的也不太理想,主要是我的摄像头角度不够高,所以人走过去的变化在图像中蛮大的,怪不了目标追踪不好,就先写到这里吧。希望有帮助