आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं। और पढ़ें।

कंप्यूटर विजन और पायथन में अपने कौशल को मजबूत करने के लिए आप कई परियोजनाओं का उपयोग कर सकते हैं। इनमें से एक परियोजना पायथन का उपयोग करके एक साधारण पुश-अप काउंटर बना रही है। आप इस प्रोजेक्ट के प्रोग्राम को एक ही फाइल में लिख सकते हैं।

कार्यक्रम कैमरे से एक वीडियो इनपुट या रीयल-टाइम इनपुट लेगा, इनपुट पर मानव मुद्रा अनुमान लगाएगा, और व्यक्ति द्वारा किए जा रहे पुश-अप की संख्या की गणना करेगा। मानव मुद्रा आकलन करने के लिए, कार्यक्रम मीडियापाइप मानव मुद्रा आकलन मॉडल का उपयोग करेगा।

यह Google द्वारा विकसित एक मॉडल है जो मानव शरीर पर तैंतीस स्थलों को ट्रैक करता है। यह एक पूर्ण-शरीर विभाजन की भी भविष्यवाणी करता है जिसे यह दो-श्रेणी के विभाजन के रूप में दर्शाता है। निम्नलिखित छवि उन सभी स्थलों को दिखाती है जिन्हें मॉडल पहचानने में सक्षम है। क्रमांकित बिंदु प्रत्येक स्थलचिह्न की पहचान करते हैं और लाइनों के साथ एक दूसरे से जुड़ते हैं।

इमेज क्रेडिट: मीडियापाइप/GitHub
instagram viewer

आपका पुश-अप काउंटर प्रोग्राम कंधों और कोहनियों की स्थिति का उपयोग करेगा। ऊपर की छवि में, कंधे के लैंडमार्क 11 और 12 हैं जबकि कोहनी के लैंडमार्क 13 और 14 हैं।

अपने पर्यावरण की स्थापना

से आप पहले ही परिचित हो चुके होंगे पायथन की मूल बातें. एक पायथन आईडीई खोलें और एक नई पायथन फाइल बनाएं। अपने वातावरण पर संबंधित पैकेजों को स्थापित करने के लिए टर्मिनल पर निम्नलिखित कमांड चलाएँ:

पाइप ओपनसीवी-पायथन स्थापित करें

आप अपने प्रोग्राम में वीडियो इनपुट लेने और इसे प्रोसेस करने के लिए OpenCV-Pythonto का उपयोग करेंगे। यह पुस्तकालय आपका कार्यक्रम देता है कंप्यूटर दृष्टि क्षमता.

पिप मीडियापाइप स्थापित करें

आप इनपुट पर मानव मुद्रा अनुमान लगाने के लिए मीडियापाइप का उपयोग करेंगे।

पिप imutils स्थापित करें

आप अपनी इच्छित चौड़ाई में वीडियो इनपुट का आकार बदलने के लिए imutils का उपयोग करेंगे।

उन तीन पुस्तकालयों को आयात करें जिन्हें आपने पहले अपने परिवेश पर स्थापित किया था। इससे परियोजना में उनकी निर्भरताओं का उपयोग करना संभव हो जाएगा।

आयात cv2
आयात imutils
आयात mediapipe जैसा एमपी

फिर तीन मीडियापाइप ऑब्जेक्ट बनाएं और संबंधित कार्यों का उपयोग करके उन्हें प्रारंभ करें। आप इनपुट पर विभिन्न स्थलों को आरेखित करने के लिए mp.solutions.drawing_utilsfunction का उपयोग करेंगे। 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
स्थिति = कोई नहीं
टोपी = cv2.वीडियो कैप्चर ("v4.mp4")

स्थिति चर को किसी से प्रारंभ करें। कार्यक्रम कोहनी और कंधों की स्थिति के आधार पर इसे अपडेट करेगा।

मीडियापाइप पोज़ अनुमान मॉडल को कॉल करें जो इनपुट में मानव पोज़ का पता लगाएगा।

साथ mp_pose. खड़ा करना(
min_detection_Confidence = 0.7,
min_tracking_Confidence = 0.7) जैसा खड़ा करना:

डिटेक्शन कॉन्फिडेंस और ट्रैकिंग कॉन्फिडेंस की शुरुआत मॉडल से आपके लिए आवश्यक सटीकता के स्तर का प्रतिनिधित्व करती है। 0.7 70% सटीकता के समान है। आप इसे अपने वांछित स्तर पर बदल सकते हैं।

इनपुट लेना और प्रीप्रोसेसिंग करना

वह इनपुट लें जिसे आप बाद में मुद्रा आकलन मॉडल में पास करेंगे। imutils लाइब्रेरी का उपयोग करके वीडियो इनपुट की चौड़ाई का आकार बदलें। इनपुट को बीजीआर से आरजीबी में कनवर्ट करें क्योंकि मीडियापाइप केवल आरजीबी इनपुट के साथ काम करता है। अंत में, स्थलों की पहचान करने के लिए परिवर्तित इनपुट को मानव मुद्रा अनुमान मॉडल में पास करें।

जबकि cap.isOpened ():
सफलता, छवि = कैप.रीड ()

अगरनहीं सफलता:
प्रिंट ("खाली कैमरा")
तोड़ना

छवि = imutils.resize (छवि, चौड़ाई =500)
छवि = cv2.cvtColor (cv2.flip (छवि, 1), cv2.COLOR_BGR2RGB)
परिणाम = मुद्रा। प्रक्रिया (छवि)

