# 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. win2000server IIS和tomcat5多站点配置
  2. 在JS中如何判断undefined和null
  3. element ui设置表格表头高度和每一行的高度
  4. JAVA-Switch语句
  5. Three.js编辑器editor使用详解
  6. 什么叫组网_混合组网是什么意思
  7. Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案
  8. 五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代)
  9. 算法设计与分析基础 第六章谜题
  10. 打包docker镜像推送到远程服务器并部署到k8s
  11. 基于禁忌搜索算法的三维装箱问题
  12. WindowsMedia/FormWMP.cs
  13. 如何用机器学习识别猫叫和狗叫声?
  14. mysql避免回文_谈谈回文子串
  15. 软件设计师备考(三)——UML(关系和UML图)
  16. sublime text3配置python的代码提示
  17. 快速邮(ksemail)邮件系统 是什么
  18. Unity3d-英雄联盟选人界面(1-界面构造)
  19. uni-app开发ios App,如何去掉底部安全空白区域
  20. 如何应对互联网行业的「中年危机」?

热门文章

  1. 使用adb命令批处理安装卸载apk
  2. python抢券代码_用Python写一个京东抢券脚本
  3. web端自动化测试--淘宝
  4. 张瑞敏管理名言160句
  5. python边玩边学_边干边学:协程—在Android中使用协程进行改装请求的指南
  6. ERP功能需求分析问卷表
  7. 基于ectd实现go的服务注册
  8. HTMLTestRunnerCN
  9. 物联网开发笔记(75)- 使用Micropython开发ESP32开发板之控制tm1637时钟数码管显示
  10. XX软件工程师笔试试题