Spaces:
Runtime error
Runtime error
from fastapi import FastAPI | |
import pickle | |
import uvicorn | |
import pandas as pd | |
import shutil | |
import cv2 | |
import tensorflow as tf | |
import os | |
from flask import Flask, jsonify, request, flash, redirect, url_for | |
from pyngrok import ngrok | |
from fastapi import FastAPI, HTTPException, File, UploadFile, Request | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.responses import JSONResponse | |
from file_processing import FileProcess | |
from get_load_data import GetLoadData | |
from data_preprocess import DataProcessing | |
from train_pred import TrainPred | |
app = FastAPI() | |
public_url = "https://lambang0902-test-space.hf.space" | |
app.mount("/static", StaticFiles(directory="static"), name="static") | |
# Tempat deklarasi variabel-variabel penting | |
filepath = "" | |
list_class = ['Diamond','Oblong','Oval','Round','Square','Triangle'] | |
list_folder = ['Training', 'Testing'] | |
face_crop_img = True | |
face_landmark_img = True | |
landmark_extraction_img = True | |
# ----------------------------------------------------- | |
# ----------------------------------------------------- | |
# Tempat deklarasi model dan sejenisnya | |
selected_model = tf.keras.models.load_model(f'models/fc_model_1.h5', compile=False) | |
# face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml') | |
# mp_drawing = mp.solutions.drawing_utils | |
# mp_face_mesh = mp.solutions.face_mesh | |
# drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1) | |
# ----------------------------------------------------- | |
# ----------------------------------------------------- | |
# Tempat setting server | |
UPLOAD_FOLDER = './upload' | |
UPLOAD_MODEL = './models' | |
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg','zip','h5'} | |
# ----------------------------------------------------- | |
#Endpoints | |
#Root endpoints | |
async def root(): | |
# Dapatkan URL publik dari ngrok | |
ngrok_url = "Tidak Ada URL Publik (ngrok belum selesai memulai)" | |
return {"message": "Hello, World!", "ngrok_url": ngrok_url} | |
#----------------------------------------------------- | |
data_processor = DataProcessing() | |
data_train_pred = TrainPred() | |
import random | |
def preprocessing(filepath): | |
folder_path = './static/temporary' | |
shutil.rmtree(folder_path) | |
os.mkdir(folder_path) | |
# data_processor.detect_landmark(data_processor.face_cropping_pred(filepath)) | |
data_processor.enhance_contrast_histeq(data_processor.face_cropping_pred(filepath)) | |
files = os.listdir(folder_path) | |
index = 0 | |
for file_name in files: | |
file_ext = os.path.splitext(file_name)[1] | |
new_file_name = str(index) + "_" + str(random.randint(1, 100000)) + file_ext | |
os.rename(os.path.join(folder_path, file_name), os.path.join(folder_path, new_file_name)) | |
index += 1 | |
# print("Tungu sampai selesaiii") | |
# train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1 / 255.) | |
# test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1 / 255.) | |
# ## ------------------------------------------------------------------------- | |
# ## API UNTUK MELAKUKAN PROSES PREDIKSI | |
# ## ------------------------------------------------------------------------- | |
async def upload_file(picture: UploadFile): | |
file_extension = picture.filename.split('.')[-1].lower() | |
if file_extension not in ALLOWED_EXTENSIONS: | |
raise HTTPException(status_code=400, detail='Invalid file extension') | |
os.makedirs(UPLOAD_FOLDER, exist_ok=True) | |
file_path = os.path.join(UPLOAD_FOLDER, secure_filename(picture.filename)) | |
with open(file_path, 'wb') as f: | |
f.write(picture.file.read()) | |
try: | |
processed_img = preprocessing(cv2.imread(file_path)) | |
except Exception as e: | |
os.remove(file_path) | |
raise HTTPException(status_code=500, detail=f'Error processing image: {str(e)}') | |
return JSONResponse(content={'message': 'File successfully uploaded'}, status_code=200) | |
# @app.get('/get_images', tags=["Predicting"]) | |
# def get_images(): | |
# folder_path = "./static/temporary" | |
# files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] | |
# urls = [] | |
# for i in range(0, 3): | |
# url = f'{public_url}/static/temporary/{files[i]}' | |
# urls.append(url) | |
# bentuk, persentase = data_train_pred.prediction(selected_model) | |
# return {'urls': urls, 'bentuk_wajah':bentuk[0], 'persen':persentase} | |