
समय के साथ, कंप्यूटर परिवर्तन के साथ बातचीत करने के तरीके के बारे में हमारे विचार। "क्लासिक" कीबोर्ड और माउस को बदलने के लिए, टचपैड और टच स्क्रीन ने दृढ़ता से हमारे जीवन में प्रवेश किया है। लेकिन सूचना इनपुट टूल के लिए यह विकास का अंतिम चरण नहीं है।
Google ग्लास जैसे
संवर्धित वास्तविकता उपकरणों के आगमन के साथ, ऐसे इंटरफेस की आवश्यकता है जो इस अवधारणा में सामंजस्यपूर्ण रूप से फिट हो सकें। ऐसे इंटरफेस की उपस्थिति के लिए पूर्वापेक्षाएँ हैं, उदाहरण के लिए,
इंटेल क्रिएटिव कैमरा ,
माइक्रोसॉफ्ट किनेक्ट या
लीप मोशन जैसे उपकरण
दिखाई दिए । इन उपकरणों में मुख्य नियंत्रण तत्व उपयोगकर्ता के हाथ हैं। इसलिए, समान उपकरणों के साथ बातचीत करने के लिए मौलिक एल्गोरिदम कार्यों में से एक उपयोगकर्ता के हाथों और उंगलियों का पता लगा रहा है और उनके स्थानिक स्थान का पुनर्निर्माण कर रहा है।
यह लेख हथेलियों और उंगलियों का पता लगाने की समस्या को हल करने के तरीकों में से एक पर ध्यान केंद्रित करेगा।
समस्या का बयान
हाथों और उंगलियों का पता लगाने से हमारा मतलब ऐसे बिंदुओं का पता लगाना है जिनके द्वारा विमान पर हथेली की स्थिति और उसकी स्थिति को बहाल करना संभव है। ऐसे बिंदुओं के रूप में, उंगलियों के सुझावों का वर्णन करते हुए हथेली के द्रव्यमान के केंद्र का उपयोग करना तर्कसंगत है।
एल्गोरिथम विवरण
कुछ समोच्च पर विचार करें जो हथेली के सिल्हूट का वर्णन करता है:

एक हथेली बिंदु के लिए खोजें
सबसे पहले, हम उस बिंदु को परिभाषित करते हैं जो हथेली का वर्णनकर्ता है। जैसा कि ऊपर उल्लेख किया गया है, हम इस तरह के बिंदु के रूप में समोच्च के द्रव्यमान के केंद्र का उपयोग करेंगे। इसे खोजने के लिए, हमें स्थानिक क्षणों की गणना करने की आवश्यकता है। पल एक समोच्च विशेषता है जो समोच्च के सभी पिक्सल को एकीकृत (या संक्षेप) द्वारा गणना की जाती है। सामान्य शब्दों में, पल (p, q) को इस प्रकार लिखा जा सकता है:

तब द्रव्यमान के केंद्र के निर्देशांक के सूत्र इस प्रकार लिखे जा सकते हैं:


द्रव्यमान के केंद्र का अनुमानित स्थान छवि में लाल बिंदु द्वारा इंगित किया गया है।
उंगली बिंदुओं के लिए खोजें
अब उंगलियों के समोच्च के भागों पर विचार करें।
समोच्च के प्रत्येक बिंदु P [n] के लिए, हम बिंदु P [nr], P [n + r] पर भी विचार करेंगे, जहाँ r कुछ धनात्मक संख्या (r <n) है।
ऐसे तीन बिंदु एक कोण बनाते हैं। उन पर विचार करें:

