2012-01-13 10 views
76

बेशर्मी, bandwagon पर कूद :-)मैं पाइथन के साथ वैली कैसे ढूंढूं?

How do I find Waldo with Mathematica और फॉलोअप How to find Waldo with R से प्रेरित होकर एक नया अजगर उपयोगकर्ता मैं देखना यह कैसे किया जा सकता है के रूप में अच्छा लगेगा। ऐसा लगता है कि पाइथन आर से बेहतर अनुकूल होगा, और हमें लाइसेंस के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि हम गणित या मैटलैब के साथ करेंगे।

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

At the beach

मैं [मशीन से सीखने] टैग जोड़ने के बाद के रूप में मेरा मानना ​​है कि इस तरह के सही जवाब प्रतिबंधित बोल्ट्जमान मशीन (RBM) दृष्टिकोण मूल में ग्रेगरी Klopper द्वारा की वकालत के रूप में एमएल तकनीक, का उपयोग करना होगा धागा। कुछ RBM code available in python है जो शुरू करने के लिए एक अच्छी जगह हो सकती है, लेकिन उस दृष्टिकोण के लिए स्पष्ट रूप से प्रशिक्षण डेटा की आवश्यकता है।

2009 IEEE International Workshop on MACHINE LEARNING FOR SIGNAL PROCESSING (MLSP 2009) पर वे Data Analysis Competition: Where's Wally? चलाए। प्रशिक्षण डेटा matlab प्रारूप में प्रदान किया जाता है। ध्यान दें कि उस वेबसाइट पर लिंक मर चुके हैं, लेकिन डेटा (एक दृष्टिकोण Sean McLoone और उनके सहयोगियों द्वारा उठाए के स्रोत के साथ पाया जा सकता है here (एससीएम लिंक देखें)। लगता है एक ही स्थान पर की तरह शुरू करने के लिए।

+5

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

+0

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

+0

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

उत्तर

54

यहाँ से, लाल, हरे और नीले चैनलों में mahotas

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) 

और हम waldo प्राप्त करें!

+2

बहुत बढ़िया :-) क्या आपने इसे किसी अन्य छवियों पर आजमाया है? – tdc

+2

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

+0

क्या आपको इस पर पूरा स्रोत कोड मिला है? मुझे एनपी प्राप्त नहीं हो रहा है – encodes

2

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

1

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

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

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

BTW हैं, मैं C++ और खुले सीवी का चयन करेंगे, यह बहुत ज्यादा इस के लिए अनुकूल लगता है।

+1

नहीं है यदि सी ++ और ओपनसीवी का उपयोग करेगा तो पाइथन में एक समाधान जितना संभव हो सके। ओपनसीवी का उपयोग पायथन के तहत किया जा सकता है। – Unapiedra

1

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

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

1

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

  1. लाल-सफेद धारीदार शर्ट फैंसी टोपी

तहत

  • गहरे भूरे बालों तो मैं क्या करना होगा यह निम्न तरीका:

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

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

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

    खोज भूरे बाल

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

    Here's a solution अच्छी तरह से काम करता है जो तंत्रिका नेटवर्क का उपयोग कर।

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

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

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