| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- """
- 初始化图片标注示例数据脚本
- 创建多种图片标注项目和任务,用于测试图片标注功能。
- 包括:目标检测、图像分类、图像分割、关键点标注等。
- """
- import requests
- import json
- # API 基础 URL
- BASE_URL = "http://localhost:8000"
- # 1. 目标检测标注配置(矩形框标注)
- OBJECT_DETECTION_CONFIG = """<View>
- <Header value="目标检测 - 物体识别"/>
- <Image name="image" value="$image"/>
- <RectangleLabels name="label" toName="image">
- <Label value="人" background="red"/>
- <Label value="车" background="blue"/>
- <Label value="自行车" background="green"/>
- <Label value="狗" background="orange"/>
- <Label value="猫" background="purple"/>
- </RectangleLabels>
- </View>"""
- # 2. 图像分类标注配置
- IMAGE_CLASSIFICATION_CONFIG = """<View>
- <Header value="图像分类"/>
- <Image name="image" value="$image"/>
- <Choices name="category" toName="image" choice="single" showInline="true">
- <Choice value="风景"/>
- <Choice value="人物"/>
- <Choice value="动物"/>
- <Choice value="建筑"/>
- <Choice value="食物"/>
- <Choice value="其他"/>
- </Choices>
- </View>"""
- # 3. 图像分割标注配置(多边形标注)
- IMAGE_SEGMENTATION_CONFIG = """<View>
- <Header value="图像分割 - 精细标注"/>
- <Image name="image" value="$image"/>
- <PolygonLabels name="label" toName="image">
- <Label value="前景" background="rgba(255, 0, 0, 0.5)"/>
- <Label value="背景" background="rgba(0, 0, 255, 0.5)"/>
- <Label value="物体" background="rgba(0, 255, 0, 0.5)"/>
- </PolygonLabels>
- </View>"""
- # 4. 关键点标注配置(人体姿态估计)
- KEYPOINT_DETECTION_CONFIG = """<View>
- <Header value="关键点标注 - 人体姿态"/>
- <Image name="image" value="$image"/>
- <KeyPointLabels name="keypoint" toName="image">
- <Label value="头部" background="red"/>
- <Label value="肩膀" background="blue"/>
- <Label value="肘部" background="green"/>
- <Label value="手腕" background="orange"/>
- <Label value="膝盖" background="purple"/>
- <Label value="脚踝" background="pink"/>
- </KeyPointLabels>
- </View>"""
- # 5. 多标签图像分类配置
- MULTI_LABEL_CLASSIFICATION_CONFIG = """<View>
- <Header value="多标签图像分类"/>
- <Image name="image" value="$image"/>
- <Choices name="attributes" toName="image" choice="multiple" showInline="false">
- <Choice value="室内"/>
- <Choice value="室外"/>
- <Choice value="白天"/>
- <Choice value="夜晚"/>
- <Choice value="晴天"/>
- <Choice value="雨天"/>
- <Choice value="有人"/>
- <Choice value="无人"/>
- </Choices>
- </View>"""
- # 6. 图像质量评估配置
- IMAGE_QUALITY_CONFIG = """<View>
- <Header value="图像质量评估"/>
- <Image name="image" value="$image"/>
- <Choices name="quality" toName="image" choice="single" showInline="true">
- <Choice value="优秀"/>
- <Choice value="良好"/>
- <Choice value="一般"/>
- <Choice value="较差"/>
- </Choices>
- <Choices name="issues" toName="image" choice="multiple" showInline="false">
- <Choice value="模糊"/>
- <Choice value="曝光过度"/>
- <Choice value="曝光不足"/>
- <Choice value="噪点多"/>
- <Choice value="色彩失真"/>
- </Choices>
- </View>"""
- # 示例图片任务数据
- # 使用公开的测试图片 URL(来自 Unsplash 等免费图片网站)
- SAMPLE_IMAGE_TASKS = [
- # 目标检测任务
- {
- "name": "街道场景-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1449824913935-59a10b8d2000?w=800"
- }
- },
- {
- "name": "街道场景-2",
- "data": {
- "image": "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?w=800"
- }
- },
- {
- "name": "公园场景",
- "data": {
- "image": "https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=800"
- }
- },
-
- # 图像分类任务
- {
- "name": "风景图片-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800"
- }
- },
- {
- "name": "建筑图片-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1480714378408-67cf0d13bc1b?w=800"
- }
- },
- {
- "name": "动物图片-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1425082661705-1834bfd09dca?w=800"
- }
- },
-
- # 图像分割任务
- {
- "name": "物体分割-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?w=800"
- }
- },
- {
- "name": "物体分割-2",
- "data": {
- "image": "https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?w=800"
- }
- },
-
- # 关键点标注任务
- {
- "name": "人体姿态-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1571019614242-c5c5dee9f50b?w=800"
- }
- },
- {
- "name": "人体姿态-2",
- "data": {
- "image": "https://images.unsplash.com/photo-1517836357463-d25dfeac3438?w=800"
- }
- },
-
- # 多标签分类任务
- {
- "name": "场景分析-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=800"
- }
- },
- {
- "name": "场景分析-2",
- "data": {
- "image": "https://images.unsplash.com/photo-1469474968028-56623f02e42e?w=800"
- }
- },
-
- # 图像质量评估任务
- {
- "name": "质量评估-1",
- "data": {
- "image": "https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=800"
- }
- },
- {
- "name": "质量评估-2",
- "data": {
- "image": "https://images.unsplash.com/photo-1501594907352-04cda38ebc29?w=800"
- }
- },
- ]
- def create_project(name, description, config):
- """创建项目"""
- url = f"{BASE_URL}/api/projects"
- data = {
- "name": name,
- "description": description,
- "config": config
- }
-
- response = requests.post(url, json=data)
- if response.status_code == 201:
- project = response.json()
- print(f"✓ 创建项目成功: {project['name']} (ID: {project['id']})")
- return project
- else:
- print(f"✗ 创建项目失败: {response.status_code} - {response.text}")
- return None
- def create_task(project_id, task_name, task_data):
- """创建任务"""
- url = f"{BASE_URL}/api/tasks"
- data = {
- "project_id": project_id,
- "name": task_name,
- "data": task_data
- }
-
- response = requests.post(url, json=data)
- if response.status_code == 201:
- task = response.json()
- print(f" ✓ 创建任务: {task['name']} (ID: {task['id']})")
- return task
- else:
- print(f" ✗ 创建任务失败: {response.status_code} - {response.text}")
- return None
- def main():
- """主函数"""
- print("=" * 60)
- print("初始化图片标注平台示例数据")
- print("=" * 60)
- print()
-
- # 1. 创建目标检测项目
- print("1. 创建目标检测项目...")
- detection_project = create_project(
- name="目标检测 - 街道场景",
- description="标注街道场景中的人、车、自行车等物体",
- config=OBJECT_DETECTION_CONFIG
- )
-
- if detection_project:
- print(" 创建目标检测任务...")
- for i in range(3):
- create_task(
- detection_project['id'],
- SAMPLE_IMAGE_TASKS[i]['name'],
- SAMPLE_IMAGE_TASKS[i]['data']
- )
- print()
-
- # 2. 创建图像分类项目
- print("2. 创建图像分类项目...")
- classification_project = create_project(
- name="图像分类",
- description="将图片分类为风景、人物、动物、建筑、食物等类别",
- config=IMAGE_CLASSIFICATION_CONFIG
- )
-
- if classification_project:
- print(" 创建图像分类任务...")
- for i in range(3, 6):
- create_task(
- classification_project['id'],
- SAMPLE_IMAGE_TASKS[i]['name'],
- SAMPLE_IMAGE_TASKS[i]['data']
- )
- print()
-
- # 3. 创建图像分割项目
- print("3. 创建图像分割项目...")
- segmentation_project = create_project(
- name="图像分割 - 物体轮廓",
- description="使用多边形工具精细标注物体轮廓",
- config=IMAGE_SEGMENTATION_CONFIG
- )
-
- if segmentation_project:
- print(" 创建图像分割任务...")
- for i in range(6, 8):
- create_task(
- segmentation_project['id'],
- SAMPLE_IMAGE_TASKS[i]['name'],
- SAMPLE_IMAGE_TASKS[i]['data']
- )
- print()
-
- # 4. 创建关键点标注项目
- print("4. 创建关键点标注项目...")
- keypoint_project = create_project(
- name="关键点标注 - 人体姿态估计",
- description="标注人体关键点(头部、肩膀、肘部、手腕、膝盖、脚踝)",
- config=KEYPOINT_DETECTION_CONFIG
- )
-
- if keypoint_project:
- print(" 创建关键点标注任务...")
- for i in range(8, 10):
- create_task(
- keypoint_project['id'],
- SAMPLE_IMAGE_TASKS[i]['name'],
- SAMPLE_IMAGE_TASKS[i]['data']
- )
- print()
-
- # 5. 创建多标签分类项目
- print("5. 创建多标签分类项目...")
- multi_label_project = create_project(
- name="多标签图像分类",
- description="为图片添加多个属性标签(室内/室外、白天/夜晚等)",
- config=MULTI_LABEL_CLASSIFICATION_CONFIG
- )
-
- if multi_label_project:
- print(" 创建多标签分类任务...")
- for i in range(10, 12):
- create_task(
- multi_label_project['id'],
- SAMPLE_IMAGE_TASKS[i]['name'],
- SAMPLE_IMAGE_TASKS[i]['data']
- )
- print()
-
- # 6. 创建图像质量评估项目
- print("6. 创建图像质量评估项目...")
- quality_project = create_project(
- name="图像质量评估",
- description="评估图片质量并标注存在的问题(模糊、曝光等)",
- config=IMAGE_QUALITY_CONFIG
- )
-
- if quality_project:
- print(" 创建图像质量评估任务...")
- for i in range(12, 14):
- create_task(
- quality_project['id'],
- SAMPLE_IMAGE_TASKS[i]['name'],
- SAMPLE_IMAGE_TASKS[i]['data']
- )
- print()
-
- print("=" * 60)
- print("图片标注示例数据初始化完成!")
- print("=" * 60)
- print()
- print("已创建的项目类型:")
- print("1. 目标检测 - 使用矩形框标注物体")
- print("2. 图像分类 - 单标签分类")
- print("3. 图像分割 - 使用多边形精细标注")
- print("4. 关键点标注 - 人体姿态估计")
- print("5. 多标签分类 - 场景属性标注")
- print("6. 图像质量评估 - 质量评分和问题标注")
- print()
- print("你现在可以:")
- print("1. 访问 http://localhost:4200/projects 查看项目列表")
- print("2. 点击项目查看详情和任务")
- print("3. 点击'开始标注'按钮进行图片标注")
- print()
- print("注意:")
- print("- 图片来自 Unsplash 免费图片库")
- print("- 需要网络连接才能加载图片")
- print("- 如果图片加载失败,请检查网络连接")
- print()
- if __name__ == "__main__":
- try:
- main()
- except requests.exceptions.ConnectionError:
- print("✗ 错误: 无法连接到后端服务器")
- print(" 请确保后端服务器正在运行:")
- print(" cd backend && python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000")
- except Exception as e:
- print(f"✗ 发生错误: {e}")
- import traceback
- traceback.print_exc()
|