इनपुट को प्रोसेस करने के बाद, आपने इनपुट पर लैंडमार्क की पहचान कर ली है।

इनपुट पर पहचाने गए स्थलों को आरेखित करना

एक खाली सूची बनाएं जो प्रत्येक लैंडमार्क के निर्देशांकों को संग्रहित करेगी। प्रत्येक लैंडमार्क और उनके बीच के कनेक्शन पर डॉट बनाने के लिए draw_landmarks क्लास का उपयोग करें। फॉर लूप का उपयोग करके, लैंडमार्क पर पुनरावृति करें और आपके द्वारा बनाई गई सूची में प्रत्येक लैंडमार्क की आईडी और निर्देशांक संग्रहीत करें। वीडियो इनपुट की चौड़ाई और ऊंचाई की गणना करने के लिए image.shape क्लास का उपयोग करें।

एलएमलिस्ट = []

अगर परिणाम.pose_लैंडमार्क:
# लैंडमार्क के बिंदुओं को ड्रा करें और उन्हें कनेक्ट करें
mp_draw.draw_landmarks (छवि, परिणाम.pose_landmarks,
mp_pose. POSE_CONNECTIONS)

के लिए आईडी, आई.एम में गणना (result.pose_landmarks.landmark):
# वीडियो इनपुट की लंबाई और चौड़ाई ढूँढना
एच, डब्ल्यू, _ = छवि आकार

# शरीर बिंदुओं के सटीक निर्देशांक ढूँढना
X, Y = int (im.x * w), int (im.y * h)
lmList.append ([आईडी, एक्स, वाई])

आईडी वह नंबर है जो मीडियापाइप पोज़ एस्टीमेशन मॉडल द्वारा किसी विशिष्ट लैंडमार्क को दिया जाता है। इनपुट में मानव की मुद्रा की पहचान करने के बाद, आपको उन पुश-अप्स की संख्या गिनने की आवश्यकता है जो वे कर रहे हैं यदि कोई हो।

पुश-अप्स की संख्या गिनना

ऐसी स्थिति बनाएं जो कोहनी की स्थिति के विरुद्ध कंधों की स्थिति की जांच करे। जब इनपुट में व्यक्ति के कंधे कोहनी से अधिक होते हैं तो व्यक्ति ऊपर होता है। जब कंधे कोहनी से नीचे होते हैं, तो व्यक्ति नीचे होता है। आप कोहनी के लैंडमार्क के साथ कंधों के लैंडमार्क की आईडी की तुलना करके इसकी जांच करते हैं।

# जाँच करना कि क्या कोई चिन्हित स्थलचिह्न हैं
अगर लेन (एलएमलिस्ट)! = 0:
# स्थिति जो नीचे की स्थिति की पहचान करती है
अगर (एलएम सूची [12][2] और एलएम सूची [11][2] >= एलएम सूची [14][2] और एलएम सूची [13][2]):
स्थिति = "नीचे"

# स्थिति जो ऊपर की स्थिति की पहचान करती है
अगर (एलएम सूची [12][2] और एलएम सूची [11][2] <= एलएम सूची [14][2] और एलएम सूची [13][2])
और स्थिति == "नीचे":
स्थिति = "ऊपर"
गिनती + =1

एक व्यक्ति को एक पूर्ण पुश-अप पूरा करने के लिए, उसे नीचे की स्थिति माननी चाहिए और फिर वापस ऊपर की स्थिति में आ जाना चाहिए। एक पूर्ण पुश-अप के बाद, प्रोग्राम गिनती को एक-एक करके अपडेट कर सकता है।

आउटपुट प्रदर्शित करना

आपको प्रोग्राम द्वारा गिने गए पुश-अप्स की संख्या प्रदर्शित करने की आवश्यकता है। टर्मिनल पर गिनती का मान प्रिंट करें, हर बार जब उपयोगकर्ता एक पूर्ण पुश-अप करता है। अंत में, पुश-अप्स करने वाले व्यक्ति के शरीर पर खींचे गए स्थलों के साथ आउटपुट प्रदर्शित करें।

 प्रिंट (गिनती)

cv2.imshow ("पुश-अप काउंटर", cv2.flip (छवि, 1))
कुंजी = cv2.waitKey (1)

# q दबाने पर प्रोग्राम समाप्त हो जाता है
अगर कुंजी == ऑर्ड ('क्यू'):
तोड़ना

कैप.रिलीज़ ()

आउटपुट कुछ इस तरह दिखना चाहिए:

आपको टर्मिनल पर एक अपडेट का निरीक्षण करना चाहिए क्योंकि आउटपुट पर मौजूद व्यक्ति पूर्ण पुश-अप करता है।

अपने कंप्यूटर विजन कौशल को मजबूत करें

कंप्यूटर दृष्टि व्यापक है। एक पुश-अप काउंटर उन कई परियोजनाओं में से एक है जिनका उपयोग आप अपने कंप्यूटर दृष्टि कौशल को अभ्यास में लाने के लिए कर सकते हैं। इन कौशलों को मजबूत करने का सबसे अच्छा तरीका कंप्यूटर विजन को शामिल करने वाली अधिक परियोजनाओं का निर्माण करना है।

आप जितने अधिक प्रोजेक्ट बनाएंगे, उतना ही अधिक सीखेंगे!