جدول المحتويات:

Rock Paper Scissor AI: 11 خطوة
Rock Paper Scissor AI: 11 خطوة

فيديو: Rock Paper Scissor AI: 11 خطوة

فيديو: Rock Paper Scissor AI: 11 خطوة
فيديو: VFX Reveal Before & After - Anime Rock, Paper, Scissors 2024, شهر نوفمبر
Anonim
مقص ورق الصخور AI
مقص ورق الصخور AI

هل شعرت بالملل بالوحدة من قبل؟ لنلعب موسيقى الروك والورق والمقص ضد نظام تفاعلي مدعوم بالذكاء.

الخطوة 1: الأشياء المستخدمة في هذا المشروع

مكونات الأجهزة

  • Raspberry Pi 3 موديل B + × 1
  • وحدة كاميرا Raspberry Pi V2 × 1
  • محرك سيرفو صغير SG90 × 1

تطبيقات البرمجيات

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

الخطوة الثانية: فكرة؟

Image
Image

بعد العمل في مشاريع مختلفة في مجالات مختلفة ، خططت لعمل مشروع ممتع ، وقررت أن أصنع لعبة Rock-paper-scissors:)

في هذا المشروع ، سنصنع لعبة تفاعلية ونلعب ضد الكمبيوتر الذي يعمل بالذكاء الاصطناعي لاتخاذ القرارات. يستخدم الذكاء الاصطناعي الكاميرا المتصلة بـ Raspberry Pi للتعرف على ما يحرك المستخدم بيده ، ويصنفه في أفضل فئة (ملصق) صخرة أو ورق أو مقص. بمجرد أن يتحرك الكمبيوتر ، يشير محرك السائر المتصل بـ Raspberry Pi إلى الاتجاه بناءً على حركته.

القواعد التي يجب مراعاتها لهذه اللعبة:

  • صخرة تبتعد عن المقص
  • ورق يغطي الصخرة
  • مقص قص الورق

سيتم تحديد الفائز بناءً على الشروط الثلاثة المذكورة أعلاه. دعونا نرى عرضًا توضيحيًا سريعًا للمشروع هنا.

الخطوة الثالثة: البدء؟

ابدء ؟
ابدء ؟
ابدء ؟
ابدء ؟

فطيرة التوت

لقد استخدمت Raspberry Pi 3 Model B + الذي يحتوي على تحسينات رائعة وهو أقوى من طراز Raspberry Pi 3 السابق B.

تم دمج Raspberry Pi 3 B + مع معالج رباعي النواة بسرعة 1.4 جيجاهرتز و 64 بت وشبكة LAN لاسلكية مزدوجة النطاق وتقنية Bluetooth 4.2 / BLE وإيثرنت أسرع ودعم Power-over-Ethernet (مع PoE HAT منفصل).

المواصفات: Broadcom BCM2837B0، Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz، 1GB LPDDR2 SDRAM، 2.4 جيجا هرتز و 5 جيجا هرتز IEEE 802.11.b / g / n / ac شبكة LAN لاسلكية ، Bluetooth 4.2 ، BLE ، جيجابت إيثرنت عبر USB 2.0 (أقصى إنتاجية 300 ميجابت في الثانية) ، رأس GPIO الممتد 40 سنًا ، منافذ HDMI4 USB 2.0 بالحجم الكامل ، منفذ كاميرا CSI لتوصيل كاميرا Raspberry Pi ، منفذ عرض DSI لتوصيل شاشة لمس Raspberry Pi خرج استريو رباعي الأقطاب ومركب منفذ فيديو ، منفذ Micro SD لتحميل نظام التشغيل الخاص بك وتخزين البيانات 5V / 2.5A مدخلات طاقة تيار مستمر ، دعم Power-over-Ethernet (PoE) (يتطلب PoE HAT منفصل).

أجهزة السيارات

نستخدم محرك سيرفو SG-90 ، محرك ذو عزم دوران عالٍ يمكنه تحمل حمولة تصل إلى 2.5 كجم (1 سم).

