創建虛擬環境
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 fieldsfrom paddlelabel.api.model import Annotation
from .base import BaseSchemaclass 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 timefrom marshmallow import post_load, pre_load, pre_dump, post_dump, fields
from marshmallow.fields import Nestedfrom paddlelabel.api.model import Task
from paddlelabel.api.schema.util import str2sault
from .base import BaseSchemaclass 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 = pathsreturn task
之后再次創建之前,要先回到主頁,把創建失敗的項目給刪掉才能重新創建該項目。
再次創建成功: