6

हाल ही में मैंने CIA world factbook से कुछ झंडे डाउनलोड किए। अब मैं "उन्हें वर्गीकृत करने के लिए चाहते हैं।छवियों में पैटर्न को स्वचालित रूप से पहचानें

  1. रंग जाओ
  2. जाओ कुछ आकार (तारे, चांद आदि)

जबकि ब्राउज़िंग मैं जो मुझे निकालने के लिए अनुमति देता है अजगर छवि लाइब्रेरी में आए रंग (Austria के लिए अर्थात्:

#!/usr/bin/env python 
import Image 
bild = Image.open("au-lgflag.gif").convert("RGB") 
bild.getcolors() 
[(44748, (255, 255, 255)), (452, (236, 145, 146)), (653, (191, 147, 149)), ...)] 

क्या मैं यहाँ अजीब पाया ऑस्ट्रिया के ध्वज केवल उस में दो रंग है, लेकिन इसके बाद के संस्करण उत्पादन दस से अधिक पता चलता है कि है क्या तुम जानते हो। क्यूं कर? मेरा विचार केवल शीर्ष 5 रंगों को गिनना था और क्योंकि मुझे में हर रंग में दिलचस्पी नहीं है, मैं 64 के गुणकों को संख्याओं को "सामान्यीकृत" कर दूंगा (इसलिए (236, 145, 146) बन जाता है (1 9 2, 128, 128))।

हालांकि फिलहाल मुझे नहीं पता कि अधिक जानकारी निकालने का सबसे अच्छा तरीका क्या है (क्या वहां छवि में एक सितारा है? या अन्यथा)। क्या आप मुझे कुछ संकेत दे सकते हैं कि इसे कैसे करें?

अग्रिम

+4

यह सीआईए है। हो सकता है कि उन्होंने रंगों को झुकाकर ध्वज छवियों में गुप्त संदेशों को एन्कोड करने के लिए स्टेग्नोग्राफ़ी का उपयोग किया हो ... और अब आपने इसके बारे में यहां बताया है। चला! –

+6

ठीक है, जैसा कि मैं इसे पढ़ रहा हूं, मेरे दरवाजे के सामने एक वैन रुक रही है। ओह $ और% $ और कनेक्शन खो गया है – qbi

उत्तर

8

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

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

कुछ पुस्तकालयों और ढांचे हैं जिन्हें आप पाइथन में पैटर्न पहचान के लिए उपयोग कर सकते हैं - (सितारों और चंद्रमाओं को पहचानना) - हालांकि मैं आपको अग्रिम करता हूं: यदि आप चाहते हैं कि यह केवल एक 0-हंडर्ड-एंड-ए- कुछ coutnry झंडे, पैटर्न पहचान में गोता लगाने की कोशिश करने के बजाय, आप इसे मैन्युअल रूप से करना चाहिए।

रंगों की संख्या पर आपकी टिप्पणी बताती है कि आपको कंप्यूटर छवियों के साथ बिल्कुल उपयोग नहीं किया जाता है। और पैटर्न मान्यता कट्टर है, यहां तक ​​कि एक पायथन फ्रंट एंड के साथ भी। (आप किसी भी मौजूदा ढांचे को पहले से जानने के लिए उम्मीद नहीं कर सकते कि उदाहरण के लिए "चंद्रमा" या "स्टार" क्या है)

तो, 500 से कम छवियों के लिए, आप सॉफ़्टवेयर का सहारा ले सकते हैं जो आपको मैन्युअल रूप से चित्रों को टैग करने की अनुमति देता है और टैग को प्रत्येक ध्वज में जोड़ने के लिए कुछ कोड लिखें।

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

पैटर्न पहचानने के विपरीत, आप प्रत्येक घटक के सबसे महत्वपूर्ण बिट्स का उपयोग करके देखे गए रंगों की संख्या को घटा सकते हैं। मैं कहूंगा कि दो सबसे महत्वपूर्ण बिट पर्याप्त होंगे। निम्नलिखित अजगर समारोह कर सकता है कि एक रंग का उपयोग जनहित याचिका द्वारा दिए गए गणना:

def get_main_colors(col_list): 
    main_colors = set() 
    for index, color in col_list: 
     main_colors.add(tuple(component >> 6 for component in color)) 
    return [tuple(component << 6 for component in color) for color in main_colors] 

साथ कॉल यह "get_main_colors (bild.get_colors())" उदाहरण के लिए।, python image recognition

6

पहले कुछ त्वरित शब्दावली सिर्फ मामले में:

यहाँ पैटर्न मान्यता भाग के साथ काम कर एक और सवाल है

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

समस्या के लिए पर:

मैं आपकी समस्या को एक सरल क्लासिफ़ायर का उपयोग आसानी से हल किया जा सकता है, के-निकटतम पड़ोसियों की तरह, सुविधा वैक्टर के रूप में रंग हिस्टोग्राम के साथ लगता है। विशेष रूप से, मैं आरजीबी फीचर वैक्टर के विपरीत एचएसवी फीचर वैक्टर का उपयोग करता हूं। इस तरह के सरल वर्गीकरण प्रणाली का उपयोग करके साहित्य में कुछ शानदार परिणाम सामने आए हैं, उदाहरण के लिए: SVMs for Histogram-Based Image Classification। उस पेपर में, लेखक एक विशेष वेरिफायर का उपयोग करते हैं जिसे एक समर्थन वेक्टर मशीन (एसवीएम) और एचएसवी फीचर वेक्टर के रूप में जाना जाता है। एचएसवी फीचर वैक्टर भी छवि स्केल और रोटेशन के मुद्दे को दूर करते हैं, उदाहरण के लिए एक ध्वज जो 1024x768 बनाम 640x480 है, या एक ध्वज जो 45 डिग्री से एक छवि में घुमाया गया है।

एल्गोरिथ्म प्रशिक्षण कुछ इस तरह दिखाई देगा स्यूडोकोड:

# training simple kNN -- just compute feature vectors, collect labels 
X = [] # tuple (input example, label) 
for training_image in data: 
    x = get_hsv_vector(training_image) 
    y = get_label(training_image) 
    X.append((x,y)) 

# classification -- pick k closest feature vectors 
K = 3  # the 'k' in kNN -- how many similar featvecs to use 
d = [] # (distance, label) tuples for scoring 
x_test = get_hsv_vector(test_image) # feature vector to be classified 
for x_train in X: 
    d.append((distance(x_test[0], x_train), x_test[1]) 

# sort distances, d, by closeness and pick top K labels for scoring 
d.sort() 
output = get_majority_vote([x[1] for x in d[:K]]) 

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

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