2010-02-02 11 views
34

मेरे पास एक कैमरा है जो स्थिर होगा, जो घर के अंदर स्थित है। लोग कैमरे के पीछे 5 मिनट के भीतर चले जाएंगे। ओपनसीवी का उपयोग करके, मैं पिछले व्यक्तियों को चलने वाले व्यक्तियों का पता लगाना चाहता हूं - मेरी आदर्श वापसी बाध्य आयतों के साथ, पता लगाए गए व्यक्तियों की एक सरणी है।ओपनसीवी का उपयोग करके लोगों को कैसे पहचान और ट्रैक कर सकते हैं?

मैं निर्मित नमूने के कई देखा है:

  • अजगर नमूने में से कोई भी वास्तव में
  • सी ब्लॉब ट्रैकिंग नमूना होनहार है, लेकिन स्वीकार नहीं करता लागू लाइव वीडियो, जो परीक्षण को मुश्किल बनाता है। यह नमूने का सबसे जटिल भी है, प्रासंगिक ज्ञान निकालने और इसे पायथन एपीआई समस्याग्रस्त में परिवर्तित करने के लिए।
  • सी 'motempl' नमूना भी आशाजनक दिखता है, जिसमें यह बाद के वीडियो फ्रेम से सिल्हूट की गणना करता है। संभवतः मैं इसका उपयोग दृढ़ता से जुड़े घटकों को खोजने और व्यक्तिगत ब्लब्स और उनके बाध्यकारी बक्से निकालने के लिए कर सकता था - लेकिन मैं अभी भी उसी फ्रेम के रूप में बाद के फ्रेम में पाए गए ब्लब्स की पहचान करने का एक तरीका जानने का प्रयास कर रहा हूं। में अधिमानतः पायथन -

ऐसा करने के लिए मार्गदर्शन या नमूने प्रदान करने में सक्षम किसी को है?

+2

+1 एक साहसिक प्रयास। क्या आता है यह देखने में रूचि है। –

+0

@ टेंट सुनिश्चित नहीं है कि आप गंभीर हैं या नहीं। ओपनसीवी में ऐसी कोई विधि नहीं है। –

+0

@ निक जॉनसन, खेद है कि यह हास्य पर एक बुरा प्रयास था। वास्तविक दुनिया के माहौल में लोगों को पहचानने और ट्रैक करने में सक्षम होना गैर-तुच्छ है। इस पर काबू पाने में कई बाधाएं हैं: विभिन्न प्रकाश व्यवस्था की स्थिति, बाधाएं, छाया हटाने आदि। – Trent

उत्तर

27

ओपनसीवी के नवीनतम एसवीएन संस्करण में HOG- आधारित पैदल यात्री पहचान का एक (अनियंत्रित) कार्यान्वयन शामिल है। यह एक पूर्व प्रशिक्षित डिटेक्टर और एक अजगर आवरण के साथ आता है।

from cv import * 

storage = CreateMemStorage(0) 
img = LoadImage(file) # or read from camera 

found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8), 
       padding=(32,32), scale=1.05, group_threshold=2)) 

तो बजाय ट्रैकिंग, तो आप सिर्फ प्रत्येक फ्रेम में डिटेक्टर चलाने के लिए और सीधे इसके उत्पादन का उपयोग हो सकता है: मूल उपयोग इस प्रकार है।

कार्यान्वयन के लिए src/cvaux/cvhog.cpp और अधिक पूर्ण पायथन उदाहरण (ओपनसीवी स्रोतों में दोनों) के लिए samples/python/peopledetect.py देखें।

1

यह एक कंप्यूटर विजन कोर्स के हिस्से के रूप में हमने एक परियोजना के समान है, और मैं आपको अभी बता सकता हूं कि सही होने के लिए यह एक कठिन समस्या है।

आप अग्रभूमि/पृष्ठभूमि विभाजन का उपयोग कर सकते हैं, सभी ब्लब्स ढूंढ सकते हैं और फिर निर्णय ले सकते हैं कि वे एक व्यक्ति हैं। समस्या यह है कि यह बहुत अच्छी तरह से काम नहीं करेगा क्योंकि लोग एक साथ जाते हैं, एक दूसरे के पीछे जाते हैं और इसलिए, एक ब्लॉब में दो व्यक्तियों का बहुत अच्छा प्रभाव हो सकता है और फिर आप देखेंगे कि ब्लॉब विभाजन और विलय के साथ चलने के साथ ही विलय हो रहा है।

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

मेरी सलाह उपलब्ध शोध में गोता लगाने और देखने के लिए है कि क्या आप वहां कुछ भी पा सकते हैं। समस्या इस बात पर विचार नहीं कर रही है कि ऐसा करने वाले उत्पाद मौजूद हैं: ऑटोोलिव के पास एक कार पर आईआर-कैमरा का उपयोग करके पैदल चलने वालों का पता लगाने के लिए एक उत्पाद है, और मैंने अन्य उत्पादों को देखा है जो ग्राहकों को स्टोर करने और बाहर निकलने वाले ग्राहकों की गिनती के साथ सौदा करते हैं।

+0

मुझे वास्तव में एक 'ब्लॉब' में एकाधिक लोगों की पहचान करने के बारे में भी परेशान नहीं है - मैं हूं गतिविधि के ब्लब्स का पता लगाने और अपने बाध्यकारी बक्से और सेंट्रॉइड खोजने में अधिक रुचि रखते हैं। मैं उम्मीद कर रहा था कि कोई उद्देश्य उद्देश्य के लिए ओपनसीवी में उपलब्ध एल्गोरिदम का अनुक्रम सुझा सकता है। :) –

4

यह स्पष्ट रूप से एक गैर-मामूली कार्य है। आपको प्रेरणा के लिए वैज्ञानिक प्रकाशनों को देखना होगा (Google Scholar यहां आपका मित्र है)। यहां मानव पहचान और ट्रैकिंग के बारे में एक पेपर है: Human tracking by fast mean shift mode seeking

+0

जैसा कि मैंने टिप्पणी की, मुझे यह निर्धारित करने की आवश्यकता नहीं है कि वे मानव हैं - मुझे बस चलने वाले ब्लब्स को अलग करने और उन्हें ट्रैक करने की आवश्यकता है। –

5

निक,

क्या आप देख रहे हैं लोगों का पता लगाने, लेकिन गति का पता लगाने नहीं है। यदि आप हमें हल करने/करने की कोशिश कर रहे हैं, तो हम आपको बहुत कुछ बताते हैं, हम बेहतर जवाब दे सकते हैं। वैसे भी, परिणामों के साथ आप क्या करने जा रहे हैं इसके आधार पर गति का पता लगाने के कई तरीके हैं। सबसे सरल एक थ्रेसहोल्डिंग के बाद differencing होगा जबकि एक जटिल एक उचित पृष्ठभूमि मॉडलिंग हो सकता है -> अग्रभूमि subtraction -> morphological ops -> जुड़े घटक विश्लेषण, यदि आवश्यक हो तो ब्लॉब विश्लेषण के बाद। ओपनसीवी कोड डाउनलोड करें और नमूने निर्देशिका में देखें। आप देख सकते हैं कि आप क्या देख रहे हैं। इसके अलावा, ओसीवी पर एक ओरेली किताब है।

आशा इस मदद करता है, नंद

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

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