74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
"""OCR recognition and standard-judgment contracts."""
|
|
|
|
from datetime import date
|
|
from typing import Literal
|
|
|
|
from pydantic import Field
|
|
|
|
from app.schemas.common import ApiSchema
|
|
|
|
|
|
class OcrField(ApiSchema):
|
|
value: str | None = None
|
|
confidence: float | None = Field(default=None, ge=0, le=1)
|
|
needs_review: bool = True
|
|
|
|
|
|
class OcrExtractedFields(ApiSchema):
|
|
product_name: OcrField = Field(default_factory=OcrField)
|
|
product_category: OcrField = Field(default_factory=OcrField)
|
|
supplier: OcrField = Field(default_factory=OcrField)
|
|
factory: OcrField = Field(default_factory=OcrField)
|
|
material_type: OcrField = Field(default_factory=OcrField)
|
|
stage_new: OcrField = Field(default_factory=OcrField)
|
|
description: OcrField = Field(default_factory=OcrField)
|
|
defect_level: OcrField = Field(default_factory=OcrField)
|
|
occurred_on: date | None = None
|
|
|
|
|
|
class OcrMeasurement(ApiSchema):
|
|
item: str
|
|
raw_value: str
|
|
value: float | None = None
|
|
unit: str | None = None
|
|
confidence: float | None = Field(default=None, ge=0, le=1)
|
|
needs_review: bool = True
|
|
|
|
|
|
class OcrStandardJudgment(ApiSchema):
|
|
measurement_item: str
|
|
measured_value: str
|
|
standard_rule_id: int | None = None
|
|
risk_point: str | None = None
|
|
standard_value: str | None = None
|
|
result: Literal["合格", "不合格", "待人工确认", "未匹配标准"]
|
|
basis: str | None = None
|
|
reason: str | None = None
|
|
|
|
|
|
class OcrFileResult(ApiSchema):
|
|
file_id: str
|
|
file_name: str
|
|
content_type: str
|
|
engine: Literal["webimage", "paddle-vl-parser"]
|
|
raw_text: str
|
|
confidence: float | None = Field(default=None, ge=0, le=1)
|
|
page_count: int = Field(default=1, ge=1)
|
|
fields: OcrExtractedFields
|
|
measurements: list[OcrMeasurement] = Field(default_factory=list)
|
|
judgments: list[OcrStandardJudgment] = Field(default_factory=list)
|
|
warnings: list[str] = Field(default_factory=list)
|
|
requires_review: bool = True
|
|
|
|
|
|
class OcrBatchResult(ApiSchema):
|
|
files: list[OcrFileResult]
|
|
fields: OcrExtractedFields
|
|
measurements: list[OcrMeasurement] = Field(default_factory=list)
|
|
judgments: list[OcrStandardJudgment] = Field(default_factory=list)
|
|
requires_review: bool = True
|
|
|
|
|
|
class OcrJudgmentRequest(ApiSchema):
|
|
measurements: list[OcrMeasurement] = Field(min_length=1, max_length=50)
|