תוכן עניינים:

נייר רוק מספריים AI: 11 שלבים
נייר רוק מספריים AI: 11 שלבים

וִידֵאוֹ: נייר רוק מספריים AI: 11 שלבים

וִידֵאוֹ: נייר רוק מספריים AI: 11 שלבים
וִידֵאוֹ: אני רוצה שווארמה 🌯 2024, נוֹבֶמבֶּר
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

האם פעם הרגשת משועמם לבד? בואו נשחק סלע, נייר ומספריים נגד מערכת אינטראקטיבית המונעת באינטליגנציה.

שלב 1: דברים המשמשים בפרויקט זה

רכיבי חומרה

  • פטל פי 3 דגם B+ × 1
  • מודול מצלמת Raspberry Pi V2 × 1
  • מנוע מיקרו סרוו SG90 × 1

אפליקציות תוכנה

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

שלב 2: רעיון?

Image
Image

לאחר שעבדתי על פרויקטים שונים בתחומים שונים, תכננתי לעשות פרויקט מהנה, והחלטתי לעשות משחק נייר-מספריים:)

בפרויקט זה, נכין משחק אינטראקטיבי ונשחק מול המחשב אשר מופעל על ידי AI כדי לקבל החלטות. AI משתמשת במצלמה המחוברת ל- Raspberry Pi כדי לזהות מה מניע המשתמש ביד, לסווג אותו לסוג, נייר או מספריים בקטגוריה (תווית) הטובה ביותר. ברגע שהמחשב עושה את מהלךו, מנוע הצעדים המחובר ל- Raspberry Pi מצביע לכיוון המבוסס על המהלך שלו.

כללים שיש לקחת בחשבון למשחק זה:

  • סלע מקהה את המספריים
  • נייר מכסה את הסלע
  • מספריים חותכים נייר

הזוכה יוחלט על בסיס שלושת התנאים לעיל. בואו לראות הדגמה מהירה של הפרויקט כאן.

שלב 3: תחילת העבודה?

מתחילים ?
מתחילים ?
מתחילים ?
מתחילים ?

פאי פטל

השתמשתי ב- Raspberry Pi 3 Model B+ בעל שיפורים נהדרים והוא חזק יותר מאשר ה- Raspberry Pi 3 Model B.

Raspberry Pi 3 B+ משולב עם מעבד 1.4-GHz 64 סיביות מרובע ליבות, LAN אלחוטי כפול פס, Bluetooth 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 אלחוטי LAN, Bluetooth 4.2, BLE, Gigabit Ethernet מעל USB 2.0 (תפוקה מקסימלית של 300 Mbps), כותרת GPIO המורחבת עם 40 פינים, יציאות HDMI4 USB 2.0 בגודל מלא, יציאת מצלמת CSI לחיבור מצלמת Raspberry Pi, יציאת תצוגת DSI לחיבור תצוגת מסך מגע של Raspberry Pi 4 פלט סטריאו וקומפוזיט יציאת וידאו, יציאת Micro SD לטעינת מערכת ההפעלה שלך ושמירת נתונים כניסת מתח 5V/2.5A DC, תמיכת Power-over-Ethernet (PoE) (דורשת PoE HAT נפרד).

מנוע סרוו

אנו משתמשים במנוע סרוו SG-90, מנוע בעל מומנט גבוה שיכול להתמודד עם עומס עד 2.5 ק"ג (1 ס"מ).

מצלמת USB

מצלמת USB כדי להפוך את המשחק לאינטראקטיבי בעיבוד התמונה

כמה כבלי מגשר משמשים לחיבור מנוע הצעדים ופטל פי.

שלב 4: לשרוף את Raspbian לכרטיס ה- SD?

לצרוב את Raspbian לכרטיס ה- SD?
לצרוב את Raspbian לכרטיס ה- SD?
לצרוב את Raspbian לכרטיס ה- SD?
לצרוב את Raspbian לכרטיס ה- SD?
לצרוב את Raspbian לכרטיס ה- SD?
לצרוב את Raspbian לכרטיס ה- SD?

Raspbian היא הפצת לינוקס המועדפת הפועלת ב- Raspberry Pi. במדריך זה נשתמש בגרסת Lite, אך ניתן להשתמש גם בגרסת שולחן העבודה (המגיעה עם סביבה גרפית).

  • הורד את עטר והתקן אותו.
  • חבר קורא כרטיסי SD עם כרטיס ה- SD בפנים.
  • פתח את Etcher ובחר מהכונן הקשיח את קובץ ה- img או.zip של Raspberry Pi שברצונך לכתוב לכרטיס ה- SD.
  • בחר את כרטיס ה- SD שאליו ברצונך לכתוב את התמונה שלך.
  • בדוק את הבחירות שלך ולחץ על 'פלאש!' כדי להתחיל לכתוב נתונים לכרטיס ה- SD.

חבר את המכשיר לרשת שלך

  • אפשר גישה ל- SSH על ידי הוספת קובץ ssh ריק, הממוקם שוב בבסיס נפח האתחול בכרטיס ה- SD שלך.
  • הכנס את כרטיס ה- SD ל- Raspberry Pi. הוא יאתחל תוך בערך 20 שניות. כעת אמורה להיות לך גישת SSH ל- Raspberry Pi שלך. כברירת מחדל, שם המארח שלו יהיה raspberrypi.local. במחשב, פתח חלון מסוף והקלד את הדברים הבאים:

ssh [email protected]

סיסמת ברירת המחדל היא פטל

כאן השתמשתי במסך נפרד כדי להתממשק עם ה- Raspberry Pi.

שלב 5: איסוף מערך הנתונים? ️

אוספים את מערך הנתונים? ️
אוספים את מערך הנתונים? ️
אוספים את מערך הנתונים? ️
אוספים את מערך הנתונים? ️

השלב הראשון בפרויקט זה הוא איסוף נתונים. המערכת חייבת לזהות את תנועת הידיים ולזהות את הפעולה ולבצע אותה בהתאם.

אנו מתקינים מספר ספריות ל- Raspberry Pi באמצעות התקנת pip

פקודה.

sudo apt-get update && sudo apt-get upgrades sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip להתקין opencv pip להתקין numpy pip להתקין scikit-ללמוד pip להתקין scikit-image pip להתקין h5py pip להתקין pip של Keras להתקין pip tensorflow להתקין pip werkzeug להתקין Keras- יישומים pip להתקין Keras- Preprocessing pip להתקין keras-squeezenet pip להתקין astor pip להתקין tensorboard pip להתקין tensorflow-אומדן pip להתקין mock pip להתקין grpcio pip להתקין absl-pypip להתקין gast pip להתקין joblib pip להתקין Markdown pip להתקין 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 = frame [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 שהוכשר מראש (רשת Convolutional) הנקרא 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. אם אתה עומד בפני שגיאות בהקצאת זיכרון, בצע את השלבים הבאים (תודה לאדריאן)

כדי להגדיל את שטח ההחלפה שלך, פתח /etc /dphys-swapfile ולאחר מכן ערוך את המשתנה CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

שים לב שאני מגדיל את ההחלפה מ -100 MB ל -1024 MB. משם הפעל מחדש את שירות ההחלפה:

$ 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 x 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 = מיפוי (move_code) הדפסה ("צפוי: {}". פורמט (move_name))

הפעל את סקריפט test.py כדי לבדוק את המודל עם תמונות בדיקה שונות.

python3 test.py

כעת המודל מוכן לזהות ולהבין את תנועות הידיים.

שלב 8: משחק נייר-רוק-מספריים

משחק רוק-נייר-מספריים
משחק רוק-נייר-מספריים

המשחק משתמש בפונקציה של יצירת מספרים אקראיים כדי להחליט על מהלך המחשב. הוא פועל על פי הכללים הנ ל כדי לקבוע את הזוכה. המשחק מעוצב עם שני מצבים: מצב רגיל ומצב אינטליגנטי, כאשר מצב אינטליגנטי תוקף את תנועת המשתמש, כלומר המחשב מנצח את כל המהלכים נגד המשתמש.

cap = cv2. VideoCapture (0) # לצילום תמונה מהמצלמה

עכשיו בואו נעשה את המשחק במצב רגיל שבו המערכת/ פטל פי לוקחת את תמונת היד ומנתחת ומזהה את מחוות היד. לאחר מכן באמצעות מחולל מספרים אקראיים, מהלך המחשב מופעל. הזוכה נבחר על פי הכללים ולאחר מכן מוצג על המסך. הפעל את המשחק באמצעות הפקודה הבאה.

python3 play.py

שלב 9: שילוב של מנוע סרוו?

לבסוף, הוסף את מנוע סרוו לפרויקט זה. מנוע סרוו הוא סיכת GPIO 17 של ה- Raspberry Pi, בעלת הפונקציה PWM לשליטה בזווית הסיבוב.

מנוע סרוו המשמש בפרויקט זה הוא SG-90. זה יכול לבצע סיבובים עם כיוון השעון ונגד כיוון השעון עד 180 °

החיבורים ניתנים כדלקמן.

מנוע סרוו - פטל פטל

Vcc - +5V

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 הרץ. זווית מנוע הסרוו מושגת על ידי הגדרת מחזור העבודה (טון וטוף) של ה- PWM

חובה = זווית/18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (חובה) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

זה ייצור את זווית הצעד הרצויה עבור כל דופק, מה שייתן את זווית הסיבוב הרצויה.

עכשיו לקחתי את התרשים וחתכתי אותו לשלושה חלקים, לסלע, נייר ומספריים. מנוע סרוו קבוע למרכז התרשים. המצביע/דש מחובר לפיר של מנוע הסרוו. פיר זה מצביע על מהלך המחשב על פי ההיגיון המחושב בתסריט.

שלב 10: עבודת הפרויקט?

Image
Image

ועכשיו, הגיע זמן המשחק. בואו נראה את עבודת הפרויקט.

אם נתקלת בבעיות בבניית הפרויקט הזה, אל תהסס לשאול אותי. אנא הצע פרויקטים חדשים שאתה רוצה שאעשה בהמשך.

תן אגודל אם זה באמת עזר לך ותעקוב אחרי הערוץ שלי לפרויקטים מעניינים.:)

שתף את הסרטון הזה אם תרצה.

שמח שנרשמת:

תודה שקראתם!

שלב 11: קוד - Repo Project

הקוד מתווסף למאגר GitHub שניתן למצוא בחלק הקוד.

מספריים Rahul24-06/נייר רוק-https://github.com/Rahul24-06/Rock-Paper-Sxissors

מוּמלָץ: