91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
from fastapi import APIRouter, Depends, UploadFile, File
|
|
from app.core.response import success_response, error_response, ResponseModel
|
|
from app.core.ai_client import ai_client
|
|
from app.api.deps import get_current_user
|
|
from app.models.user import UserDB
|
|
import logging
|
|
from app.core.qcloud import qcloud_manager
|
|
from pydantic import BaseModel
|
|
from typing import Optional
|
|
|
|
from app.core.qwen_client import qwen_client
|
|
router = APIRouter()
|
|
|
|
class ExtractPickupCodeRequest(BaseModel):
|
|
url: str
|
|
|
|
class VLRequest(BaseModel):
|
|
imageData: Optional[bytes] = None
|
|
url: Optional[str] = None
|
|
prompt: Optional[str] = None
|
|
user_content: Optional[str] = None
|
|
|
|
@router.post("/recognition/pickup_code_with_url", response_model=ResponseModel)
|
|
async def extract_pickup_code_with_url(
|
|
data: ExtractPickupCodeRequest
|
|
):
|
|
"""从图片 URL 中提取取件码"""
|
|
|
|
if not data.url:
|
|
return error_response(code=400, message="URL 不能为空")
|
|
|
|
try:
|
|
# 调用 AI 客户端提取取件码
|
|
result = await ai_client.extract_pickup_code(url=data.url)
|
|
if "error" in result:
|
|
return error_response(code=500, message=result.get("message", "提取取件码失败"))
|
|
|
|
# 返回原始数据和格式化文本
|
|
return success_response(data=result)
|
|
except Exception as e:
|
|
logging.exception(f"提取取件码失败: {str(e)}")
|
|
return error_response(code=500, message=f"提取取件码失败: {str(e)}")
|
|
|
|
|
|
@router.post("/recognition/pickup_code", response_model=ResponseModel)
|
|
async def extract_pickup_code(
|
|
file: UploadFile = File(...)
|
|
):
|
|
"""从图片中提取取件码"""
|
|
|
|
try:
|
|
# 检查文件类型
|
|
if not file.content_type.startswith('image/'):
|
|
return error_response(code=400, message="只能上传图片文件")
|
|
|
|
# 读取图片内容
|
|
image_data = await file.read()
|
|
|
|
# 调用 AI 客户端提取取件码
|
|
result = await ai_client.extract_pickup_code(image_data=image_data)
|
|
|
|
if "error" in result:
|
|
return error_response(code=500, message=result.get("message", "提取取件码失败"))
|
|
|
|
# 返回原始数据和格式化文本
|
|
return success_response(data=result)
|
|
|
|
except Exception as e:
|
|
logging.exception(f"提取取件码失败: {str(e)}")
|
|
return error_response(code=500, message=f"提取取件码失败: {str(e)}")
|
|
|
|
@router.post("/qw/vl", response_model=ResponseModel)
|
|
async def extract_pickup_code_with_url(
|
|
data: VLRequest
|
|
):
|
|
"""从图片 URL 中提取取件码"""
|
|
|
|
try:
|
|
# 调用 AI 客户端提取取件码
|
|
result = await qwen_client.vl(imageData=data.imageData, url=data.url, prompt=data.prompt, user_content=data.user_content)
|
|
if "error" in result:
|
|
return error_response(code=500, message=result.get("message", "返回失败"))
|
|
|
|
# 返回原始数据和格式化文本
|
|
return success_response(data=result)
|
|
|
|
except Exception as e:
|
|
logging.exception(f"vl失败: {str(e)}")
|
|
return error_response(code=500, message=f"vl失败: {str(e)}")
|
|
|