التحكم بالفأرة بالفم باستخدام OpenCV و Mediapipe و PyAutoGUI
التحكم بالفأرة بالفم باستخدام OpenCV و
Mediapipe و PyAutoGUI
استخدم هذه الأداة في تطوير مشروعك
هذا المشروع يوضح كيفية استخدام ملامح الوجه للتحكم في مؤشر الفأرة ومحاكاة النقرات
باستخدام كاميرا الويب.
من خلال تتبع نقاط محددة على الوجه، يمكننا تحريك مؤشر الفأرة وتنفيذ النقرات
بناءً على حركات ومواضع ميزات الوجه، مثل الشفاه.
إليك شرح خطوة بخطوة للكود ووظائفه.
المكتبات المستخدمة
OpenCV: لالتقاط الفيديو من كاميرا الويب ومعالجة الإطارات.
Mediapipe: لاكتشاف ملامح الوجه.
PyAutoGUI: للتحكم في مؤشر الفأرة ومحاكاة النقرات.
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 لاكتشاف ملامح الوجه.
الحصول على أبعاد الشاشة
معالجة إطارات الفيديو
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
تعليقات
إرسال تعليق