| 对比新文件 |
| | |
| | | #!/usr/bin/env python |
| | | """ |
| | | COCO 导出测试脚本 |
| | | 用于测试 COCO 导出功能并打印详细信息 |
| | | """ |
| | | import os |
| | | import sys |
| | | |
| | | # 添加项目路径 |
| | | sys.path.insert(0, '/data/label-studio') |
| | | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'label_studio.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() |