2011-10-14 14 views
6

मैं आधिकारिक किनेक्ट एसडीके का उपयोग कर एक किनेक्ट आवेदन कर रहा हूं।किनेक्ट इशारा विश्लेषण

परिणाम मुझे 1) शरीर की पहचान करने में सक्षम 5sec के लिए waving किया गया है। कुछ करें अगर यह 2) 5sec के लिए एक पैर के साथ झुकाव की पहचान करने में सक्षम है। अगर ऐसा होता है तो कुछ करो।

कोई भी जानता है कि ऐसा कैसे करें? मैं एक डब्ल्यूपीएफ आवेदन में कर रहा हूँ।

कुछ उदाहरण होना चाहते हैं। मैं किनेक्ट के लिए नया हूँ।

आपकी सभी मदद के लिए अग्रिम धन्यवाद!

उत्तर

17

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

डिफाइनिंग जेस्चर

इशारों को परिभाषित करना आश्चर्यजनक रूप से कठिन हो सकता है। सबसे सरल (सबसे आसान) इशारा वे होते हैं जो समय पर एक बिंदु पर होते हैं, और इसलिए अंगों के पिछले स्थानों पर भरोसा नहीं करते हैं। उदाहरण के लिए, यदि आप यह जानना चाहते हैं कि उपयोगकर्ता के हाथ उनके सिर से ऊपर उठाए गए हैं, तो यह प्रत्येक व्यक्तिगत फ्रेम पर जांच की जा सकती है। अधिक जटिल संकेतों को समय की अवधि को ध्यान में रखना होगा। अपने लहराते इशारे के लिए, आप एक ही फ्रेम से बताने में सक्षम नहीं होंगे कि क्या कोई व्यक्ति लहरा रहा है या बस उनके सामने अपना हाथ पकड़ रहा है।

तो अब आपको अतीत से प्रासंगिक जानकारी स्टोर करने में सक्षम होना चाहिए, लेकिन कौन सी जानकारी प्रासंगिक है? क्या आप पिछले 30 फ्रेमों की दुकान रख सकते हैं और इसके खिलाफ एल्गोरिदम चला सकते हैं? 30 फ्रेम केवल आपको दूसरी जानकारी के लायक हो जाते हैं .. शायद 60 फ्रेम? या आपके 5 सेकंड के लिए, 300 फ्रेम? मनुष्य उस तेजी से नहीं बढ़ते हैं, इसलिए शायद आप हर पांचवें फ्रेम का उपयोग कर सकते हैं, जो आपके 5 सेकंड को 60 फ्रेम तक वापस लाएगा। एक बेहतर विचार फ्रेम से संबंधित प्रासंगिक जानकारी को चुनना और चुनना होगा। हाथों की वर्तमान वेग, एक लंबे समय तक चलने वाला इशारा करने के लिए, कितनी देर तक चल रहा है, यह कितनी दूर चली गई है, आदि सभी उपयोगी जानकारी हो सकती हैं।

यह पता लगाने के बाद कि आपके इशारे से संबंधित सभी जानकारी कैसे प्राप्त करें और स्टोर करें, आप उन संख्याओं को परिभाषा में कैसे बदलते हैं? लहराते हुए एक निश्चित न्यूनतम गति, या एक दिशा (ऊपर/नीचे के बजाय बाएं/दाएं), या एक अवधि की आवश्यकता हो सकती है। हालांकि, यह अवधि 5 सेकंड की अवधि नहीं है जिसमें आप रुचि रखते हैं। यह अवधि पूर्ण न्यूनतम न्यूनतम है जो यह मानने के लिए आवश्यक है कि उपयोगकर्ता लहरा रहा है। जैसा ऊपर बताया गया है, आप एक फ्रेम से एक लहर निर्धारित नहीं कर सकते हैं। आपको 2, या 3, या 5 से लहर निर्धारित नहीं करना चाहिए, क्योंकि यह पर्याप्त समय नहीं है। यदि मेरा हाथ एक सेकंड के अंश के लिए जुड़ता है, तो क्या आप उस लहर पर विचार करेंगे? शायद एक मीठा स्थान है जहां ज्यादातर लोग इस बात से सहमत होंगे कि बाएं से दाएं गति में एक लहर है, लेकिन मुझे निश्चित रूप से यह एल्गोरिदम में परिभाषित करने के लिए पर्याप्त रूप से पर्याप्त नहीं है।

