import os import cv2 import numpy as np import streamlit as st from google.generativeai import configure, GenerativeModel import base64 from datetime import datetime # Page configuration st.set_page_config( page_title="Advanced Dental X-Ray Analysis System", page_icon="🦷", layout="wide" ) # Custom CSS for better appearance st.markdown(""" """, unsafe_allow_html=True) # Main title with professional styling st.title("🦷 Advanced Dental X-Ray Analysis System") st.markdown("---") # Initialize session state if 'patient_history' not in st.session_state: st.session_state.patient_history = {} # Sidebar for API configuration with st.sidebar: st.header("Configuration") api_key = st.text_input("Your API Key", type="password") if not api_key: api_key = os.getenv("GEMINI_API_KEY") if not api_key: st.error("⚠️ Please provide an API key.") st.stop() st.markdown("---") st.header("Patient Information") # Patient history form with st.form("patient_history"): st.session_state.patient_history.update({ 'name': st.text_input("Patient Name"), 'age': st.number_input("Age", 1, 120), 'gender': st.selectbox("Gender", ["Male", "Female", "Other"]), 'medical_history': st.multiselect("Medical History", ["Diabetes", "Hypertension", "Heart Disease", "None"]), 'dental_complaints': st.text_area("Current Dental Complaints"), 'previous_treatments': st.text_area("Previous Dental Treatments"), 'smoking': st.selectbox("Smoking Status", ["Non-smoker", "Former smoker", "Current smoker"]), 'last_dental_visit': st.date_input("Last Dental Visit") }) submit_button = st.form_submit_button("Save Patient Information") # Configure Gemini Pro configure(api_key=api_key) model = GenerativeModel("gemini-pro") # Main content area col1, col2 = st.columns([1, 1]) with col1: st.header("X-Ray Upload & Processing") uploaded_file = st.file_uploader("Upload a dental X-ray image", type=["jpg", "jpeg", "png"]) if uploaded_file: # Display original image st.image(uploaded_file, caption="Original X-ray", use_column_width=True) # Image processing options st.subheader("Image Enhancement Options") denoise_strength = st.slider("Denoising Strength", 1, 20, 10) contrast_limit = st.slider("Contrast Enhancement", 1.0, 5.0, 2.0) # Process image img = cv2.imdecode(np.frombuffer(uploaded_file.read(), np.uint8), cv2.IMREAD_GRAYSCALE) # Enhanced preprocessing img = cv2.fastNlMeansDenoising(img, None, denoise_strength, 7, 21) clahe = cv2.createCLAHE(clipLimit=contrast_limit, tileGridSize=(8, 8)) img = clahe.apply(img) # Display enhanced image st.image(img, caption="Enhanced X-ray", use_column_width=True) # Encode image _, img_encoded = cv2.imencode('.png', img) base64_image = base64.b64encode(img_encoded).decode('utf-8') with col2: if uploaded_file and 'name' in st.session_state.patient_history and st.session_state.patient_history['name']: st.header("Analysis & Results") # Analysis options analysis_type = st.multiselect("Select Analysis Focus Areas", ["Cavity Detection", "Bone Density", "Root Canal Assessment", "Periodontal Status", "Wisdom Teeth", "Overall Assessment"]) if st.button("Generate Analysis"): with st.spinner("Analyzing X-ray..."): # Construct detailed prompt prompt = f""" Please analyze this dental X-ray image with the following context: Patient Information: - Name: {st.session_state.patient_history['name']} - Age: {st.session_state.patient_history['age']} - Gender: {st.session_state.patient_history['gender']} - Medical History: {', '.join(st.session_state.patient_history['medical_history'])} - Current Complaints: {st.session_state.patient_history['dental_complaints']} - Previous Treatments: {st.session_state.patient_history['previous_treatments']} - Smoking Status: {st.session_state.patient_history['smoking']} Focus Areas: {', '.join(analysis_type)} Please provide a detailed analysis including: 1. Identified abnormalities or concerns 2. Potential diagnosis considerations 3. Recommended additional examinations if needed 4. Treatment suggestions 5. Risk factors based on patient history Format the response in a clear, structured manner. """ response = model.generate_content(prompt) # Display results st.markdown("### Analysis Results") st.write(response.text) # Generate report st.markdown("### Report Generation") if st.button("Generate PDF Report"): st.info("Report generation functionality can be implemented here") # Display disclaimer st.markdown("""
This analysis is generated by AI and is for informational purposes only. It should not be considered as a definitive diagnosis. Please consult with a qualified dental professional for accurate diagnosis and treatment planning.
Advanced Dental X-Ray Analysis System v2.0
Developed by:
Supervised and reviewed by:
Participants:
UI Designer: