File size: 2,039 Bytes
1029406
 
ac34c34
2d6127c
1029406
391fd4d
1029406
2009218
573cab4
1029406
2009218
 
1029406
 
 
ac34c34
 
1029406
ac34c34
4f419e7
ac34c34
 
1029406
8fc22b1
e8f297c
7686256
ac34c34
7686256
 
ac34c34
 
7686256
ac34c34
 
a060d60
9bf0f5a
3ecfd46
 
 
2009218
3ecfd46
 
 
2009218
3ecfd46
 
 
 
ac34c34
573cab4
a060d60
7686256
ac34c34
7686256
2d6127c
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
43
44
45
46
47
48
49
50
51
52
53
54
55
from model_loader import load_vChain_model
from inference import preprocess_input, segment_all

import gzip
import tempfile
import numpy as np
import nibabel as nib
from fastapi import FastAPI, UploadFile, File, HTTPException, status
from fastapi.responses import FileResponse



app = FastAPI()

wt_model, tc_model, et_model = load_vChain_model('./wt_chkpt.pth', './tc_chkpt.pth', './et_chkpt.pth')
is_ready = True
print("Model Started Successfully! ")

@app.get("/status/")
def status():
    return {"msg": "The Model is Idle!"} if is_ready else {"msg": "The Model is Processing Some Input Now, Come On Later!"}
    
@app.post("/segment/")
def segment(files: list[UploadFile]):
    global is_ready
    try:
        is_ready = False
        flair, t1, t1ce, t2 = (f for f in files)
        flair_tensor, t1_tensor, t1ce_tensor, t2_tensor = preprocess_input(flair, t1, t1ce, t2)
        print("Input Files Processed Successfully!")
        
        output = segment_all(wt_model, tc_model, et_model, flair_tensor, t1_tensor, t1ce_tensor, t2_tensor)
        print("Segmentated Successfuly!\nSending Output File ...")
        
        output_img = nib.Nifti1Image(output, affine=np.eye(4))
        
        with tempfile.NamedTemporaryFile(suffix=".nii", delete=False) as tempFile:
            nib.save(output_img, tempFile.name)
            tempFile.seek(0)
            
            with tempfile.NamedTemporaryFile(suffix=".nii.gz", delete=False) as tempGzipFile:
                with gzip.open(tempGzipFile.name, 'wb') as gz:
                    gz.write(tempFile.read())
                
                response = FileResponse(tempGzipFile.name, media_type="multipart/form-data")
                tempGzipFile.close()
            tempFile.close()    
                
        is_ready = True
        return response
         
    except Exception as e:
        is_ready = True
        print(f"Error occurred: {str(e)}")
        raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="An error occurred during segmentation.")