2010-09-21 11 views
22

क्या सी # का उपयोग वास्तविक समय के अनुप्रयोग के विकास के लिए किया जा सकता है जिसमें लगातार वेब कैम से इनपुट लेना और इनपुट को प्रोसेस करना शामिल है?वास्तविक समय अनुप्रयोगों के लिए सी # का उपयोग कर

+0

मुझे यकीन नहीं है कि वर्तमान में वर्णित अनुसार, आपका ऐप "रीयल-टाइम" श्रेणी में आता है, क्योंकि यह ऐप स्टाल होने पर वीडियो को बफर किया गया था, तो यह महत्वहीन होगा। एकमात्र महत्वपूर्ण मुद्दा बफर को भरने से तेज़ी से संसाधित करना होगा। – spender

+12

विंडोज का उद्देश्य "रीयलटाइम" ऑपरेटिंग सिस्टम नहीं है। वास्तविक समय में प्रक्रिया में विफलता के परिणामों पर विचार करें: आपके मामले में, विफलता मोड आपको वीडियो का एक फ्रेम याद आती है, शायद एक बड़ा सौदा नहीं। एक वास्तविक समय प्रणाली, जो कहती है, फैक्ट्री में रोबोट बाहों की स्थिति को नियंत्रित करती है, या हाई स्पीड रेल लाइनों पर ट्रैक स्विच ले जाती है, अगर वास्तविक समय के समय में बजट या नियंत्रण दूसरे थ्रेड पर स्विच हो जाता है तो बहुत ही वास्तविक मानव-जीवन-सुरक्षा प्रभाव पड़ता है। कुछ समय के लिए। मुझे नहीं लगता कि आपको वास्तव में * रीयलटाइम * की आवश्यकता है; मुझे लगता है कि आपको बस * तेज * की आवश्यकता है। –

+3

@Eric: मुलायम वास्तविक समय और हार्ड रीयल-टाइम सिस्टम के बीच एक अंतर है। एक वेब कैम से इनपुट लेना मेरे लिए एक नरम वास्तविक समय परिदृश्य की तरह दिखता है, और विंडोज ठीक होना चाहिए। –

उत्तर

12

मैं सी # का उपयोग किया है कई वास्तविक समय, उच्च गति, कि 24/7 चलाने के लिए और मशीनरी आवेदन पर निर्भर चलती है मशीन दृष्टि अनुप्रयोगों बनाने के लिए। अगर सॉफ़्टवेयर में कुछ गलत हो जाता है, तो वास्तविक दुनिया में कुछ तुरंत और स्पष्ट रूप से गलत हो जाता है।

मुझे पता चला है कि सी #/नेट ऐसा करने के लिए बहुत अच्छी कार्यक्षमता प्रदान करता है। जैसा कि अन्य ने कहा है, निश्चित रूप से कचरा संग्रह के शीर्ष पर रहें। कई तार्किक चरणों में प्रसंस्करण के लिए तोड़ें, और अलग-अलग धागे प्रत्येक काम कर रहे हैं। मुझे निर्माता उपभोक्ता प्रोग्रामिंग मॉडल को इसके लिए अच्छी तरह से काम करने के लिए मिला है, शायद स्टार्टर्स के लिए ConcurrentQueue

आप की तरह कुछ के साथ शुरू कर सकता है:

  • थ्रेड 1 कैमरा छवि कैप्चर करता है, कुछ फ़ॉर्मेट में बदल देता है, और यह एक ImageQueue में डालता है
  • थ्रेड 2 ImageQueue से खपत, छवि प्रसंस्करण और एक डेटा ऑब्जेक्ट के साथ आता है जिसे प्रोसेस्ड्यूयू
  • थ्रेड 3 प्रोसेसड्यूयूयू से खपत करता है और परिणाम के साथ कुछ दिलचस्प करता है।

यदि थ्रेड 2 बहुत लंबा लगता है, तो थ्रेड 1 और 3 अभी भी चिपक रहे हैं। यदि आपके पास मल्टीकोर प्रोसेसर है तो आप गणित में अधिक हार्डवेयर फेंक देंगे। आप ऊपर लिखे गए किसी भी धागे के स्थान पर कई धागे का उपयोग भी कर सकते हैं, हालांकि आपको परिणामों को मैन्युअल रूप से ऑर्डर करने का ख्याल रखना होगा।

संपादित

अन्य लोगों के जवाब पढ़ने के बाद, आप शायद "वास्तविक समय" की मेरी परिभाषा बहस कर सकते। मेरे मामले में, कंप्यूटर लक्ष्य उत्पन्न करता है जो यह गति नियंत्रकों को भेजता है जो वास्तविक रीयलटाइम गति करते हैं। गति नियंत्रक समय, अधिकतम/न्यूनतम श्रेणियों, चिकनी एक्सेल/decelerations और सुरक्षा सेंसर जैसी चीजों के लिए अपनी सुरक्षा परत प्रदान करते हैं। ये नियंत्रक एक पूरे कारखाने में 1ms से कम चक्र चक्र के साथ सेंसर पढ़ते हैं।

+0

क्या होता है यदि आपका सॉफ़्टवेयर हर कुछ हफ्तों में एक बार छवि को संसाधित कर रहा है, तो शेष उपकरण केवल पकड़ने के बाद उत्पादन लाइन को रोकते हैं। –

