使用python和yolo方法实现yolo标签自动标注

 更新时间:2024年11月15日 11:23:38   作者:Jumbuck_10  
本文介绍了基于YOLOv10的自动标注方法,从初阶的固定标注到高阶的基于YOLO检测结果的自动标注,两者相比,高阶方法显著提高了标注的准确性,并减少了人工操作的时间,</P><P>

yolo代码自动标注

1.引言

在图像处理与机器视觉领域,标注数据的质量和数量对于模型的训练至关重要。然而,手动标注大量图像是一项繁琐且耗时的工作。为了解决这个问题,自动标注技术应运而生。本文将介绍如何使用YOLOv10结合传统图像处理算法进行验证码图像的自动标注,从初步的自动标注到高阶的基于检测结果的自动标注。

2.初阶“自动标注”,给每个图像都生成一个固定的标注文件,进而在labglimg中对矩形框进行微调,减少标注的工作量

在初步的自动标注阶段,我们首先为每张图像生成一个固定的标注文件,这些文件的内容通常是预设的,矩形框的位置并不精确,因此适合用作标注的初步框架。

import os
# 图像文件夹路径
image_folder = 'D:'
# 标注文件即txt文件路径
txt_folder = 'D:'
# 基于上述两个路径检索图像和txt即yolo格式的标注文件
image_files = [f.split('.')[0] for f in os.listdir(image_folder) if f.lower().endswith(('jpg', 'jpeg', 'png', 'bmp'))]
txt_files = [f.split('.')[0] for f in os.listdir(txt_folder) if f.lower().endswith('txt')]
# 遍历图像文件名
for img_name in image_files:
    # 如果某图像没有对应的标签文件即txt文件
    if img_name not in txt_files:
        # 写入txt文件
        txt_content = """0 0.808621 0.945652 0.072414 0.073913
                        0 0.250000 0.604348 0.093103 0.078261
                        0 0.660345 0.584783 0.086207 0.100000
                        0 0.613793 0.160870 0.117241 0.139130
                        0 0.293103 0.184783 0.103448 0.117391"""
        with open(os.path.join(txt_folder, img_name + '.txt'), 'w') as f:
            f.write(txt_content)
print("Process complete.")

由于我们对每张图都生成的是一份固定的标注txt文件,所以生成的文件一般都是这种的,矩形框 不在正确的位置上,虽然能够降低一定的标注工作量,但是我们还是想让它更精准一点,那就需要使用训练好的模型了。

局限性:
矩形框位置不准确,标注结果可能与实际物体位置存在偏差。
无法自动识别图像中的所有物体,可能遗漏检测。

3.高阶自动标注,利用我们训练好的(但是没有特别精准的)yolo文件先对每张图进行检测,再手动微调

为了提高自动标注的精度,我们可以使用YOLOv10模型对每张图像进行目标检测,并根据检测结果生成标注文件。这种方式能够提供较为准确的初步标注,用户只需要对检测框进行微调即可,减少了大量的手动标注工作。

import os
from ultralytics import YOLOv10
# Folder paths
image_folder = 'D:'
txt_folder = 'D:'
# Load a pretrained YOLOv10n model
model = YOLOv10("\weights\\best.pt")
image_files = [f for f in os.listdir(image_folder) if f.lower().endswith(('jpg', 'jpeg', 'png', 'bmp'))]
# Perform object detection on each image file
for img_name in image_files:
    img_path = os.path.join(image_folder, img_name)
    # Perform prediction
    results = model.predict(img_path)
    # Extract detection results (assuming results[0] contains the detection)
    detections = results[0].boxes.xywh  # Get bounding box coordinates (xywh format)
    # If no .txt file exists, create a new one
    txt_path = os.path.join(txt_folder, img_name.split('.')[0] + '.txt')
    if not os.path.exists(txt_path):  # Check if .txt file already exists
        # Write detection results to the .txt file
        with open(txt_path, 'w') as f:
            for detection in detections:
                # Assuming you want the format: class_id x_center y_center width height (normalized)
                # Convert coordinates from pixels to normalized values by dividing by image width/height
                x_center, y_center, width, height = detection
                x_center /= results[0].orig_img.shape[1]  # Normalize by image width
                y_center /= results[0].orig_img.shape[0]  # Normalize by image height
                width /= results[0].orig_img.shape[1]  # Normalize by image width
                height /= results[0].orig_img.shape[0]  # Normalize by image height
                # Write to file (Assuming class id is 0 here, change based on your model)
                f.write(f"0 {x_center} {y_center} {width} {height}\n")