كاميرا USB

كاميرا USB لجعل اللعبة تفاعلية مع معالجة الصور

تُستخدم بعض كبلات العبور لتوصيل محرك السائر و Raspberry Pi.

الخطوة 4: حرق Raspbian على بطاقة SD؟

هل تريد حرق Raspbian على بطاقة SD؟
هل تريد حرق Raspbian على بطاقة SD؟
هل تريد حرق Raspbian على بطاقة SD؟
هل تريد حرق Raspbian على بطاقة SD؟
هل تريد حرق Raspbian على بطاقة SD؟
هل تريد حرق Raspbian على بطاقة SD؟

Raspbian هو توزيع Linux المفضل الذي يعمل على Raspberry Pi. في هذا الدليل ، سنستخدم الإصدار Lite ، ولكن يمكن أيضًا استخدام إصدار سطح المكتب (الذي يأتي مع بيئة رسومية).

  • قم بتنزيل Etcher وتثبيته.
  • قم بتوصيل قارئ بطاقة SD ببطاقة SD بالداخل.
  • افتح Etcher وحدد من محرك الأقراص الثابتة ملف Raspberry Pi.img أو.zip الذي ترغب في كتابته على بطاقة SD.
  • حدد بطاقة SD التي ترغب في كتابة صورتك إليها.
  • راجع اختياراتك وانقر فوق "فلاش!" لبدء كتابة البيانات على بطاقة SD.

قم بتوصيل الجهاز بشبكتك

  • قم بتمكين الوصول إلى SSH عن طريق إضافة ملف ssh فارغ ، يتم وضعه مرة أخرى في جذر وحدة تخزين التمهيد على بطاقة SD الخاصة بك.
  • أدخل بطاقة SD في Raspberry Pi. سيتم تشغيله في غضون 20 ثانية تقريبًا. يجب أن يكون لديك الآن وصول SSH إلى Raspberry Pi الخاص بك. افتراضيًا ، سيكون اسم مضيفه هو raspberrypi.local. على جهاز الكمبيوتر الخاص بك ، افتح نافذة طرفية واكتب ما يلي:

ssh [email protected]

كلمة المرور الافتراضية هي التوت

لقد استخدمت هنا شاشة منفصلة للتفاعل مع Raspberry Pi.

الخطوة 5: جمع مجموعة البيانات؟ ️

جمع مجموعة البيانات؟ ️
جمع مجموعة البيانات؟ ️
جمع مجموعة البيانات؟ ️
جمع مجموعة البيانات؟ ️

الخطوة الأولى في هذا المشروع هي جمع البيانات. يجب على النظام تحديد إيماءة اليد والتعرف على الإجراء وجعله يتحرك وفقًا لذلك.

نقوم بتثبيت العديد من المكتبات على Raspberry Pi باستخدام تثبيت النقطة

أمر.

sudo apt-get update && sudo apt-get Upgesudo 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 تثبيت أنبوب tensorflow تثبيت أنابيب Werkzeug تثبيت Keras-Applications تثبيت الأنابيب Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-estimated pip install mock pip install grpcio pip install absl-pypip install gast pip install joblib pip install Markdown تثبيت نقطة تثبيت protobuf pip تثبيت PyYAML pip تثبيت ستة

إذا واجهت أي مشاكل مع OpenCVpackage ، فإنني أوصي بشدة بتثبيت هذه الحزم.

sudo apt-get install libhdf5-dev

sudo apt-get install 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

لقد قمنا بتركيب جميع التبعيات المطلوبة لهذا المشروع. تتكون مجموعة البيانات من مجموعات وترتيبات للصور تحت الملصق المناسب.

نقوم هنا بإنشاء صور مجموعة البيانات لصخرة التسمية والورق والمقص باستخدام المقتطف التالي.

roi = إطار [100: 500 ، 100: 500]

save_path = os.path.join (img_class_path، '{}.jpg'.format (count + 1)) cv2.imwrite (save_path، roi)

يتم التقاط الصورة لكل ملصق (حجر ، ورق ، مقص ولا شيء).