5

बिल्कुल। जितना संभव हो कचरा संग्रह और स्मृति प्रबंधन से बचने के लिए कुंजी होगी। जब आप कर सकते हैं तो बफर या ऑब्जेक्ट पूल का उपयोग करके जितनी ज्यादा हो सके नई वस्तुओं को टालने का प्रयास करें।

+0

क्या आप कृपया कचरा संग्रहण और स्मृति प्रबंधन से बच सकते हैं? इन मदद से कैसे बचाता है? और उनसे कैसे बचें :)? – mrid

4
    बेशक
  • , किसी को भी ऐसा करने के लिए एक पुस्तकालय विकसित की है: AForge.NET
  • किसी भी वास्तविक समय आवेदन के साथ और न सिर्फ सी # रूप में, आप अच्छी तरह से बफ़र्स प्रबंधन करने के लिए के रूप में @ दाऊद सुझाव होगा ।
  • इतना ही नहीं, वहाँ भी कर रहे हैं XNA Framework (3 डी गेम्स जैसी चीजों के लिए) और आप सी # रूप में अच्छी तरह का उपयोग कर जो बहुत वास्तविक समय कर रहे हैं DirectX कार्यक्रम कर सकते हैं।
  • और क्या आप जानते हैं कि, यदि आप चाहते हैं, तो आप pointer manipulations in C# भी कर सकते हैं?
+0

आप जानते हैं, प्रबंधित डायरेक्टएक्स गिरा दिया गया था क्योंकि यह बहुत धीमी थी। – Puppy

+0

कि एक अच्छी जानकारी थी। AForge.NET मेरे लिए उपयोगी होगा। धन्यवाद – Jsinh

+0

[यहां] (http://www.mesta-automation.com/getting-started-with-computer-vision-in-c-sharp/) कुछ उपयोगी दस्तावेज़ AForge ढांचे के साथ काम करने के लिए मौजूद हैं। – GntS

30

आप, "हार्ड रियल-टाइम प्रणालियां" के लिए किसी भी मुख्य धारा कचरा एकत्र भाषा का प्रयोग नहीं कर सकते हैं के रूप में कचरा इकट्ठा कभी कभी प्रणाली एक निर्धारित समय में जवाब बंद हो जाएगा। आवंटन वस्तु मदद कर सकते हैं बचना है, तथापि आप को साबित आप किसी भी कचरा नहीं बना रहे हैं के लिए एक रास्ता की जरूरत है और है कि कचरा कलेक्टर में लात नहीं होंगे।

हालांकि अधिकांश "वास्तविक समय" प्रणाली वास्तव में हमेशा की जरूरत नहीं है कठिन समय सीमा के भीतर प्रतिक्रिया दें, इसलिए यह सब कुछ "वास्तविक समय" से आपका मतलब है।

तब भी जब सिस्टम के कुछ हिस्सों को "कठिन वास्तविक समय" होना चाहिए, तो अन्य यूआई जैसी प्रणाली के बड़े हिस्सों नहीं हैं।

(मैं अपने अनुप्रयोग तेजी से नहीं बल्कि "वास्तविक समय" की तुलना में अगर 1 फ्रेम हर 100 साल कितने लोगों को मारा जाएगा खो दिया है हो सकता है, की आवश्यकता है?)

+0

इसका उपयोग करने के बारे में क्या? Process.GetCurrentProcess()। PriorityClass = ProcessPriorityClass.RealTime; – Roger

+1

यह स्वीकार्य उत्तर होना चाहिए !! +1 कचरा संग्रह वस्तुओं को कुछ मिलीसेकंड के लिए रोक देता है ताकि समय की बाधाएं पूरी तरह से पूर्ण हो जाएंगी। – schoetbi

+0

जब तक आपकी टाइमिंग बाधा 1 सेकंड न हो और आपका शेष प्रोग्राम 500msec में चलता है? तो आपके पास कचरा संग्रह के लिए 500 अतिरिक्त मिलीसेकंड हैं? यदि आप समय की बाधा से नीचे हैं, तो क्या वास्तव में इससे कोई फर्क पड़ता है? – Paul

1

यह कैसे 'वास्तविक समय पर निर्भर करता है 'यह होना चाहिए; यानी, आपकी समय की बाधाएं क्या हैं, और आपको 'कुछ करने' की कितनी जल्दी आवश्यकता है।

आप शायद .NET में हर 300 मि.से या तो, एक टाइमर घटना पर कहते हैं कि 'कुछ कर रही' संभाल सकता है, मैं ठीक से काम करने के लिए Windows पाया है। ध्यान दें कि यह कुछ ऐसा है जो मैंने विभिन्न उम्र और विभिन्न गति के कई प्रणालियों पर सच पाया। हमेशा के रूप में, वाईएमएमवी।

लेकिन यह संख्या बहुत सारे अनुप्रयोगों के लिए बहुत लंबी है। शायद आपके लिए नहीं।

कुछ शोध करें, सुनिश्चित करें कि आपका ऐप आपके आवेदन के लिए पर्याप्त तेज़ी से प्रतिक्रिया दे।

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