print("Process complete.")

代码详解:
1.加载YOLOv10模型:使用YOLOv10模型进行物体检测。通过model.predict()函数对每张图像进行检测。
2.提取检测结果:模型返回的结果中包含了检测到的目标的坐标信息,采用boxes.xywh提取出目标的位置。
3.坐标归一化:将检测结果的坐标从像素值转换为相对图像大小的比例(即归一化值),以符合YOLO标注格式。
4.生成标注文件:根据模型检测结果生成标注文件,格式为class_id x_center y_center width height。

这种方式得到的数据一般是下图这样的,1.会有一些框不准,2.有一些框是重复的,3.有一些代码没有检测到。此时我们只需要微调这三种情况的框即可,显著降低了工作量。

4.总结

本文介绍了基于YOLOv10的自动标注方法,从初阶的固定标注到高阶的基于YOLO检测结果的自动标注。两者相比,高阶方法显著提高了标注的准确性,并减少了人工操作的时间。

初阶方法:快速生成标注文件,适用于初步标注,但需要人工微调和修正。
高阶方法:通过YOLOv10检测得到较为精准的标注结果,适合更高精度要求的任务,但仍需要人工微调。
希望这些代码能帮助大家提升标注工作的效率和精度,降低人工标注的成本。在未来的工作中,我们可以继续优化和扩展该方法,进一步提高自动标注的精度和适用范围。

到此这篇关于使用python和yolo方法实现yolo标签自动标注的文章就介绍到这了,更多相关python yolo标签自动标注内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python opencv角点检测连线功能的实现代码

    python opencv角点检测连线功能的实现代码

    这篇文章主要介绍了python opencv角点检测连线功能的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 2021年的Python 时间轴和即将推出的功能详解

    2021年的Python 时间轴和即将推出的功能详解

    这篇文章主要介绍了2021年的Python 时间轴和即将推出的功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python实现微信高效自动化操作

    Python实现微信高效自动化操作

    在如今数字化时代,人们对于效率的追求越来越强烈,而PyAutoGUI和Pyperclip作为Python中的两个强大库,为我们实现自动化操作提供了便利,下面我们就来看看如何利用这两个库实现微信自动化操作吧
    2023-10-10
  • 在Django中编写模版节点及注册标签的方法

    在Django中编写模版节点及注册标签的方法

    这篇文章主要介绍了在Django中编写模版节点及注册标签的方法,Django是Python各式各样的高人气框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • python:动态路由的Flask程序代码

    python:动态路由的Flask程序代码

    今天小编就为大家分享一篇python:动态路由的Flask程序代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python中文竖排显示的方法

    Python中文竖排显示的方法

    这篇文章主要介绍了Python中文竖排显示的方法,可实现Python将中文竖排输出显示的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python使用win32 COM实现Excel的写入与保存功能示例

    Python使用win32 COM实现Excel的写入与保存功能示例

    这篇文章主要介绍了Python使用win32 COM实现Excel的写入与保存功能,结合实例形式分析了Python调用win32 COM组件针对Excel文件的读写与保存相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • numpy.bincount用于复数权重的方法

    numpy.bincount用于复数权重的方法

    numpy.bincount是NumPy库中的一个函数,它用于计算整数数组中每个值的出现次数,numpy.bincount函数在统计整数数组中每个值的出现次数或权重和时非常有用,本文给大家介绍numpy.bincount如何用于复数权重,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • tensorboard 可以显示graph,却不能显示scalar的解决方式

    tensorboard 可以显示graph,却不能显示scalar的解决方式

    今天小编就为大家分享一篇tensorboard 可以显示graph,却不能显示scalar的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python+unittest+requests 接口自动化测试框架搭建教程

    Python+unittest+requests 接口自动化测试框架搭建教程

    这篇文章主要介绍了Python+unittest+requests 接口自动化测试框架搭建教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论