Spaces:
Sleeping
Sleeping
| # server.py | |
| import uvicorn | |
| from fastapi import FastAPI, File, UploadFile | |
| from fastapi.responses import HTMLResponse | |
| from fastapi.staticfiles import StaticFiles | |
| from fastapi.templating import Jinja2Templates | |
| import numpy as np | |
| from fastapi.middleware.cors import CORSMiddleware | |
| import tensorflow as tf | |
| from PIL import Image | |
| from io import BytesIO | |
| from fastapi import Request | |
| # Initializing The App | |
| app = FastAPI() | |
| # Secure Our APP Server | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Mounting | |
| app.mount("/static", StaticFiles(directory="frontend/static"), name="static") | |
| app.mount("/models/yoga_pose/static", StaticFiles(directory='models/yoga_pose/static'), name='static_yoga_pose') | |
| app.mount("/models/weather/static", StaticFiles(directory='models/weather/static'), name='static_weather') | |
| app.mount("/models/sports_ball/static", StaticFiles(directory='models/sports_ball/static'), name='static_sports_ball') | |
| app.mount("/models/mammals/static", StaticFiles(directory='models/mammals/static'), name='static_mammals') | |
| app.mount("/models/flower/static", StaticFiles(directory='models/flower/static'), name='static_flower') | |
| app.mount("/models/card/static", StaticFiles(directory='models/card/static'), name='static_card') | |
| app.mount("/models/dog_breed/static", StaticFiles(directory='models/dog_breed/static'), name='static_dog_breed') | |
| app.mount("/models/chess/static", StaticFiles(directory='models/chess/static'), name='static_chess') | |
| app.mount("/models/bird/static", StaticFiles(directory='models/bird/static'), name='static_bird') | |
| # templates | |
| templates = Jinja2Templates(directory="frontend") | |
| templates1 = Jinja2Templates(directory="models") | |
| # DL or Ml Models (Loading).. | |
| sports_ball_model = tf.keras.models.load_model('models/sports_ball/Sports_ball_prediction_v2.h5') | |
| weather_model = tf.keras.models.load_model('models/weather/weather_prediction_v2.h5') | |
| flower_model = tf.keras.models.load_model('models/flower/flower_prediction.h5') | |
| yoga_pose_model = tf.keras.models.load_model('models/yoga_pose/yoga-modelv2.h5') | |
| mammals_model = tf.keras.models.load_model('models/mammals/Mammals_predictionv1.h5') | |
| card_model = tf.keras.models.load_model('models/card/card_model_v2.h5') | |
| dog_breed_model = tf.keras.models.load_model("models/dog_breed/dog_breedv3.h5") | |
| chess_model = tf.keras.models.load_model("models/chess/chess_prediction_v4.h5") | |
| bird_model = tf.keras.models.load_model("models/bird/bird_modelV2.h5") | |
| # classes For All Models | |
| yoga_class = ['Bridge Pose', 'Child-Pose', 'CobraPose', | |
| 'Downward Dog pose', 'Pigeon pose', 'Standing Mountain Pose', | |
| 'Tree Pose', 'Triangle Pose', 'Warrior Pose'] | |
| sports_ball_class = ['american_football', 'baseball', 'basketball', 'billiard_ball', 'bowling_ball', 'cricket_ball', | |
| 'football', 'golf_ball', 'hockey_ball', 'hockey_puck', 'rugby_ball', 'shuttlecock', | |
| 'table_tennis_ball', 'tennis_ball', 'volleyball'] | |
| flower_class = ['astilbe', 'bellflower', 'black_eyed_susan', 'calendula', 'california_poppy', 'carnation', | |
| 'common_daisy', 'coreopsis', 'dandelion', 'iris', 'rose', 'sunflower', 'tulip', 'water_lily'] | |
| mammals_class = ['african_elephant', 'alpaca', 'american_bison', 'anteater', 'arctic_fox', 'armadillo', 'baboon', | |
| 'badger', 'blue_whale', 'brown_bear', 'camel', 'dolphin', 'giraffe', 'groundhog', 'highland_cattle', | |
| 'horse', 'jackal', 'kangaroo', 'koala', 'manatee', 'mongoose', 'mountain_goat', 'opossum', 'orangutan', | |
| 'otter', 'polar_bear', 'porcupine', 'red_panda', 'rhinoceros', 'sea_lion', 'seal', 'snow_leopard', | |
| 'squirrel', 'sugar_glider', 'tapir', 'vampire_bat', 'vicuna', 'walrus', 'warthog', 'water_buffalo', | |
| 'weasel', 'wildebeest', 'wombat', 'yak', 'zebra'] | |
| cards_class = ['ace of clubs', 'ace of diamonds', 'ace of hearts', 'ace of spades', 'eight of clubs', | |
| 'eight of diamonds', 'eight of hearts', 'eight of spades', 'five of clubs', 'five of diamonds', | |
| 'five of hearts', 'five of spades', 'four of clubs', 'four of diamonds', 'four of hearts', | |
| 'four of spades', 'jack of clubs', 'jack of diamonds', 'jack of hearts', 'jack of spades', 'joker', | |
| 'king of clubs', 'king of diamonds', 'king of hearts', 'king of spades', 'nine of clubs', | |
| 'nine of diamonds', 'nine of hearts', 'nine of spades', 'queen of clubs', 'queen of diamonds', | |
| 'queen of hearts', 'queen of spades', 'seven of clubs', 'seven of diamonds', 'seven of hearts', | |
| 'seven of spades', 'six of clubs', 'six of diamonds', 'six of hearts', 'six of spades', 'ten of clubs', | |
| 'ten of diamonds', 'ten of hearts', 'ten of spades', 'three of clubs', 'three of diamonds', | |
| 'three of hearts', 'three of spades', 'two of clubs', 'two of diamonds', 'two of hearts', | |
| 'two of spades'] | |
| weather_class = ['dew', 'fogsmog', 'frost', 'glaze', 'hail', 'lightning', 'rain', 'rainbow', 'rime', 'sandstorm', | |
| 'snow'] | |
| dog_breed_class = ['Afghan','African Wild Dog', 'Airedale', 'American Hairless','American Spaniel', 'Basenji', 'Basset', | |
| 'Beagle', 'Bearded Collie', 'Bermaise', 'Bichon Frise', 'Blenheim', 'Bloodhound', 'Bluetick', | |
| 'Border Collie','Borzoi','Boston Terrier', 'Boxer', 'Bull Mastiff', 'Bull Terrier', 'Bulldog', | |
| 'Cairn', 'Chihuahua', 'Chinese Crested','Chow', 'Clumber','Cockapoo', 'Cocker', 'Collie', 'Corgi', | |
| 'Coyote', 'Dalmation', 'Dhole', 'Dingo', 'Doberman', 'Elk Hound', 'French Bulldog', 'German Sheperd', | |
| 'Golden Retriever', 'Great Dane', 'Great Perenees', 'Greyhound', 'Groenendael', 'Irish Spaniel', | |
| 'Irish Wolfhound', 'Japanese Spaniel', 'Komondor', 'Labradoodle', 'Labrador', 'Lhasa', 'Malinois', | |
| 'Maltese', 'Mex Hairless', 'Newfoundland', 'Pekinese', 'Pit Bull', 'Pomeranian', 'Poodle', 'Pug', | |
| 'Rhodesian', 'Rottweiler', 'Saint Bernard', 'Schnauzer', 'Scotch Terrier', 'Shar_Pei', 'Shiba Inu', | |
| 'Shih-Tzu', 'Siberian Husky', 'Vizsla', 'Yorkie'] | |
| chess_class = ['Bishop', 'King', 'Knight', 'Pawn', 'Queen', 'Rook'] | |
| bird_class = ['Asian-Green-Bee-Eater', 'Brown-Headed-Barbet', 'Cattle-Egret', 'Common-Kingfisher', 'Common-Myna', | |
| 'Common-Rosefinch', 'Common-Tailorbird', 'Coppersmith-Barbet', 'Forest-Wagtail', 'Gray-Wagtail', 'Hoopoe', | |
| 'House-Crow', 'Indian-Grey-Hornbill', 'Indian-Peacock', 'Indian-Pitta', 'Indian-Roller', 'Jungle-Babbler', | |
| 'Northern-Lapwing', 'Red-Wattled-Lapwing', 'Ruddy-Shelduck', 'Rufous-Treepie', 'Sarus-Crane', | |
| 'White-Breasted-Kingfisher', 'White-Breasted-Waterhen', 'White-Wagtail'] | |
| # HTML Responses | |
| async def read_root(request: Request): | |
| return templates.TemplateResponse("main.html", {"request": request}) | |
| async def read_yoga_pose(request: Request): | |
| return templates1.TemplateResponse("yoga_pose/yoga_pose.html", {"request": request}) | |
| async def read_weather(request: Request): | |
| return templates1.TemplateResponse("weather/weather.html", {"request": request}) | |
| async def read_sports_ball(request: Request): | |
| return templates1.TemplateResponse("sports_ball/sports_ball.html", {"request": request}) | |
| async def read_mammals(request: Request): | |
| return templates1.TemplateResponse("mammals/mammals.html", {"request": request}) | |
| async def read_flower(request: Request): | |
| return templates1.TemplateResponse("flower/flower.html", {"request": request}) | |
| async def read_card(request: Request): | |
| return templates1.TemplateResponse("card/card.html", {"request": request}) | |
| async def read_dog_breed(request: Request): | |
| return templates1.TemplateResponse("dog_breed/dog_breed.html", {"request": request}) | |
| async def read_chess(request: Request): | |
| return templates1.TemplateResponse("chess/chess.html", {"request": request}) | |
| async def read_bird(request: Request): | |
| return templates1.TemplateResponse("bird/bird.html", {"request": request}) | |
| # Function Converting Img --> Array | |
| def read_file_as_image(data): | |
| img = Image.open(BytesIO(data)).resize((224, 224)) | |
| img_array = tf.keras.preprocessing.image.img_to_array(img) | |
| return img_array | |
| # Endpoint for Sports Ball Model | |
| async def predict_sports_ball(file: UploadFile = File(...)): | |
| print("Sports Ball Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = sports_ball_model.predict(img) | |
| result = sports_ball_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # EndPoint For Flower Model | |
| async def predict_flower(file: UploadFile = File(...)): | |
| print("Flower Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = flower_model.predict(img) | |
| result = flower_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for Weather Model | |
| async def weather(file: UploadFile = File(...)): | |
| print("Weather Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = weather_model.predict(img) | |
| result = weather_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for Yoga Pose Model | |
| async def predict_yoga_pose(file: UploadFile = File(...)): | |
| print("Yoga Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = yoga_pose_model.predict(img) | |
| result = yoga_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for Mammals Model | |
| async def predict_mammals(file: UploadFile = File(...)): | |
| print("Mammals Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = mammals_model.predict(img) | |
| result = mammals_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for card Model | |
| async def predict_card(file: UploadFile = File(...)): | |
| print("card Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = card_model.predict(img) | |
| result = cards_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for Dog Breed Model | |
| async def predict_dog_breed(file: UploadFile = File(...)): | |
| print("Dog Breed Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = dog_breed_model.predict(img) | |
| result = dog_breed_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for chess Model | |
| async def predict_chess(file: UploadFile = File(...)): | |
| print("Chess Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = chess_model.predict(img) | |
| result = chess_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Endpoint for bird Model | |
| async def predict_bird(file: UploadFile = File(...)): | |
| print("bird Prediction endpoint called") | |
| file.file.seek(0) | |
| img = read_file_as_image(await file.read()) | |
| img = np.expand_dims(img, axis=0) | |
| predicted = bird_model.predict(img) | |
| result = bird_class[np.argmax(predicted[0])] | |
| confidence = np.max(predicted[0]) | |
| return { | |
| 'class': result, | |
| 'confidence': round(confidence * 100, 1) | |
| } | |
| # Run The Server In Localhost via Uvicorn | |
| if __name__ == '__main__': | |
| uvicorn.run(app, host='localhost', port=8000) | |