विषयसूची:

रास्पबेरी पाई 4 ट्रैफिक साइन रिकग्निशन रोबोट: 6 कदम
रास्पबेरी पाई 4 ट्रैफिक साइन रिकग्निशन रोबोट: 6 कदम

वीडियो: रास्पबेरी पाई 4 ट्रैफिक साइन रिकग्निशन रोबोट: 6 कदम

वीडियो: रास्पबेरी पाई 4 ट्रैफिक साइन रिकग्निशन रोबोट: 6 कदम
वीडियो: Self-driving car using Raspberry Pi | Python | OpenCV 2024, नवंबर
Anonim
रास्पबेरी पाई 4 ट्रैफिक साइन रिकग्निशन रोबोट
रास्पबेरी पाई 4 ट्रैफिक साइन रिकग्निशन रोबोट

यह शिक्षाप्रद मेरी विश्वविद्यालय परियोजना पर आधारित है। उद्देश्य एक ऐसी प्रणाली बनाना था जहां एक तंत्रिका नेटवर्क एक छवि का विश्लेषण करता है और फिर मान्यता के आधार पर एक आर्डिनो रोबोट को रोस के माध्यम से स्थानांतरित करने के लिए कहेगा।

उदाहरण के लिए यदि एक टर्न राइट साइन को पहचाना जाता है तो रोबोट राइट मुड़ जाएगा, अगर एक टर्न लेफ्ट साइन को पहचाना जाता है तो रोबोट लेफ्ट हो जाएगा, अगर दोनों में से कोई भी पहचाना नहीं जाता है तो रोबोट आगे बढ़ता रहेगा। जिस डेटासेट का उपयोग किया जाएगा, वह INI (2019) (इंस्टीट्यूट फर न्यूरोइनफॉरमैटिक) से आधिकारिक ट्रैफ़िक साइन मान्यता है, इस डेटासेट में 43 वर्ग हैं, लेकिन केवल दो की आवश्यकता है; डेटासेट में 00033 और 00034 फ़ोल्डर बाएँ और दाएँ मुड़ने के संकेत हैं।

चरण 1: आवश्यकताएँ

आवश्यकताएं
आवश्यकताएं
आवश्यकताएं
आवश्यकताएं
आवश्यकताएं
आवश्यकताएं

इस परियोजना के लिए निम्नलिखित आवश्यकताएं हैं:

एक आर्डिनो रोबोट। (मूल रूप से एक arduino uno, एक मोटर चालक और मोटर) (यदि आप रोबोट का उपयोग नहीं कर रहे हैं तो इसकी आवश्यकता नहीं है)

एक रास्पबेरी पाई 4.

एक पीआई कैमरा।

सॉफ्टवेयर की आवश्यकता:

पायथन 3.

ओपनसीवी 4.

टेंसरफ़्लो।

arduino IDE (यदि आप रोबोट का उपयोग नहीं कर रहे हैं तो इसकी आवश्यकता नहीं है)

रोस (यदि आप रोबोट का उपयोग नहीं कर रहे हैं तो इसकी आवश्यकता नहीं है)

जो भी आपका पसंदीदा अजगर विचार है (रास्पबेरी पाई पर, मैं थोंनी का उपयोग करता हूं)।

OpenCV और Tensorflow सेट करने के लिए, एड्रियन के निर्देशों का पालन करें। लिंक:

मैं अनुशंसा करता हूं कि उनके जितने संभव हो उतने ट्यूटोरियल देखें, वे वास्तव में दिलचस्प हैं और शुरुआती और साथ ही मध्यवर्ती दोनों के लिए उपयोगी हैं।

चरण 2: डेटा का प्रशिक्षण

ट्रेन स्क्रिप्ट को डेटासेट तक पहुंचने के लिए डिज़ाइन किया गया है जो 43 वर्गों से लगभग 50,000 छवियों का संकलन करता है। स्क्रिप्ट विभिन्न पुस्तकालयों का उपयोग करते हुए पायथन में लिखी गई है: ओएस - यह पायथन लिपि को सही निर्देशिका से जोड़ने के लिए है जहां डेटासेट स्थित है। Matplotlib - यह प्रशिक्षण मॉडल से डेटा प्रदर्शित करने के लिए है। Tensorflow और keras - ये कृत्रिम तंत्रिका नेटवर्क मॉडल बनाने के लिए उपयोग की जाने वाली लाइब्रेरी हैं, इनका उपयोग मॉडल को डिजाइन करने के लिए किया जाता है। Numpy - यह पुस्तकालय छवियों को एक सरणी में बदलने के लिए है जिसे बाद में एक भविष्यवाणी को पुनः प्राप्त करने के लिए मॉडल के माध्यम से रखा जा सकता है।

