File size: 3,698 Bytes
eb3d3f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# 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.")