import  os
import  random
import  argparseparser =  argparse.ArgumentParser( ) 
parser.add_argument( '--xml_path' , default = '/home/jovyan/exp_2607/dataset-445/yolo_labels' , type = str, help = 'input xml label path' ) 
parser.add_argument( '--txt_path' , default = '/home/jovyan/exp_2607/data/mydata/ImageSets/Main' , type = str, help = 'output txt label path' ) 
opt =  parser.parse_args( ) trainval_percent =  1.0   
train_percent =  0.7      
xmlfilepath =  opt.xml_path
txtsavepath =  opt.txt_path
total_xml =  os.listdir( xmlfilepath) 
if  not os.path.exists( txtsavepath) :os.makedirs( txtsavepath) num =  len( total_xml) 
list_index =  range( num) 
tv =  int( num * trainval_percent) 
tr  =  int( tv * train_percent) 
trainval =  random.sample( list_index, tv) 
train =  random.sample( trainval, tr ) file_trainval =  open( txtsavepath + '/trainval.txt' , 'w' ) 
file_test =  open( txtsavepath + '/test.txt' , 'w' ) 
file_train =  open( txtsavepath + '/train.txt' , 'w' ) 
file_val =  open( txtsavepath + '/val.txt' , 'w' ) for  i  in  list_index:name =  total_xml[ i] [ :-4]  + '\n' if  i in  trainval:file_trainval.write( name) if  i in  train:file_train.write( name) else:file_val.write( name) else:file_test.write( name) file_trainval.close( ) 
file_train.close( ) 
file_val.close( ) 
file_test.close( ) 
import  xml.etree.ElementTree as ET
import  os
from os import  getcwdsets =  [ 'train' , 'val' , 'test' ] 
classes =  [ "door_close" , "door_open" , "billboard" , "tear up" ,"person" , "forklift" , "shovel loader" , "nothing forklift" ,"conveyer belt" ]   
abs_path =  os.getcwd( ) 
print( abs_path) def convert( size, box) :dw =  1 . / ( size[ 0 ] ) dh =  1 . / ( size[ 1 ] ) x =  ( box[ 0 ]  + box[ 1 ] )  / 2.0  - 1 y =  ( box[ 2 ]  + box[ 3 ] )  / 2.0  - 1 w =  box[ 1 ]  - box[ 0 ] h =  box[ 3 ]  - box[ 2 ] x =  x * dww =  w * dwy =  y * dhh =  h * dhreturn  x, y, w, hdef convert_annotation( image_id) :in_file =  open( '/home/jovyan/exp_2529/data/mydata/xml/%s.xml'  % ( image_id) , encoding = 'UTF-8' ) out_file =  open( '/home/jovyan/exp_2529/data/mydata/labels/%s.txt'  % ( image_id) , 'w' ) tree =  ET.parse( in_file) root =  tree.getroot( ) size =  root.find( 'size' ) w =  int( size.find( 'width' ) .text) h =  int( size.find( 'height' ) .text) for  obj  in  root.iter( 'object' ) :difficult =  obj.find( 'difficult' ) .textcls =  obj.find( 'name' ) .textif  cls not in  classes or int( difficult)  ==  1 :continue cls_id =  classes.index( cls) xmlbox =  obj.find( 'bndbox' ) b =  ( float( xmlbox.find( 'xmin' ) .text) , float( xmlbox.find( 'xmax' ) .text) , float( xmlbox.find( 'ymin' ) .text) ,float( xmlbox.find( 'ymax' ) .text)) b1, b2, b3, b4 =  bif  b2 >  w:b2 =  wif  b4 >  h:b4 =  hb =  ( b1, b2, b3, b4) bb =  convert(( w,  h) ,  b) out_file.write( str( cls_id)  +  " " +  " ".join( [str( a)  for a in bb])  +  '\n') wd =  getcwd( ) 
for image_set in sets: image_ids =  open( '/ home/ jovyan/ exp_2607/ data/ mydata/ ImageSets/ Main/ % s.txt' %  ( image_set)) ( ) .strip( ) .split( ) if  not os.path.exists( '/home/jovyan/exp_2607/dataset_copy/' ) :os.makedirs( '/home/jovyan/exp_2607/dataset_copy/' ) if  not os.path.exists( '/home/jovyan/exp_2607/dataset_copy/images' ) :os.symlink( '/home/jovyan/exp_2607/dataset-445/images' , '/home/jovyan/exp_2607/dataset_copy/images' ) if  not os.path.exists( '/home/jovyan/exp_2607/dataset_copy/labels' ) :os.symlink( '/home/jovyan/exp_2607/dataset-445/yolo_labels' , '/home/jovyan/exp_2607/dataset_copy/labels' ) if  not os.path.exists( '/home/jovyan/exp_2607/data/mydata/dataSet_path/' ) :os.makedirs( '/home/jovyan/exp_2607/data/mydata/dataSet_path/' ) list_file =  open( '/home/jovyan/exp_2607/data/mydata/dataSet_path/%s.txt'  % ( image_set) , 'w' ) for  image_id  in  image_ids:list_file.write( '/home/jovyan/exp_2607/dataset_copy/images/%s.png\n'  % ( image_id)) list_file.close( ) 
train: /home/jovyan/exp_2607/data/mydata/dataSet_path/train.txt  
val: /home/jovyan/exp_2607/data/mydata/dataSet_path/val.txt  
test: /home/jovyan/exp_2607/data/mydata/dataSet_path/test.txt  
nc: 9 
names: [  'door_close' , 'door_open' , 'billboard' , 'tear up' , 'person' , 'forklift' , 'shovel loader' , 'nothing forklift' , 'conveyer belt' ]