用百度ai的人流量统计(动态版)来统计固定场景的人流

这里简单的记录下怎么用这个百度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"

就先记录到这里,其实效果还是不太满意,但是现在的目标追踪还是不太成熟,自己的摄像头角度设置的也不太理想,主要是我的摄像头角度不够高,所以人走过去的变化在图像中蛮大的,怪不了目标追踪不好,就先写到这里吧。希望有帮助

你可能感兴趣的:(用百度ai的人流量统计(动态版)来统计固定场景的人流)