विषयसूची:

रॉक पेपर कैंची एआई: 11 कदम
रॉक पेपर कैंची एआई: 11 कदम

वीडियो: रॉक पेपर कैंची एआई: 11 कदम

वीडियो: रॉक पेपर कैंची एआई: 11 कदम
वीडियो: Coding Rock, Paper, Scissors In C Exercise 9: C Tutorial In Hindi #51 2024, नवंबर
Anonim
रॉक पेपर कैंची एआई
रॉक पेपर कैंची एआई

क्या आपने कभी अकेले बोरियत महसूस की है? आइए बुद्धि से संचालित एक इंटरैक्टिव सिस्टम के विरुद्ध रॉक, पेपर और कैंची खेलें।

चरण 1: इस परियोजना में प्रयुक्त चीजें

हार्डवेयर घटक

  • रास्पबेरी पाई 3 मॉडल बी+ × 1
  • रास्पबेरी पाई कैमरा मॉड्यूल V2 × 1
  • SG90 माइक्रो-सर्वो मोटर × 1

सॉफ्टवेयर ऐप्स

  • रास्पबेरी पाई रास्पियन
  • ओपनसीवी
  • टेंसरफ्लो

चरण 2: विचार?

Image
Image

विभिन्न डोमेन पर विभिन्न परियोजनाओं पर काम करने के बाद, मैंने एक मजेदार परियोजना बनाने की योजना बनाई, और मैंने एक रॉक-पेपर-कैंची गेम बनाने का फैसला किया:)

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

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

  • रॉक कैंची को कुंद करता है
  • कागज चट्टान को कवर करता है
  • कैंची कट कागज

विजेता का फैसला उपरोक्त तीन शर्तों के आधार पर किया जाएगा। आइए यहां परियोजना का एक त्वरित डेमो देखें।

चरण 3: आरंभ करना?

शुरू करना ?
शुरू करना ?
शुरू करना ?
शुरू करना ?

रास्पबेरी पाई

मैंने एक रास्पबेरी पाई 3 मॉडल बी + का उपयोग किया है जिसमें बहुत अधिक वृद्धि हुई है और यह पहले के रास्पबेरी पाई 3 मॉडल बी की तुलना में अधिक शक्तिशाली है।

रास्पबेरी पाई 3 बी+ 1.4GHz 64-बिट क्वाड-कोर प्रोसेसर, डुअल-बैंड वायरलेस लैन, ब्लूटूथ 4.2/बीएलई, तेज ईथरनेट और पावर-ओवर-ईथरनेट समर्थन (अलग PoE HAT के साथ) के साथ एकीकृत है।

विनिर्देश: ब्रॉडकॉम BCM2837B0, Cortex-A53 (ARMv8) 64-बिट SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz और 5GHz IEEE 802.11.b/g/n/ac वायरलेस लैन, ब्लूटूथ 4.2, BLE, USB 2.0 पर गीगाबिट ईथरनेट (अधिकतम ३०० एमबीपीएस), विस्तारित ४०-पिन जीपीआईओ हेडर, फुल-साइज़ एचडीएमआई४ यूएसबी २.० पोर्ट, रास्पबेरी पाई कैमरा को जोड़ने के लिए सीएसआई कैमरा पोर्ट, रास्पबेरी पाई टचस्क्रीन डिस्प्ले ४-पोल स्टीरियो आउटपुट को जोड़ने के लिए डीएसआई डिस्प्ले पोर्ट और समग्र वीडियो पोर्ट, आपके ऑपरेटिंग सिस्टम को लोड करने और डेटा 5V / 2.5A डीसी पावर इनपुट, पावर-ओवर-ईथरनेट (पीओई) समर्थन (अलग पीओई एचएटी की आवश्यकता है) को संग्रहीत करने के लिए माइक्रो एसडी पोर्ट।

सर्वो मोटर

हम एक SG-90 सर्वो मोटर का उपयोग करते हैं, एक उच्च टोक़ मोटर जो 2.5kg (1cm) तक के भार को संभाल सकती है।

यूएसबी कैमरा

छवि प्रसंस्करण के साथ खेल को इंटरैक्टिव बनाने के लिए एक यूएसबी कैमरा