जैसा कि छवि से देखा जा सकता है, उंगलियों के सिल्हूट के अनुरूप समोच्च पर, 2 प्रकार के बिंदु हो सकते हैं:
1) एक लाइन पर स्थित बिंदु (उंगली के बिंदुओं के अनुरूप)। कोण P [nr] P [n] P [n +] obtuse है।
2) आर्क्स (उंगलियों और उंगलियों के बीच रिक्त स्थान के अनुरूप) पर स्थित बिंदु। कोण P [nr] P [n] P [n +] obtuse है।
हम दूसरे प्रकार के बिंदुओं में रुचि रखते हैं, क्योंकि वे उंगलियों के सुझावों का वर्णन करते हैं।
जैसा कि आप पाठ्यक्रम की चटाई से जानते हैं। विश्लेषण:

। इसलिए, उंगलियों का वर्णन करने वाले बिंदुओं के रूप में, हम कोण P [nr] P [n] P [n +] कोण के अधिकतम (आसपास के क्षेत्र) वाले टाइप 2 के बिंदुओं की तलाश करेंगे।
लेकिन, जैसा कि ऊपर की आकृति से देखा जा सकता है, टाइप 2 अंक न केवल उंगलियों के अनुरूप हैं, बल्कि उंगलियों के बीच अंतराल के लिए भी हैं। यह निर्धारित करने के लिए कि एक बिंदु उंगली की नोक है, हम सर्किट ट्रैवर्सल के गुणों का उपयोग करते हैं। आइए हम एक दक्षिणावर्त दिशा में समोच्च के पिक्सेल के चारों ओर घूमते हैं, फिर उंगलियों के समान बिंदु दाएं मोड़ के अनुरूप होंगे P [n] P [n + r] जो P [nr] P [n] के सापेक्ष है, और उंगलियां बाईं ओर के बीच के गैप में पड़ी हैं।
यह निर्धारित करने के लिए कि तीन बिंदुओं पी [एनआर], पी [एन], पी [एन + आर] एक सही रोटेशन बनाते हैं, हम वेक्टर उत्पाद के सामान्यीकरण का उपयोग दो-आयामी स्थान पर कर सकते हैं, अर्थात्, सही रोटेशन की स्थिति इस तरह दिखाई देगी:

इस प्रकार, हम उंगलियों के अनुरूप बिंदुओं के निर्देशांक प्राप्त करते हैं।
एल्गोरिदम कार्यान्वयन
आमतौर पर, ऊपर वर्णित एल्गोरिथ्म एक नियमित वेब कैमरा की वीडियो स्ट्रीम के साथ काम करेगा, लेकिन इस मामले में पृष्ठभूमि से अग्रभूमि को सटीक रूप से अलग करने में समस्याएं होंगी। इन समस्याओं से बचने के लिए, RGB-D सेंसर (Microsoft Kinect) का उपयोग किया गया था, जिसके साथ, पृष्ठभूमि को घटाने के बजाय, आप केवल थ्रेशोल्ड कटऑफ द्वारा काम की दूरी को गहराई से सीमित कर सकते हैं। सामान्य तौर पर, Kinect इस कार्य के लिए बहुत उपयुक्त नहीं है, क्योंकि इसके लिए न्यूनतम कार्य दूरी लगभग 40 सेमी है, और यह इसके स्थान पर महत्वपूर्ण प्रतिबंध लगाता है। लेकिन यह अभी भी कुछ नहीं से बेहतर है।
OpenNI को Kinect के साथ काम करने के लिए एक ड्राइवर के रूप
में इस्तेमाल किया
गया था ।
OpenCV लाइब्रेरी का उपयोग किनेक्ट और समोच्च के साथ काम करने को सरल बनाने के लिए भी किया गया था।
प्रयोग के परिणाम
एल्गोरिथ्म के संचालन के दौरान एक तस्वीर का एक उदाहरण:

एल्गोरिथ्म काम करने की प्रक्रिया के साथ वीडियो का एक उदाहरण (ट्रैकिंग का उपयोग नहीं किया जाता है, हाथों और उंगलियों को प्रत्येक फ्रेम में एक नए फ्रेम में खोजा जाता है):
स्रोत कोड:
github.com/BelBES/HandDetector