车牌标注转换

10 篇文章 0 订阅
6 篇文章 0 订阅

之前大爷写了alfw的标注转换,我就大概看了一下,绝知此事要躬行啊,今天写了一下车牌的转换。

车牌用的是何大神的标注工具,大概长相:

# PASCAL Annotation Version 1.00

Image filename : "E:\lprset\train\images\_藏AU8666.jpg"
Image size (X x Y x C) : 1198 x 1600 x 3
Database : "UESTC-IMAGE-PROCESSING-LAB"
Objects with ground truth : 1 { "" }

# Note that there might be other objects in the image
# for which ground truth data has not been provided.

# Top left pixel co-ordinates : (1, 1)

# Details for object 1 ("")
Original label for object 1 "" : ""
Bounding box for object 1 "" (Xmin, Ymin) - (Xmax, Ymax) : (828, 555) - (955, 590)

问题1. 文件名中有中文,python写的时候出现了乱码,且以防后续问题,解决方案统一修改文件名。

问题2. 原文件夹文件目录层太多。


test/train下又各分为annotations和images。太复杂了。因为bing下的标注是annotations和images分开放在两个大文件夹下,所以写的时候图片直接写在上层目录test/train下。


bing的标注实际分为三部分。1.  Main下的三个文件: text.txt, train.txt, class.txt:分别是测试、训练文件标注路径以及类别信息。2. Annotations下.yml的标注信息。3. ImageJPEG下.jpg的图片。通过.txt读取标注信息,再在标注信息里找到图片所在地。

import os
import cv2
import re


root = './lprset__OLD/'


test_train = ['test', 'train']
anno_image = ['annotations', 'images']


count = 1                
      
for te_tra in test_train:
    
    print te_tra
    path_file = open(te_tra+'.txt', 'w')
    
    #新旧读写上层路径
    an_write_base = 'Annotations/' + te_tra
    an_read_base = root + te_tra + '/' + anno_image[0]
    im_write_base = root + te_tra
    im_read_base = root + te_tra + '/' + anno_image[1]
    
    #创建写目录
    if not os.path.exists(an_write_base):
        os.makedirs(an_wirte_base) 
    if not os.path.exists(im_write_base):
        os.makedirs(im_wirte_base)      
    
    for r, dirs, file_list in os.walk(an_read_base):
        for files in file_list: #file_list标注文件列表
            
            #提取旧标注中的数据
            plate_file = open(an_read_base+'/'+files).read().split('\n')
            if len(plate_file) == 16: #只有一个标注
                filename = files.split('.')[0]
                
                height, width = plate_file[3].split()[8], plate_file[3].split()[10]    
                
                xy = re.findall('\d+', plate_file[14])
                xmin, ymin = int(xy[1])-20, int(xy[2])-20 #原来框太小了,扩大一点
                xmax, ymax = int(xy[3])+20, int(xy[4])+20
                
                if xmin <= 0:
                    xmin = 1
                if ymin <= 0:
                    ymin = 1
                
                if ymax >= int(height):
                    ymax = int(height)-1
                if xmax >= int(width):
                    xmax = int(width)-1
                
                #读写图片
                path = te_tra + '/' + str(count) + '.jpg'
                img = cv2.imread(im_read_base + '/' + filename + '.jpg')
                #cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0,0,255))
                cv2.imwrite(im_write_base + '/' + str(count) + '.jpg', img)
                
                
                #写路径文件
                path_file.write(te_tra + '/' + str(count) + '\n')
                #写新标注
                file = open(an_write_base+'/'+str(count)+'.yml', 'w')
                print >> file, '%YAML:1.0\n'
                print >> file, 'annotation:'
                print >> file, '  folder: plate'
                print >> file, '  filename: \"%s\"'%path
                print >> file, '  source: UESTC-IMAGE-PROCESSING-LAB'
                print >> file, '  owner: {name: zhuqian}'
                print >> file, '  size: {width: \'%s\', height: \'%s\', depth: \'3\'}'%(width, height)
                print >> file, '  segmented: \'0\''
                print >> file, '  object:'
                print >> file, '    - bndbox: {xmin: \'%s\', ymin: \'%s\', xmax: \'%s\', ymax: \'%s\'}'%(xmin, ymin, xmax, ymax)
                print >> file, '      name: plate'
                print >> file, '      pose: Left'
                print >> file, '      truncated: \'1\''
                print >> file, '      difficult: \'0\'' 
                file.close()    
                count += 1
    path_file.close()    

该程序在当前目录生成了.txt文件,另外建了一个Annotations文件夹,内含标注信息.yml文件。还将之前.jpg所在目录上提了一层。
            
      



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值