التحكم بالفأرة بالفم باستخدام OpenCV و Mediapipe و PyAutoGUI

 

التحكم بالفأرة بالفم باستخدام OpenCV و Mediapipe و PyAutoGUI

 

استخدم هذه الأداة في تطوير مشروعك


هذا المشروع يوضح كيفية استخدام ملامح الوجه للتحكم في مؤشر الفأرة ومحاكاة النقرات باستخدام كاميرا الويب.

 

من خلال تتبع نقاط محددة على الوجه، يمكننا تحريك مؤشر الفأرة وتنفيذ النقرات بناءً على حركات ومواضع ميزات الوجه، مثل الشفاه.

 

إليك شرح خطوة بخطوة للكود ووظائفه.

 

المكتبات المستخدمة

OpenCV: لالتقاط الفيديو من كاميرا الويب ومعالجة الإطارات.

Mediapipe: لاكتشاف ملامح الوجه.

PyAutoGUI: للتحكم في مؤشر الفأرة ومحاكاة النقرات.

import cv2
import mediapipe as mp
import pyautogui


تهيئة كاميرا الويب وكاشف ملامح الوجه

 


cam = cv2.VideoCapture(0)
face_mesh = mp.solutions.face_mesh.FaceMesh(refine_landmarks=True)

 

cam:

لالتقاط الفيديو من كاميرا الويب الافتراضية.

 

face_mesh:

 يهيئ Mediapipe Face Mesh لاكتشاف ملامح الوجه.

 

الحصول على أبعاد الشاشة

screen_w, screen_h = pyautogui.size() 

 

معالجة إطارات الفيديو


while True:
_, frame = cam.read()
#frame = cv2.flip(frame, 1)
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
output = face_mesh.process(rgb_frame)
landmark_points = output.multi_face_landmarks
frame_h, frame_w, _ = frame.shape

 

معالجة الملامح المكتشفة


if landmark_points:
landmarks = landmark_points[0].landmark
for id, landmark in enumerate(landmarks[13:14]):
x = int(landmark.x * frame_w)
y = int(landmark.y * frame_h)
cv2.circle(frame, (x, y), 3, (0, 255, 0))

هنا يتم التحقق مما إذا تم اكتشاف أي ملامح.

استخراج ملامح الوجه (هنا، النقطة الـ14 بالتحديد والتي تمثل الفم).

تحويل إحداثيات الملامح إلى قيم بكسل ورسم دائرة على الملامح المكتشفة.


تحريك الفأرة بناءً على الملامح


if id == 0:
screen_x = screen_w * landmark.x
screen_y = screen_h * landmark.y
pyautogui.moveTo(screen_x, screen_y)
  

 

اكتشاف حركة الشفاه للنقر

تحديد ملامح الشفاه العلوية والسفلية.

حساب المسافة بين الشفاه العلوية والسفلية.

إذا تجاوزت المسافة حدًا معينًا (يشير إلى فتح الفم)، يتم تنفيذ نقرة بالفأرة.

إضافة تأخير قصير بعد النقر لمنع النقرات المتعددة بسبب حركات الشفاه السريعة.


lips = [landmarks[13], landmarks[14]]
for landmark in lips:
x = int(landmark.x * frame_w)
y = int(landmark.y * frame_h)
cv2.circle(frame, (x, y), 3, (0, 255, 255))

if (lips[1].y - lips[0].y) > 0.07:
pyautogui.click()
pyautogui.sleep(1)

عرض إطار الفيديو مع وضع علامات على الملامح في نافذة.


cv2.imshow(' MOVE', frame)
cv2.waitKey(1)


الخلاصة

هذا المشروع يوضح بشكل فعال كيفية استخدام الرؤية الحاسوبية واكتشاف ملامح الوجه للتحكم في الفأرة. من خلال تتبع نقاط محددة على الوجه، مثل الشفاه، يمكننا تنسيق حركاتها إلى إحداثيات الشاشة وحتى تنفيذ إجراءات مثل النقر بناءً على حركات الوجه المحددة. هذه التقنية يمكن أن تكون مفيدة بشكل خاص للأغراض الخاصة بالوصول، مما يتيح للأشخاص ذوي الحركة المحدودة التحكم في أجهزة الكمبيوتر باستخدام حركات الوجه.


للحصول على الكود كامل انقر هنا 







AHMED A. A. ALFARRA



تعليقات

المشاركات الشائعة من هذه المدونة

التعرف على الوجوه باستخدام Python

استخدام Webots و MediaPipe للتحكم في حركة الروبوت بواسطة وضعية الرأس