स्टेपर मोटर और रास्पबेरी पाई को तार करने के लिए कुछ जम्पर केबल का उपयोग किया जाता है।

चरण 4: रास्पियन को एसडी कार्ड में जलाएं?

रास्पियन को एसडी कार्ड में जलाएं?
रास्पियन को एसडी कार्ड में जलाएं?
रास्पियन को एसडी कार्ड में जलाएं?
रास्पियन को एसडी कार्ड में जलाएं?
रास्पियन को एसडी कार्ड में जलाएं?
रास्पियन को एसडी कार्ड में जलाएं?

रास्पियन रास्पबेरी पाई पर चलने वाला पसंद का लिनक्स वितरण है। इस गाइड में, हम लाइट संस्करण का उपयोग करेंगे, लेकिन डेस्कटॉप संस्करण (जो ग्राफिकल वातावरण के साथ आता है) का भी उपयोग किया जा सकता है।

  • एचर डाउनलोड करें और इसे इंस्टॉल करें।
  • एसडी कार्ड रीडर को अंदर के एसडी कार्ड से कनेक्ट करें।
  • एचर खोलें और अपनी हार्ड ड्राइव से रास्पबेरी पाई.img या.zip फ़ाइल चुनें जिसे आप एसडी कार्ड में लिखना चाहते हैं।
  • उस एसडी कार्ड का चयन करें जिसमें आप अपनी छवि लिखना चाहते हैं।
  • अपने चयनों की समीक्षा करें और 'फ़्लैश!' पर क्लिक करें। एसडी कार्ड में डेटा लिखना शुरू करने के लिए।

डिवाइस को अपने नेटवर्क से कनेक्ट करें

  • अपने एसडी कार्ड पर बूट वॉल्यूम के रूट पर फिर से रखी गई खाली फ़ाइल ssh जोड़कर SSH एक्सेस को सक्षम करें।
  • रास्पबेरी पाई में एसडी कार्ड डालें। यह लगभग 20 सेकंड में बूट हो जाएगा। अब आपके पास अपने रास्पबेरी पाई तक एसएसएच पहुंच होनी चाहिए। डिफ़ॉल्ट रूप से, इसका होस्टनाम raspberrypi.local होगा। अपने कंप्यूटर पर, एक टर्मिनल विंडो खोलें और निम्नलिखित टाइप करें:

ssh [email protected]

डिफ़ॉल्ट पासवर्ड रास्पबेरी है

यहां मैंने रास्पबेरी पाई के साथ इंटरफेस करने के लिए एक अलग मॉनिटर का उपयोग किया है।

चरण 5: डेटासेट एकत्र करना ?️

डेटासेट एकत्रित करना ?️
डेटासेट एकत्रित करना ?️
डेटासेट एकत्रित करना ?️
डेटासेट एकत्रित करना ?️

इस परियोजना में पहला कदम डेटा संग्रह है। सिस्टम को हाथ के हावभाव की पहचान करनी होती है और कार्रवाई को पहचानना होता है और उसी के अनुसार इसे आगे बढ़ाना होता है।

हम रास्पबेरी पाई के लिए पाइप इंस्टाल का उपयोग करके कई पुस्तकालय स्थापित करते हैं

आदेश।

sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip टेंसरफ़्लो पाइप स्थापित करें वर्कज़ेग पाइप स्थापित करें केरस-एप्लिकेशन पाइप स्थापित करें केरस-प्रीप्रोसेसिंग पाइप स्थापित करें केरस-स्क्वीज़नेट पाइप स्थापित करें एस्टर पाइप स्थापित करें टेंसरबोर्ड पाइप स्थापित करें टेंसरफ़्लो-अनुमानक पाइप स्थापित करें नकली पाइप स्थापित करें जीआरपीसीओ पाइप स्थापित करें एबीएसएल-पीआईपी स्थापित करें गैस्ट पाइप स्थापित करें जॉबलिब पाइप स्थापित करें मार्कडाउन स्थापित करें पाइप स्थापित प्रोटोबफ पाइप स्थापित करें PyYAML पाइप छह स्थापित करें

यदि आप OpenCVpackage के साथ किसी भी समस्या का सामना करते हैं, तो मैं इन पैकेजों को स्थापित करने की दृढ़ता से अनुशंसा करता हूं।

