python 解析labelme

python 解析labelme,第1张

python 解析labelme

import glob
import json
import json
import cv2
import os

file_dir=r'F:projectjushidataCAM-G3-GM10-M1280-D_7E04790PAK00005label'

ori_pic = 'F:projectjushidataCAM-G3-GM10-M1280-D_7E04790PAK00005images'
files=glob.glob(file_dir+'/*')

for json_file in files:
    fileJson=json.load(open(json_file, 'r'))[0]
    # print(val)

    # file = open(json_file, "r", encoding='utf-8')
    # fileJson = json.load(file)
    field = fileJson["annotations"]
    img_name = fileJson['image']
    img = cv2.imread(os.path.join(ori_pic, img_name))
    result = {}
    for line in field:
        bouding_box = line['coordinates']
        label = line['label']

        x1 = int(bouding_box['x']-bouding_box['width']/2)
        y1 = int(bouding_box['y']-bouding_box['height']/2)
        y2 = int(bouding_box['y']) + int(bouding_box['height']/2)
        x2 = int(bouding_box['x']) + int(bouding_box['width']/2)
        img2 = cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255))
        print(label,x1, y1,x2-x1, y2-y1)
    cv2.imshow("asdfsdf",img2)
    cv2.waitKey()

labelme转voc格式

import glob
import json
import json
import cv2
import os

from lxml import etree


class GEN_Annotations:
    def __init__(self, filename):
        self.root = etree.Element("annotation")

        child1 = etree.SubElement(self.root, "folder")
        child1.text = "VOC2007"

        child2 = etree.SubElement(self.root, "filename")
        child2.text = filename

        child3 = etree.SubElement(self.root, "source")
        # child2.set("database", "The VOC2007 Database")
        child4 = etree.SubElement(child3, "annotation")
        child4.text = "PASCAL VOC2007"
        child5 = etree.SubElement(child3, "database")

        child6 = etree.SubElement(child3, "image")
        child6.text = "flickr"
        child7 = etree.SubElement(child3, "flickrid")
        child7.text = "35435"

        # root.append( etree.Element("child1") )  # root.append( etree.Element("child1", interesting="totally"))  # child2 = etree.SubElement(root, "child2")

        # child3 = etree.SubElement(root, "child3")  # root.insert(0, etree.Element("child0"))

    def set_size(self, witdh, height, channel):
        size = etree.SubElement(self.root, "size")
        widthn = etree.SubElement(size, "width")
        widthn.text = str(witdh)
        heightn = etree.SubElement(size, "height")
        heightn.text = str(height)
        channeln = etree.SubElement(size, "channel")
        channeln.text = str(channel)

    def savefile(self, filename):
        tree = etree.ElementTree(self.root)
        tree.write(filename, pretty_print=True, xml_declaration=False, encoding='utf-8')

    def add_pic_attr(self, label, x, y, w, h):
        object = etree.SubElement(self.root, "object")
        namen = etree.SubElement(object, "name")
        namen.text = label
        bndbox = etree.SubElement(object, "bndbox")
        xminn = etree.SubElement(bndbox, "xmin")
        xminn.text = str(x)
        yminn = etree.SubElement(bndbox, "ymin")
        yminn.text = str(y)
        xmaxn = etree.SubElement(bndbox, "xmax")
        xmaxn.text = str(x + w)
        ymaxn = etree.SubElement(bndbox, "ymax")
        ymaxn.text = str(y + h)


if __name__ == '__main__':


    file_dir=r'F:projectjushidataCAM-G3-GM10-M1280-D_7E04790PAK00005label'

    ori_pic = 'F:projectjushidataCAM-G3-GM10-M1280-D_7E04790PAK00005images'
    label_dir=r'F:projectjushidataCAM-G3-GM10-M1280-D_7E04790PAK00005Annotations/'
    os.makedirs(label_dir,exist_ok=True)
    files=glob.glob(file_dir+'/*')

    label_index={'旋窑生产':"xuanyao",'50kg':'zhongliang'}
    for json_file in files:

        fileJson=json.load(open(json_file, 'r'))[0]
        field = fileJson["annotations"]
        img_name = fileJson['image']

        anno = GEN_Annotations(img_name)
        anno.set_size(1280, 1024, 3)

        img = cv2.imread(os.path.join(ori_pic, img_name))
        result = {}
        for line in field:
            bouding_box = line['coordinates']
            label = line['label']

            x1 = int(bouding_box['x']-bouding_box['width']/2)
            y1 = int(bouding_box['y']-bouding_box['height']/2)
            y2 = int(bouding_box['y']) + int(bouding_box['height']/2)
            x2 = int(bouding_box['x']) + int(bouding_box['width']/2)
            img2 = cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255))
            print(label,x1, y1,x2-x1, y2-y1)
            if label in label_index:
                x = x1
                y = y1
                w = x2-x1
                h =y2-y1
                anno.add_pic_attr(label_index[label], x, y, w, h)
        anno.savefile(label_dir+img_name.replace(".bmp",".xml"))
        # cv2.imshow("asdfsdf",img2)
        # cv2.waitKey()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712110.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存