الخطوة 6: تصميم NN وتدريب النموذج ⚒️⚙️

تصميم NN وتدريب النموذج ⚒️⚙️
تصميم NN وتدريب النموذج ⚒️⚙️

جوهر هذا المشروع هو مصنف الصور الذي يصنف واحدة من ثلاث فئات. لصنع هذا المصنف ، نستخدم شبكة CNN (الشبكة التلافيفية) المدربة مسبقًا والتي تسمى SqueezeNet.

هنا نستخدم Keras و TensorFlow لإنشاء نموذج SqueezeNet الذي يمكنه تحديد الإيماءة. يتم استخدام الصور التي أنشأناها في الخطوة السابقة لتدريب النموذج. يتم تدريب النموذج باستخدام مجموعة البيانات التي تم إنشاؤها لعدد من العهود (الدورات) المذكورة.

تم تكوين النموذج باستخدام المعلمات الفائقة كما هو موضح أدناه.

النموذج = تسلسلي ([SqueezeNet (input_shape = (227، 227، 3)، include_top = False) ،

التسرب (0.5) ،

Convolution2D (NUM_CLASSES، (1، 1)، padding = 'valid') ،

التنشيط ("relu") ،

GlobalAveragePooling2D () ،

التنشيط ("softmax")])

أثناء تدريب النموذج ، يمكنك العثور على فقد النموذج ودقته لكل حقبة وتزداد الدقة في وقت ما بعد بضع فترات.

استغرق الأمر ساعتين تقريبًا لإنشاء النموذج بأعلى دقة بعد 10 فترات. إذا واجهت أي أخطاء في تخصيص الذاكرة ، فقم بالخطوات التالية (بفضل Adrian)

لزيادة مساحة التبادل ، افتح / etc / dphys-swapfile ثم عدّل المتغير CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

لاحظ أنني أقوم بزيادة حجم السواب من 100 ميجابايت إلى 1024 ميجابايت ، ومن هناك ، أعد تشغيل خدمة المبادلة:

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

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

ملحوظة:

تعد زيادة حجم المبادلة طريقة رائعة لحرق بطاقة الذاكرة الخاصة بك ، لذا تأكد من التراجع عن هذا التغيير وإعادة تشغيل خدمة التبديل عند الانتهاء. يمكنك قراءة المزيد عن الأحجام الكبيرة التي تفسد بطاقات الذاكرة هنا.

الخطوة 7: اختبار النموذج ✅

اختبار النموذج ✅
اختبار النموذج ✅
اختبار النموذج ✅
اختبار النموذج ✅
اختبار النموذج ✅
اختبار النموذج ✅

بمجرد إنشاء النموذج ، فإنه ينتج ملف الإخراج "rock-paper-scissors-model.h5". يستخدم هذا الملف كمصدر لاختبار ما إذا كان النظام يمكنه تحديد إيماءات اليد المختلفة والقدرة على التمييز بين الإجراءات.

يتم تحميل النموذج في نص Python كما يلي

model = load_model ("rock-paper-scissors-model.h5")

تقرأ الكاميرا صورة الاختبار وتحول نموذج اللون المطلوب ، ثم تقوم بتغيير حجم الصورة إلى 227 × 227 بكسل (نفس الحجم المستخدم في إنشاء النموذج). يمكن استخدام الصور التي تم استخدامها لتدريب النموذج لاختبار النموذج الذي تم إنشاؤه.

img = cv2.imread (filepath)

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

بمجرد تحميل النموذج والتقاط الكاميرا للصورة ، يتنبأ النموذج بالصورة الملتقطة باستخدام نموذج SqueezeNet الذي تم تحميله ، ويقوم بالتنبؤ بحركات المستخدم.

pred = model.predict (np.array ())

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Predicted: {}". format (move_name))

قم بتشغيل البرنامج النصي test.py لاختبار النموذج باستخدام صور اختبار متنوعة.

python3 test.py

أصبح النموذج الآن جاهزًا لاكتشاف إيماءات اليد وفهمها.