sudo apt-libhdf5-dev स्थापित करें

sudo apt-libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test प्राप्त करें

हमने इस परियोजना के लिए सभी आवश्यक निर्भरताएँ स्थापित की हैं। डेटा-सेट उपयुक्त लेबल के तहत छवियों के संग्रह और व्यवस्था द्वारा बनाया गया है।

यहां हम निम्नलिखित स्निपेट का उपयोग करके लेबल रॉक, पेपर और कैंची के लिए डेटा सेट छवियां बनाते हैं।

रॉय = फ्रेम [१००:५००, १००:५००]

save_path = os.path.join(img_class_path, '{}.jpg'.format(गिनती + 1)) cv2.imwrite(save_path, roi)

छवि प्रत्येक लेबल (रॉक, पेपर, कैंची और कोई नहीं) के लिए कैप्चर की गई है।

चरण 6: एनएन डिजाइन करना और मॉडल को प्रशिक्षण देना ️⚙️

एनएन डिजाइन करना और मॉडल को प्रशिक्षण देना ️⚙️
एनएन डिजाइन करना और मॉडल को प्रशिक्षण देना ️⚙️

इस परियोजना का मूल एक छवि वर्गीकरण है जो तीन श्रेणियों में से एक को वर्गीकृत करता है। इस क्लासिफायरियर को बनाने के लिए, हम स्क्वीज़नेट नामक पूर्व-प्रशिक्षित सीएनएन (कन्वेंशनल नेटवर्क) का उपयोग करते हैं।

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

मॉडल को हाइपरपैरामीटर के साथ कॉन्फ़िगर किया गया है जैसा कि नीचे दिखाया गया है।

मॉडल = अनुक्रमिक ([स्क्वीज़नेट (इनपुट_शेप = (227, 227, 3), शामिल_टॉप = गलत), ड्रॉपआउट (0.5), Convolution2D(NUM_CLASSES, (1, 1), पैडिंग='वैध'), सक्रियण ('रेलू'), GlobalAveragePooling2D (), सक्रियण ('सॉफ्टमैक्स')])

जबकि मॉडल प्रशिक्षण दे रहा है, आप प्रत्येक युग के लिए मॉडल की हानि और सटीकता का पता लगा सकते हैं और कुछ युगों के बाद किसी बिंदु पर सटीकता बढ़ जाती है।

10 युगों के बाद उच्चतम सटीकता के साथ मॉडल तैयार करने में मोटे तौर पर 2 घंटे का समय लगा। यदि आपको स्मृति आवंटन त्रुटियों का सामना करना पड़ता है, तो निम्न चरणों का पालन करें (एड्रियन के लिए धन्यवाद)

अपना स्वैप स्थान बढ़ाने के लिए, /etc/dphys-swapfile खोलें और फिर CONF_SWAPSIZE चर संपादित करें:

# CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024

ध्यान दें कि मैं स्वैप को 100MB से बढ़ाकर 1024MB कर रहा हूँ। वहाँ से, स्वैप सेवा पुनः आरंभ करें:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile start

ध्यान दें:

स्वैप आकार बढ़ाना आपके मेमोरी कार्ड को बर्न करने का एक शानदार तरीका है, इसलिए इस परिवर्तन को वापस करना सुनिश्चित करें और जब आप काम पूरा कर लें तो स्वैप सेवा को पुनरारंभ करें। आप मेमोरी कार्ड के बड़े आकार के भ्रष्ट होने के बारे में यहाँ अधिक पढ़ सकते हैं।

चरण 7: मॉडल का परीक्षण

मॉडल का परीक्षण
मॉडल का परीक्षण
मॉडल का परीक्षण
मॉडल का परीक्षण
मॉडल का परीक्षण
मॉडल का परीक्षण

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

मॉडल को निम्नानुसार पायथन लिपि में लोड किया गया है

मॉडल = लोड_मॉडल ("रॉक-पेपर-कैंची-मॉडल। h5")

कैमरा परीक्षण छवि को पढ़ता है और आवश्यक रंग मॉडल को रूपांतरित करता है, और फिर छवि को 227 x 227 पिक्सेल (मॉडल निर्माण के लिए उपयोग किए गए समान आकार) में आकार देता है। मॉडल के प्रशिक्षण के लिए उपयोग की जाने वाली छवियों का उपयोग उत्पन्न मॉडल का परीक्षण करने के लिए किया जा सकता है।

img = cv2.imread (फ़ाइलपथ)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

एक बार जब मॉडल लोड हो जाता है और कैमरे द्वारा छवि प्राप्त कर ली जाती है, तो मॉडल लोड किए गए स्क्वीज़नेट मॉडल का उपयोग करके कैप्चर की गई छवि की भविष्यवाणी करता है, और उपयोगकर्ता की गतिविधियों के लिए भविष्यवाणी करता है।

पूर्व = मॉडल। भविष्यवाणी (np.array())

move_code = np.argmax (पूर्व [0]) move_name = मैपर (move_code) प्रिंट ("अनुमानित: {}"। प्रारूप (move_name))

विभिन्न परीक्षण छवियों के साथ मॉडल का परीक्षण करने के लिए test.py स्क्रिप्ट चलाएँ।

python3 test.py

अब मॉडल हाथ के इशारों को पहचानने और समझने के लिए तैयार है।

चरण 8: रॉक-पेपर-कैंची गेम

रॉक-पेपर-कैंची गेम
रॉक-पेपर-कैंची गेम

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

cap = cv2. VideoCapture(0) # कैमरे से इमेज कैप्चर करने के लिए

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

python3 play.py

चरण 9: सर्वो मोटर एकीकरण?

अंत में, इस प्रोजेक्ट में सर्वो मोटर जोड़ें। सर्वो मोटर रास्पबेरी पाई का GPIO पिन 17 है, जिसमें रोटेशन के कोण को नियंत्रित करने के लिए PWM फ़ंक्शन है।

इस परियोजना में प्रयुक्त सर्वो मोटर SG-90 है। यह 180 °. तक दक्षिणावर्त और वामावर्त घुमा सकता है

कनेक्शन निम्नानुसार दिए गए हैं।

सर्वो मोटर - रास्पबेरी पाई

वीसीसी - +5वी

जीएनडी - जीएनडी

सिग्नल - GPIO17

इस परियोजना में RPi. GPIO और समय जैसे पुस्तकालयों का उपयोग किया जाता है।

RPI. GPIO को GPIO के रूप में आयात करें

आयात समय

GPIO पिन को निम्न पंक्तियों का उपयोग करके PWM में कॉन्फ़िगर किया गया है:

सर्वोपिन = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (सर्वोपिन, GPIO. OUT)

GPIO पिन 17 को 50Hz की आवृत्ति पर PWM के रूप में उपयोग करने के लिए कॉन्फ़िगर किया गया है। सर्वो मोटर का कोण PWM के कर्तव्य चक्र (टन और टॉफ) को सेट करके प्राप्त किया जाता है

कर्तव्य = कोण/18 + 2

GPIO.output(servoPIN, True) p. ChangeDutyCycle(ड्यूटी) समय। नींद (1) GPIO.output(servoPIN, False) p. ChangeDutyCycle(0)

यह प्रत्येक पल्स के लिए वांछित चरण कोण उत्पन्न करेगा, जो वांछित घूर्णन कोण देगा।

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

चरण 10: परियोजना का कार्य करना?

Image
Image

और अब, यह खेलने का समय है। आइए देखें परियोजना की कार्यप्रणाली।

अगर आपको इस परियोजना के निर्माण में किसी भी समस्या का सामना करना पड़ा है, तो बेझिझक मुझसे पूछें। कृपया नई परियोजनाओं का सुझाव दें जो आप चाहते हैं कि मैं आगे करूं।

अगर यह वास्तव में आपकी मदद करता है तो एक अंगूठा दें और दिलचस्प परियोजनाओं के लिए मेरे चैनल का अनुसरण करें।:)

अच्छा लगे तो इस वीडियो को शेयर करें।

आपने सदस्यता ली है खुशी हुई:

पढ़ने के लिए धन्यवाद!

चरण 11: कोड - प्रोजेक्ट रेपो

कोड को GitHub रिपॉजिटरी में जोड़ा जाता है जो कोड सेक्शन में पाया जा सकता है।

राहुल 24-06 / रॉक-पेपर-कैंची -

सिफारिश की: