0%
MediaPipe: دليل شامل للرؤية الحاسوبية

MediaPipe: دليل شامل للرؤية الحاسوبية

اكتشف كيفية استخدام MediaPipe لاكتشاف الوضعية والوجه واليدين وغير ذلك.

I

InSkillCoach

· دقيقة

MediaPipe: دليل شامل للرؤية الحاسوبية

MediaPipe مكتبة مفتوحة المصدر طورتها Google، وهي تسهّل إنشاء تطبيقات الرؤية الحاسوبية ومعالجة الوسائط المتعددة.

1. التثبيت والإعداد

# تثبيت الاعتماديات
pip install mediapipe opencv-python numpy

# استيراد المكتبات اللازمة
import mediapipe as mp
import cv2
import numpy as np

2. اكتشاف الوضعية (Pose)

2.1 الإعداد الأساسي

# تهيئة MediaPipe Pose
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5
)
mp_draw = mp.solutions.drawing_utils

def detect_pose(image):
    # التحويل إلى RGB
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    
    # اكتشاف الوضعية
    results = pose.process(image_rgb)
    
    # رسم نقاط المرجع
    if results.pose_landmarks:
        mp_draw.draw_landmarks(
            image,
            results.pose_landmarks,
            mp_pose.POSE_CONNECTIONS
        )
    
    return image

2.2 تحليل الحركات

def analyze_movement(landmarks):
    # استخراج النقاط الرئيسية
    left_shoulder = np.array([
        landmarks.landmark[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,
        landmarks.landmark[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y
    ])
    
    right_shoulder = np.array([
        landmarks.landmark[mp_pose.PoseLandmark.RIGHT_SHOULDER.value].x,
        landmarks.landmark[mp_pose.PoseLandmark.RIGHT_SHOULDER.value].y
    ])
    
    # حساب زاوية الكتفين
    shoulder_angle = np.arctan2(
        right_shoulder[1] - left_shoulder[1],
        right_shoulder[0] - left_shoulder[0]
    )
    
    return shoulder_angle

3. اكتشاف الوجه

3.1 الإعداد

# تهيئة MediaPipe Face Detection
mp_face_detection = mp.solutions.face_detection
face_detection = mp_face_detection.FaceDetection(
    min_detection_confidence=0.5
)

def detect_faces(image):
    # التحويل إلى RGB
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    
    # اكتشاف الوجوه
    results = face_detection.process(image_rgb)
    
    # رسم مربعات الاكتشاف
    if results.detections:
        for detection in results.detections:
            bbox = detection.location_data.relative_bounding_box
            h, w, _ = image.shape
            x = int(bbox.xmin * w)
            y = int(bbox.ymin * h)
            width = int(bbox.width * w)
            height = int(bbox.height * h)
            
            cv2.rectangle(image, (x, y), (x + width, y + height), (0, 255, 0), 2)
    
    return image

3.2 تحليل التعابير

def analyze_expression(landmarks):
    # استخراج نقاط الوجه
    left_eye = np.array([
        landmarks.landmark[mp_face_detection.FaceLandmark.LEFT_EYE.value].x,
        landmarks.landmark[mp_face_detection.FaceLandmark.LEFT_EYE.value].y
    ])
    
    right_eye = np.array([
        landmarks.landmark[mp_face_detection.FaceLandmark.RIGHT_EYE.value].x,
        landmarks.landmark[mp_face_detection.FaceLandmark.RIGHT_EYE.value].y
    ])
    
    # حساب المسافة بين العينين
    eye_distance = np.linalg.norm(right_eye - left_eye)
    
    return eye_distance

4. اكتشاف اليدين

4.1 الإعداد

# تهيئة MediaPipe Hands
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
    min_detection_confidence=0.7,
    min_tracking_confidence=0.5
)

def detect_hands(image):
    # التحويل إلى RGB
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    
    # اكتشاف اليدين
    results = hands.process(image_rgb)
    
    # رسم نقاط المرجع
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            mp_draw.draw_landmarks(
                image,
                hand_landmarks,
                mp_hands.HAND_CONNECTIONS
            )
    
    return image

4.2 التعرف على الإيماءات

def recognize_gesture(hand_landmarks):
    # استخراج نقاط الأصابع
    thumb_tip = np.array([
        hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP.value].x,
        hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP.value].y
    ])
    
    index_tip = np.array([
        hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP.value].x,
        hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP.value].y
    ])
    
    # حساب المسافة بين الإبهام والسبابة
    pinch_distance = np.linalg.norm(thumb_tip - index_tip)
    
    return pinch_distance

5. تطبيق متكامل

def main():
    # تهيئة الكاميرا
    cap = cv2.VideoCapture(0)
    
    while cap.isOpened():
        success, image = cap.read()
        if not success:
            continue
            
        # اكتشاف الوضعية
        image = detect_pose(image)
        
        # اكتشاف الوجه
        image = detect_faces(image)
        
        # اكتشاف اليدين
        image = detect_hands(image)
        
        # العرض
        cv2.imshow('MediaPipe Demo', image)
        
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    main()

6. تحسين الأداء

6.1 تقليل زمن الاستجابة

def optimize_performance():
    # إعداد للحصول على أداء أفضل
    pose = mp_pose.Pose(
        min_detection_confidence=0.5,
        min_tracking_confidence=0.5,
        model_complexity=1,  # 0=Lite, 1=Full, 2=Heavy
        smooth_landmarks=True,
        enable_segmentation=False
    )

6.2 إدارة الذاكرة

def manage_memory():
    # تنظيف الموارد
    pose.close()
    face_detection.close()
    hands.close()

7. أفضل الممارسات

  1. المعالجة المسبقة للصور

    • تغيير حجم الصور للحصول على أداء أفضل
    • تطبيع قيم البكسلات
    • التعامل مع صيغ الصور المختلفة
  2. معالجة الأخطاء

    • التحقق من توفر الكاميرا
    • التعامل مع الحالات التي يتعذر فيها الاكتشاف
    • تطبيق مهلات زمنية (timeouts) مناسبة
  3. التحسين

    • استخدام الوضع الخفيف (lite) للأجهزة المحمولة
    • تقليل وتيرة الاكتشاف عند الحاجة
    • تطبيق نظام ذاكرة تخزين مؤقت (cache) للنتائج

الخلاصة

النقاط الرئيسية:

  • اكتشاف دقيق للوضعية والوجه واليدين
  • واجهة برمجية (API) بسيطة وسهلة الاستخدام
  • أداء ممتاز
  • دعم متعدد المنصات

التوصيات:

  • ملاءمة تعقيد النموذج حسب الاحتياجات
  • تحسين الأداء للأجهزة المحمولة
  • تطبيق إدارة قوية للأخطاء
  • استخدام الوضع الخفيف (lite) للتطبيقات الفورية
InSkillCoach

نبذة عن InSkillCoach

خبير في التدريب والتقنيات

مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.

الشهادات:

  • AWS Certified Solutions Architect – Professional
  • شهادات Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.4k
210

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!