前后端交互完成

This commit is contained in:
2025-02-20 10:30:49 +08:00
parent e44ec67963
commit cdd05e95ba
6 changed files with 127 additions and 5 deletions

View File

@ -5,6 +5,7 @@ from app.model.crud import project_image_crud as pimc
from app.service import project_service as ps
from app.model.schemas.project_info_schemas import ProjectInfoIn, ProjectInfoPager
from app.model.schemas.project_label_schemas import ProjectLabel
from app.model.schemas.project_image_schemas import ProjectImgLeaferLabel
from app.model.bussiness_model import ProjectLabel as pl
from app.db.db_session import get_db
from app.common.jwt_check import get_user_id
@ -126,3 +127,26 @@ def get_image_list(project_id: int, session: Session = Depends(get_db)):
return rc.response_success(data=image_list)
@project.post("/save_img_label")
def save_img_label(img_leafer_label: ProjectImgLeaferLabel, session: Session = Depends(get_db)):
"""
保存图片的标签框选信息
:param img_leafer_label:
:param session:
:return:
"""
ps.save_img_label(img_leafer_label, session)
return rc.response_success(msg="保存成功")
@project.get("/get_img_leafer/{imager_id}")
def get_img_leafer(image_id: int, session: Session = Depends(get_db)):
"""
根据图片id查询图片的leafer信息
:param image_id:
:param session:
:return:
"""
img_leafer_out = ps.get_img_leafer(image_id, session)
return rc.response_success(data=img_leafer_out)

View File

@ -41,3 +41,21 @@ class ProjectImage(DbCommon):
image_url: Mapped[str] = mapped_column(String(255), nullable=False)
thumb_image_url: Mapped[str] = mapped_column(String(255), nullable=False)
project_id: Mapped[int] = mapped_column(Integer)
class ProjectImgLeafer(DbCommon):
"""项目图片leafer表"""
__tablename__ = "project_img_leafer"
image_id: Mapped[int] = mapped_column(Integer, nullable=False)
leafer: Mapped[dict] = mapped_column(JSON)
class ProjectImgLabel(DbCommon):
"""项目图片标签对应表一张图片对应多个label"""
__tablename__ = "project_img_label"
image_id: Mapped[int] = mapped_column(Integer, nullable=False)
label_id: Mapped[int] = mapped_column(Integer, nullable=False)
mark_center_x: Mapped[str] = mapped_column(String(64), nullable=False)
mark_center_y: Mapped[str] = mapped_column(String(64), nullable=False)
mark_width: Mapped[str] = mapped_column(String(64), nullable=False)
mark_height: Mapped[str] = mapped_column(String(64), nullable=False)

View File

@ -27,8 +27,7 @@ def add_image(image: ProjectImage, session: Session):
def add_image_batch(images: List[ProjectImage], session: Session):
for image in images:
session.add(image)
session.add_all(images)
session.commit()

View File

@ -0,0 +1,32 @@
from sqlalchemy.orm import Session
from typing import List
from app.model.bussiness_model import ProjectImgLeafer
from app.model.bussiness_model import ProjectImgLabel
def get_img_leafer(image_id: int, session: Session):
"""
根据图片id查询图片的leafer信息
:param image_id:
:param session:
:return:
"""
img_leafer = session.query(ProjectImgLeafer).filter_by(image_id=image_id).first()
return img_leafer
def save_img_leafer(leafer: ProjectImgLeafer, session: Session):
leafer_saved = session.query(ProjectImgLeafer).filter_by(image_id=leafer.image_id).first()
if leafer_saved is not None:
session.delete(leafer_saved)
session.add(leafer)
session.commit()
return leafer
def save_img_label_batch(image_id: int, img_labels: List[ProjectImgLabel], session: Session):
session.query(ProjectImgLabel).filter_by(image_id=image_id).delete()
session.add_all(img_labels)
session.commit()
return len(img_labels)

View File

@ -1,5 +1,5 @@
from pydantic import BaseModel, Field
from typing import Optional
from typing import Optional, List
class ProjectImage(BaseModel):
@ -16,3 +16,25 @@ class ProjectImagePager(BaseModel):
project_id: Optional[int] = Field(..., description="项目id")
pagerNum: Optional[int] = Field(1, description="当前页码")
pagerSize: Optional[int] = Field(10, description="每页数量")
class ProjectImgLabelIn(BaseModel):
label_id: int
mark_center_x: str
mark_center_y: str
mark_width: str
mark_height: str
class ProjectImgLeaferLabel(BaseModel):
image_id: Optional[int] = Field(..., description="图片id")
leafer: Optional[dict] = Field(..., description="保存的leafer")
label_infos: List[ProjectImgLabelIn] = Field(..., description="标签框选信息")
class ProjectImgLeaferOut(BaseModel):
image_id: Optional[int] = Field(..., description="图片id")
leafer: Optional[dict] = Field(..., description="保存的leafer")
class Config:
orm_mode = True

View File

@ -1,8 +1,9 @@
from app.model.bussiness_model import ProjectImage
from app.model.bussiness_model import ProjectInfo
from app.model.bussiness_model import ProjectImage, ProjectInfo, ProjectImgLeafer, ProjectImgLabel
from app.model.schemas.project_info_schemas import ProjectInfoIn, ProjectInfoOut
from app.model.schemas.project_image_schemas import ProjectImgLeaferLabel, ProjectImgLeaferOut
from app.model.crud import project_info_crud as pic
from app.model.crud import project_image_crud as pimc
from app.model.crud import project_img_leafer_label_crud as pillc
from app.util import os_utils as os
from app.util import random_utils as ru
from app.config.config_reader import datasets_url, runs_url, images_url
@ -54,5 +55,31 @@ def upload_project_image(project_info: ProjectInfoOut, files: List[UploadFile],
pimc.add_image_batch(images, session)
def save_img_label(img_leafer_label: ProjectImgLeaferLabel, session: Session):
"""
保存图片的标签框选信息,每次保存都会针对图片的信息全部删除,然后重新保存
:param img_leafer_label:
:param session:
:return:
"""
img_leafer = ProjectImgLeafer(**img_leafer_label)
pillc.save_img_leafer(img_leafer, session)
label_infos = img_leafer_label.label_infos
img_labels = []
for label_info in label_infos:
img_label = ProjectImgLabel(**label_info.dict())
img_label.image_id = img_leafer_label.image_id
img_labels.append(img_label)
pillc.save_img_label_batch(img_leafer_label.image_id, img_labels, session)
def get_img_leafer(image_id: int, session: Session):
"""
根据图片id查询图片的leafer信息
:param image_id:
:param session:
:return:
"""
img_leafer = pillc.get_img_leafer(image_id, session)
img_leafer_out = ProjectImgLeaferOut.from_orm(img_leafer).dict()
return img_leafer_out