File size: 1,469 Bytes
c3e39a4
 
 
 
 
 
 
 
 
 
9907177
c3e39a4
 
 
 
 
 
 
 
 
 
 
 
9907177
c3e39a4
 
 
a507dec
 
 
 
9907177
c3e39a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
import numpy as np
import tensorflow as tf
from io import BytesIO
from PIL import Image

app = FastAPI()

# Load your pre-trained model
MODEL_PATH = "./models/model_catdog1.h5"
model = tf.keras.models.load_model(MODEL_PATH)

def read_image(file: UploadFile) -> Image.Image:
  image = Image.open(BytesIO(file.file.read())).convert('RGB')
  return image

def preprocess_image(image: Image.Image):
  image = image.resize((128, 128))  # Adjust to the size expected by your model
  image = np.array(image) / 255.0  # Normalize
  image = np.expand_dims(image, axis=0)  # Add batch dimension
  return image

@app.get("/api/working")
def home():
  return {"message": "FastAPI server is running on Hugging Face Spaces!"}

@app.get("/api/working2")
def greet_somename():
    return {"message": "Hello Bodhisatta, how are you"}

@app.post("/api/predict1")
async def predict(file: UploadFile = File(...)):
  try:
    image = read_image(file)
    preprocessed_image = preprocess_image(image)

    # Make the prediction
    prediction = model.predict(preprocessed_image)
    predicted_class = "cat" if np.argmax(prediction) == 0 else "dog"
    
    return JSONResponse(content={"prediction": predicted_class})
  except Exception as e:
    return JSONResponse(content={"error": str(e)}, status_code=500)

if __name__ == "__main__":
  import uvicorn
  uvicorn.run(app, host="0.0.0.0", port=7860)