الخطوة 8: لعبة Rock-Paper-Scissors

لعبة Rock-Paper-Scissors
لعبة Rock-Paper-Scissors

تستخدم اللعبة وظيفة إنشاء أرقام عشوائية لتحديد حركة الكمبيوتر. يتبع القواعد المذكورة أعلاه لتحديد الفائز. تم تصميم اللعبة بوضعين: الوضع العادي والوضع الذكي ، حيث يقوم الوضع الذكي بالهجوم المضاد لحركة المستخدم ، أي أن الكمبيوتر يفوز بجميع الحركات ضد المستخدم.

cap = cv2. VideoCapture (0) # لالتقاط صورة من الكاميرا

الآن لنجعل اللعبة في الوضع العادي حيث يأخذ النظام / Raspberry Pi صورة اليد ويحلل ويحدد إيماءة اليد. ثم باستخدام مولد الأرقام العشوائية ، يتم تشغيل حركة الكمبيوتر. يتم اختيار الفائز بناءً على القواعد ثم يتم عرضه على الشاشة. ابدأ اللعبة باستخدام الأمر التالي.

python3 play.py

الخطوة 9: تكامل محرك سيرفو؟

أخيرًا ، أضف محرك سيرفو إلى هذا المشروع. محرك سيرفو هو GPIO pin 17 من Raspberry Pi ، والذي يحتوي على وظيفة PWM للتحكم في زاوية الدوران.

المحرك المؤازر المستخدم في هذا المشروع هو SG-90. يمكن أن تقوم بالدوران في اتجاه عقارب الساعة وعكس اتجاه عقارب الساعة حتى 180 درجة

يتم تقديم الاتصالات على النحو التالي.

محرك سيرفو - Raspberry Pi

Vcc - + 5 فولت

GND - GND

الإشارة - GPIO17

يتم استخدام المكتبات مثل RPi. GPIO والوقت في هذا المشروع.

استيراد RPi. GPIO كـ GPIO

وقت الاستيراد

يتم بعد ذلك تكوين دبوس GPIO على PWM باستخدام الأسطر التالية

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN ، GPIO. OUT)

تم تكوين GPIO Pin 17 لاستخدامه كـ PWM بتردد 50 هرتز. يتم تحقيق زاوية المحرك المؤازر عن طريق ضبط دورة العمل (Ton & Toff) لـ PWM

الواجب = الزاوية / 18 + 2

إخراج GPIO (servoPIN ، صحيح) ص وقت دورة العمل (واجب). النوم (1) GPIO.output (servoPIN ، خطأ) p. ChangeDutyCycle (0)

سيؤدي ذلك إلى إنتاج زاوية الخطوة المرغوبة لكل نبضة ، والتي ستعطي زاوية الدوران المطلوبة.

الآن التقطت الرسم البياني وقمت بتقطيعه إلى ثلاثة أقسام ، للحجر والورق والمقص. تم تثبيت محرك سيرفو في وسط المخطط. المؤشر / الغطاء متصل بعمود محرك سيرفو. يشير هذا العمود إلى تحرك الكمبيوتر وفقًا للمنطق المحسوب في البرنامج النصي.

الخطوة العاشرة: عمل المشروع؟

Image
Image

والآن حان وقت اللعب. دعونا نرى عمل المشروع.

إذا واجهت أي مشاكل في بناء هذا المشروع ، فلا تتردد في سؤالي. يرجى اقتراح مشاريع جديدة تريد مني القيام بها بعد ذلك.

أعط إبهامًا إذا كان قد ساعدك حقًا وتابع قناتي لمشاريع مثيرة للاهتمام.:)

شارك هذا الفيديو إذا أردت.

يسعدنا اشتراكك:

شكرا للقراءة!

الخطوة 11: الكود - مشروع ريبو

تمت إضافة الكود إلى مستودع GitHub والذي يمكن العثور عليه في قسم الكود.

Rahul24-06 / Rock-Paper-Scissors -

موصى به: