فهرست مطالب:
- مرحله 1: موارد مورد استفاده در این پروژه
- مرحله 2: ایده؟
- مرحله 3: شروع به کار؟
- مرحله 4: Raspbian را به کارت SD رایت کنید؟
- مرحله 5: جمع آوری مجموعه داده؟ ️
- مرحله 6: طراحی NN و آموزش مدل ⚒️⚙️
- مرحله 7: آزمایش مدل
- مرحله 8: بازی کاغذ-سنگ-قیچی
- مرحله 9: ادغام سرو موتور؟
- مرحله 10: کار پروژه؟
- مرحله 11: کد - Repo پروژه
تصویری: قیچی کاغذ راک AI: 11 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:53
آیا تا به حال احساس تنهایی کرده اید؟ بیایید سنگ ، کاغذ و قیچی را در برابر یک سیستم تعاملی که دارای هوش است ، بازی کنیم.
مرحله 1: موارد مورد استفاده در این پروژه
اجزای سخت افزاری
- رزبری پای 3 مدل B+ × 1
- ماژول دوربین رزبری پای V2 × 1
- موتور میکرو سروو SG90 1 پوند
برنامه های نرم افزاری
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
مرحله 2: ایده؟
پس از کار بر روی پروژه های مختلف در زمینه های مختلف ، من قصد داشتم که یک پروژه سرگرم کننده بسازم و تصمیم گرفتم یک بازی کاغذ و کاغذ سنگی بسازم:)
در این پروژه ، ما یک بازی تعاملی انجام می دهیم و در برابر رایانه ای که از طریق هوش مصنوعی برای تصمیم گیری استفاده می شود ، بازی می کنیم. هوش مصنوعی از دوربین متصل به رزبری پای برای تشخیص حرکت کاربر با دست استفاده می کند ، آنها را در بهترین دسته (برچسب) سنگ ، کاغذ یا قیچی طبقه بندی می کند. هنگامی که رایانه حرکت می کند ، موتور پله ای متصل به رزبری پای بر اساس حرکت آن به سمت جهت اشاره می کند.
قوانینی که باید برای این بازی در نظر گرفته شود:
- راک قیچی را کور می کند
- کاغذ سنگ را می پوشاند
- قیچی کاغذ بریده است
برنده بر اساس سه شرط فوق تعیین می شود. بیایید یک نسخه ی نمایشی سریع از پروژه را در اینجا ببینیم.
مرحله 3: شروع به کار؟
تمشک پای
من از Raspberry Pi 3 Model B+ استفاده کرده ام که پیشرفت های فوق العاده ای دارد و از رزبری پای 3 مدل B قبلی قدرتمندتر است.
Raspberry Pi 3 B+ با پردازنده چهار هسته ای 1.4GHz 64 بیتی ، LAN بی سیم دو بانده ، بلوتوث 4.2/BLE ، اترنت سریعتر و پشتیبانی از Power-over-Ethernet (با PoE HAT جداگانه) یکپارچه شده است.
مشخصات: Broadcom 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 (حداکثر توان 300 مگابیت بر ثانیه) ، سربرگ GPIO 40 پین ، پورت های HDMI4 USB 2.0 با اندازه کامل ، پورت دوربین CSI برای اتصال دوربین رزبری پای ، پورت صفحه نمایش DSI برای اتصال صفحه نمایش لمسی رزبری پای خروجی استریو 4 قطبی و کامپوزیت پورت ویدئو ، پورت Micro SD برای بارگیری سیستم عامل شما و ذخیره داده های ورودی 5V/2.5A DC ، پشتیبانی از Power-over-Ethernet (PoE) (نیاز به PoE HAT جداگانه دارد).
سرو موتور
ما از یک موتور سروو SG-90 استفاده می کنیم ، یک موتور گشتاور بالا که می تواند بار را تا 2.5 کیلوگرم (1 سانتی متر) تحمل کند.
دوربین USB
یک دوربین USB برای تعامل بازی با پردازش تصویر
برخی از کابل های Jumper برای سیم کشی استپر موتور و رزبری پای استفاده می شود.
مرحله 4: Raspbian را به کارت SD رایت کنید؟
Raspbian توزیع انتخابی لینوکس است که بر روی Raspberry Pi اجرا می شود. در این راهنما ، ما از نسخه Lite استفاده خواهیم کرد ، اما از نسخه Desktop (که دارای محیط گرافیکی است) نیز می توان استفاده کرد.
- Etcher را بارگیری کرده و نصب کنید.
- یک کارت خوان SD را با کارت SD داخل آن متصل کنید.
- Etcher را باز کنید و از هارد دیسک خود فایل Raspberry Pi.img یا.zip را که می خواهید به کارت SD بنویسید انتخاب کنید.
- کارت SD را که می خواهید تصویر خود را روی آن بنویسید انتخاب کنید.
- انتخاب های خود را مرور کرده و روی "Flash!" کلیک کنید. برای شروع نوشتن اطلاعات روی کارت SD.
دستگاه را به شبکه خود وصل کنید
- با افزودن ssh فایل خالی ، مجدداً در ریشه حجم بوت در کارت SD خود ، دسترسی SSH را فعال کنید.
- کارت SD را در Raspberry Pi وارد کنید. تقریباً در 20 ثانیه بوت می شود. اکنون باید به Raspberry Pi خود دسترسی SSH داشته باشید. به طور پیش فرض ، نام میزبان آن raspberrypi.local خواهد بود. در رایانه خود ، پنجره ترمینال را باز کرده و موارد زیر را تایپ کنید:
رمز عبور پیش فرض تمشک است
در اینجا من از یک مانیتور جداگانه برای ارتباط با رزبری پای استفاده کردم.
مرحله 5: جمع آوری مجموعه داده؟ ️
اولین قدم در این پروژه جمع آوری اطلاعات است. سیستم باید حرکت دست را تشخیص دهد و عمل را تشخیص دهد و بر این اساس حرکت آن را انجام دهد.
ما چندین کتابخانه را روی Raspberry Pi با استفاده از pip install نصب می کنیم
فرمان
sudo apt-get update && sudo apt-get upgrade upo 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 install pip tensorflow install Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-estator pip install mock pip install grpcio pip install absl-pypip install gast pip install joblib pip install Markdown pip install protobuf pip install pyYAML pip install six
اگر با 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 و آموزش مدل ⚒️⚙️
هسته این پروژه یک طبقه بندی کننده تصویر است که یکی از سه دسته را طبقه بندی می کند. برای ساخت این طبقه بندی کننده ، ما از CNN (Convolutional Network) از پیش آموزش دیده به نام 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 دوره تقریبا 2 ساعت طول کشید. اگر با خطاهای تخصیص حافظه مواجه شدید ، مراحل زیر را انجام دهید (با تشکر از آدریان)
برای افزایش فضای مبادله خود ، 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 شروع شود
توجه داشته باشید:
افزایش اندازه مبادله یک راه عالی برای سوزاندن کارت حافظه است ، بنابراین مطمئن شوید که این تغییر را برگردانده و پس از اتمام کار سرویس مبادله را مجدداً راه اندازی کنید. در اینجا می توانید اطلاعات بیشتری در مورد کارت های حافظه خراب در اندازه های بزرگ بخوانید.
مرحله 7: آزمایش مدل
پس از تولید مدل ، فایل خروجی "rock-paper-scissors-model.h5" را تولید می کند. از این فایل به عنوان منبع برای بررسی اینکه آیا سیستم می تواند حرکات مختلف دست را تشخیص دهد یا عملکردها را متمایز کند ، استفاده می شود.
مدل به صورت زیر در اسکریپت پایتون بارگذاری می شود
model = load_model ("rock-paper-scissors-model.h5")
دوربین تصویر آزمایشی را می خواند و مدل رنگ مورد نیاز را تغییر می دهد و سپس اندازه تصویر را به 227 22 227 پیکسل (اندازه مشابه برای تولید مدل) تغییر می دهد. از تصاویری که برای آموزش مدل استفاده شده است می توان برای آزمایش مدل تولید شده استفاده کرد.
img = cv2.imread (مسیر فایل)
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) چاپ ("پیش بینی شده: {}".فرمت (move_name))
برای آزمایش مدل با تصاویر مختلف آزمایشی ، اسکریپت test.py را اجرا کنید.
python3 test.py
اکنون مدل آماده تشخیص و درک حرکات دست است.
مرحله 8: بازی کاغذ-سنگ-قیچی
بازی از یک تابع تولید عدد تصادفی برای تصمیم گیری حرکت رایانه استفاده می کند. از قوانین فوق برای تعیین برنده پیروی می کند. این بازی با دو حالت طراحی شده است: حالت عادی و حالت هوشمند ، که در آن حالت هوشمند ضدحرکات کاربر را نشان می دهد ، یعنی رایانه برنده تمام حرکات علیه کاربر است.
cap = cv2. VideoCapture (0) # برای گرفتن تصویر از دوربین
حالا بیایید بازی را در حالت عادی بسازیم که در آن سیستم/ رزبری پای عکس دست را گرفته و حرکت دست را تجزیه و تحلیل و شناسایی می کند. سپس با استفاده از مولد اعداد تصادفی ، حرکت رایانه انجام می شود. برنده بر اساس قوانین انتخاب می شود و سپس روی صفحه نمایش داده می شود. بازی را با استفاده از دستور زیر شروع کنید.
python3 play.py
مرحله 9: ادغام سرو موتور؟
در نهایت ، سرو موتور را به این پروژه اضافه کنید. سروو موتور GPIO پین 17 رزبری پای است که دارای عملکرد PWM برای کنترل زاویه چرخش است.
سرو موتور که در این پروژه استفاده می شود SG-90 است. می تواند تا 180 درجه در جهت عقربه های ساعت و خلاف جهت عقربه های ساعت بچرخد
اتصالات به شرح زیر ارائه شده است.
سرو موتور - رزبری پای
Vcc - +5V
GND - GND
سیگنال - GPIO17
کتابخانه هایی مانند RPi. GPIO و زمان در این پروژه استفاده می شود.
RPi. GPIO را به عنوان GPIO وارد کنید
زمان واردات
سپس پین GPIO با استفاده از خطوط زیر به PWM پیکربندی می شود
سرووپین = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN ، GPIO. OUT)
GPIO Pin 17 برای استفاده به عنوان PWM در فرکانس 50 هرتز پیکربندی شده است. زاویه سرو موتور با تنظیم چرخه کار (Ton & Toff) PWM بدست می آید
وظیفه = زاویه/18 + 2
GPIO.output (servoPIN ، True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN ، False) p. ChangeDutyCycle (0)
این زاویه گام مورد نظر را برای هر پالس تولید می کند ، که زاویه چرخش مطلوبی را ایجاد می کند.
اکنون من نمودار را برداشته و آن را به سه قسمت ، برای سنگ ، کاغذ و قیچی تقسیم کرده ام. موتور سروو در مرکز نمودار ثابت شده است. اشاره گر/فلپ به شفت سرو موتور متصل است. این محور به حرکت کامپیوتر با توجه به منطق محاسبه شده در اسکریپت اشاره می کند.
مرحله 10: کار پروژه؟
و اکنون ، زمان بازی است. بیایید کار پروژه را ببینیم.
اگر در ساخت این پروژه با مشکلی روبرو شدید ، با خیال راحت از من بپرسید. لطفاً پروژه های جدیدی را پیشنهاد دهید که می خواهید بعداً آنها را انجام دهم.
اگر واقعاً به شما کمک کرد ، شست کنید و کانال من را برای پروژه های جالب دنبال کنید.:)
اگر دوست داشتید این ویدئو را به اشتراک بگذارید.
خوشحالم که مشترک شدید:
ممنون که خواندید!
مرحله 11: کد - Repo پروژه
کد به مخزن GitHub اضافه می شود که در قسمت کد یافت می شود.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
توصیه شده:
بازی قیچی کاغذی سنگی: 6 مرحله
بازی قیچی کاغذ سنگ: این اولین آموزش من است. مدتها بود می خواستم یکی بنویسم اما هیچ پروژه ای در دست نداشتم که بتوانم در اینجا منتشر کنم. بنابراین وقتی به ایده این پروژه رسیدم ، تصمیم گرفتم این یکی باشد. بنابراین در حال مرور سایت tensorflow.js بودم ، من
نگهدارنده کاغذ: کاغذ توالت را با شوک درمانی ذخیره کنید: 4 مرحله
نگهدارنده کاغذ: کاغذ توالت را با شوک درمانی ذخیره کنید: همه ما قفسه های خالی در خواربارفروشی را دیده ایم و به نظر می رسد مدتی کمبود کاغذ توالت وجود دارد. اگر زود انبار نکرده اید ، احتمالاً در شرایطی هستید که من در آن هستم. من یک خانه 6 نفره دارم و فقط چند رول باقی می ماند
بازی قیچی سنگی کاغذی آردوینو با استفاده از صفحه نمایش LCD 20x4 با I2C: 7 مرحله
بازی قیچی سنگی کاغذی آردوینو با استفاده از صفحه نمایش LCD 20x4 با I2C: سلام به همه یا شاید بهتر است بگویم "سلام جهان!" خوشحال می شوم که پروژه ای را با شما به اشتراک بگذارم که ورود من به بسیاری از موارد Arduino بوده است. این یک بازی قیچی آردوینو کاغذی با استفاده از صفحه نمایش LCD 20x4 I2C است. من
کلاه سرو قیچی برقی: 4 مرحله (همراه با تصاویر)
کلاه برقی قیچی برقی: این پروژه ساده چاپ سه بعدی و سرو موتور یک احساس خوب برای سیمون گیرتز ، سازنده ای فوق العاده است که به تازگی عمل جراحی برداشتن تومور مغزی را انجام داده است. دستگاه قیچی توسط یک موتور سروو میکرو و یک میکروکنترلر Trinket با کمی ارد کار می کند
قیچی کاغذی راک: 10 مرحله
قیچی کاغذ راک: هدف: پس از اتمام این کار ، نحوه ساخت یک بازی ساده از راک ، قیچی کاغذ را از ابتدا با استفاده از Code.org خواهید آموخت. مواد / الزامات مورد نیاز: درک اولیه از نحو Javascript ، رایانه ، حساب Code.org