phase 12
This commit is contained in:
@@ -73,6 +73,17 @@ class OCRResponse(BaseModel):
|
||||
results: list[OCRTextResult]
|
||||
|
||||
|
||||
class PreprocessRequest(BaseModel):
|
||||
image: str
|
||||
binarize: bool = False
|
||||
deskew: bool = False
|
||||
contrast: bool = True
|
||||
|
||||
|
||||
class PreprocessResponse(BaseModel):
|
||||
image: str # base64 JPEG of processed image
|
||||
|
||||
|
||||
class VLMRequest(BaseModel):
|
||||
image: str
|
||||
prompt: str
|
||||
@@ -183,6 +194,34 @@ def ocr(req: OCRRequest):
|
||||
return OCRResponse(results=[OCRTextResult(**r) for r in results])
|
||||
|
||||
|
||||
@app.post("/preprocess", response_model=PreprocessResponse)
|
||||
def preprocess_image(req: PreprocessRequest):
|
||||
try:
|
||||
image = _decode_image(req.image)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=400, detail=f"Bad image: {e}")
|
||||
|
||||
try:
|
||||
from models.preprocess import preprocess
|
||||
processed = preprocess(
|
||||
image,
|
||||
do_binarize=req.binarize,
|
||||
do_deskew=req.deskew,
|
||||
do_contrast=req.contrast,
|
||||
)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Preprocessing failed: {e}")
|
||||
|
||||
from PIL import Image as PILImage
|
||||
import io
|
||||
img = PILImage.fromarray(processed)
|
||||
buf = io.BytesIO()
|
||||
img.save(buf, format="JPEG", quality=90)
|
||||
result_b64 = base64.b64encode(buf.getvalue()).decode()
|
||||
|
||||
return PreprocessResponse(image=result_b64)
|
||||
|
||||
|
||||
@app.post("/vlm", response_model=VLMResponse)
|
||||
def vlm(req: VLMRequest):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user