YOLO下一步:输出预测boundingbox做进一步处理

对于我们使用yolo做一下research中的其他应用而言,最终目的肯定不是看看预测boundingbox就ok了。
具体对于我而言,就需要在得到boundingbox后再找出目标的局部信息。下面简单介绍一下如何完成。
1.修改源代码
在源代码image.c中找到draw_detections()函数,print出方框的位置即可,如下:
这里写图片描述
2.记录终端输出到文本文件
我这里使用的命令是| tee train_log.txt ,可参考:Linux中记录终端(Terminal)输出到文本文件
3.python进一步提取boundingbox并做简单处理
先看一眼输入数据(即上一步输出到文件中的数据):
这里写图片描述
可以看到有时候检测到有时候检测不到,这里我为了后面方便处理(这里我是要提取类别名为tip的box坐标并进行处理),简单处理了一下(已知每一帧有且只有一个tip,如果没有检测到则用相邻帧的坐标填充),并保存到新文件内。
代码如下:

把‘tip’的一行数据读入到dic中

i=0
d={}
with open('output_coordinate.txt') as f:
    for line in f.readlines():
        if 'Objects:' in line:
            i=i+1            
        if 'tip:' in line:
            d[i]=line.strip()

# print(i)
# print(d)
若某一帧中没有检测到tip,则默认为上一帧检测到的数据
d[1]=d[2]
for k in range(1, i+1):
    if not d.get(k):
        d[k]=d[k-1]
# print(d)
将tip数据分割为list
import re
for k, v in d.items():
    d[k]=re.split(r'\s+', v)
# print(d)
数组重组为dict格式
frames=[]
probs=[]
lx=[]
rx=[]
ly=[]
ry=[]

for k, v in d.items():
    frames.append(k)
    probs.append(v[1])
    lx.append(v[2])
    rx.append(v[3])
    ly.append(v[4])
    ry.append(v[5])

data = {'frames':frames,
        'probs':probs,
        'lx':lx,
        'rx':rx,
        'ly':ly,
        'ry':ry,}
数据存储到DataFrame
from pandas import Series, DataFrame

frames_num=1590

frame = DataFrame(data, columns = ['probs', 'lx', 'rx', 'ly', 'ry'], index = list(range(1, frames_num+1)))
frame.index.name = 'frames'
frame.columns.name = 'coordiante'
frame.head()
coordianteprobslxrxlyry
frames
136%559811247306
236%559811247306
337%559811247305
437%558810246305
537%557810245304

坐标数据保存到文本

with open('tip_coordinate.txt', 'w') as f:
    for j in range(frames_num):
        f.write(lx[j]+' '+ly[j]+' '+rx[j]+' '+ry[j]+'\n')  

最后处理的结果:
这里写图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值