القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

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

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

إنه نموذج تم تطويره بواسطة Google يتتبع ثلاثة وثلاثين معلمًا على جسم الإنسان. كما أنه يتنبأ بتجزئة لكامل الجسم تمثله كتقسيم من فئتين. تُظهر الصورة التالية جميع المعالم التي يستطيع النموذج تحديدها. تحدد النقاط المرقمة كل معلم وتتصل ببعضها البعض بخطوط.

حقوق الصورة: MediaPipe /جيثب

سيستخدم برنامج عداد الضغط مواضع الكتفين والمرفقين. في الصورة أعلاه ، معالم الكتف هي 11 و 12 بينما معالم الكوع هي 13 و 14.

إعداد بيئتك

يجب أن تكون بالفعل على دراية أساسيات بايثون. افتح Python IDE وأنشئ ملف Python جديدًا. قم بتشغيل الأمر التالي على الجهاز لتثبيت الحزم المعنية على بيئتك:

instagram viewer
نقطة تثبيت OpenCV-Python

ستستخدم OpenCV-Pyth لتأخذ إدخال الفيديو في برنامجك ومعالجته. هذه المكتبة تعطي البرنامج الخاص بك قدرات الرؤية الحاسوبية.

نقطة تثبيت MediaPipe

ستستخدم MediaPipe لإجراء تقدير الوضع البشري على الإدخال.

نقطة تثبيت imutils

سوف تستخدم imutils لتغيير حجم إدخال الفيديو إلى العرض الذي تريده.

قم باستيراد المكتبات الثلاث التي قمت بتثبيتها مسبقًا على بيئتك. هذا سيجعل من الممكن استخدام تبعياتهم في المشروع.

يستورد السيرة الذاتية 2
يستورد إيموتيلس
يستورد ميديابيب مثل النائب

ثم قم بإنشاء ثلاثة كائنات MediaPipe وقم بتهيئتها باستخدام الوظائف المعنية. ستستخدم وظيفة mp.solutions.drawing_utils لرسم المعالم المختلفة على المدخلات. mp.solutions.drawing_styles لتغيير الأنماط التي تظهر بها رسومات المعالم ، و mp.solutions.pose هو النموذج الذي ستستخدمه لتحديد هذه المعالم.

mp_draw = mp.solutions.drawing_utils
mp_draw_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose

أداء تقدير وضع الإنسان

الكشف عن وضع الإنسان هو عملية تحديد اتجاه الجسم من خلال تحديد وتصنيف مفاصلهم.

إعلان المتغيرات الخاصة بك

قم بتعريف المتغيرات التي ستستخدمها لتخزين عدد تمرينات الضغط وموضع الكتفين والمرفقين ومدخل الفيديو.

العد = 0
الموضع = لا أحد
cap = cv2.VideoCapture ("v4.mp4")

قم بتهيئة متغير الموضع إلى لا شيء. سيقوم البرنامج بتحديثه حسب وضع المرفقين والكتفين.

اتصل بنموذج تقدير وضعية MediaPipe الذي سيكتشف الوضع البشري في الإدخال.

مع mp_pose. أَثَار(
min_detection_confidence = 0.7,
min_tracking_confidence = 0.7) مثل أَثَار:

تمثل عمليات تهيئة ثقة الكشف وثقة التتبع مستوى الدقة الذي تحتاجه من النموذج. 0.7 مشابه لدقة 70٪. يمكنك تغييره إلى المستوى الذي تريده.

أخذ المدخلات ومعالجتها مسبقًا

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

بينما cap.is مفتوح ():
نجاح الصورة = cap.read ()

لولا نجاح:
مطبعة("كاميرا فارغة")
استراحة

الصورة = imutils.resize (الصورة ، العرض =500)
صورة = cv2.cvtColor (cv2.flip (صورة ، 1) ، cv2.COLOR_BGR2RGB)
النتيجة = pose.process (صورة)

بعد معالجة الإدخال ، تكون قد حددت المعالم في الإدخال.

رسم المعالم المحددة على المدخلات

قم بإنشاء قائمة فارغة لتخزين إحداثيات كل معلم. استخدم فئة draw_landmarks لرسم نقطة على كل معلم والصلات بينها. باستخدام حلقة for ، قم بالتكرار فوق المعالم وقم بتخزين معرف وإحداثيات كل معلم في القائمة التي قمت بإنشائها. استخدم فئة image.shape لحساب عرض وارتفاع إدخال الفيديو.

lmList = []

لو result.pose_landmarks:
# يرسم نقاط المعالم ويربطها
mp_draw.draw_landmarks (صورة ، نتيجة.
mp_pose. POSE_CONNECTIONS)

ل معرف ، الدردشة في عدّد (result.pose_landmarks.landmark):
# إيجاد طول وعرض إدخال الفيديو
ح ، ث ، _ = شكل الصورة

# إيجاد الإحداثيات الدقيقة لنقاط الجسم
X، Y = int (im.x * w)، int (im.y * h)
lmList.append ([id، X، Y])

المعرف هو الرقم الذي يتم منحه إلى معلم معين بواسطة نموذج تقدير وضع MediaPipe. بعد تحديد وضع الإنسان في الإدخال ، تحتاج إلى حساب عدد عمليات الدفع التي يقومون بها إن وجدت.

حساب عدد تمارين الضغط

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

# التحقق من وجود أي معالم محددة
لو لين (lmList)! = 0:
# الشرط الذي يحدد الموضع السفلي
لو (lmList [12][2] و lmList [11][2]> = lmList [14][2] و lmList [13][2]):
الموضع = "تحت"

# الشرط الذي يحدد الموقف الأعلى
لو (lmList [12][2] و lmList [11][2] <= lmList [14][2] و lmList [13][2])
و الموضع == "تحت":
الموضع = "أعلى"
العد + =1

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

عرض الإخراج

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

 طباعة (عد)

cv2.imshow ("عداد الضغط"، cv2.flip (صورة ، 1))
مفتاح = cv2.waitKey (1)

# ينتهي البرنامج عند الضغط على q
لو مفتاح == أمر ("ف"):
استراحة

cap.release ()

يجب أن يبدو الإخراج مثل هذا:

يجب أن تراقب تحديثًا على الجهاز حيث يقوم الشخص الموجود في الإخراج بعملية دفع كاملة.

تقوية مهارات الرؤية الحاسوبية لديك

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

كلما زاد عدد المشاريع التي ستقوم ببنائها ، ستتعلم أكثر!