#!/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()