数据标注问题【附解决方案】【持久更新】

数据标注问题【附解决方案】【持久更新】_第1张图片

 视频转化错误

对抽烟检测的数据准备标注,首先将视频进行转化,但是报错,尝试视频修复。

 1️⃣ MP4 Repair 0.9.0 Free Download for WindowsDownload MP4 Repair 0.9.0 : This is a wrapper or GUI around untrunc-w, the Windows version of untrunc. Untrunc is a utility for MP4 video repair.https://codecpack.co/download/untrunc.html#google_vignette

上述连接为 Windows修复损坏视频,可视化界面。

2️⃣

数据标注问题【附解决方案】【持久更新】_第2张图片

图 3.1 Shutter Encoder视频修复软件页面 

3️⃣

数据标注问题【附解决方案】【持久更新】_第3张图片

图 3.2 HandBrake页面

尝试多个方法修复视频,仍然报错

图 3.3 Opencv视频转化出错

初步怀疑:

1.视频录制非法结束

2.Mac系统对编码的错误

3.内部文件加密

解决方法

尝试使用ffmpeg对视频进行处理

pip install ffmpeg

安装完毕后,尝试进行视频转图片,用于图像标注

报错:

FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg'

使用conda安装,问题解决

conda install -c conda-forge ffmpeg

数据标注问题【附解决方案】【持久更新】_第4张图片

图 3.4 视频转换成功

数据标注

打开就遇到问题

问题1

TypeError: setValue(self, a0: int): argument 1 has unexpected type 'float'

尝试修改,需要修改错误代码位置

解决方法

labelimg 打框就闪退 TypeError: setValue(self, int): argument 1 has unexpected type ‘float‘_in scrollrequest bar.setvalue(bar.value() + bar.si-CSDN博客文章浏览阅读1.7w次,点赞85次,收藏194次。1.将canvas.py文件 526、530、531行的float改为int。2.在报错文件labelImg.py第965行将float改为int。_in scrollrequest bar.setvalue(bar.value() + bar.singlestep() * units) typeerhttps://blog.csdn.net/m0_74232237/article/details/130985914

问题2

之前进行了自动标注,已经保存了相应的标签数据,再使用Labelimg没有之前标注数据。

解决方法

打开目标有误。使用的是YOLO格式,所以标签文件夹需要有标签文件

如:classes.txt包括标注的类别

其次,Open Dir需要打开图像文件,Open Save Dir则是需要打开含有classes.txt的标签文件夹。

保证标注文件不同命名,使用当前时间+i排序(i从0开始进行拼接)

标注数据时的快捷键:

快捷键
W 创建矩形标注框
D 下一张
A                 上一张

问题三

IndexError: list index out of range

在进行标注的时候,修改某个边框会导致之前预设的classes.txt内容发生改变,使用以下命令可以解决问题。使用命令指定图片文件、预设标签文件。

labelimg */pic */classes.txt

数据划分

为了使模型更具有严谨性,进行标注的数据集需要进行划分,至少为训练集,还可以设置验证集、测试集。

以下代码可以自动实现

import os
import random
import shutil

# 原始数据路径
source_images = '/mnt/data/train/dataset/images'
source_labels = '/mnt/data/train/dataset/labels'

# 输出路径
output_base = '/mnt/data/train/dataset/YOLODataset'
train_ratio = 0.8  # 80% 用于训练

# 获取所有图片文件(按文件后缀过滤)
image_files = [f for f in os.listdir(source_images) if f.endswith(('.jpg', '.jpeg', '.png'))]
image_files.sort()

# 打乱顺序
random.seed(42)
random.shuffle(image_files)

# 按比例划分
num_train = int(len(image_files) * train_ratio)
train_files = image_files[:num_train]
val_files = image_files[num_train:]

# 拷贝函数
def copy_files(file_list, subset):
    image_out_dir = os.path.join(output_base, subset, 'images')
    label_out_dir = os.path.join(output_base, subset, 'labels')
    os.makedirs(image_out_dir, exist_ok=True)
    os.makedirs(label_out_dir, exist_ok=True)

    for img_file in file_list:
        label_file = os.path.splitext(img_file)[0] + '.txt'

        # 拷贝图片
        shutil.copy(os.path.join(source_images, img_file), os.path.join(image_out_dir, img_file))

        # 拷贝对应标签
        label_src = os.path.join(source_labels, label_file)
        if os.path.exists(label_src):
            shutil.copy(label_src, os.path.join(label_out_dir, label_file))
        else:
            print(f"⚠️ 标签文件缺失: {label_file}")

# 拷贝文件到目标文件夹
copy_files(train_files, 'train')
copy_files(val_files, 'val')

print("✅ 数据集划分完成(训练集 + 验证集)")

Word/PPT´úÂëÔÚÏ߸ßÁÁ|Word/PPTÖвåÈë¸ßÁÁ´úÂë|Word/PPTÃÀ»¯´úÂë_Wd1x.comÔÚÏßÉú³É¿ÉÒÔÔÚword/PPTÖиßÁÁµÄ´úÂ룬֧³Ö¸÷ÀàÖ÷Á÷ÓïÑÔÔÚÏß×ÅÉ«£¬ÈôúÂë¿´ÆðÀ´¸üÃÀ¹Û¡£https://word.wd1x.com/将代码转化成任意格式,且能在word中直接插入。

你可能感兴趣的:(数据标注问题【附解决方案】【持久更新】)