IntelDepthCam / app.py
piyush3's picture
Create app.py
07de1be verified
from flask import Flask, render_template, request, jsonify
import cv2
import mediapipe as mp
import numpy as np
import statistics
import pyrealsense2 as rs
from sklearn.linear_model import LinearRegression
app = Flask(__name__)
# Initialize MediaPipe Face Mesh
mp_face_mesh = mp.solutions.face_mesh
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, min_detection_confidence=0.7)
def initialize_realsense():
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
pipeline.start(config)
return pipeline
def process_frame(color_image, depth_frame):
rgb_frame = cv2.cvtColor(color_image, cv2.COLOR_BGR2RGB)
results = face_mesh.process(rgb_frame)
if results.multi_face_landmarks:
for face_landmarks in results.multi_face_landmarks:
upper_lip = face_landmarks.landmark[13]
lower_lip = face_landmarks.landmark[14]
h, w, _ = color_image.shape
upper_lip_coords = (int(upper_lip.x * w), int(upper_lip.y * h))
lower_lip_coords = (int(lower_lip.x * w), int(lower_lip.y * h))
return upper_lip_coords, lower_lip_coords
return None, None
@app.route('/')
def home():
return render_template('index.html')
@app.route('/analyze', methods=['POST'])
def analyze():
pipeline = initialize_realsense()
try:
frames = pipeline.wait_for_frames()
color_frame = frames.get_color_frame()
depth_frame = frames.get_depth_frame()
color_image = np.asanyarray(color_frame.get_data())
upper_lip_coords, lower_lip_coords = process_frame(color_image, depth_frame)
if upper_lip_coords and lower_lip_coords:
# Process measurements and calculate distance
distance = calculate_distance(upper_lip_coords, lower_lip_coords, depth_frame)
stage = determine_stage(distance)
return jsonify({
'distance': float(distance),
'stage': stage,
'status': 'success'
})
return jsonify({'status': 'error', 'message': 'No face detected'})
finally:
pipeline.stop()
def calculate_distance(upper_lip_coords, lower_lip_coords, depth_frame):
# Your distance calculation logic here
pass
def determine_stage(distance):
if distance >= 45:
return "Stage I"
elif 20 <= distance < 45:
return "Stage II"
else:
return "Stage III"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)