สารบัญ:
- ขั้นตอนที่ 1: สิ่งที่ใช้ในโครงการนี้
- ขั้นตอนที่ 2: ไอเดีย ?
- ขั้นตอนที่ 3: เริ่มต้นใช้งาน ?
- ขั้นตอนที่ 4: เบิร์น Raspbian ลงในการ์ด SD หรือไม่
- ขั้นตอนที่ 5: การรวบรวมชุดข้อมูล ?️
- ขั้นตอนที่ 6: การออกแบบ NN & การฝึกโมเดล ⚒️⚙️
- ขั้นตอนที่ 7: ทดสอบโมเดล ✅
- ขั้นตอนที่ 8: เกม Rock-Paper-Scissors
- ขั้นตอนที่ 9: การรวมเซอร์โวมอเตอร์ ?
- ขั้นตอนที่ 10: การทำงานของโครงการ ?
- ขั้นตอนที่ 11: รหัส - โครงการ Repo
วีดีโอ: Rock Paper Scissor AI: 11 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
เคยรู้สึกเบื่ออยู่คนเดียวไหม? มาเล่นร็อค กระดาษ และกรรไกรกับระบบโต้ตอบที่ขับเคลื่อนด้วยปัญญา
ขั้นตอนที่ 1: สิ่งที่ใช้ในโครงการนี้
ส่วนประกอบฮาร์ดแวร์
- Raspberry Pi 3 รุ่น B+ × 1
- โมดูลกล้อง Raspberry Pi V2 × 1
- SG90 ไมโครเซอร์โวมอเตอร์ × 1
แอพซอฟต์แวร์
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
ขั้นตอนที่ 2: ไอเดีย ?
หลังจากทำงานในโครงการต่างๆ ในโดเมนต่างๆ ฉันวางแผนที่จะทำโปรเจ็กต์สนุกๆ และตัดสินใจสร้างเกมกรรไกรกระดาษ:)
ในโครงการนี้ เราจะสร้างเกมแบบโต้ตอบและเล่นกับคอมพิวเตอร์ที่ขับเคลื่อนโดย AI เพื่อทำการตัดสินใจ AI ใช้กล้องที่เชื่อมต่อกับ Raspberry Pi เพื่อจดจำสิ่งที่ผู้ใช้เคลื่อนไหวด้วยมือ จำแนกเป็นประเภทที่ดีที่สุด (ฉลาก) หิน กระดาษ หรือกรรไกร เมื่อคอมพิวเตอร์เคลื่อนที่ สเต็ปเปอร์มอเตอร์ที่เชื่อมต่อกับ Raspberry Pi จะชี้ไปยังทิศทางตามการเคลื่อนที่
กฎที่ต้องพิจารณาสำหรับเกมนี้:
- ร็อคทื่อกรรไกร
- กระดาษปิดหิน
- กรรไกรตัดกระดาษ
ผู้ชนะจะถูกตัดสินตามเงื่อนไขสามข้อข้างต้น มาดูตัวอย่างสั้นๆ ของโครงการกันที่นี่
ขั้นตอนที่ 3: เริ่มต้นใช้งาน ?
ราสเบอร์รี่ปี่
ฉันเคยใช้ Raspberry Pi 3 Model B+ ซึ่งมีการปรับปรุงที่ยอดเยี่ยมและมีประสิทธิภาพมากกว่า Raspberry Pi 3 Model B รุ่นก่อนหน้า
Raspberry Pi 3 B+ ถูกรวมเข้ากับโปรเซสเซอร์ Quad-core ความเร็ว 1.4GHz 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.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 สำหรับการโหลดระบบปฏิบัติการของคุณและจัดเก็บข้อมูลอินพุตไฟ DC 5V/2.5A รองรับ Power-over-Ethernet (PoE) (ต้องใช้ PoE HAT แยกต่างหาก)
เซอร์โวมอเตอร์
เราใช้เซอร์โวมอเตอร์ SG-90 ซึ่งเป็นมอเตอร์แรงบิดสูงที่สามารถรับน้ำหนักได้มากถึง 2.5 กก. (1 ซม.)
กล้อง USB
กล้อง USB เพื่อให้เกมโต้ตอบกับการประมวลผลภาพ
สายจัมเปอร์บางสายใช้สำหรับต่อสเต็ปเปอร์มอเตอร์และ Raspberry Pi
ขั้นตอนที่ 4: เบิร์น Raspbian ลงในการ์ด SD หรือไม่
Raspbian คือตัวเลือกการกระจาย Linux ที่ทำงานบน Raspberry Pi ในคู่มือนี้ เราจะใช้เวอร์ชัน Lite แต่เวอร์ชันเดสก์ท็อป (ซึ่งมาพร้อมกับสภาพแวดล้อมแบบกราฟิก) ก็สามารถใช้ได้เช่นกัน
- ดาวน์โหลด Etcher และติดตั้ง
- เชื่อมต่อเครื่องอ่านการ์ด SD กับการ์ด SD ด้านใน
- เปิด Etcher แล้วเลือกไฟล์ Raspberry Pi.img หรือ.zip จากฮาร์ดไดรฟ์ที่คุณต้องการเขียนลงในการ์ด SD
- เลือกการ์ด SD ที่คุณต้องการเขียนภาพของคุณ
- ตรวจสอบการเลือกของคุณและคลิก 'Flash!' เพื่อเริ่มเขียนข้อมูลลงในการ์ด SD
เชื่อมต่ออุปกรณ์กับเครือข่ายของคุณ
- เปิดใช้งานการเข้าถึง SSH โดยเพิ่ม ssh ไฟล์เปล่า วางอีกครั้งที่รูทของวอลลุมสำหรับบูทบนการ์ด SD ของคุณ
- ใส่การ์ด SD ลงใน Raspberry Pi มันจะบูตในเวลาประมาณ 20 วินาที ตอนนี้คุณควรมีสิทธิ์เข้าถึง SSH สำหรับ Raspberry Pi ของคุณ โดยค่าเริ่มต้น ชื่อโฮสต์จะเป็น raspberrypi.local บนคอมพิวเตอร์ของคุณ ให้เปิดหน้าต่างเทอร์มินัลแล้วพิมพ์ดังต่อไปนี้:
รหัสผ่านเริ่มต้นคือราสเบอร์รี่
ที่นี่ฉันใช้จอภาพแยกต่างหากเพื่อเชื่อมต่อกับ Raspberry Pi
ขั้นตอนที่ 5: การรวบรวมชุดข้อมูล ?️
ขั้นตอนแรกในโครงการนี้คือการเก็บรวบรวมข้อมูล ระบบจะต้องระบุท่าทางของมือและรับรู้การกระทำและทำให้มันเคลื่อนที่ตามนั้น
เราติดตั้งไลบรารีหลายตัวใน Raspberry Pi โดยใช้ pip install
สั่งการ.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip ติดตั้ง opencv pip ติดตั้ง numpy pip ติดตั้ง scikit-learn pip ติดตั้ง scikit-image pip ติดตั้ง h5py pip ติดตั้ง Keras pip ติดตั้ง pip tensorflow ติดตั้ง Werkzeug pip ติดตั้ง Keras-Applications pip ติดตั้ง Keras-Preprocessing pip ติดตั้ง keras-squeezenet pip ติดตั้ง astor pip ติดตั้ง tensorboard pip ติดตั้ง tensorflow-estimator pip ติดตั้ง mock pip ติดตั้ง grpcio pip ติดตั้ง absl-pypip ติดตั้ง gast pip ติดตั้ง joblib pip ติดตั้ง Markdown pip ติดตั้ง protobuf pip ติดตั้ง PyYAML pip ติดตั้งหก
หากคุณประสบปัญหาใด ๆ กับ OpenCVpackage ฉันขอแนะนำอย่างยิ่งให้ติดตั้งแพ็คเกจเหล่านี้
sudo apt-get ติดตั้ง libhdf5-dev
sudo apt-get ติดตั้ง libhdf5-serial-dev sudo apt-get ติดตั้ง libatlas-base-dev sudo apt-get ติดตั้ง libjasper-dev sudo apt-get ติดตั้ง libqtgui4 sudo apt-get ติดตั้ง libqt4-test
เราได้ติดตั้งการพึ่งพาที่จำเป็นทั้งหมดสำหรับโครงการนี้ ชุดข้อมูลจัดทำขึ้นโดยการรวบรวมและจัดเรียงรูปภาพภายใต้ป้ายกำกับที่เหมาะสม
ที่นี่ เราสร้างภาพชุดข้อมูลสำหรับฉลากหิน กระดาษ และกรรไกรโดยใช้ตัวอย่างต่อไปนี้
ร้อย = เฟรม[100:500, 100:500]
save_path = os.path.join(img_class_path, '{}.jpg'.format(นับ + 1)) cv2.imwrite(save_path, ROI)
รูปภาพจะถูกจับภาพสำหรับแต่ละฉลาก (หิน กระดาษ กรรไกร และ ไม่มี)
ขั้นตอนที่ 6: การออกแบบ NN & การฝึกโมเดล ⚒️⚙️
แกนหลักของโครงการนี้คือตัวแยกประเภทรูปภาพที่จัดประเภทหนึ่งในสามหมวดหมู่ ในการสร้างลักษณนาม เราใช้ CNN (Convolutional Network) ที่ผ่านการฝึกอบรมล่วงหน้าที่เรียกว่า SqueezeNet
ที่นี่เราใช้ Keras และ TensorFlow เพื่อสร้างโมเดล SqueezeNet ซึ่งสามารถระบุท่าทางได้ รูปภาพที่เราสร้างในขั้นตอนก่อนหน้านี้ใช้เพื่อฝึกโมเดล โมเดลนี้ได้รับการฝึกอบรมโดยใช้ชุดข้อมูลที่สร้างขึ้นสำหรับ Epochs (รอบ) ที่ไม่ได้กล่าวถึง
โมเดลได้รับการกำหนดค่าด้วยไฮเปอร์พารามิเตอร์ดังที่แสดงด้านล่าง
รุ่น = ลำดับ ([SqueezeNet(input_shape=(227, 227, 3), include_top=False), ถอนออก(0.5), Convolution2D(NUM_CLASSES, (1, 1), padding='ถูกต้อง'), การเปิดใช้งาน ('relu'), GlobalAveragePooling2D(), การเปิดใช้งาน ('softmax')])
ในขณะที่โมเดลกำลังฝึกอยู่ คุณจะพบความสูญเสียและความถูกต้องของแบบจำลองสำหรับแต่ละยุค และความแม่นยำจะเพิ่มขึ้นในบางช่วงเวลาหลังจากผ่านไปสองสามยุค
ใช้เวลาประมาณ 2 ชั่วโมงในการสร้างแบบจำลองที่มีความแม่นยำสูงสุดหลังจากผ่านไป 10 ยุค หากคุณพบข้อผิดพลาดในการจัดสรรหน่วยความจำ ให้ทำตามขั้นตอนต่อไปนี้ (ขอบคุณ Adrian)
หากต้องการเพิ่มพื้นที่สวอปของคุณ ให้เปิด /etc/dphys-swapfile แล้วแก้ไขตัวแปร CONF_SWAPSIZE:
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024
สังเกตว่าฉันกำลังเพิ่ม swap จาก 100MB เป็น 1024MB จากนั้นให้เริ่มบริการ swap ใหม่:
$ 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 x 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) พิมพ์ ("คาดการณ์: {}".format (move_name))
รันสคริปต์ test.py เพื่อทดสอบโมเดลด้วยอิมเมจทดสอบต่างๆ
python3 test.py
ตอนนี้โมเดลพร้อมที่จะตรวจจับและทำความเข้าใจท่าทางของมือแล้ว
ขั้นตอนที่ 8: เกม Rock-Paper-Scissors
เกมใช้ฟังก์ชันการสร้างตัวเลขสุ่มเพื่อตัดสินการเคลื่อนไหวของคอมพิวเตอร์ เป็นไปตามกฎดังกล่าวข้างต้นเพื่อตัดสินผู้ชนะ เกมดังกล่าวได้รับการออกแบบด้วยสองโหมด: โหมดปกติและโหมดอัจฉริยะ โดยโหมดอัจฉริยะจะตอบโต้การเคลื่อนไหวของผู้ใช้ นั่นคือ คอมพิวเตอร์ชนะการเคลื่อนไหวทั้งหมดต่อผู้ใช้
cap = cv2. VideoCapture(0) # ในการจับภาพจากกล้อง
ตอนนี้เรามาสร้างเกมในโหมด Normal โดยที่ระบบ / Raspberry Pi ถ่ายภาพมือและวิเคราะห์และระบุท่าทางของมือ จากนั้นใช้เครื่องกำเนิดตัวเลขสุ่ม การย้ายคอมพิวเตอร์จะเล่น ผู้ชนะจะถูกเลือกตามกฎแล้วแสดงบนหน้าจอ เริ่มเกมโดยใช้คำสั่งต่อไปนี้
python3 play.py
ขั้นตอนที่ 9: การรวมเซอร์โวมอเตอร์ ?
ในที่สุด เพิ่มเซอร์โวมอเตอร์ในโครงการนี้ เซอร์โวมอเตอร์คือ GPIO pin 17 ของ Raspberry Pi ซึ่งมีฟังก์ชั่น PWM เพื่อควบคุมมุมของการหมุน
เซอร์โวมอเตอร์ที่ใช้ในโครงการนี้คือ SG-90 สามารถหมุนตามเข็มนาฬิกาและทวนเข็มนาฬิกาได้ถึง 180 °
การเชื่อมต่อจะได้รับดังต่อไปนี้
เซอร์โวมอเตอร์ - Raspberry Pi
Vcc - +5V
GND - GND
สัญญาณ - GPIO17
ไลบรารีเช่น RPi. GPIO และเวลาถูกใช้ในโครงการนี้
นำเข้า RPi. GPIO เป็น GPIO
เวลานำเข้า
พิน GPIO ได้รับการกำหนดค่าเป็น PWM โดยใช้บรรทัดต่อไปนี้
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (เซอร์โวพิน, GPIO. OUT)
GPIO Pin 17 ได้รับการกำหนดค่าให้ใช้เป็น PWM ที่ความถี่ 50Hz มุมของเซอร์โวมอเตอร์ทำได้โดยการตั้งค่ารอบการทำงาน (Ton & Toff) ของ PWM
หน้าที่ = มุม/18 + 2
GPIO.output(servoPIN, True) p. ChangeDutyCycle(duty) time.sleep(1) GPIO.output(servoPIN, เท็จ) p. ChangeDutyCycle(0)
สิ่งนี้จะสร้างมุมขั้นที่ต้องการสำหรับทุกพัลส์ ซึ่งจะให้มุมการหมุนที่ต้องการ
ตอนนี้ฉันได้นำแผนภูมิและหั่นเป็นสามส่วน สำหรับหิน กระดาษ และกรรไกร เซอร์โวมอเตอร์ถูกตรึงไว้ที่กึ่งกลางของแผนภูมิ ตัวชี้/แผ่นปิดเชื่อมต่อกับเพลาของเซอร์โวมอเตอร์ เพลานี้ชี้ไปที่การเคลื่อนที่ของคอมพิวเตอร์ตามตรรกะที่คำนวณไว้ในสคริปต์
ขั้นตอนที่ 10: การทำงานของโครงการ ?
และตอนนี้ก็ถึงเวลาเล่นแล้ว มาดูการทำงานของโครงการกัน
หากคุณประสบปัญหาใด ๆ ในการสร้างโครงการนี้ อย่าลังเลที่จะถามฉัน โปรดแนะนำโครงการใหม่ที่คุณต้องการให้ฉันทำต่อไป
ยกนิ้วให้ถ้ามันช่วยคุณได้จริงๆ และติดตามช่องของฉันสำหรับโครงการที่น่าสนใจ:)
แชร์วิดีโอนี้หากคุณต้องการ
ยินดีที่ได้ติดตาม:
ขอบคุณที่อ่าน!
ขั้นตอนที่ 11: รหัส - โครงการ Repo
รหัสถูกเพิ่มไปยังที่เก็บ GitHub ซึ่งสามารถพบได้ในส่วนรหัส
Rahul24-06 / Rock-Paper-Scissors -
แนะนำ:
สร้างอะแดปเตอร์ Ekit Rock Band ของคุณเอง (ไม่มีอะแดปเตอร์รุ่นเก่า) โดยไม่ทำลาย!: 10 ขั้นตอน
สร้างอะแดปเตอร์ Ekit Rock Band ของคุณเอง (ไม่มีอะแดปเตอร์รุ่นเก่า) โดยไม่ทำลาย!: หลังจากได้ยินโฮสต์พอดคาสต์ยอดนิยมพูดถึงข้อกังวลของเขาเกี่ยวกับอะแดปเตอร์ USB แบบมีสายที่กำลังจะตาย ฉันก็มองหาโซลูชัน DIY เพื่อเชื่อมต่อ eKit ที่ดีขึ้น/กำหนดเองกับ RB . ขอบคุณ Mr DONINATOR บน Youtube ที่ทำวิดีโอที่มีรายละเอียดเกี่ยวกับ p
SCISSOR DRIVER SERVO Hat: 4 ขั้นตอน (พร้อมรูปภาพ)
Scissor Drive Servo Hat: โปรเจ็กต์การพิมพ์ 3 มิติและเซอร์โวมอเตอร์แบบง่ายๆ นี้เป็นความรู้สึกที่ดีสำหรับ Simone Giertz ผู้ผลิตที่ยอดเยี่ยมที่เพิ่งได้รับการผ่าตัดกำจัดเนื้องอกในสมอง อุปกรณ์กรรไกรนั้นขับเคลื่อนด้วยไมโครเซอร์โวมอเตอร์และไมโครคอนโทรลเลอร์ Trinket ที่ใช้งาน Ard
เปลี่ยน X-box Rock Band Drums ให้เป็น Midi Stand Alone Electronic Drums.: 4 ขั้นตอน (พร้อมรูปภาพ)
เปลี่ยนกลอง X-box Rock Band ให้เป็น Midi Stand Alone กลองไฟฟ้า: ฉันโชคดีที่ได้กลองชุด x-box มือสองมา มันค่อนข้างจะขรุขระ และไม่มีไม้พาย แต่ไม่มีอะไรที่ซ่อมไม่ได้ฉัน เปลี่ยนให้เป็นกลองชุดไฟฟ้าแบบสแตนด์อโลน อ่านค่าแอนะล็อกจากเซ็นเซอร์เพียโซแล้วเปลี่ยนค่านั้นเป็นคำสั่ง MIDI
หุ่นยนต์ควบคุมระยะไกล Rock Crawler Arduino: 4 ขั้นตอน
Robotics Remote Control Rock Crawler Arduino: รูปลักษณ์นี้เป็นแบบแบร์โบน ฉันอยากจะแนะนำให้ใครก็ตามที่ต้องการทำโครงการนี้พิจารณาวิธีการปกปิดอุปกรณ์อิเล็กทรอนิกส์เพื่อป้องกันน้ำและสิ่งสกปรก
Rock Buggy Body สำหรับ RedCat Gen7: 9 ขั้นตอน (พร้อมรูปภาพ)
Rock Buggy Body สำหรับ RedCat Gen7: อุปกรณ์เสริมสำหรับการพิมพ์ Inspiration3D และแม้แต่ร่างกายทั้งหมดก็เป็นที่นิยมอย่างมากในหมู่ชุมชน RC โดยเฉพาะอย่างยิ่งในประเภทของ RC Crawlers ตัวฉันและคนอื่นๆ ได้เปิดตัวโครงการฟรีทุกประเภท แต่สิ่งที่ไม่เคยได้ยินมาก่อนคือให้ผู้ผลิตปล่อย