कंप्यूटर दृष्टि के लिए अच्छी भाषा?


28

मैं एक सामग्री आधारित छवि पुनर्प्राप्ति प्रणाली को लागू करने की कोशिश कर रहा हूं, लेकिन इससे पहले कि मैं ऐसा करूं, मैं इस कार्य के लिए उपयुक्त कुछ प्रोग्रामिंग भाषाओं का अवलोकन प्राप्त करना चाहता हूं (अच्छे काम और ऐसे ही)।

क्या किसी को उस तरह के कार्य के लिए कुछ अच्छी भाषाएँ और लिबास पता हैं? पायथन या जावा के बारे में क्या?

श्रेष्ठ


गुंजाइश एक अकादमिक परियोजना है;;
जस्ट

1
मैंने एक सॉफ्टवेयर स्टार्ट-अप के लिए कंप्यूटर विज़न ग्रुप में ~ 3 साल काम किया। हमने तेजी से प्रोटोटाइप करने वाले सामान के लिए पाइथन + स्किपी / सुन्न का इस्तेमाल किया, और उत्पादन कोड के लिए सी ++। बढ़ावा :: भारी सी ++ के लिए अजगर रैपरों ने पोर्टिंग के साथ मदद की। BLAS और LAPACK का उपयोग भारी संख्यात्मक सामान के लिए किया जाता है।
विम

2
@wim - आपकी टिप्पणी ने एक महान जवाब दिया होगा, इस बारे में थोड़ा और विस्तार के साथ कि आपने विकास के विभिन्न चरणों के लिए उन भाषाओं का उपयोग क्यों किया।
मार्क बूथ

1
आप तेजी से प्रोटोटाइप के लिए मैटलैब या ऑक्टेव का उपयोग कर सकते हैं , और फिर आर्मडिलो (रैखिक बीजगणित के लिए) और एमएलपैक (मशीन सीखने और पैटर्न मान्यता के लिए) जैसे टूलकिट की मदद से सी ++ में परिवर्तित कर सकते हैं । अर्माडिलो आंतरिक रूप से BLAS और LAPACK का उपयोग करता है (Matlab के समान)। आप आर्मडिलो के मेक्सिको इंटरफ़ेस के माध्यम से C ++ कोड के साथ Mat'ab / Octave कोड भी मिला सकते हैं।
mtall

जवाबों:


35

हो सकता है कि आप अपने काम (अकादमिक प्रोजेक्ट; डेस्कटॉप या मोबाइल वाणिज्यिक उत्पाद; वेब-आधारित वाणिज्यिक परियोजना?) के दायरे और पैमाने के बारे में अधिक विशिष्ट हो सकते हैं।

कुछ सिफारिशें और टिप्पणियां:

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

  • C ++ का उपयोग कई प्रोडक्शन-ग्रेड CV सिस्टम के लिए किया जाता है (Google की छवि खोज या स्ट्रीटव्यू या कई वाणिज्यिक रोबोटिक्स एप्लिकेशन के पैमाने पर कुछ के बारे में सोचें)। OpenCV जैसी उत्कृष्ट लाइब्रेरी, उत्कृष्ट प्रदर्शन, उत्पादन वातावरण में डालना आसान। यदि आपको मशीन लर्निंग करने की आवश्यकता है, तो वहाँ कई पुस्तकालय हैं (LibSVM / SVMlight, मशाल)। यदि आपको "सभी पिक्सेल पर लूप" का सहारा लेना है तो यह अच्छा प्रदर्शन करेगा। बड़े पैमाने पर पुनर्प्राप्ति प्रणाली में आवश्यक प्रणालियों / भंडारण परतों को कोड करने के लिए उपयोग करना आसान है (जैसे: एक उल्टे सूचकांक मैपिंग फ़ीचर हैश को छवियों में संग्रहीत करने के लिए एक बहुत बड़ा ऑन-डिस्क हैश मैप)। थ्रिफ्ट / मैसेज पैक जैसी चीजें आपके रिट्रीवल प्रोग्राम को आरपीसी सर्वर में बदल सकती हैं जिसे वेब फ्रंट-एंड कह सकते हैं। हालाँकि: प्रोटोटाइप के लिए बहुत चुस्त नहीं, नए विचारों को आज़माने के लिए काफी भयानक, धीमी विकास समय; और अनुभवहीन कोडर्स के हाथों में रखने से प्रदर्शन और / या अस्थिरता की समस्याओं को ट्रैक करना मुश्किल हो सकता है।

  • अजगर किसी तरह दोनों के बीच का मैदान है। आप इसे Matlab स्टाइल के लिए संख्यात्मक कंप्यूटिंग के लिए उपयोग कर सकते हैं (numpy और scipy के साथ) + OpenCV जैसे पुस्तकालयों के लिए बाइंडिंग है। आप इसके साथ सिस्टम / डेटा संरचना सामान कर सकते हैं और स्वीकार्य प्रदर्शन प्राप्त कर सकते हैं। मतलाब या C ++ की तुलना में काफी कम मशीन लर्निंग पैकेज हैं। जब तक आपको "सभी पिक्सेल पर लूप" कोड का सहारा नहीं लेना है, तब तक आप C ++ के साथ 1: 1.5 से 1: 3 के प्रदर्शन का अनुपात और 2: 1 से 10: 1 के अनुपात के साथ बहुत कुछ कर सकते हैं। स्रोत कोड का आकार (डिबेटेबल)। लेकिन आपकी परियोजना की सफलता के आधार पर एक बिंदु होगा जहां प्रदर्शन एक मुद्दा होगा और जब C ++ में पुनर्लेखन एक विकल्प नहीं होगा।


