2010-09-06 6 views
8

मुझे विंडोज़ के लिए एक एप्लीकेशन विकसित करना है जो हाथों के संकेतों को पहचानकर माउस कैमरे के माध्यम से माउस को नियंत्रित करने में सक्षम होगा। मैं विकास के लिए वीसी ++ 2008 का उपयोग करूँगा। लेकिन मैं उलझन में हूं कि .NET फ्रेमवर्क या कोर Win32 एपीआई के साथ जाना है या नहीं। मेरे आवेदन के लिए प्रदर्शन बहुत महत्वपूर्ण है। Ivor Horton द्वारा "शुरुआती दृश्य सी ++ 2008" पुस्तक के अनुसार, .NET ढांचे का उपयोग करने में एक छोटा सा प्रदर्शन जुर्माना है। मैं जानना चाहता था कि दंड के सभी कारक किस पर निर्भर करते हैं और मेरे आवेदन के लिए .NET ढांचे का उपयोग करना संभव होगा।Win32 एपीआई और .NET ढांचे के बीच विकल्प

+1

क्या आप कुछ "प्रदर्शन" को माप सकते हैं? यानी आपको किस फ्रेम दर की आवश्यकता है? .. आदि। केवल इस जानकारी के साथ आप एक सूचित निर्णय ले सकते हैं * ("वास्तविक समय" एक अच्छा जवाब नहीं है।) *। – Rusty

उत्तर

15

यदि आप Win32 API से परिचित हैं, तो Win32 API पर जाएं। यह आपके मामले में प्राकृतिक विकल्प है क्योंकि आपका अधिकांश स्रोत कोड वीडियो कैप्चरिंग, इमेज प्रोसेसिंग, एल्गोरिदम और विंडोज़ में माउस पर इंटरफेस होगा। जब आप प्रदर्शन में रूचि रखते हैं, तो .NET जैसी मोटी परतों से बचने वाले हार्डवेयर के करीब रहें।

मेरा मानना ​​है कि .NET जटिल व्यावसायिक अनुप्रयोगों रीयल-टाइम अनुप्रयोगों या डिवाइस ड्राइवरों के लिए नहीं है।

1

इसे रखने का एक त्वरित तरीका: देशी एपीआई और नेट के बीच प्रदर्शन अंतर को और अधिक महंगा प्रोसेसर खरीदकर मुआवजा दिया जा सकता है। आप $ 10 और $ 100 के बीच कहीं भी भुगतान करेंगे, $ 10 एक उचित अनुमान है - पाठ्यक्रम के प्रति सीपीयू। इसलिए, यदि आप दस लाख से अधिक उपयोगकर्ताओं की अपेक्षा करते हैं, तो मूल एपीआई चुनें। यदि आप इसे 2-3 डेमो पीसी पर उपयोग करने की उम्मीद करते हैं, तो इससे कोई फर्क नहीं पड़ता।

+5

मैं इस से सहमत नहीं हूं। एक अधिक महंगा प्रोसेसर खरीदकर आप प्रदर्शन प्राप्त करते हैं, लेकिन आप देशी एपीआई और नेट के बीच के अंतर को क्षतिपूर्ति नहीं करते हैं। तेज़ प्रोसेसर पर देशी एपीआई और नेट के बीच प्रदर्शन अंतर समान होगा। अपनी प्रदर्शन समस्या को हल करने के लिए आज एक तेज़ प्रोसेसर ख़रीदना इस बात की गारंटी नहीं देता है कि आप कल अपनी प्रदर्शन समस्या को हल करने में सक्षम होंगे। – Patrick

+0

सवाल यह है कि, आपको अपने आवेदन के लिए किस प्रदर्शन की आवश्यकता है। इस मामले में, अधिकतम प्रदर्शन प्राप्त करने का मुद्दा नहीं है। वेब कैम, यूएसबी और उपयोगकर्ता को पहचानने के लिए एक सीमा है। – dyp

+0

मुझे लगता है कि इसे विकास पर और अधिक खर्च करने के लिए भी कहा जा सकता है। Win32 में एक खराब डेवलपर एक धीमी, थकाऊ एप्लिकेशन लिख देगा जो .NET का उपयोग कर शीर्ष पायदान डेवलपर की तुलना में कई बार धीमा हो सकता है। – Brain2000

2

.NET GUI के लिए अच्छा है और गैर-प्रदर्शन-केंद्रित क्षेत्रों में सामान्य प्रोग्रामिंग के लिए अच्छा है। यदि आपको एक छोटी सी जीयूआई से कुछ और करने की ज़रूरत है, तो मैं कम से कम उस हिस्से को .NET भाषा में लिखने का सुझाव दूंगा।

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

पहला कदम, आपको यह पता होना चाहिए कि पुस्तकालय क्या हैं जो इशारा करते हैं या इसी तरह की छवि प्रसंस्करण। (मुझे उम्मीद है कि आप उस हिस्से को किसी भी तरह से स्क्रैच से लिखने का इरादा नहीं कर रहे हैं।) यदि आपको कोई भी .NET आधारित लाइब्रेरी मिलती है जो आपके ज़रूरतों के लिए पर्याप्त प्रदर्शन करने का दावा करती है, तो आप उन्हें आज़मा सकते हैं। अन्यथा, आप शायद सी या सी ++ या इसी तरह के आधार पर लाइब्रेरी के साथ समाप्त हो जाएंगे। हालांकि, किसी भी तरह से .NET- आधारित प्रोग्राम के साथ ऐसी चीज को एकीकृत करना संभव है।

2

मुझे लगता है कि आपको GUI भवन के लिए .NET उपयोग को सीमित करना चाहिए। कार्यों का सबसे अच्छा Win32 में करने का प्रयास करें। ऑब्जेक्ट मान्यता के बारे में शेष प्रश्न, OPENCV (ओपन सोर्स कंप्यूटर विजन लाइब्रेरी) नामक अच्छी लाइब्रेरी है। इस lib में परियोजना में आवश्यक सभी संभावित विधियां हैं। इसके अलावा इंटेल की हार्डवेयर विशिष्ट लाइब्रेरी, आईपीपी भी है, जो ओपनसीवी के प्रदर्शन को बढ़ावा देती है।

7

जब तक आप कर रहे हैं एक बहुत अनुभवी सी ++, प्रोग्रामर, सी # एक और अधिक उत्पादक भाषा (15 से अधिक वर्षों सी ++ अनुभव और 2 साल सी # के साथ किसी के रूप में बोल रहा है)।

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

तो, मैं नेट का उपयोग करने के साथ जाऊंगा।

मैं पी/Invoke के बजाय, उन्हें एकीकृत करने के लिए जटिल देशी पुस्तकालयों को सीधे कॉल करने के लिए सी ++/सीएलआई का उपयोग करने की भी सलाह देता हूं। यह अजीब कॉल के लिए अच्छा है लेकिन आपको आसानी से डेटा संरचनाओं तक पहुंचने या देशी और प्रबंधित कोड को जोड़ने की अनुमति नहीं देता है।

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