本文不再赘述anaconda虚拟环境安装,仅记录我使用label-studio遇到的具体困难和解决办法。
一、安装与运行label-studio
环境:其一:可以在电脑开始这里,搜索cmd(命令提示符)
其二:可以打开pycharm,使用终端
1.输入命令:打开你的虚拟环境(直接用base环境似乎也可以,但是不推荐,因为长此以往会使得base环境里面有很多库和文件,很乱,容易报错)
conda activate <your_enve>
2.安装label-studio,这里建议在vpn下安装,速度更快;也可以在大学-vpn模块-寻找代理下载获得学校提供的免费vpn;也可以使用国内镜像网站;
pip install -U label-studio
3.运行label-studio
label-studio
4.可以看到如下代码,之后会自动打开网站label-studio:


5.接下来,按照邮箱格式编造一个账号或者直接用QQ邮箱登录即可,可以自己记住账号密码
PS:如果想要联机一起标注,在同一个wifi或热点下,主机运行label-studio ,客机不运行,使用邀请链接加入即可,进入之后在组织里面有+people.
二、使用label-studio
1.点击create,可创建项目,然后直接保存

2.打开settings - Labeling Interface - Browse Templates浏览标签模板,选择 Object Detection with Bounding Boxes,即使用方框的目标检测标签

3.删去默认的两个标签,然后把你想要使用的标签输入进去,注意这里把每个标签前面按照顺序添加上序号,换行隔开,添加,随后保存。如下图:

4.已经准备好了标签,接下来上传图片:
在上面菜单栏点击项目名称,回退到前面的页面,然后找到右上角的Import,点击就可以上传图片,注意label-studio有100张图片的上传限制,每次上传自行控制数量;注意已经创建的项目和已经上传的图片都不能删除,请小心;接下来双击某一个图片,就可以进入标注界面,如下图:

三、标注技巧以及注意事项
1.键盘上的按键1234567890以及w之类的按键,分别对应了某一个标签,可以按下它们,快速选中标签,然后开始标注。注意每标一个框都需要选择一次,已经标号的框随时可以点击选中,然后更换其标签。
2.按下Crtl+鼠标滚轮下滑,可以放大图片,右侧还有拖动工具,任何选中的工具,再次点击都会取消选中。
3.每次标完一张图片,确认无误后直接点击右下角submit。虽然你标的所有框都会自动保存,但是,只有所有图片都submit之后,最后才能全部导出数据。提交后按钮会变成update,随时可以修改。
4.Label Studio 使用 Export (位置在项目名称,最初页面右上角) 时,由于其前端 JavaScript 强制按字母排序,无法通过正常配置禁用。
以下是真正有效的解决方案: 数字前缀欺骗法
01Fall
02Fighting
03NoHelmet
04NoVest
05Dim
06Pee
07Poo
08Slipper
09Heel
10Smoking
11BareSoil
12Well
13Edge
14Guardrail
5.最后是导出Export:

比如我导出yolo格式的数据集,最后导出的文件夹解压后情况如下:


将classes.txt文件夹中的序号部分全部删去即可

还有一个问题是,标签文件夹中的标签,全都在我们原本图片文件夹名称的前面加了如
"0c7da007-"一共9位的标签,不要慌,我们只要利用ai生成一段删去这些多余标签名,并把标签保存到原地址的代码即可:
参考提示词如下:
我现在有一些txt文件位于"C:\Users\48179\Desktop\新建文件夹\labels",里面每一个文件名称形如"0c7da007-train2_24_000006.txt",我希望把前九位字符如"0c7da007-"删去,剩余字符保存为新名称,此例即"train2_24_000006.txt",保存地址为"C:\Users\48179\Desktop\新建文件夹\labels_copy",若没有该文件夹则新建。我是python小白,请给出详尽的注释
生成代码如下:
import os
import shutil
def rename_and_copy_files():
# 原始文件夹路径
source_folder = r"C:\Users\48179\Desktop\新建文件夹\labels"
# 目标文件夹路径
target_folder = r"C:\Users\48179\Desktop\新建文件夹\labels_copy"
# 检查原始文件夹是否存在
if not os.path.exists(source_folder):
print(f"错误:原始文件夹不存在 - {source_folder}")
return
# 创建目标文件夹(如果不存在)
if not os.path.exists(target_folder):
os.makedirs(target_folder)
print(f"已创建目标文件夹: {target_folder}")
else:
print(f"目标文件夹已存在: {target_folder}")
# 获取原始文件夹中所有的txt文件
txt_files = [f for f in os.listdir(source_folder) if f.endswith('.txt')]
print(f"找到 {len(txt_files)} 个txt文件")
# 计数器,用于统计处理成功的文件数量
success_count = 0
# 遍历每个txt文件
for filename in txt_files:
# 完整的原始文件路径
old_file_path = os.path.join(source_folder, filename)
# 检查文件名是否包含至少10个字符(9个要删除的字符 + 至少1个剩余字符)
if len(filename) > 9:
# 删除前9个字符,保留剩余部分作为新文件名
new_filename = filename[9:]
# 新的文件路径
new_file_path = os.path.join(target_folder, new_filename)
# 复制文件到新位置(保留原文件)
shutil.copy2(old_file_path, new_file_path)
print(f"已处理: {filename} -> {new_filename}")
success_count += 1
else:
print(f"跳过文件(文件名太短): {filename}")
print(f"\n处理完成!成功处理 {success_count} 个文件")
print(f"原文件位置: {source_folder}")
print(f"新文件位置: {target_folder}")
# 运行函数
if __name__ == "__main__":
rename_and_copy_files()
到此,一次完整的yolo数据标注工作就结束了。其实也可以使用labelImg来标注,似乎也有许多很新的,中文的标注工具,比labelImg和label-studio两个老古董要好用的多。