# 1、统计数据集中小、中、大 GT的个数
# 2、统计某个类别小、中、大 GT的个数
# 3、统计数据集中ss、sm、sl GT的个数
import os
from pathlib import Path
import matplotlib.pyplot as plt# 设置中文字体为微软雅黑
plt.rcParams['font.sans-serif'] = 'SimHei'def getGtAreaAndRatio(label_dir):"""得到不同尺度的gt框个数:params label_dir: label文件地址:return data_dict: {dict: 3}  3 x {'类别':{’area':[...]}, {'ratio':[...]}}"""data_dict = {}assert Path(label_dir).is_dir(), "label_dir is not exist"txts = os.listdir(label_dir)  # 得到label_dir目录下的所有txt GT文件for txt in txts:  # 遍历每一个txt文件with open(os.path.join(label_dir, txt), 'r') as f:  # 打开当前txt文件 并读取所有行的数据lines = f.readlines()for line in lines:  # 遍历当前txt文件中每一行的数据temp = line.split()  # str to list{5}coor_list = list(map(lambda x: x, temp[1:]))  # [x, y, w, h]area = float(coor_list[2]) * float(coor_list[3])  # 计算出当前txt文件中每一个gt的面积# center = (int(coor_list[0] + 0.5*coor_list[2]),#           int(coor_list[1] + 0.5*coor_list[3]))ratio = round(float(coor_list[2]) / float(coor_list[3]), 2)  # 计算出当前txt文件中每一个gt的 w/hif temp[0] not in data_dict:data_dict[temp[0]] = {}data_dict[temp[0]]['area'] = []data_dict[temp[0]]['ratio'] = []data_dict[temp[0]]['area'].append(area)data_dict[temp[0]]['ratio'].append(ratio)return data_dictdef getSMLGtNumByClass(data_dict, class_num):"""计算某个类别的小物体、中物体、大物体的个数params data_dict: {dict: 3}  3 x {'类别':{’area':[...]}, {'ratio':[...]}}params class_num: 类别  0, 1, 2return s: 该类别小物体的个数  0 < area <= 32*32m: 该类别中物体的个数  32*32 < area <= 96*96l: 该类别大物体的个数  area > 96*96"""s, m, l = 0, 0, 0for item in data_dict['{}'.format(class_num)]['area']:if item * 640 * 640 <= 32 * 32:s += 1elif item * 640 * 640 <= 96 * 96:m += 1else:l += 1return s, m, ldef getAllSMLGtNum(data_dict):"""数据集所有类别小、中、大GT分布情况"""S, M, L = 0, 0, 0for i in range(3):s, m, l = getSMLGtNumByClass(data_dict, i)S += sM += mL += lreturn [S, M, L]def analyAllSmallGt(data_dict):ss, sm, sl = 0, 0, 0for c in range(3):for item in data_dict['{}'.format(c)]['area']:if item * 640 * 640 <= 8 * 8:ss += 1elif item * 640 * 640 <= 16 * 16:sm += 1elif item * 640 * 640 <= 32 * 32:sl += 1return [ss, sm, sl]# 画图函数
def plotAllSML(SML):x = ['S:[0, 32x32]', 'M:[32x32, 96x96]', 'L:[96*96, 640x640]']fig = plt.figure(figsize=(10, 8))  # 画布大小和像素密度plt.bar(x, SML, width=0.5, align="center", color=['skyblue', 'orange', 'green'])for a, b, i in zip(x, SML, range(len(x))):  # zip 函数plt.text(a, b + 0.01, "%d" % int(SML[i]), ha='center', fontsize=15, color="r")  # plt.text 函数plt.xticks(fontsize=15)plt.yticks(fontsize=15)plt.xlabel('gt大小', fontsize=16)plt.ylabel('数量', fontsize=16)plt.title('广佛手病虫害训练集小、中、大GT分布情况(640x640)', fontsize=16)plt.show()# 保存到本地# plt.savefig("")def plotSMLByClass(sml, c):if c == 0:txt = '白粉病'elif c == 1:txt = '潜叶蛾'elif c == 2:txt = '炭疽病'x = ['S:[0, 32x32]', 'M:[32x32, 96x96]', 'L:[96*96, 640x640]']fig = plt.figure(figsize=(10, 8))  # 画布大小和像素密度plt.bar(x, sml, width=0.5, align="center", color=['skyblue', 'orange', 'green'])for a, b, i in zip(x, sml, range(len(x))):  # zip 函数plt.text(a, b + 0.01, "%d" % int(sml[i]), ha='center', fontsize=15, color="r")  # plt.text 函数plt.xticks(fontsize=15)plt.yticks(fontsize=15)plt.xlabel('gt大小', fontsize=16)plt.ylabel('数量', fontsize=16)plt.title('广佛手{}小、中、大GT分布情况(640x640)'.format(txt), fontsize=16)plt.show()# 保存到本地# plt.savefig("")def plotAllSmallGt(sml):x = ['ss:[0, 8x8]', 'sm:[8x8, 16x16]', 'sl:[16x16, 32x32]']fig = plt.figure(figsize=(10, 8))  # 画布大小和像素密度plt.bar(x, sml, width=0.5, align="center", color=['skyblue', 'orange', 'green'])for a, b, i in zip(x, sml, range(len(x))):  # zip 函数plt.text(a, b + 0.01, "%d" % int(sml[i]), ha='center', fontsize=15, color="r")  # plt.text 函数plt.xticks(fontsize=15)plt.yticks(fontsize=15)plt.xlabel('gt大小', fontsize=16)plt.ylabel('数量', fontsize=16)plt.title('广佛手ss、sm、sl GT分布情况(640x640)', fontsize=16)plt.show()# 保存到本地# plt.savefig("")if __name__ == '__main__':labeldir = '../../datasets/pest/labels/train'data_dict = getGtAreaAndRatio(labeldir)# 1、数据集所有类别小、中、大GT分布情况# SML = getAllSMLGtNum(data_dict)# plotAllSML(SML)# 2、数据集某个类别小中大GT分布情况# 0: 白粉病 powdery_mildew# 1: 潜叶蛾 leaf_miner# 2: 炭疽病 anthracnose# c = 2# sml = getSMLGtNumByClass(data_dict, c)# plotSMLByClass(sml, c)# a(data_dict)# 3、分析所有小目标样本的一个分布# ss: 0<area<8x8  sm: 8x8<area<16x16  sl: 16x16<area<32x32# l = analyAllSmallGt(data_dict)# plotAllSmallGt(l)



