BtechProjectPCCOE's picture
Update app.py
fdfd7de verified
import gradio as gr
import numpy as np
import cv2
import tensorflow as tf
from PIL import Image
import os
# ===================== LOAD MODELS =====================
blood_model = None
gender_model = None
def load_models():
global blood_model, gender_model
if blood_model is None:
try:
blood_model = tf.keras.models.load_model("blood_model.h5")
except Exception as e:
print(f"Blood model error: {e}")
blood_model = None
if gender_model is None:
try:
gender_model = tf.keras.models.load_model("gender_model.keras")
except Exception as e:
print(f"Gender model error: {e}")
gender_model = None
return blood_model, gender_model
# ===================== PREPROCESS =====================
def preprocess_image(image):
image = np.array(image)
img = cv2.resize(image, (224, 224))
img = img / 255.0
img = np.expand_dims(img, axis=0)
return img
# ===================== LABELS =====================
BLOOD_GROUPS = ["A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"]
GENDERS = ["Male", "Female"]
# ===================== PREDICTION =====================
def analyze_fingerprint(image):
if image is None:
return "Please upload image", "", ""
try:
blood_model, gender_model = load_models()
if blood_model is None or gender_model is None:
return "Model files missing", "", ""
img = preprocess_image(image)
# Blood prediction
blood_pred = blood_model.predict(img)[0]
blood_idx = np.argmax(blood_pred)
blood_text = f"Predicted Blood Group: {BLOOD_GROUPS[blood_idx]} ({blood_pred[blood_idx]:.2%})"
blood_scores = "\n".join(
[f"{bg}: {score:.2%}" for bg, score in zip(BLOOD_GROUPS, blood_pred)]
)
# Gender prediction
gender_pred = gender_model.predict(img)[0]
gender_idx = np.argmax(gender_pred)
gender_text = f"Predicted Gender: {GENDERS[gender_idx]} ({gender_pred[gender_idx]:.2%})"
return blood_text, blood_scores, gender_text
except Exception as e:
return f"Error: {str(e)}", "", ""
# ===================== UI =====================
with gr.Blocks(title="Forensic Fingerprint Analysis") as demo:
gr.Markdown("# 🔍 Forensic Fingerprint Analysis")
gr.Markdown("Upload a fingerprint image to predict blood group and gender.")
with gr.Row():
with gr.Column():
image_input = gr.Image(type="pil", label="Upload Fingerprint")
btn = gr.Button("Analyze")
with gr.Column():
blood_output = gr.Textbox(label="Blood Group")
blood_scores = gr.Textbox(label="All Scores")
gender_output = gr.Textbox(label="Gender")
btn.click(
analyze_fingerprint,
inputs=image_input,
outputs=[blood_output, blood_scores, gender_output],
)
# ===================== RUN =====================
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)