Test-Space / main.py
Lambang
da
cf2491c
raw
history blame
4.46 kB
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
@app.get("/")
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
# ## -------------------------------------------------------------------------
# @app.post('/upload/file',tags=["Predicting"])
# 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}