Spaces:
Build error
Build error
| import cv2 | |
| import mediapipe as mp | |
| from mediapipe.tasks import python | |
| from mediapipe.tasks.python import vision | |
| from mediapipe.framework.formats import landmark_pb2 | |
| import numpy as np | |
| import gradio as gr | |
| # Mediapipe FaceLandmarker seçeneklerini belirleyin | |
| base_options = python.BaseOptions(model_asset_path='face_landmarker.task') | |
| options = vision.FaceLandmarkerOptions( | |
| base_options=base_options, | |
| output_face_blendshapes=True, | |
| output_facial_transformation_matrixes=True, | |
| num_faces=1 | |
| ) | |
| detector = vision.FaceLandmarker.create_from_options(options) | |
| # Landmark noktalarını çizmek için fonksiyon | |
| def draw_landmarks_on_image(rgb_image, detection_result): | |
| face_landmarks_list = detection_result.face_landmarks | |
| annotated_image = np.copy(rgb_image) | |
| for idx in range(len(face_landmarks_list)): | |
| face_landmarks = face_landmarks_list[idx] | |
| face_landmarks_proto = landmark_pb2.NormalizedLandmarkList() | |
| face_landmarks_proto.landmark.extend([ | |
| landmark_pb2.NormalizedLandmark(x=landmark.x, y=landmark.y, z=landmark.z) for landmark in face_landmarks | |
| ]) | |
| mp.solutions.drawing_utils.draw_landmarks( | |
| image=annotated_image, | |
| landmark_list=face_landmarks_proto, | |
| connections=mp.solutions.face_mesh.FACEMESH_TESSELATION, | |
| landmark_drawing_spec=None, | |
| connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_tesselation_style()) | |
| mp.solutions.drawing_utils.draw_landmarks( | |
| image=annotated_image, | |
| landmark_list=face_landmarks_proto, | |
| connections=mp.solutions.face_mesh.FACEMESH_CONTOURS, | |
| landmark_drawing_spec=None, | |
| connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_contours_style()) | |
| mp.solutions.drawing_utils.draw_landmarks( | |
| image=annotated_image, | |
| landmark_list=face_landmarks_proto, | |
| connections=mp.solutions.face_mesh.FACEMESH_IRISES, | |
| landmark_drawing_spec=None, | |
| connection_drawing_spec=mp.solutions.drawing_styles.get_default_face_mesh_iris_connections_style()) | |
| return annotated_image | |
| # Görseli işleyen fonksiyon | |
| def process_image(image): | |
| # OpenCV görüntüsünü Mediapipe formatına dönüştür | |
| rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) | |
| mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=rgb_image) | |
| # Yüz yer işaretlerini algıla | |
| detection_result = detector.detect(mp_image) | |
| # Çerçeveyi güncelle | |
| if detection_result.face_blendshapes: | |
| # İlk yüzün blendshape skorlarını al | |
| face_blendshapes = detection_result.face_blendshapes[0] | |
| # eyeBlinkLeft ve eyeBlinkRight blendshape skorlarını bul | |
| blink_left = next((bs.score for bs in face_blendshapes if bs.category_name == "eyeBlinkLeft"), 0) | |
| blink_right = next((bs.score for bs in face_blendshapes if bs.category_name == "eyeBlinkRight"), 0) | |
| # Göz durumunu belirle | |
| left_eye_status = "Kapalı" if blink_left > 0.5 else "Açık" | |
| right_eye_status = "Kapalı" if blink_right > 0.5 else "Açık" | |
| # Landmarkları çizin | |
| annotated_image = draw_landmarks_on_image(rgb_image, detection_result) | |
| return cv2.cvtColor(annotated_image, cv2.COLOR_RGB2BGR), left_eye_status, right_eye_status | |
| else: | |
| return image, "Göz Tespiti Yok", "Göz Tespiti Yok" | |
| # Gradio arayüzü | |
| iface = gr.Interface(fn=process_image, | |
| inputs=gr.Image(type="numpy", label="Görsel Yükleyin"), # Giriş olarak görsel al | |
| outputs=[gr.Image(label="Yüz Tespiti Sonucu"), | |
| gr.Textbox(label="Sol Göz Durumu"), | |
| gr.Textbox(label="Sağ Göz Durumu")]) | |
| # Gradio arayüzünü başlat | |
| iface.launch(share=True) | |