创建虚拟环境
conda create -n paddlelabel python=3.11.11
conda activate paddlelabel
通过以下命令安装
pip install --upgrade paddlelabel
输入命令pdlabel
运行paddlelabel,发现报错:
ModuleNotFoundError: Please install connexion using the 'flask' extra
输入命令:
pip install connexion[flask] connexion[uvicorn]
再启动报错:
TypeError: Field.__init__() got an unexpected keyword argument 'exclude'
看报错信息定位到
File "...\site-packages\paddlelabel\api\schema\task.py", line 18, in TaskSchema
猜测是多包之间的版本兼容问题,把这行改了
# annotations = fields.List(Nested("AnnotationSchema"), exclude=("task",))
annotations = fields.List(fields.Nested("AnnotationSchema", exclude=("task",)))
然后运行会出现这个问题:
TypeError: run() got an unexpected keyword argument 'debug'
意思是run()函数不能指定debug参数,这里怀疑是版本兼容问题,但由于没找到具体的版本,反复测试版本很费事,就直接把debug的参数去掉了,如下:
# ...\site-packages\paddlelabel\__main__.py
connexion_app.run(host=configs.host, port=configs.port, debug=configs.debug)
# 复制并注释掉原来的行,删掉debug参数
connexion_app.run(host=configs.host, port=configs.port)
再启动就能正常打开界面:
之后选中目标检测,导入数据集,创建失败,运行以下命令:
pip install uvicorn==0.14.0 --no-deps
pip install connexion==2.14.1 --no-deps
pip install anyio==3.0 --no-deps
pip install Werkzeug==2.2.2 --no-deps
pip install starlette==0.21.0 --no-deps
pip install Flask==2.2.2 --no-deps
pip install Flask-Cors==3.0.10 --no-deps
pip install a2wsgi==1.8.0 --no-deps
pip install alembic==1.12.1 --no-deps
pip install a2wsgi uvicorn==0.18.1
之后还有报错,将这两个文件原封不动修改掉:
# 我的路径是:D:\anaconda3\envs\paddlelabel\Lib\site-packages\paddlelabel\api\schema\annotation.py
# -*- coding: utf-8 -*-
from marshmallow import fields
from paddlelabel.api.model import Annotation
from .base import BaseSchema
class AnnotationSchema(BaseSchema):
class Meta(BaseSchema.Meta):
model = Annotation
# not required when calling api
# task = fields.Int(allow_none=True)
task = fields.Nested("TaskSchema", only=("id",), dump_only=True)
project_id = fields.Integer()
task_id = fields.Integer()
# task = fields.Nested("TaskSchema", exclude=("annotations", "datas"))
label = fields.Nested("LabelSchema")
# 我的路径是:D:\anaconda3\envs\paddlelabel\Lib\site-packages\paddlelabel\api\schema\task.py
# -*- coding: utf-8 -*-
import json
import time
from marshmallow import post_load, pre_load, pre_dump, post_dump, fields
from marshmallow.fields import Nested
from paddlelabel.api.model import Task
from paddlelabel.api.schema.util import str2sault
from .base import BaseSchema
class TaskSchema(BaseSchema):
class Meta(BaseSchema.Meta):
model = Task
# project = Nested("ProjectSchema")
# annotations = fields.List(Nested("AnnotationSchema"), exclude=("task",))
id = fields.Int()
annotations = fields.List(Nested("AnnotationSchema", exclude=("task",)))
# annotations = fields.List(fields.Nested("AnnotationSchema", exclude=("task",)))
data_paths = fields.List(fields.String())
# datas = fields.List(Nested("DataSchema"), exclude=("task",))
# # TODO: confirm data['result'] dont cause trouble
def output(self, task, **kwargs):
paths = []
for data in task.datas:
paths.append(f"/datas/{data.data_id}/image?sault={str2sault(data.path+str(data.created))}")
task.data_paths = paths
return task
之后再次创建之前,要先回到主页,把创建失败的项目给删掉才能重新创建该项目。
再次创建成功: