मैं पायथन के साथ वैली को कैसे खोजूं?


84

बेशर्मी से बैंडबाजे पर कूदते :-)

कैसे मैं मैथेमेटिका के साथ वाल्डो और फॉलोअप से प्रेरित हूं , वाल्डो को आर के साथ कैसे ढूंढूं , एक नए अजगर उपयोगकर्ता के रूप में मैं यह देखना पसंद करूंगा कि यह कैसे किया जा सकता है। ऐसा लगता है कि आर की तुलना में अजगर इसके लिए बेहतर होगा, और हमें लाइसेंस के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि हम गणितज्ञ या मतलूब के साथ करेंगे।

उदाहरण के लिए नीचे की ओर धारियों का उपयोग करने से काम नहीं चलेगा। यह दिलचस्प होगा कि अगर इस तरह के कठिन उदाहरणों के लिए एक सरल नियम आधारित दृष्टिकोण बनाया जा सकता है।

समुद्र तट पर

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

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


7
क्षमा करें ... क्या कोई ऐसा कार्यक्रम है जो इस फोटो में वाल्डो को सफलतापूर्वक ढूंढता है? वहाँ 'असली' वाल्डो की कोई विशिष्ट विशेषताएं नहीं लगती हैं। मेरे पास वही वाल्डो पुस्तक थी, और जो मुझे याद है उसमें कुछ प्राकृतिक-भाषा का सुराग था जिसका उपयोग किया जाना था, हो सकता है कि असली वाल्डो एक बेंत या कुछ और नहीं पकड़ रहा था। मैं नहीं देखता कि आप कैसे प्रोग्रामो को पहली बार वाल्डो को ढूंढ सकते थे, बिना आपके प्रोग्राम को प्राकृतिक भाषा के सुराग को समझने में सक्षम होने के बिना।
एडमकेजी

हाँ, आप सही हैं, क्षमा करें ... हालाँकि यह एक दिलचस्प काम होगा! मैंने छवि को पुराने "समुद्र तट पर" स्विच किया, जिसमें धारियां भी हैं ... (इस छवि को चुनने का एक और कारण भी है!)
tdc

हालांकि यह सवाल दिलचस्प है, आप जो पूछ रहे हैं वह अस्पष्ट है। क्या यह किसी समाधान का कार्यान्वयन है? अजगर के लिए किस एमएल लाइब्रेरी में एक संकेत इसके लिए उपयोग करने के लिए?
साइमन बर्गोट

@ साइमन एक पूर्ण कार्यान्वयन शायद पूछने के लिए थोड़ा सा होगा, लेकिन एक उत्तर का एक कंकाल (अर्थात कुछ कार्य परिभाषाएँ गायब हैं) बहुत अच्छा होगा। मुझे यकीन नहीं है कि मैं छवि को लोड करूँगा (हालाँकि मैंने यह देखा है: stackoverflow.com/questions/94875/image-processing-in-python )
tdc

जवाबों:


63

यहाँ महतों के साथ एक कार्यान्वयन है

from pylab import imshow
import numpy as np
import mahotas
wally = mahotas.imread('DepartmentStore.jpg')

wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))

लाल, हरे और नीले चैनलों में विभाजित करें। नीचे फ्लोटिंग पॉइंट अंकगणित का उपयोग करना बेहतर है, इसलिए हम शीर्ष पर कनवर्ट करते हैं।

w = wfloat.mean(2)

w सफेद चैनल है।

pattern = np.ones((24,16), float)
for i in xrange(2):
    pattern[i::4] = -1

ऊर्ध्वाधर अक्ष पर + 1, + 1, -1, -1 के पैटर्न का निर्माण करें। यह वैली की शर्ट है।

v = mahotas.convolve(r-w, pattern)

लाल माइनस व्हाइट के साथ बातचीत करें। यह एक मजबूत प्रतिक्रिया देगा जहां शर्ट है।

mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))

अधिकतम मूल्य के लिए देखें और इसे दिखाई देने के लिए इसे पतला करें। अब, हम क्षेत्र या रुचि को छोड़कर पूरी छवि को टोन करते हैं:

wally -= .8*wally * ~mask[:,:,None]
imshow(wally)

और हम प्राप्त करते हैं वाल्डो!


3
मैंने समुद्र तट की छवि की कोशिश की और यह बहुत अच्छी तरह से काम नहीं कर पाया :( वैली शीर्ष 6 या 7 हिट में थी, लेकिन यह सबसे अच्छा मिलान था। प्रसंस्करण ने मदद की, क्योंकि मैं उसे अपने दम पर नहीं पा सकता था (मेरे साथ) आंखें) जब मैं केवल छोटे क्षेत्रों का एक गुच्छा था, यह आसान था।
luispedro

क्या आपको इसके लिए पूर्ण स्रोत कोड मिला है? मैं np हो रहा हूँ परिभाषित नहीं है
सांकेतिक

2

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


2

शायद आपको समस्या को दो छोटे लोगों में तोड़ने से शुरू करना चाहिए:

  1. एक एल्गोरिथ्म बनाएं जो पृष्ठभूमि से लोगों को अलग करता है।
  2. संभव के रूप में कई सकारात्मक और नकारात्मक उदाहरण के साथ एक तंत्रिका नेटवर्क क्लासिफायर ट्रेन।

उन से निपटने के लिए अभी भी दो बहुत बड़ी समस्याएं हैं ...

बीटीडब्ल्यू, मैं सी ++ चुनूंगा और सीवी खोलूंगा, यह इसके लिए अधिक उपयुक्त लगता है।


2
यदि C ++ और OpenCV का उपयोग करेंगे तो पाइथन में एक समाधान बस संभव है। ओपन सीवी का इस्तेमाल पायथन के तहत किया जा सकता है।
अनपिड्रा

1

यह असंभव नहीं है लेकिन बहुत मुश्किल है क्योंकि आपके पास वास्तव में एक सफल मैच का कोई उदाहरण नहीं है। अक्सर कई राज्य होते हैं (इस मामले में, बटुए के चित्र खोजने के अधिक उदाहरण), तो आप फिर एक छवि पुनर्गठन कार्यक्रम में कई चित्रों को फ़ीड कर सकते हैं और इसे एक छिपे हुए मार्कोव मॉडल के रूप में मान सकते हैं और प्रयोग के लिए viterbi एल्गोरिथ्म जैसे कुछ का उपयोग कर सकते हैं ( http: /) /en.wikipedia.org/wiki/Viterbi_algorithm )।

जिस तरह से मैं यह दृष्टिकोण होगा, लेकिन यह मानते हुए कि आपके पास कई छवियां हैं जो आप इसे सही उत्तर के उदाहरण दे सकते हैं ताकि यह सीख सके। यदि आपके पास केवल एक तस्वीर है, तो मुझे खेद है कि शायद एक और दृष्टिकोण आपको लेने की आवश्यकता है।


1

मैंने माना कि दो मुख्य विशेषताएं हैं जो लगभग हमेशा दिखाई देती हैं:

  1. लाल-सफेद धारीदार शर्ट
  2. फैंसी टोपी के नीचे गहरे भूरे बाल

तो मैं इसे निम्नलिखित तरीके से करूंगा:

धारीदार शर्ट के लिए खोज:

  • लाल और सफेद रंग को फ़िल्टर करें (HSV परिवर्तित छवि पर थ्रेसहोल्ड के साथ)। यह आपको दो मुखौटा चित्र देता है।
  • उन्हें एक साथ जोड़ें -> धारीदार शर्ट की खोज के लिए यह मुख्य मुखौटा है।
  • सभी फ़िल्टर किए गए लाल रंग को शुद्ध लाल (# FF0000) में परिवर्तित करके और सभी फ़िल्टर किए गए सफेद रंग को शुद्ध सफेद (#FFFFFF) में परिवर्तित करके एक नई छवि बनाएं।
  • अब इस शुद्ध लाल-सफेद छवि को एक स्ट्राइप पैटर्न छवि के साथ सहसंबंधित करें (मुझे लगता है कि सभी वाल्डो में एकदम सही क्षैतिज पट्टियाँ हैं, इसलिए पैटर्न का रोटेशन आवश्यक नहीं होना चाहिए)। उपरोक्त मुख्य मास्क के अंदर ही सहसंबंध करें।
  • एक साथ समूह बनाने की कोशिश करें जो एक शर्ट से हो सकता है ।

यदि एक से अधिक 'शर्ट' हैं, तो कहने के लिए, सकारात्मक सहसंबंध के एक से अधिक क्लस्टर, अन्य विशेषताओं की खोज करते हैं, जैसे गहरे भूरे बाल:

भूरे बालों के लिए खोज

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

1

यहाँ एक समाधान है तंत्रिका नेटवर्क का उपयोग कर है जो अच्छी तरह से काम करता है।

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

ऊपर नेटवर्क प्रशिक्षण और भविष्यवाणियां करने के लिए टेन्सरफ्लो ऑब्जेक्ट डिटेक्शन एपीआई का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.