श्री फ्रैंक डेनिस से PHP (http://libpuzzle.pureftpd.org/project/libpuzzle) के लिए libpuzzle libray के बारे में। मैं अपने mysql डेटाबेस में डेटा को अनुक्रमणित और संग्रहीत करने का तरीका समझने की कोशिश कर रहा हूं। वेक्टर की पीढ़ी पूरी तरह से कोई समस्या नहीं है।लिपपोल इंडेक्सिंग लाखों चित्रों?
उदाहरण:
# Compute signatures for two images
$cvec1 = puzzle_fill_cvec_from_file('img1.jpg');
$cvec2 = puzzle_fill_cvec_from_file('img2.jpg');
# Compute the distance between both signatures
$d = puzzle_vector_normalized_distance($cvec1, $cvec2);
# Are pictures similar?
if ($d < PUZZLE_CVEC_SIMILARITY_LOWER_THRESHOLD) {
echo "Pictures are looking similar\n";
} else {
echo "Pictures are different, distance=$d\n";
}
यही सब मेरे लिए स्पष्ट है - लेकिन अब मैं कैसे काम करते हैं जब मैं चित्रों> 1.000.000 का एक बड़ा राशि है? मैं वेक्टर की गणना करता हूं और डेटाबेस में फ़ाइल नाम के साथ स्टोर करता हूं? अब इसी तरह की तस्वीरों को कैसे ढूंढें? अगर मैं mysql में प्रत्येक वेक्टर को स्टोर करता हूं तो मुझे प्रत्येक रिकॉर्ड खोलना होगा और puzzle_vector_normalized_distance फ़ंक्शन के साथ दूरी की गणना करना होगा। प्रक्रियाओं के लिए समय की बहुत लेता है यही कारण है कि (प्रत्येक डेटाबेस प्रविष्टि खोलने - यह समारोह फेंक कर दिया, ...)
मैं lib पहेली libaray से रीडमी पढ़ सकते हैं और निम्नलिखित पाया:
इसके साथ काम करेंगे एक डेटाबेस जिसमें लाखों चित्र हैं?
अंतर्निहित संपीड़न/डिकंप्रेशन फ़ंक्शन का उपयोग करके एक सामान्य छवि हस्ताक्षर के लिए केवल 182 बाइट की आवश्यकता होती है।
इसी तरह के हस्ताक्षर समान "शब्द" साझा करते हैं, यानी। उसी स्थिति में मानों के समान अनुक्रम। यौगिक इंडेक्स (शब्द + स्थिति) का उपयोग करके, संभावित समान वैक्टरों का सेट नाटकीय रूप से कम हो गया है, और ज्यादातर मामलों में, वास्तव में कोई वेक्टर दूरी गणना करने की आवश्यकता नहीं है।
शब्दों और पदों के माध्यम से अनुक्रमण करना डेटा को कई तालिकाओं और सर्वरों में विभाजित करना आसान बनाता है।
तो हाँ, पहेली लाइब्रेरी निश्चित रूप से परियोजनाओं के साथ असंगत नहीं है जो लाखों चित्रों को अनुक्रमित करने की आवश्यकता है।
इसके अलावा मैं अनुक्रमण के बारे में इस विवरण पाया:
------------------------ अनुक्रमण ----- -------------------
अगर वे लाखों रिकॉर्ड हैं तो जल्दी से चित्रों को कैसे ढूंढें?
मूल पेपर का एक सरल, अभी तक कुशल उत्तर है।
निश्चित लंबाई वाले शब्दों में वेक्टर को काटें। उदाहरण के लिए, निम्नलिखित वेक्टर पर विचार करते हैं:
[सहमति का प्रतीक]
एक शब्द लंबाई (के) 10 में, आपको निम्न शब्द प्राप्त कर सकते हैं के साथ:
[abcdefghij] स्थिति 0 पर पाया [bcdefghijk] स्थिति 1 में पाया जब तक (शब्द + स्थिति) का एक यौगिक सूचकांक के साथ अपने वेक्टर स्थिति N-1
फिर, सूचकांक [cdefghijkl] स्थिति 2 आदि में पाया।
लाखों छवियों के साथ भी, के = 10 और एन = 100 के लिए पर्याप्त होना चाहिए, उसी सूचकांक को साझा करने में बहुत कम प्रविष्टियां हैं।
+-----------------------------+
| signatures |
+-----------------------------+
| sig_id | signature | pic_id |
+--------+-----------+--------+
+--------------------------+
| words |
+--------------------------+
| pos_and_word | fk_sig_id |
+--------------+-----------+
मैं कई में विभाजित कम से कम "शब्द" तालिका की सलाह देते हैं टेबल और/या सर्वर:
यहाँ एक बहुत ही बुनियादी नमूना डेटाबेस स्कीमा है।
डिफ़ॉल्ट रूप से (lambas = 9) हस्ताक्षर 544 बाइट लंबा हैं। स्टोरेज स्पेस को सहेजने के लिए, उन्हें puzzle_compress_cvec() फ़ंक्शन के माध्यम से उनके मूल आकार के 1/तिहाई तक संपीड़ित किया जा सकता है। उपयोग करने से पहले, वे पहेली_uncompress_cvec() के साथ असम्पीडित होना चाहिए।
मुझे लगता है कि संपीड़न गलत तरीका है तो मुझे इसकी तुलना करने से पहले हर वेक्टर को असम्पीडित करना होगा।
मेरा प्रश्न अब है - लाखों चित्रों को संभालने का तरीका और तेज़ और कुशल तरीके से उनकी तुलना कैसे करें। मैं समझ नहीं पा रहा हूं कि "वेक्टर काटने" को मेरी समस्या से कैसे मदद करनी चाहिए।
बहुत धन्यवाद - शायद मैं यहां किसी को ढूंढ सकता हूं जो libpuzzle libaray के साथ काम कर रहा है।
चीयर्स।
यह अच्छी जानकारी है - धन्यवाद। बस स्पष्ट करने के लिए, क्या आपने वास्तव में यह कोशिश की है - या यह केवल 'सिद्धांत में' है? बंटवारे को प्रभावित नहीं करेंगे, लेकिन निश्चित रूप से एक कार्य कार्यान्वयन को देखने में रुचि रखते हैं। विशेष रूप से ऐसा लगता है कि आपकी अनुक्रमणिका को कुशल क्वेरी चलाने के लिए tweaking की आवश्यकता हो सकती है। – barryhunter
यह सिद्धांत है, मुझे libpuzzle के साथ कोई सीधा अनुभव नहीं मिला है, मैंने अभी सोचा है कि मैं libpuzzle दस्तावेज़ों के उदाहरणों पर विस्तार के लिए कुछ कोड प्रदान करता हूं। – Jason
त्वरित नोट ... हम वास्तव में ऊपर (थोड़ा संशोधित) लागू किया ... एक आकर्षण की तरह काम करता है! और ... कम देखो, पहेली को चलाने के बाद थोड़ा और सटीक फ़ंक्शन छवि बनाम छवि की तुलना करें ... अब तक हमने 20 की ताकत के साथ प्रयोग किया है ... और हमारे 4 मिलियन मजबूत छवि के लिए 100% सटीक परिणाम प्राप्त कर रहे हैं आधार ... धन्यवाद !!! –