संलग्न स्क्रिप्ट डेटासेट से एक मॉडल बनाने के लिए पायथन कोड है। इसमें एक (5, 5) इनपुट के साथ कनवल्शनल 2 डी और फिर पूलिंग के बाद रिले का एक सक्रियण होता है, एक बार ऐसा करने के बाद इनपुट एक ही सक्रियण और पूलिंग के साथ एक (3, 3) इनपुट के साथ एक और कनवल्शन के माध्यम से जाता है। यह चपटा होने से पहले एक आखिरी बार होता है और फिर घनत्व को कक्षाओं की मात्रा पर लागू किया जाता है, इस मामले में 43।

अगला कदम मॉडल को संकलित करना था। यह वह हिस्सा है जो ऑप्टिमाइज़र सेट करता है, एक sgd सबसे उपयुक्त था क्योंकि यह असाइनमेंट 1 में उपयोग किए गए ऑप्टिमाइज़र के समान था। Sgd का अर्थ स्टोकेस्टिक ग्रेडिएंट डिसेंट है। इसके अलावा संकलक के भीतर नुकसान को सेट करने की आवश्यकता है, एक sparse_categorical_crossentropy नुकसान चुनना सबसे अच्छा फिटिंग है क्योंकि श्रेणियां पूर्णांक के रूप में हैं और मॉडल प्रत्येक वर्ग के लिए 0 और 1 के बीच एक फ्लोट के रूप में एक भविष्यवाणी का उत्पादन करेगा। 1 100% सटीकता है।

एक बार कंपाइलर पूरा हो जाने के बाद, मॉडल के लिए छवि इनपुट को संसाधित करना शुरू करने के लिए जनरेटर को लागू करने की आवश्यकता होती है। जनरेटर में कई भाग होते हैं: ट्रेनिंग_सेट - यह प्रशिक्षण के लिए उपयोग किए जाने वाले डेटासेट का लिंक है, steps_per_epoch - यह आवश्यक प्रति युग की संख्या है, युग - ये डेटा के एक पूर्ण सेट के माध्यम से प्रोग्राम कितनी बार पुनरावृति करेगा, सत्यापन_डेटा - यह सत्यापन के लिए उपयोग किए गए डेटासेट का लिंक है, सत्यापन_चरण - सत्यापन के लिए उपयोग किए जाने वाले चरणों की संख्या, सत्यापन प्रत्येक युग के अंत में होता है।

आम तौर पर, पूरे डेटासेट का पूरा वाइप हर युग में पूरा होना चाहिए। इसलिए उदाहरण के लिए १०२४ छवियों के एक डेटासेट की आवश्यकता होगी: बैच आकार = ३२, चरण प्रति युग = ३२, युग = १। प्रत्येक चरण में पूरे बैच का आकार शामिल होता है, इसलिए ३२ के बैच आकार के साथ चरण ३२ होंगे। दूसरे पर हाथ, कक्षाओं की संख्या की तुलना में बड़ा बैच आकार होना सबसे अच्छा है, ऐसा इसलिए है क्योंकि यदि बैच का आकार छोटा है तो प्रत्येक चरण में प्रत्येक वर्ग से एक छवि शामिल नहीं हो सकती है।

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

प्रशिक्षण स्क्रिप्ट संलग्न है:

चरण 3: पाई कैमरा भविष्यवाणियों को लागू करना

अगला कार्यक्रम भविष्यवाणी और प्रकाशक स्क्रिप्ट है।

