# Face Detection-Based AI Automation of Lab Tests # Streamlit App with OpenCV + rPPG + MediaPipe Integration (Deployable on Hugging Face Spaces) import streamlit as st import cv2 import numpy as np import mediapipe as mp import pandas as pd import time import os # Setup Mediapipe Face Mesh mp_face_mesh = mp.solutions.face_mesh face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, refine_landmarks=True, min_detection_confidence=0.5) # Function to calculate mean green intensity (simplified rPPG) def estimate_heart_rate(frame, landmarks): h, w, _ = frame.shape forehead_pts = [landmarks[10], landmarks[338], landmarks[297], landmarks[332]] mask = np.zeros((h, w), dtype=np.uint8) pts = np.array([[int(pt.x * w), int(pt.y * h)] for pt in forehead_pts], np.int32) cv2.fillConvexPoly(mask, pts, 255) green_channel = cv2.split(frame)[1] mean_intensity = cv2.mean(green_channel, mask=mask)[0] heart_rate = int(60 + 30 * np.sin(mean_intensity / 255.0 * np.pi)) # Simulated return heart_rate # Estimate SpO2 and Respiratory Rate (dummy based on heart rate) def estimate_spo2_rr(heart_rate): spo2 = min(100, max(90, 97 + (heart_rate % 5 - 2))) rr = int(12 + abs(heart_rate % 5 - 2)) return spo2, rr # Streamlit UI setup st.set_page_config(page_title="Face-Based Lab Test Automation", layout="wide") st.title("🧠 Face Detection-Based AI Automation of Lab Tests") col1, col2 = st.columns([1, 2]) # Left: Webcam and Face Scan with col1: st.header("📷 Scan Face") run = st.checkbox("Start Camera") FRAME_WINDOW = st.image([]) camera = cv2.VideoCapture(0) results = {} while run: ret, frame = camera.read() if not ret: break frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) result = face_mesh.process(frame_rgb) if result.multi_face_landmarks: landmarks = result.multi_face_landmarks[0].landmark heart_rate = estimate_heart_rate(frame_rgb, landmarks) spo2, rr = estimate_spo2_rr(heart_rate) results = { "Hemoglobin": "12.3 g/dL (Estimated)", "SpO2": f"{spo2}%", "Heart Rate": f"{heart_rate} bpm", "Blood Pressure": "Low", "Respiratory Rate": f"{rr} breaths/min", "Risk Flags": ["Anemia Mild", "Hydration Low"] } FRAME_WINDOW.image(frame_rgb) if cv2.waitKey(1) & 0xFF == ord('q'): break camera.release() # Right: Health Report with col2: st.header("🧪 AI-Based Diagnostic Report") if results: with st.expander("Hematology & Blood Tests", expanded=True): st.metric("Hemoglobin", results["Hemoglobin"], "Anemia Mild") with st.expander("Vital Signs and Biochemical Tests", expanded=True): st.metric("SpO2", results["SpO2"]) st.metric("Heart Rate", results["Heart Rate"]) st.metric("Blood Pressure", results["Blood Pressure"], "Low") st.metric("Respiratory Rate", results["Respiratory Rate"], "Hydration Low") with st.expander("Risk Flags"): for flag in results["Risk Flags"]: st.error(flag) # Export Button if st.button("📥 Export Report as CSV"): df = pd.DataFrame([results]) df.to_csv("lab_scan_report.csv", index=False) st.success("Report saved as lab_scan_report.csv") else: st.info("No face scan detected yet.") # Footer st.markdown("---") st.caption("© 2025 FaceLab AI by Sathkrutha Tech Solutions. Built with Streamlit, OpenCV, MediaPipe, and rPPG techniques.")