File size: 1,355 Bytes
eabc9cd
aabae8d
eabc9cd
 
 
 
aabae8d
 
 
 
 
 
 
 
 
 
eabc9cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import JSONResponse
from apps.services.foward.fw_middleware import forward_request, forward_middleware
from .models.fd_model import FaceDetectionModel
from .controllers.fd_controller import faces_detection_controller


router = APIRouter(prefix='/fd')
router_base_configs = {
    "tags": ["fd"],
    "response_class": JSONResponse
}


# Face detection
@router.post("/", **router_base_configs)
async def faces_detection(
    image: FaceDetectionModel.image = FaceDetectionModel.image_default,
    fw_index: FaceDetectionModel.fw_index = Depends(forward_middleware)
):
    # Forward request
    fw_data = {
        "files": {"image": image.file}
    }
    fw_response = forward_request(fw_index, fw_data, '/api/fd/')
    if fw_response is not None:
        return JSONResponse({
            "faces": fw_response["data"]["faces"]
        })

    # Check if image is None
    if image is None:
        raise HTTPException(status_code=400, detail="Image is required")
    # Check if image is empty
    if image.filename == '':
        raise HTTPException(status_code=400, detail="Image is empty")
    # Read image
    image_bytes = await image.read()
    # Process image
    detected_faces = faces_detection_controller(image_bytes)
    return JSONResponse({"faces": detected_faces})