पहला चरण मॉडल लोड () का उपयोग करके मॉडल को लोड करना है। दूसरा चरण ओपनसीवी का उपयोग करके पीआई कैमरे से फ्रेम के माध्यम से पुनरावृति करना है और फिर फ्रेम को उसी आकार में आकार देना है जैसे प्रशिक्षण चरण में उपयोग किए गए इनपुट आकार, 32 x 32 पिक्सेल। एक बार यह हो जाने के बाद मॉडल के माध्यम से नया आकार दिया गया फ्रेम मॉडल के माध्यम से रखा जाता है। भविष्यवाणी () जो मैट्रिक्स को आउटपुट करता है, मैट्रिक्स का प्रत्येक तत्व 0 से 1 तक एक फ्लोट होता है, तत्व इंडेक्स उसी वर्ग के समान होता है, इसलिए यह प्रतिनिधित्व कर रहा है, इसलिए पहला तत्व कक्षा एक है और संख्या उस वर्ग से होने वाली छवि की निश्चितता की भविष्यवाणी है। उदा.

नोट: यदि आप रोबोट पक्ष का उपयोग नहीं कर रहे हैं। बस लाइनों को हटा दें:

"आयात रोस्पी"

डीईएफ़ टॉकर (दिशा):

संदेश = स्ट्रिंग ()

पब = rospy. Publisher ('रोबोट', स्ट्रिंग, क्यू_साइज़ = 10)

rospy.init_node ('बात करने वाला', अनाम = सच)

संदेश = दिशा

rospy.loginfo (संदेश)

pub.publish (संदेश)"

"बात करने वाला (दिशा)"

संलग्न पाई कैमरा स्क्रिप्ट है।

चरण 4: Arduino रोबोट

अंतिम चरण रोबोट प्रोग्राम स्क्रिप्ट है।

यह C++ में लिखा गया है और arduino uno के लिए एक.ino फ़ाइल है। कार्यक्रम के लिए रोस पुस्तकालय की आवश्यकता होती है जो पुस्तकालय प्रबंधक में विचार के भीतर पाया जा सकता है। एक बार जब यह आयात हो जाता है तो उदाहरण फाइलें होती हैं, मैंने एलईडी ब्लिंक फ़ाइल पर विस्तार करना चुना क्योंकि यह वही उद्देश्य होगा जो मुझे चाहिए। प्रोग्राम तब तक लूप करना जारी रखता है जब तक कि बिजली काट दी जाती है, सबसे पहले यह विषय रोबोट को सुनता है, जब वह उस विषय से एक कमांड पकड़ता है तो उसके पास यह देखने के लिए एक कथन होगा कि कमांड क्या कहता है। यदि कमांड लेफ्ट है तो स्क्रिप्ट टर्न लेफ्ट मेथड को चलाती है, अगर कमांड राइट है तो यह टर्न राइट मेथड को चलाएगी और नहीं तो यह फॉरवर्ड मेथड को चलाएगी। ये तीन विधियां एक-दूसरे से बहुत मिलती-जुलती हैं, वे डिजिटल पिन को या तो LOW (ग्राउंड) या 100 (PWM) बताते हैं, इसके लिए रोबोट बहुत तेज़ नहीं है, मोटर ड्राइवर को केवल थोड़ा सा जाने दें वोल्टेज बाहर। इन आउटपुट का क्रम वह है जो रोबोट को बाएँ और दाएँ घुमाता है या आगे की ओर जाता है, यह मोटर्स में जाने वाले वोल्टेज के उन्मुखीकरण के कारण होता है।

Arduino के लिए.ino स्क्रिप्ट संलग्न है।

चरण 5: परीक्षण

परिक्षण
परिक्षण
परिक्षण
परिक्षण
परिक्षण
परिक्षण

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

पीआई कैमरा स्क्रिप्ट चलाते समय अंतिम छवि, पीआई कैमरे से लाइव स्ट्रीम है। प्रत्येक फ्रेम पर एक भविष्यवाणी की जाती है और भविष्यवाणी को टर्मिनल में मुद्रित किया जाता है। फ्रेम दिखाता है कि कैमरा क्या देख रहा है।

इस परियोजना के लिए मेरी विश्वविद्यालय की रिपोर्ट संलग्न है। कृपया परियोजना के अधिक विवरण के लिए पढ़ें।

चरण 6: सभी अतिरिक्त फ़ाइलें

सभी अतिरिक्त फ़ाइलें
सभी अतिरिक्त फ़ाइलें

इनमें से कुछ फाइलों का परीक्षण कर रहे थे जिन्हें मैंने रास्ते में बनाया था।

सिफारिश की: