| import gradio as gr
|
| import cv2
|
| import numpy as np
|
| from PIL import Image
|
| import os
|
| from utils.model_loader import load_blood_group_model, load_gender_model
|
| from utils.predictor import predict_blood_group, predict_gender
|
| from utils.preprocessing import preprocess_fingerprint
|
|
|
|
|
| blood_model = load_blood_group_model()
|
| gender_model = load_gender_model()
|
|
|
| def analyze_fingerprint(image):
|
| """Analyze uploaded fingerprint image"""
|
| if image is None:
|
| return "Please upload a fingerprint image.", "", "", ""
|
|
|
| try:
|
|
|
| preprocessed_blood = preprocess_fingerprint(image, model_type="blood_group")
|
| preprocessed_gender = preprocess_fingerprint(image, model_type="gender")
|
|
|
|
|
| blood_result = predict_blood_group(blood_model, preprocessed_blood)
|
| gender_result = predict_gender(gender_model, preprocessed_gender)
|
|
|
|
|
| if blood_result["success"]:
|
| blood_text = f"**Predicted Blood Group:** {blood_result['blood_group']}\n**Confidence:** {blood_result['confidence']:.2%}"
|
| blood_details = "\n".join([f"{k}: {v:.2%}" for k, v in blood_result['all_scores'].items()])
|
| else:
|
| blood_text = "Error predicting blood group"
|
| blood_details = str(blood_result.get('error', 'Unknown error'))
|
|
|
| if gender_result["success"]:
|
| gender_text = f"**Predicted Gender:** {gender_result['gender']}\n**Confidence:** {gender_result['confidence']:.2%}"
|
| else:
|
| gender_text = "Error predicting gender"
|
|
|
| return blood_text, blood_details, gender_text, ""
|
|
|
| except Exception as e:
|
| return f"Error processing image: {str(e)}", "", "", ""
|
|
|
|
|
| with gr.Blocks(title="Forensic Fingerprint Analysis", theme=gr.themes.Soft()) as demo:
|
| gr.Markdown("# ๐ Forensic Fingerprint Analysis System")
|
| gr.Markdown("Upload a fingerprint image to predict blood group and gender using machine learning models.")
|
|
|
| with gr.Row():
|
| with gr.Column():
|
| image_input = gr.Image(label="Upload Fingerprint Image", type="pil")
|
| analyze_btn = gr.Button("Analyze Fingerprint", variant="primary")
|
|
|
| with gr.Column():
|
| gr.Markdown("### Results")
|
| blood_output = gr.Textbox(label="Blood Group Prediction", lines=2)
|
| blood_scores = gr.Textbox(label="All Blood Group Scores", lines=8)
|
| gender_output = gr.Textbox(label="Gender Prediction", lines=2)
|
|
|
|
|
| analyze_btn.click(
|
| analyze_fingerprint,
|
| inputs=image_input,
|
| outputs=[blood_output, blood_scores, gender_output, gr.Textbox(visible=False)]
|
| )
|
|
|
| gr.Markdown("---")
|
| gr.Markdown("**About:** 4th Year Forensic Research Project - Analyzing fingerprint patterns for biometric identification.")
|
|
|
|
|
| if __name__ == "__main__":
|
| demo.launch()
|
|
|