python 处理1对n的问题

python 处理1对n的问题

​ 问题描述:如下图,当一个图形中有多个物体,检测得到的结果为,图像,列表,准确率,位置信息,将图像名作为key,后续值作为一个value存在一个字典里。

data/safety_hat/test/1000.jpg 1 0.988243 722 106 742 128
data/safety_hat/test/1000.jpg 1 0.978737 545 103 566 126
data/safety_hat/test/1000.jpg 1 0.971023 630 103 652 128
data/safety_hat/test/1000.jpg 1 0.9652 613 84 632 103
data/safety_hat/test/1000.jpg 1 0.958997 796 129 821 156
data/safety_hat/test/1000.jpg 1 0.948718 762 116 785 138
data/safety_hat/test/1000.jpg 1 0.926812 839 123 863 148
data/safety_hat/test/1000.jpg 1 0.905992 678 104 697 124
data/safety_hat/test/1000.jpg 1 0.88185 693 112 715 136
data/safety_hat/test/1000.jpg 1 0.537691 746 150 772 179
data/safety_hat/test/1000.jpg 1 0.383983 694 134 720 161
data/safety_hat/test/1001.jpg 2 0.999307 1010 179 1110 283
data/safety_hat/test/1001.jpg 2 0.997593 498 163 627 319
data/safety_hat/test/1001.jpg 2 0.991337 72 150 161 242
data/safety_hat/test/1001.jpg 2 0.983014 780 176 877 273
data/safety_hat/test/1002.jpg 1 0.999119 239 258 280 315
data/safety_hat/test/1002.jpg 1 0.81975 169 179 196 222
data/safety_hat/test/1003.jpg 1 0.992104 739 89 760 112
data/safety_hat/test/1003.jpg 1 0.986534 355 90 373 110
data/safety_hat/test/1003.jpg 1 0.983901 651 113 674 137

代码如下:

import os
from collections import OrderedDict
import pandas as pd

img_results = OrderedDict()
with open("output.txt","r") as f:
  for line in f.readlines():
    img_name, label, score, xmin, ymin, xmax, ymax = line.strip("\n").split()
    image_name = img_name.split('/')[-1].split('.')[0]
    result = dict()
    result["label"] = int(label)
    result["score"] = float(score)
    result["bbox"] = [float(xmin), float(ymin), float(xmax), float(ymax)]

    if img_name not in img_results:
      img_results[img_name] = [result]
    else:
      img_results[img_name].append(result)
print(len(img_results))

使用img_results如下,统计每张图像中相同类别的物体出现的次数,存在csv文件中:

resu_jieguo=[]
for img_file, results in img_results.iteritems():
  resu=dict()
  img_name = img_file.split('/')[-1].split('.')[0]
  resu['img_name']=img_name
  head_num=0
  head_sh_num=0
  for result in results:
    if result['label']==1:
      head_num += 1
    elif result['label']==2:
      head_sh_num += 1
  resu['head_sh']=head_sh_num
  resu['head'] = head_num
  resu_jieguo.append(resu)
  resu_csv=pd.DataFrame(data=resu_jieguo)
  resu_csv.to_csv('result_1120_3.csv')

OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候, 它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值