实验目标
能够对包装上的标签进行检测,找出其位置并进行分类。(由于拿到的标签数据与需要的不一致,该处主要讲解格式转化及其标注框转化的一点心得)
标注工具
之前使用的标注工具为labelImg保存的为xml格式,使用的是矩形框标注。拿到的数据是使用labelme标注的为json格式,其是通过多边形标注的,这其中需要进行转化。另外拿到的数据为675*1280尺寸的不支持YOLO的输入,将尺寸压缩的同时要注意标注框的坐标也要进行相应的转化。(YOLO中使用矩形框进行标注)
https://github.com/spytensor/prepare_detection_dataset
关键的转化函数部分
批量复制图片
#提取目录下所有图片,复制后保存到另一目录
from PIL import Image
import os.path
import glob
import shutil
saved_path = "./VOC2007/"
labelme_path = "./train_1280/"
#5.复制图片到 VOC2007/JPEGImages/下
image_files = glob.glob(labelme_path + "*.jpg")
print("copy image files to VOC007/Images/")
for image in image_files:
shutil.copy(image,saved_path +"JPEGImages/")
批量更改图片尺寸
#提取目录下所有图片,更改尺寸后保存到另一目录
from PIL import Image
import os.path
import glob
def convertjpg(jpgfile,outdir,width=416,height=416):
img=Image.open(jpgfile)
try:
new_img=img.resize((width,height),Image.BILINEAR)
new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
except Exception as e:
print(e)
for jpgfile in glob.glob("E:\\360MoveData\\Users\\Administrator\\Desktop\\TagDetect\\VOC2007\\JPEGImages\\*.jpg"):
convertjpg(jpgfile,"E:\\360MoveData\\Users\\Administrator\\Desktop\\TagDetect\\VOC2007\\JPEGImages")
labelme转voc格式
import os
import numpy as np
import codecs
import json
from glob import glob
import cv2
import shutil
from sklearn.model_selection import train_test_split
#1.标签路径
labelme_path = "./train_1280/" #原始labelme标注数据路径
saved_path = "./VOC2007/" #保存路径
#2.创建要求文件夹
if