#!/usr/bin/env python
|
"""
|
COCO 导出测试脚本
|
用于测试 COCO 导出功能并打印详细信息
|
"""
|
import os
|
import sys
|
|
# 设置环境变量(与 start.sh 保持一致)
|
os.environ.setdefault('LABEL_STUDIO_BASE_DATA_DIR', '/data/label-studio-data')
|
os.environ.setdefault('TZ', 'Asia/Shanghai')
|
|
# 添加项目路径 - 需要添加 label_studio 目录
|
sys.path.insert(0, '/data/label-studio/label_studio')
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings.label_studio')
|
|
import django
|
django.setup()
|
|
from django.conf import settings
|
from projects.models import Project
|
from data_export.models import DataExport
|
from data_export.serializers import ExportDataSerializer
|
|
def test_coco_export():
|
"""测试 COCO 导出功能"""
|
print("=" * 80)
|
print("COCO 导出测试脚本")
|
print("=" * 80)
|
|
# 1. 检查配置
|
print("\n[1] 检查配置:")
|
print(f"MEDIA_ROOT: {settings.MEDIA_ROOT}")
|
print(f"UPLOAD_DIR: {settings.UPLOAD_DIR}")
|
print(f"完整上传路径: {os.path.join(settings.MEDIA_ROOT, settings.UPLOAD_DIR)}")
|
print(f"路径是否存在: {os.path.exists(os.path.join(settings.MEDIA_ROOT, settings.UPLOAD_DIR))}")
|
print(f"CONVERTER_DOWNLOAD_RESOURCES 默认值: {settings.CONVERTER_DOWNLOAD_RESOURCES}")
|
|
upload_dir = os.path.join(settings.MEDIA_ROOT, settings.UPLOAD_DIR)
|
if os.path.exists(upload_dir):
|
print(f"上传目录内容: {os.listdir(upload_dir)}")
|
# 检查项目1的文件夹
|
project1_dir = os.path.join(upload_dir, '1')
|
if os.path.exists(project1_dir):
|
files = os.listdir(project1_dir)
|
print(f"项目1的文件数量: {len(files)}")
|
if files:
|
print(f"示例文件: {files[0]}")
|
|
# 2. 检查项目
|
print("\n[2] 检查项目:")
|
try:
|
project = Project.objects.get(id=1)
|
print(f"项目 ID: {project.id}")
|
print(f"项目标题: {project.title}")
|
print(f"任务数量: {project.tasks.count()}")
|
print(f"标注数量: {sum(t.annotations.count() for t in project.tasks.all())}")
|
except Project.DoesNotExist:
|
print("错误:项目1不存在")
|
return
|
|
# 3. 获取任务数据
|
print("\n[3] 获取任务数据:")
|
tasks = project.tasks.all()
|
if tasks.exists():
|
first_task = tasks.first()
|
print(f"第一个任务 ID: {first_task.id}")
|
print(f"任务数据: {first_task.data}")
|
|
# 检查图片路径
|
if 'image' in first_task.data:
|
image_path = first_task.data['image']
|
print(f"图片路径(在数据中): {image_path}")
|
|
# 尝试解析路径
|
if image_path.startswith('/data/'):
|
# 移除 /data/ 前缀
|
relative_path = image_path.replace('/data/', '')
|
full_path = os.path.join(settings.MEDIA_ROOT, relative_path)
|
print(f"完整文件路径: {full_path}")
|
print(f"文件是否存在: {os.path.exists(full_path)}")
|
if os.path.exists(full_path):
|
print(f"文件大小: {os.path.getsize(full_path)} 字节")
|
else:
|
print("警告:项目中没有任务")
|
return
|
|
# 4. 测试导出
|
print("\n[4] 测试导出:")
|
print("正在序列化任务数据...")
|
task_data = ExportDataSerializer(tasks, many=True).data
|
print(f"序列化的任务数量: {len(task_data)}")
|
|
if task_data:
|
print("\n第一个任务的数据结构:")
|
first_task_keys = list(task_data[0].keys())
|
print(f"字段: {', '.join(first_task_keys)}")
|
|
if 'data' in task_data[0]:
|
print(f"data 字段内容: {task_data[0]['data']}")
|
|
# 5. 检查 label-studio-sdk 版本
|
print("\n[5] 检查依赖:")
|
try:
|
import label_studio_sdk
|
print(f"label-studio-sdk 版本: {label_studio_sdk.__version__}")
|
except:
|
print("警告:无法导入 label_studio_sdk")
|
|
print("\n" + "=" * 80)
|
print("测试完成")
|
print("=" * 80)
|
|
if __name__ == '__main__':
|
test_coco_export()
|