4
साथ ही, पाइथन के विपरीत, दस्तावेज में मैटलैब बहुत मजबूत है।
एंड्रे रुबेश्टिन

1
C के बारे में क्या? जब संदेह में मेरी जाने वाली भाषा है।
ज़ेटा सुरो

10

खासकर जब से आपकी परियोजना अकादमिक है, गणितज्ञ एक बहुत अच्छी और उपयुक्त सॉफ्टवेयर प्रणाली है। Mathematica 8 इमेज प्रोसेसिंग, लीनियर एलजेब्रा, न्यूमेरिक्स, जीपीयू, आदि के लिए एक व्यापक सेट के साथ आता है। यह एक प्रतीकात्मक प्रणाली भी है, इसलिए कई बार मैं समीकरणों के लिए बंद फॉर्म समाधान प्राप्त कर सकता हूं --- कंप्यूटर विज़न कार्यों के लिए काफी आसान। गणितज्ञ पायथन, सी, सी ++, जावा, .NET, ..., कोड के साथ भी संवाद कर सकता है।


5

यदि यह एक शैक्षणिक परियोजना है, तो आपको निश्चित रूप से मैटलैब, और अधिक विशेष रूप से इमेज प्रोसेसिंग टूलबॉक्स और कंप्यूटर विज़न सिस्टम टूलबॉक्स का उपयोग करना चाहिए। यह आपको C ++ की तुलना में मतलाब में एल्गोरिदम का प्रोटोटाइप और मूल्यांकन करने के लिए कम समय का परिमाण लेगा।

यहां तक ​​कि पायथन इंटरफेस के साथ ओपनसीवी भी मैटलैब की तुलना में उपयोग करने के लिए बहुत कठिन है, और अगर आपको वास्तव में आपके पास मेक्सिको के माध्यम से मैटलैब से सी या सी ++ कोड कॉल कर सकते हैं।


4

एक छवि पुनर्प्राप्ति प्रणाली के लिए। आपके पास क्लाइंट साइड और सर्वर साइड कोड होगा। सर्वर साइड पायथन या C / C ++ में हो सकता है। OpenCV यहां आपकी सबसे अच्छी पसंद है। इसमें अजगर और C ++ इंटरफेस दोनों हैं। ग्राहक पक्ष के लिए, मुझे लगता है कि आप जावा का उपयोग कर रहे हैं।


3

कंप्यूटर दृष्टि के लिए सबसे अच्छी भाषा C ++ है। हालांकि इसकी बड़ी कमी यह है कि आप जो चाहते हैं उसे हासिल करना ज्यादा मुश्किल है। OpenCV वहाँ से बाहर कंप्यूटर दृष्टि के लिए सबसे अच्छा पुस्तकालय है, लेकिन आप matlab या अजगर का उपयोग कर एक ही काम कर सकते हैं।

यहाँ एक नज़र रखना ।

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