仪评指标联分析模块
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import uuid
|
||||
from uuid import UUID
|
||||
|
||||
import config.minIO as minIO
|
||||
import db.postgres as pg
|
||||
from config.minIO import minio_client
|
||||
from llm.ticketLLM import *
|
||||
|
||||
|
||||
def process_ticket_image(
|
||||
img_bytes: bytes,
|
||||
file_name: str = None,
|
||||
project_name: str = None,
|
||||
user_id: UUID = None,
|
||||
):
|
||||
"""
|
||||
处理票据图片的核心逻辑,供不同接口调用
|
||||
"""
|
||||
|
||||
# 上传到 OSS,使用 UUID 做对象名
|
||||
object_name = str(uuid.uuid4())
|
||||
file_bytes = BytesIO(img_bytes)
|
||||
bucket_name = "image-ticket"
|
||||
if not minio_client.bucket_exists(bucket_name):
|
||||
minio_client.make_bucket(bucket_name)
|
||||
|
||||
minIO.push_file(bucket_name, object_name, file_bytes, img_bytes, "image/jpeg")
|
||||
oss_url = minIO.get_temp_url(bucket_name, object_name)
|
||||
|
||||
# 调用分析方法获取 JSON
|
||||
json_data = get_ticket_response(oss_url)
|
||||
# 解析条码
|
||||
barcode = decode_barcode(BytesIO(img_bytes))
|
||||
json_data["barcode"] = barcode
|
||||
|
||||
# 获取图片分辨率和大小
|
||||
img = Image.open(BytesIO(img_bytes))
|
||||
resolution = f"{img.width}x{img.height}"
|
||||
size_kb = len(img_bytes) / 1024
|
||||
|
||||
# 插入数据库
|
||||
pg.insert_ticket_image(
|
||||
created_by=user_id,
|
||||
file_name=file_name,
|
||||
resolution=resolution,
|
||||
size=size_kb,
|
||||
name=project_name if project_name else object_name[:8],
|
||||
moisture_content=json_data.get("moisture_content"),
|
||||
cocoon_weight=json_data.get("cocoon_weight"),
|
||||
defective_pupa_count=json_data.get("defective_pupa_count"),
|
||||
fresh_shell_weight=json_data.get("fresh_shell_weight"),
|
||||
sample_count=json_data.get("sample_count"),
|
||||
barcode=barcode,
|
||||
oss=object_name,
|
||||
net_weight_total=json_data.get("net_weight_total"),
|
||||
evaluator=json_data.get("evaluator"),
|
||||
reviewer=json_data.get("reviewer"),
|
||||
)
|
||||
|
||||
return json_data
|
||||
Reference in New Issue
Block a user