एक और समस्या है जिसमें उपयोगकर्ता को समय के लिए एक निश्चित इशारा करने की आवश्यकता होती है। संभावना है कि, उस पांच सेकंड में प्रत्येक फ्रेम एक लहर दिखाई नहीं देगी, इस पर ध्यान दिए बिना कि आप परिभाषा को कितनी अच्छी तरह लिखते हैं। जहां आप आसानी से निर्धारित कर सकते हैं कि किसी ने पांच सेकंड के लिए अपने सिर पर अपना हाथ रखा है (क्योंकि इसे एक फ्रेम आधार पर निर्धारित किया जा सकता है), जटिल संकेतों के लिए ऐसा करना बहुत मुश्किल है। और जबकि लहराते हुए यह जटिल नहीं है, यह अभी भी इस समस्या को दिखाता है। जैसे ही आपका हाथ तरंग के दोनों तरफ दिशा बदलता है, यह एक सेकंड के अंश के लिए आगे बढ़ता रहता है। क्या आप अभी भी लहरा रहे हैं? यदि आपने हाँ का उत्तर दिया है, तो धीरे-धीरे लहरें ताकि आप दोनों तरफ थोड़ा और रोक दें। क्या वह विराम अभी भी एक लहर माना जाएगा? संभावना है कि, पांच सेकंड इशारा में किसी बिंदु पर, परिभाषा एक लहर का पता लगाने में असफल हो जाएगी।तो अब आपको इशारा अवधि के लिए एक उदारता को ध्यान में रखना होगा .. अगर पिछले पांच सेकंड में 9 5% के लिए लहराते इशारा हुआ, तो क्या यह काफी अच्छा है? 90%? 80%?

जिस बिंदु पर मैं यहां प्रयास करने की कोशिश कर रहा हूं, वहां इशारा पहचान करने का कोई आसान तरीका नहीं है। आपको इशारा के माध्यम से सोचना होगा और किसी प्रकार की परिभाषा निर्धारित करना होगा जो संयुक्त स्थिति (कंकाल डेटा) को एक इशारा में बदल देगा। आपको पिछले फ्रेम से प्रासंगिक डेटा का ट्रैक रखने की आवश्यकता होगी, लेकिन महसूस करें कि इशारा परिभाषा संभव नहीं होगी।

उपयोगकर्ता

पर विचार करें तो अब मैं कहा है यही कारण है कि पाँच दूसरी लहर का पता लगाना कठिन हो सकता है, मुझे कम से कम इसे कैसे करना है, मेरे विचार देने के लिए अनुमति देते हैं: नहीं है। आपको उपयोगकर्ताओं को एक निश्चित अवधि (पांच दूसरी तरंग) के लिए गति आधारित इशारा दोहराने के लिए मजबूर नहीं करना चाहिए। यह आश्चर्यजनक रूप से थकाऊ है और न सिर्फ कंप्यूटर से लोगों की अपेक्षा/अपेक्षा करता है। प्वाइंट और क्लिक तत्काल है; जैसे ही हम क्लिक करते हैं, हम एक प्रतिक्रिया की उम्मीद करते हैं। कोई भी माइन्सवीपर खोलने से पहले पांच सेकंड के लिए क्लिक डाउन करना नहीं चाहता है। समय की अवधि में एक इशारा दोहराएं ठीक है अगर यह लगातार कुछ क्रियाओं को निष्पादित कर रहा है, जैसे किसी सूची के माध्यम से चक्र के लिए इशारा करते हुए - उपयोगकर्ता समझ जाएगा कि उन्हें सूची के माध्यम से आगे बढ़ने के लिए इशारा करना जारी रखना चाहिए। यह इशारा को पहचानने में भी आसान बनाता है, क्योंकि पिछले 5 सेकंड के लिए जानकारी की आवश्यकता के बजाय, आपको यह जानने के लिए पर्याप्त जानकारी चाहिए कि उपयोगकर्ता अभी इशारा कर रहा है या नहीं।