【统计数据集GT的分布情况】相关推荐

  1. 微信小说分销系统设计之使用百度Echarts地图统计功能统计微信粉丝地域分布情况...

    /** 转载请保留博客园原地址以及版权声明,请勿恶意修改,本博客中的内容均属于技术交流,请勿用于商业用途,谢谢配合 *  作者:杨浩瑞  QQ:1420213383  独立博客:http://www. ...

  2. 统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。

    3.统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图. 第一个 这个和第一个非常相似,难点在于需要将出生年月转化为年龄. data = data.copy() data['年龄'] = [dt.d ...

  3. 100+有趣的统计数据集

    在寻找数据集?这里给你准备了100多个最有趣的,从柏拉图式的爱情到政治竞选再到死刑囚犯,应有尽有. 个人对"信息时代"这个名词非常不感冒,就好像随便来了个人,往过一坐,然后说:&q ...

  4. python+matlab:统计双色球出号分布

    爬数据 据说有个妹妹通过抓纸团决定买彩票号,这个看起来既玄幻又可爱. 小姐姐我坐不住了,索性统计了一下历史中奖号码分布情况. 借助python抓数据,尝试了几组代码,给出一份能运行的,爬取双色球出号情 ...

  5. 如何使用Leangoo看板统计中的任务分布?

    之前已经为大家介绍了"如何使用Leangoo自动生成燃尽图" 今天介绍,"如何使用Leangoo看板统计中的任务分布" Leangoo看板统计中的"任 ...

  6. 数据中心分布情况和业务占比分析

    我国数据中心的市场规模高速增长.受"互联网+".大数据战略.数字经济等国家政策的指引,以及云计算.移动互联网.物联网.大数据.人工智能等快速发展的驱动,我国数据中心的业务收入呈现连 ...

  7. 最新 android系统 设备 分布情况,CNCERT 2018年第一季度国内操作系统及浏览器占比情况分析...

    原标题:CNCERT 2018年第一季度国内操作系统及浏览器占比情况分析 国家互联网应急中心(以下简称CNCERT)对2018年第一季度国内网络访问情况进行了抽样分析,重点针对操作系统及浏览器占比情况 ...

  8. hadoop编程:分析CSDN注册邮箱分布情况

    hadoop编程:分析CSDN注册邮箱分布情况 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:Ubuntu10.04 hadoop版本: ...

  9. 来华留学生统计数据集(2018-2019年)

    数据集名称:来华留学生统计数据集 时间范围:2018-2019年 数据来源:教育部公开数据整理 下载链接:2018-2019年来华留学生简明统计数据.rar-数据集文档类资源-CSDN下载 表格列表: ...

最新文章

  1. 直接拿来用!CTO 创业技术栈指南
  2. django安装--mac系统
  3. oracle sql命令行中上下左右使用
  4. 套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...
  5. QuartZ Cron表达式详解
  6. 无服务器架构 - 从使用场景分析其6大特性
  7. 前端学习(3138):react-hello-react之组件挂载流程
  8. python3 dict 排序_Python 3.9 新增功能展望
  9. 刘光聪 | TensorFlow:揭示多语言编程的奥秘
  10. access中dbs和dbms_DB、DBS、DBMS之间有什么关系?
  11. 蛋糕matlab,用matlab绘制生日蛋糕
  12. 简书客户端的计数器功能扩展
  13. Mvc中Session导致action不异步的问题
  14. 数据挖掘问题进行细分,主要分为哪四类问题
  15. 基于微信小程序的毕业设计题目(24)php食堂餐厅就餐预约小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  16. win7触摸板怎么关闭_win7系统如何禁用触摸板功能 win7禁用触摸板功能方法【详解】...
  17. Python入门(四):Python变量
  18. Linux CRDA(Central Regulatory Domain Agent)简介
  19. 荧光染料Alexa Fluor 647 alkyne/炔基炔烃
  20. 在Android平台上搭建Qualcomm的FastCv

热门文章

  1. Python异步 asyncio 异步文件下载
  2. 多功能科学计算器:Magic Number 2 Mac中文
  3. Android 虚拟分区详解(二) 虚拟分区布局
  4. 计算机配置 主板,计算机主板(怎样查看电脑主板配置)
  5. 管道设计软件:PIPEDATA-PRO
  6. css怎么设置表格斑马纹效果,利用CSS3选择器实现表格的斑马纹
  7. 利用计算机绘出圆柱面,独家稿件:利用AutoCAD绘制圆柱面相贯线展开曲线研究原稿...
  8. 洛谷 P5027 Barracuda 题解
  9. 移动端京东添加触摸事件轮播图
  10. OpenCL Data Types (数据类型)