用labelme标注矩形框和关键点得到的json文件转txt格式用于yolov5-face训练

这篇具有很好参考价值的文章主要介绍了用labelme标注矩形框和关键点得到的json文件转txt格式用于yolov5-face训练。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

我用labelme标注完的json文件长这样:标注了两种:矩形框和点

我要转换的txt格式长这样:

json格式转txt如下:

从txt查看标注结果


参考的这位博主并在此基础上做了改动。(484条消息) LabelMe 标注的json转txt的格式转换教程_无损检测小白白的博客-CSDN博客

我用labelme标注完的json文件长这样:标注了两种:矩形框和点

labelme保存txt,json,python,opencv

我要转换的txt格式长这样:

labelme保存txt,json,python,opencv

分别代表你的目标类别序号(从0开始)、矩形框中心点x坐标归一化、矩形框中心点y坐标归一化、矩形框宽度w归一化、矩形框高度h归一化点1的x坐标归一化点1的y坐标归一化 ...点2 3 4 依次类推。。。

【点1,2,3,4依次是(左上,右上,右下,左下) ,矩形框坐标和关键点坐标都要归一化】

归一化怎么实现??中心点x坐标/图片宽,y坐标/图片高,矩形框的宽/图片宽,高/图片高,关键点横/除以图片宽,关键点纵坐标/图片高----下面的转化代码中有体现建议不理解的仔细瞅瞅哦~】文章来源地址https://www.toymoban.com/news/detail-657497.html

json格式转txt如下:

# -*- coding: UTF-8 -*-
import json
import os
import cv2

img_folder_path = 'datasets/500'  # 图片存放文件夹
folder_path = 'datasets/picbiaozhu'  # 标注数据的文件地址
txt_folder_path = 'datasets/txtresults'  # 转换后的txt标签文件存放的文件夹


# 保存为相对坐标形式 :label x_center y_center w h
def relative_coordinate_txt(img_name, json_d, img_path):
    src_img = cv2.imread(img_path)
    # h, w = src_img.shape[:2]
    h, w, c = src_img.shape
    txt_name = img_name.split(".")[0] + ".txt"
    txt_path = os.path.join(txt_folder_path, txt_name)
    print(txt_path)
    with open(txt_path, 'w') as f:
        for item in json_d["shapes"]:
            if item['shape_type'] == 'rectangle' and item['label'] == 'nameplate':
                point = item['points']
                x_center = (point[0][0] + point[1][0]) / 2
                y_center = (point[0][1] + point[1][1]) / 2
                width = point[1][0] - point[0][0]
                height = point[1][1] - point[0][1]
                # print(x_center)
                f.write(" {} ".format(0))
                f.write(" {} ".format(x_center / w))
                f.write(" {} ".format(y_center / h))
                f.write(" {} ".format(width / w))
                f.write(" {} ".format(height / h))
                continue

            keypoint = item['points']
            x = keypoint[0][0]
            y = keypoint[0][1]
            f.write(" {} ".format(x / w))
            f.write(" {} ".format(y / h))
        f.write(" \n")
    print('finish!')


for jsonfile in os.listdir(folder_path):
    # os.listdir用来返回指定文件夹包含的文件或文件夹的名字的列表
    temp_path = os.path.join(folder_path, jsonfile)
    print("json_path:\t",  temp_path)
    jsonfile_path = temp_path
    with open(jsonfile_path, "r", encoding='utf-8') as fff:
        json_d = json.load(fff, strict=False)
        img_name = json_d['imagePath'].split("\\")[-1].split(".")[0] + ".jpg"
        img_path = os.path.join(img_folder_path, img_name)
        print("img_path:\t", img_path)
        retname = img_name.replace(".jpg", ".txt")
        retpath = os.path.join(txt_folder_path, retname)
        if os.path.exists(retpath):
            continue
        else:
            relative_coordinate_txt(img_name, json_d, img_path)

从txt查看标注结果

# -*- coding: UTF-8 -*-
import json
import os
import cv2
from cv2 import FONT_HERSHEY_SIMPLEX

img_folder_path = 'testimgandjson'  # 图片存放文件夹
folder_path = 'testimgandjson\img002.json'  # 存放标注数据的文件地址
txt_folder_path = "TXTfiles"  # 转换后的txt标签文件存放的文件夹


