数据集处理工具

划分训练测试集

import os
import random
full_path="full.txt"
train_path="save_dir/train.txt"
test_path="save_dir/test.txt"
with open(full_path,"r")as f1:
    line=[i.replace("\n","") for i in f1.readlines()]
random.shuffle(line)
trian_num=int(len(line)*0.9)
for i in line[:train]:
    with open(train_path,"a+") as f:
        f.write(i+"\n")
for i in line[train:]:
    with open(test_path,"a+") as f:
        f.write(i+"\n")

修改json文件

import os,sys
import json
m_path='conf.json'
def get_new_json(filepath):
    with open(filepath, 'rb') as f:
        data = json.load(f)
        data["conf"][1]["value"]=0.99
        data["conf"][2]["value"]=0.75
    return data
def rewrite_json_file(filepath,json_data):
    with open(filepath, 'w') as f:
        json.dump(json_data,f)
if __name__ == '__main__':
    m_json_data = get_new_json(m_path)
    rewrite_json_file("/disk1/1.json",m_json_data)

dict to json

import json

data = {
    'name' : {"0":{"name":'ACME',"age":16}},
    'shares' : 100,
    'price' : 542.23
}
with open("2.json","w") as f:
    
    json.dump(data,f)

base.txt2yolo

import os
import cv2
from random import randint

base_labels_dir = '/home/zhangyong/zhangyong/ssd/caffe/data/VOCdevkit/VOC2007/base'
images_dir = '/home/zhangyong/zhangyong/ssd/caffe/data/VOCdevkit/VOC2007/JPEGImages'

alllabels = os.listdir(base_labels_dir)
allimages = os.listdir(images_dir)

trainf = open('train3.txt','a+')
testf = open('test3.txt','a+')

for jpg in allimages:
    
    txt = jpg.replace('jpg','txt')
    if txt not in alllabels:
        continue
    if randint(0,10) is 1:
        testf.write('/home/zhangyong/zhangyong/ssd/caffe/data/VOCdevkit/VOC2007/JPEGImages/%s\n' % jpg)
    else:
        trainf.write('/home/zhangyong/zhangyong/ssd/caffe/data/VOCdevkit/VOC2007/JPEGImages/%s\n' % jpg)
    
    jpg = os.path.join(images_dir, jpg)
    jpg = cv2.imread(jpg)
    h,w,_=jpg.shape
    
    labf = open(os.path.join('/home/zhangyong/zhangyong/ssd/caffe/data/VOCdevkit/VOC2007/Label',txt), 'w')
    txt = os.path.join(base_labels_dir, txt)
    txt = open(txt, 'r')
    lines = txt.readlines()
    for line in lines:
        box = [int(i) for i in line.split(' ')]
        box[1] = max(0, box[2])
        box[2] = max(0, box[1])
        box[3] = min(w-1, box[4])
        box[4] = min(h-1, box[3])

        cx = (box[1]+box[3])/2
        cy = (box[2]+box[4])/2
        cw = box[3]-box[1]
        ch = box[4]-box[2]

        cx = float(cx)/float(w)
        cy = float(cy)/float(h)
        cw = float(cw)/float(w)
        ch = float(ch)/float(h)

        labf.write('%d %.6f %.6f %.6f %.6f\n' % (box[0]-1,cx,cy,cw,ch))
    labf.close()
    
trainf.close()
testf.close()

txt2xml

import os
from PIL import Image
import cv2

out0 ='''<?xml version="1.0" encoding="utf-8"?>
<annotation>
    <folder>None</folder>
    <filename>%(name)s</filename>
    <source>
        <database>None</database>
        <annotation>None</annotation>
        <image>None</image>
        <flickrid>None</flickrid>
    </source>
    <owner>
        <flickrid>None</flickrid>
        <name>None</name>
    </owner>
    <segmented>0</segmented>
    <size>
        <width>%(width)d</width>
        <height>%(height)d</height>
        <depth>3</depth>
    </size>
'''
out1 = '''  <object>
        <name>%(class)s</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>%(xmin)d</xmin>
            <ymin>%(ymin)d</ymin>
            <xmax>%(xmax)d</xmax>
            <ymax>%(ymax)d</ymax>
        </bndbox>
    </object>
'''

out2 = '''</annotation>
'''
def translate(lists): 
    source = {}
    label = {}
    for jpg in lists:
        if os.path.splitext(jpg)[1] == '.jpg':
            print(jpg)
            jpg=jpg.replace('darknet','ssd/caffe')
            img=cv2.imread(jpg)
            h,w,_=img.shape[:]
            fxml = jpg.replace('ImageSets','Annotations')
            fxml = fxml.replace('.jpg','.xml')
            fxml = open(fxml, 'w');

            imgfile = jpg.split('/')[-1]
            source['name'] = imgfile
            source['width'] = w
            source['height'] = h

            fxml.write(out0 % source)

            txt = jpg.replace('.jpg','.txt')
            txt=txt.replace("ImageSets",'base')
            with open(txt,'r') as f:
                lines = [i.replace('\n','') for i in f.readlines()]
                print(lines)
            for box in lines:
                box = box.split(' ')
                name=int(box[0])
                label['class'] =name             
                
                label['xmin'] = max(int(box[2]),0)
                label['ymin'] = max(int(box[1]),0)
                label['xmax'] = min(int(box[4]),w-1)
                label['ymax'] = min(int(box[3]),h-1)
                
                if label['xmin']>=w or label['ymin']>=h or label['xmax']>=w or label['ymax']>=h:
                    continue
                if label['xmin']<0 or label['ymin']<0 or label['xmax']<0 or label['ymax']<0:
                    continue
                    
                fxml.write(out1 % label)
                
            fxml.write(out2)

if __name__ == '__main__':
    with open('/home/zhangyong/newdisk/company/week/codes/tools/train.txt','r') as f:
        lines = [i.replace('\n','') for i in f.readlines()]
        
    translate(lines)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容