PaddlePaddle|CV疫情特辑(五):人流密度检测

PaddlePaddle|CV疫情特辑(五):人流密度检测

本节内容来自:百度AIstudio课程
做一个记录。

试题说明
近年来,应用于监控场景的行人分析视觉技术日益受到广泛关注。包括人体检测、人体属性识别、人流密度估计等技术在内的多种视觉技术,已获得在居家、安防、新零售等多个重要领域的广泛应用。其中作用于人流密集场景的人流密度估计技术(crowd density estimation)因其远高于肉眼计数的准确率和速度,已广泛应用于机场、车站、运营车辆、艺术展馆等多种场景,一方面可有效防止拥挤踩踏、超载等隐患发生,另一方面还可帮助零售商等统计客流。本试题以人流密度估计作为内容,答题者需要以对应主题作为技术核心,开发出能适用于密集、稀疏、高空、车载等多种复杂场景的通用人流密度估计算法,准确估计出输入图像中的总人数。

任务描述
要求参赛者给出一个算法或模型,对于给定的图片,统计图片中的总人数。给定图片数据,选手据此训练模型,为每张测试数据预测出最准确的人数。

数据说明
本竞赛所用训练和测试图片均来自一般监控场景,但包括多种视角(如低空、高空、鱼眼等),图中行人的相对尺寸也会有较大差异。部分训练数据参考了公开数据集(如ShanghaiTech [1], UCF-CC-50 [2], WorldExpo’10 [3],Mall [4] 等)。

本竞赛的数据标注均在对应json文件中,每张训练图片的标注为以下两种方式之一:

  • (1)部分数据对图中行人提供了方框标注(boundingbox),格式为[x, y, w, h][x,y,w,h];
  • (2)部分图对图中行人提供了头部的打点标注,坐标格式为[x, y][x,y]。

此外部分图片还提供了忽略区(ignore_region)标注,格式为[x_0, y_0, x_1, y_1, …, x_n, y_n]组成的多边形(注意一张图片可能有多个多边形忽略区),图片在忽略区内的部分不参与训练/测试

提交答案
考试提交,需要提交模型代码项目版本和结果文件。结果文件为CSV文件格式,可以自定义文件名称,文件内的字段需要按照指定格式写入,其中,id表示图片文件名,predicted表示图片中行人个数。

1.解压数据集


# 解压数据集
!unzip -q -o data/data1917/train_new.zip
!unzip -q -o data/data1917/test_new.zip

2. 观察数据

# 导入包
import zipfile
import paddle
import paddle.fluid as fluid
import matplotlib.pyplot as plt
import matplotlib.image as mping
from PIL import Image
import json
import numpy as np
import cv2
import sys
import time
# import scipy.io as io
from matplotlib import pyplot as plt
from scipy.ndimage.filters import gaussian_filter 
import scipy
from matplotlib import cm as CM
from paddle.utils.plot import Ploter

import numpy as np
import paddle
import paddle.fluid as fluid
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Conv2DTranspose
from paddle.fluid.dygraph.base import to_variable
start = time.time()
#把图片对应的标签装入字典
f = open('/home/aistudio/data/data1917/train.json',encoding='utf-8')
content = json.load(f)

print(content.keys())
print('info:',content['info'])
print('stage:',content['stage'])
print('split:',content['split'])
print(content['annotations'][0].keys())
print(content['annotations'][0]['type'])
print(content['annotations'][0][ 'id'])
print(content['annotations'][0]['ignore_region'])
print(content['annotations'][0]['name'])
print(content['annotations'][0]['num'])

输出:

dict_keys(['info', 'split', 'annotations', 'stage'])
info: Baidu Star AI Competition 2018
stage: 1
split: train
dict_keys(['name', 'id', 'num', 'ignore_region', 'type', 'annotation'])
bbox
625
[]
stage1/train/61a4091324d1983534ca23b6f007f841.jpg
28
#把stage1都去掉:
for j in range(len(content['annotations'])):
    content['annotations'][j]['name'] = content['annotations'][j]['name'].lstrip('stage1').lstrip('/')
print(content['annotations'][1]['name'])

train/71e5bc76196e91f26426b7facbcc0843.jpg

#读取解压文件里的信息
zfile = zipfile.ZipFile("data/data1917/train_new.zip")
l = []  # l中存储了train中所有的图片路径
for fname in zfile.namelist()[1:]:
    # print(fname)
    l.append(fname)
print(l[3])
name = l[3]
im = Image.open(name)
plt.imshow(im)
train/002be7f228f584630bde7582c9dbaffb.jpg
<matplotlib.image.AxesImage at 0x7fc4ad838e90>

在这里插入图片描述

#查看标注的信息

for j in range(len(content['annotations'])):
    if content['annotations'][j]['name'] == name:
        print('id = ',content['annotations'][j]['id'])   #图片id
        ann = content['annotations'][j]['annotation']
print(ann)       #图片标注格式是x,y,w,h,有些只有x,y
print('有标注的个数:',len(ann))
#可视化第三个标注的信息
lab = 1
box = (ann[lab]['x'],ann[lab]['y'],ann[lab]['x']+ann[lab]['w'],ann[lab]['y']+ann[lab]['h'])
new_img = im.crop(box=box)
plt.imshow(new_img)
id =  668
[{
   'y': 693, 'x': 1108, 'w': 196, 'h': 373}, {
   'y': 424, 'x': 1009, 'w': 118, 'h': 448}, {
   'y': 361, 'x': 864, 'w': 250, 'h': 249}, {
   'y': 300, 'x': 882, 'w': 104, 'h': 342}, {
   'y': 128, 'x': 846, 'w': 28, 'h': 99}, {
   'y': 131, 'x': 870, 'w': 48, 'h': 86}, {
   'y': 94, 'x': 899, 'w': 22, 'h': 90}, {
   'y': 97, 'x': 878, 'w': 19, 'h': 74}, {
   'y': 60, 'x': 827, 'w': 23, 'h': 62}, {
   'y': 44, 'x': 792, 'w': 16, 'h': 48}, {
   'y': 46, 'x': 799, 'w': 22, 'h': 59}, {
   'y': 67, 'x': 778, 'w': 26, 'h': 84}, {
   'y': 98, 'x': 788, 'w': 38, 'h': 86}, {
   'y': 148, 'x': 653, 'w': 103, 'h': 114}, {
   'y': 97, 'x': 712, 'w': 35, 'h': 114}, {
   'y': 90, 'x': 704, 'w': 26, 'h': 108}, {
   'y': 89, 'x': 733, 'w': 28, 'h': 130}, {
   'y': 177, 'x': 637, 'w': 76, 'h': 130}, {
   'y': 378, 'x': 460, 'w': 240, 'h': 281}, {
   'y': 527, 'x': 361, 'w': 256, 'h': 332}, {
   'y': 498, 'x': 182, 'w': 242, 'h': 557}, {
   'y': 906, 'x': 164, 'w': 410, 'h': 173}, {
   'y': 861, 'x': 1286, 'w': 213, 'h': 218}]
有标注的个数: 23

在这里插入图片描述

#可视化图片所有标注信息
width = im.size[0]    #获取宽度
height = im.size[1]   #获取长度
print(width,height)
for a in range(len(ann)):        #遍历所有标注
    for x in range(width):
        for y in range(height):             
            # r,g,b = im.getpixel((x,y))	
            if(x > (ann[a]['x']-5) and x < (ann[a]['x']+5) and y > ann[a]['y'] and y < (ann[a]['y']+ann[a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值