# 相对坐标格式
def show_label_from_txt(img_path, txt_path):
    window_name = ('src')
    cv2.namedWindow(window_name, cv2.WINDOW_FREERATIO)
    src_img = cv2.imread(img_path)
    h, w = src_img.shape[:2]
    font = cv2.FONT_HERSHEY_SIMPLEX
    with open(txt_path, "r", encoding='UTF-8') as f:
        line = f.readline()
        # 该函数返回的是字符串
        newline = line[1: ]
        data = newline.split('  ')
        # 返回值是字符串列表
        label = data[0]
        cx = float(data[1])
        cy = float(data[2])
        ww = float(data[3])
        hh = float(data[4])
        x1 = int(cx * w - 0.5 * ww * w)
        x2 = int(cx * w + 0.5 * ww * w)
        y1 = int(cy * h - 0.5 * hh * h)
        y2 = int(cy * h + 0.5 * hh * h)
        p1 = (x1, y1)
        p2 = (x2, y2)
        cv2.rectangle(src_img, p1, p2, (0, 255, 0), 5)
        # 图片,顶点1,顶点2,矩形颜色,组成矩形的线粗细若为负值如-1表示绘制一个填充矩形
        cv2.putText(src_img, label, p1, FONT_HERSHEY_SIMPLEX, 200, (255, 0, 0), 5)
        # 图片,要绘制的文本字符串,文本字符串左下角的坐标,字体类型,字体大小,文本颜色,线宽
        x00 = float(data[5])*w
        y00 = float(data[6])*h
        x01 = float(data[7])*w
        y01 = float(data[8])*h
        x11 = float(data[9])*w
        y11 = float(data[10])*h
        x10 = float(data[11])*w
        y10 = float(data[12])*h
        coordinates = [[x00,y00],[x01,y01],[x11,y11],[x10,y10]]
        for coo in coordinates:
            cv2.circle(src_img,(int(coo[0]),int(coo[1])),25,(0,255,0),-5)
        #图像,圆心坐标,半径,圆边框颜色,正值表示线宽负值表示填充一个圆形
        cv2.imshow(window_name, src_img)
        cv2.waitKey(0)
    cv2.destroyAllWindows()
    return


i = 0
for txtfile in os.listdir(txt_folder_path):
    txt_path = os.path.join(txt_folder_path, txtfile)
    # 一直报错utf-8,原因是我txt文件没有放对位置,地址没有写对,导致
    # for循环第一次循环没找到txt文件解码失败。
    i += 1
    if i > 15:
        break
    # 如果是一个子目录就继续
    if os.path.isdir(txt_path):
        continue
    print("txt_path:\t", txt_path)
    img_name = txtfile.split("\\")[-1].split(".")[0] + ".jpg"
    img_path = os.path.join(img_folder_path, img_name)
    show_label_from_txt(img_path, txt_path)

到了这里,关于用labelme标注矩形框和关键点得到的json文件转txt格式用于yolov5-face训练的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2D人脸关键点转3D人脸关键点的映射~头部姿态笔记

    对通过相机参数计算图像上的二维坐标到三维坐标的映射进行简单探讨。         学习的话直接看他们的就好,我仅是拾人牙慧,拿GPT写给自己看的,图也是直接搬运的别人画的,以下链接有很完善的理论研究和代码提供。 https://medium.com/@susanne.thierfelder/head-pose-estimation

    2024年02月04日
    浏览(34)
  • mmpose关键点(四):优化关键点模型(原理与代码讲解,持续更新)

    在工程中,模型的运行速度与精度是同样重要的,本文中,我会运用不同的方法去优化比较模型的性能,希望能给大家带来一些实用的trick与经验。 有关键点检测相关经验的同学应该知道,关键点主流方法分为Heatmap-based与Regression-based。 其主要区别在于监督信息的不同,Hea

    2024年02月08日
    浏览(47)
  • 关键点数据增强

    1.关键点平移数据增强 2.关键点旋转数据增强 3.关键点可视化 4.json2txt(用YOLOV8进行关键点训练) 5.划分训练集和验证集

    2024年02月09日
    浏览(30)
  • opencv-人脸关键点定位

    2024年02月12日
    浏览(39)
  • Mediapipe人脸关键点检测

    MediaPipe是由google制作的开源的、跨平台的机器学习框架,可以将一些模型部署到不同的平台和设备上使用的同时,也能保住检测速度。 从图中可以发现,能在Python上实现的功能包括人脸检测(Face Detection)、人脸关键点(Face Mesh),手部关键点(Hands)等。利用C++能实现更丰富

    2024年02月02日
    浏览(27)
  • 解剖学关键点检测方向论文翻译和精读:基于热力图回归的CNN融入空间配置实现关键点定位

    Abstract: In many medical image analysis applications, only a limited amount of training data is available due to the costs of image acquisition and the large manual annotation effort required from experts. Training recent state-of-the-art machine learning methods like convolutional neural networks (CNNs) from small datasets is a challenging task. In this wo

    2024年02月09日
    浏览(70)
  • OpenCV实现人脸关键点检测

    目录 实现过程 1,代码解读 1.1 导入工具包 1.2导入所需图像,以及训练好的人脸预测模型 1.3 将 dlib 的关键点对象转换为 NumPy 数组,以便后续处理 1.4图像上可视化面部关键点 1.5# 读取输入数据,预处理 1.6进行人脸检测 1.7遍历检测到的框 1.8遍历每个面部 2,所有代码 3,结果

    2024年04月23日
    浏览(44)
  • 关键点检测SIFT算法笔记

            SIFT(Scale Invariant Feature Transform),尺度不变特征变换。具有旋转不变性、尺度不变性、亮度变化保持不变性,是一种非常稳定的局部特征。在目标检测和特征提取方向占据着重要的地位。         SIFT算法所查找到的关键点是一些很突出,不因光照、仿射变换和噪

    2024年02月16日
    浏览(34)
  • 关键点匹配——商汤LoFTR源码详解

    源码地址见文末         首先,进入目录,使用pip install -r requirements.txt配置环境。         首先,对于demo的运行,首先需要准备好需要用于关键点匹配的数据,提供的代码中置于了image文件夹下,然后是训练的权重,代码中下载了室内场景和室外场景的训练权重。  配置参

    2024年02月07日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包