यदि आप चाहते हैं कि उपयोगकर्ता निर्धारित समय के लिए इशारा करे, तो इसे स्थिर संकेत दें (x सेकंड के लिए कुछ स्थिति पर अपना हाथ पकड़ना waving से बहुत आसान है)। टाइमर शुरू हो गया है, यह कहने के लिए कुछ दृश्य प्रतिक्रिया देने का भी एक अच्छा विचार है। यदि कोई उपयोगकर्ता इशारा (गलत हाथ, गलत जगह इत्यादि) को खराब करता है और कुछ या होने के लिए इंतजार कर रहे 5 या 10 सेकंड के लिए खड़े हो जाते हैं, तो वे खुश नहीं होंगे, लेकिन यह वास्तव में इस प्रश्न का हिस्सा नहीं है।

Kinect जेस्चर के साथ शुरू

प्रारंभ छोटे .. वास्तव में छोटा है। सबसे पहले, सुनिश्चित करें कि आप SkeletonData कक्षा के आसपास अपना रास्ता जानते हैं। प्रत्येक कंकाल पर 20 जोड़ ट्रैक किए जाते हैं, और उनमें से प्रत्येक को ट्रैकिंगस्टेट होता है। यह ट्रैकिंग स्थिति दिखाएगी कि क्या किनेक्ट वास्तव में संयुक्त (ट्रैक किया गया) देख सकता है, अगर यह शेष कंकाल (इन्फर्ड) के आधार पर संयुक्त स्थिति को समझ रहा है, या यदि यह पूरी तरह से संयुक्त (नोटट्रैक) खोजने की कोशिश कर रहा है, । ये राज्य महत्वपूर्ण हैं। आप यह नहीं सोचना चाहते कि उपयोगकर्ता एक पैर पर खड़ा है क्योंकि किनेक्ट दूसरे पैर को नहीं देखता है और इसके लिए एक फर्जी स्थिति की रिपोर्ट कर रहा है। प्रत्येक संयुक्त की स्थिति होती है, यह है कि आप कैसे जानते हैं कि उपयोगकर्ता कहां खड़ा है .. टुकड़ा टुकड़ा। समन्वय प्रणाली से परिचित हो जाओ।

कंकाल डेटा की रिपोर्ट के बारे में मूल बातें जानने के बाद, कुछ सरल संकेतों के लिए प्रयास करें। जब उपयोगकर्ता अपने सिर से ऊपर हाथ उठाता है तो स्क्रीन पर एक संदेश प्रिंट करें। यह केवल प्रत्येक हाथ को हेड संयुक्त से तुलना करने की आवश्यकता है और यह देखकर कि समन्वय विमान में हाथ से कहीं अधिक हाथ है या नहीं। काम करने के बाद, कुछ और जटिल हो जाएं। मैं सुझाव देता हूं कि एक स्वाइपिंग गति (शरीर के सामने हाथ, या तो दाएं से बाएं या बाईं ओर कुछ न्यूनतम दूरी तक दाएं) की कोशिश करें। इसके लिए पिछले फ्रेम से जानकारी की आवश्यकता है, इसलिए आपको यह जानना होगा कि किस जानकारी को स्टोर करना है। यदि आप इसे काम कर सकते हैं, तो आप थोड़ी सी मात्रा में जिप्चरों को स्वाइप करने और एक लहर के रूप में व्याख्या करने की श्रृंखला को स्ट्रिंग करने का प्रयास कर सकते हैं।

टीएल; डॉ: जेस्चर कठिन हैं। अपना रास्ता बनाएं, अपना रास्ता बनाएं। उपयोगकर्ताओं को एक ही कार्रवाई के लिए दोहराव की गति न करें, यह थकाऊ और कष्टप्रद है। अवधि आधारित जेस्चर के लिए दृश्य प्रतिक्रिया शामिल करें। इस पोस्ट का शेष भाग पढ़ें।

+0

सलाह के लिए धन्यवाद! =) – user981924

3

किनेक्ट एसडीके आपको विभिन्न जोड़ों के निर्देशांक प्राप्त करने में मदद करता है।एक इशारा कुछ भी नहीं है लेकिन समय के साथ जोड़ों के एक सेट की स्थिति में बदल जाता है।

संकेतों को पहचानने के लिए, आपको निर्देशांक को समय की अवधि के लिए स्टोर करना होगा और यह देखने के लिए इसे एक विशेष संकेत के लिए नियमों का पालन करना होगा (जैसे - दायां हाथ हमेशा ऊपर की ओर बढ़ता है)।

अधिक जानकारी के लिए विषय पर अपने ब्लॉग पोस्ट की जाँच: http://tinyurl.com/89o7sf5

संबंधित मुद्दे