HealthCare-API / api /routers /upload.py
ryanxely's picture
_
7ddb64a
Raw
History Blame Contribute Delete
2.36 kB
from fastapi import APIRouter, UploadFile, File, HTTPException
from api.services import ocr_service, document_service, whisper_service, llm_service
router = APIRouter()
@router.post("/image")
async def upload_image(file: UploadFile = File(...)):
"""Reçoit une image, vérifie le format, puis utilise OCR pour extraire le texte."""
if file.content_type and not file.content_type.startswith("image/"):
raise HTTPException(400, "Le fichier doit être une image.")
image_bytes = await file.read()
raw_text = await ocr_service.extract_text_from_image(image_bytes)
# if not raw_text:
# raise HTTPException(422, "Impossible d'extraire du texte de cette image.")
summary = await llm_service.summarize_for_medical_context(raw_text)
return {
"filename": file.filename,
"extracted_text": raw_text or "Aucun texte extrait",
"summary": summary or "",
}
@router.post("/document")
async def upload_document(file: UploadFile = File(...)):
"""
Recois un PDF, extrait le texte, puis génère un résumé adapté au contexte médical.
"""
# if file.content_type != "application/pdf":
# raise HTTPException(400, "Le fichier doit être un PDF.")
pdf_bytes = await file.read()
raw_text = document_service.extract_text_from_pdf(pdf_bytes)
if not raw_text:
raise HTTPException(422, "Impossible d'extraire le texte de ce PDF.")
summary = await llm_service.summarize_for_medical_context(raw_text)
return {
"filename": file.filename,
"extracted_text": raw_text or "Aucun texte extrait",
"summary": summary or "",
}
@router.post("/voice")
async def upload_voice(file: UploadFile = File(...)):
"""Reçoit un fichier audio, vérifie le format, puis utilise Whisper pour transcrire le contenu.
formats supportés : wav, mpeg, ogg, webm, mp4
"""
allowed = ["audio/wav", "audio/mpeg", "audio/ogg", "audio/webm", "audio/mp4"]
if file.content_type and file.content_type not in allowed:
raise HTTPException(400, f"Format audio non supporté: {file.content_type}")
audio_bytes = await file.read()
transcription = await whisper_service.transcribe(audio_bytes, file.filename or "unknown")
return {
"filename": file.filename,
"transcription": transcription,
}