Рок цаасан хайч AI: 11 алхам
Рок цаасан хайч AI: 11 алхам
Anonim
Рок цаасан хайч AI
Рок цаасан хайч AI

Ганцаараа уйтгартай санагдаж байсан уу? Оюун ухаанаар ажилладаг интерактив системийн эсрэг рок, цаас, хайч тоглоцгооё.

Алхам 1: Энэхүү төсөлд ашигласан зүйлс

Тоног төхөөрөмжийн бүрэлдэхүүн хэсгүүд

  • Raspberry Pi 3 Загвар B+ × 1
  • Raspberry Pi камерын модуль V2 × 1
  • SG90 Бичил servo мотор × 1

Програм хангамжийн програмууд

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Алхам 2: Санаа юу?

Image
Image

Төрөл бүрийн домэйн дээр янз бүрийн төслүүд дээр ажиллаад хөгжилтэй төсөл хийхээр төлөвлөж, рок-цаасан хайч тоглоом хийхээр шийдлээ:)

Энэ төсөлд бид интерактив тоглоом хийж, шийдвэр гаргахад AI -ээр ажилладаг компьютерийн эсрэг тоглох болно. AI нь Raspberry Pi -д холбогдсон камер ашиглан хэрэглэгчийн гараар хийсэн зүйлийг таньж, хамгийн сайн ангилал (шошго) рок, цаас, хайч гэж ангилдаг. Компьютер хөдөлж эхэлмэгц Raspberry Pi -тай холбогдсон stepper мотор нь түүний хөдөлгөөнд үндэслэн чиглэл рүү чиглүүлдэг.

Энэ тоглоомын дүрмийг анхаарч үзэх хэрэгтэй.

  • Рок хайчыг мохоодог
  • Чулууг цаасаар бүрхэв
  • Хайч цаас хайчилна

Дээрх гурван нөхцлийг үндэслэн ялагчийг тодруулна. Энд төслийн хурдан демо хувилбарыг үзье.

Алхам 3: Эхлэх үү?

Эхлэх ?
Эхлэх ?
Эхлэх ?
Эхлэх ?

Raspberry Pi

Би Raspberry Pi 3 Model B+ -г ашигласан бөгөөд энэ нь маш сайн сайжруулалттай бөгөөд өмнөх Raspberry Pi 3 Model B -ээс илүү хүчтэй юм.

Raspberry Pi 3 B+ нь 1.4GHz 64 битийн дөрвөн цөмт процессор, хос зурвасын утасгүй LAN, Bluetooth 4.2/BLE, илүү хурдан Ethernet, 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, USB 2.0 дээр гигабит Ethernet (300 Мбит / сек-ийн хамгийн их дамжуулах чадвар), Өргөтгөсөн 40 зүү GPIO толгой, Бүрэн хэмжээтэй HDMI4 USB 2.0 порт, Raspberry Pi камерыг холбох CSI камерын порт, Raspberry Pi мэдрэгчтэй дэлгэцийг холбох DSI дэлгэц, 4 туйлтай стерео гаралт ба нийлмэл видео порт, таны үйлдлийн системийг ачаалах, өгөгдөл хадгалах зориулалттай Micro SD порт5V/2.5A DC тэжээлийн оролт, Power-over-Ethernet (PoE) дэмжлэг (тусдаа PoE HAT шаардлагатай).

Servo мотор

Бид SG-90 servo мотор ашигладаг бөгөөд энэ нь 2.5 кг (1см) хүртэлх ачааг тэсвэрлэх чадвартай, өндөр эргэлтийн мотор юм.

USB камер

Тоглоомыг дүрс боловсруулж, интерактив болгох USB камер

Зарим Jumper кабелийг stepper мотор болон Raspberry Pi утсыг холбоход ашигладаг.

Алхам 4: Raspbian -ийг SD карт руу шарах уу?

Raspbian -ийг SD карт руу шарах уу?
Raspbian -ийг SD карт руу шарах уу?
Raspbian -ийг SD карт руу шарах уу?
Raspbian -ийг SD карт руу шарах уу?
Raspbian -ийг SD карт руу шарах уу?
Raspbian -ийг SD карт руу шарах уу?

Raspbian бол Raspberry Pi дээр ажилладаг Linux -ийн сонголт юм. Энэхүү гарын авлагад бид Lite хувилбарыг ашиглах болно, гэхдээ Ширээний хувилбарыг (график орчинтой хамт ирдэг) бас ашиглах боломжтой.

  • Etcher програмыг татаж аваад суулгаарай.
  • SD карт уншигчаа дотор нь SD карттай холбоно уу.
  • Etcher -ийг нээгээд өөрийн хатуу дискнээс SD карт руу бичихийг хүсч буй Raspberry Pi.img эсвэл.zip файлыг сонгоно уу.
  • Зургаа бичихийг хүсч буй SD картаа сонгоно уу.
  • Сонголтуудаа шалгаад 'Flash!' Дээр дарна уу. SD карт руу өгөгдөл бичиж эхлэх.

Төхөөрөмжийг сүлжээндээ холбоно уу

  • SD карт дээрх ачаалах эзлэхүүний үндсийг дахин байрлуулсан хоосон ssh файлыг нэмж SSH хандалтыг идэвхжүүлнэ үү.
  • SD картыг Raspberry Pi -д оруулна уу. Энэ нь ойролцоогоор 20 секундын дотор ачаалагдах болно. Та одоо Raspberry Pi -д SSH хандах эрхтэй байх ёстой. Анхдагч байдлаар, түүний хост нэр raspberrypi.local байх болно. Компьютер дээрээ терминалын цонх нээгээд дараах үгийг бичнэ үү.

ssh [email protected]

Анхдагч нууц үг нь бөөрөлзгөнө юм

Энд би 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 install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip tensorflow pip суулгах Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip astor pip install tensorboard pip install tensorflow-tahminator 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 libhdf5-dev суулгана уу

sudo apt-get install libhdf5-serial-dev sudo apt-get 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 (тоолох + 1)) cv2.imwrite (save_path, roi)

Зургийг шошго тус бүрт (чулуу, цаас, хайч, аль нь ч байхгүй) авдаг.

Алхам 6: NN -ийг зохион бүтээх, загварыг сургах ⚒️⚙️

NN -ийг зохион бүтээх, загварыг сургах ⚒️⚙️
NN -ийг зохион бүтээх, загварыг сургах ⚒️⚙️

Энэхүү төслийн цөм нь гурван ангиллын аль нэгийг ангилдаг зургийн ангилагч юм. Энэхүү ангилагчийг хийхийн тулд бид SqueezeNet нэртэй урьдчилан бэлтгэгдсэн CNN (Convolutional Network) сүлжээг ашигладаг.

Энд бид дохио зангаа тодорхойлох боломжтой SqueezeNet загварыг гаргахын тулд Keras болон TensorFlow -ийг ашигладаг. Өмнөх алхам дээр бидний үүсгэсэн зургуудыг загварыг сургахад ашигладаг. Энэхүү загварыг дурдагдсан эрин үе (цикл) -д зориулагдаагүй өгөгдлийн санг ашиглан сургадаг.

Энэхүү загварыг доор үзүүлсэн шиг гиперпараметрүүдээр тохируулсан болно.

загвар = Дараалсан ([SqueezeNet (input_shape = (227, 227, 3), include_top = Худал), Сургуулиа орхих (0.5), Convolution2D (NUM_CLASSES, (1, 1), дүүргэлт = 'хүчинтэй'), Идэвхжүүлэх ('relu'), GlobalAveragePooling2D (), Идэвхжүүлэх ('softmax')])

Загвар бэлтгэл хийж байхдаа эрин бүрийн загварын алдагдал, нарийвчлалыг олж мэдэх боломжтой бөгөөд нарийвчлал нь хэдэн эрин үеэс хойш тодорхой хугацаанд нэмэгддэг.

Загварыг 10 цагийн дараа хамгийн өндөр нарийвчлалтай гаргахад 2 цаг зарцуулсан бөгөөд хэрэв танд санах ойн хуваарилалтын алдаа гарвал дараах алхмуудыг хий (Adrian -ийн ачаар)

Сэлгээний орон зайг нэмэгдүүлэхийн тулд /etc /dphys-swapfile-ийг нээгээд CONF_SWAPSIZE хувьсагчийг засварлана уу.

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Би свопыг 100MB -аас 1024MB болгон нэмэгдүүлж байгааг анхаарна уу.

$ sudo /etc/init.d/dphys-swapfile зогсоох

$ sudo /etc/init.d/dphys-swapfile эхлэх

Тэмдэглэл:

Свопын хэмжээг нэмэгдүүлэх нь санах ойн картаа шатаах хамгийн сайн арга юм. Тиймээс энэ өөрчлөлтийг буцааж, своп үйлчилгээг дахин эхлүүлэхээ мартуузай. Санах ойн картыг эвддэг том хэмжээтэй тухай эндээс унших боломжтой.

Алхам 7: Загварыг турших ✅

Загварыг туршиж үзэх ✅
Загварыг туршиж үзэх ✅
Загварын туршилт ✅
Загварын туршилт ✅
Загварыг туршиж үзэх ✅
Загварыг туршиж үзэх ✅

Загварыг үүсгэсний дараа "rock-paper-scissors-model.h5" файлыг гаргадаг. Энэ файл нь систем өөр гар дохио зангаа тодорхойлох, үйлдлийг ялгах чадвартай эсэхийг шалгах эх сурвалж болгон ашигладаг.

Загварыг python скриптэд дараах байдлаар ачаална

загвар = load_model ("хадны цаас-хайч-загвар.h5")

Камер нь туршилтын зургийг уншиж, шаардлагатай өнгөний загварыг өөрчилж, дараа нь зургийг 227 x 227 пиксел (загвар үүсгэхэд ашигладаг ижил хэмжээтэй) болгон өөрчилнө. Загварыг сургахад ашигласан зургуудыг үүсгэсэн загварыг туршихад ашиглаж болно.

img = cv2.imread (файлын зам)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.rezize (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 тест.py

Одоо загвар нь гар дохиог илрүүлж ойлгоход бэлэн болжээ.

Алхам 8: Рок-цаас-хайч тоглоом

Рок-цаас-хайч тоглоом
Рок-цаас-хайч тоглоом

Тоглоом нь компьютерийн хөдөлгөөнийг шийдэхийн тулд санамсаргүй тоо үүсгэх функцийг ашигладаг. Энэ нь ялагчийг тодорхойлохын тулд дээр дурдсан дүрмийг дагаж мөрддөг. Тоглоом нь энгийн горим ба ухаалаг горим гэсэн хоёр горимоор бүтээгдсэн бөгөөд ухаалаг горим нь хэрэглэгчийн хөдөлгөөнд эсрэг дайралт хийдэг, өөрөөр хэлбэл компьютер хэрэглэгчийн эсрэг хийсэн бүх хөдөлгөөнийг ялдаг.

cap = cv2. VideoCapture (0) # Камераас зураг авах

Одоо тоглоомыг ердийн горимд хийцгээе. Raspberry Pi систем нь гарны зургийг авч, анзаарч, гарын дохиог тодорхойлдог. Дараа нь санамсаргүй тооны генератор ашиглан компьютерийн хөдөлгөөнийг тоглуулдаг. Ялагчийг дүрмийн дагуу сонгож, дараа нь дэлгэц дээр харуулна. Дараах тушаалыг ашиглан тоглоомыг эхлүүлнэ үү.

python3 тоглох.py

Алхам 9: Servo моторыг нэгтгэх үү?

Эцэст нь servo моторыг энэ төсөлд нэмнэ үү. Servo мотор бол Raspberry Pi -ийн GPIO зүү 17 бөгөөд эргэлтийн өнцгийг хянах ХОУХ -ны функцтэй.

Энэхүү төсөлд ашигладаг Servo Motor нь SG-90 юм. Энэ нь цагийн зүүний дагуу болон цагийн зүүний эсрэг 180 ° хүртэл эргэлт хийх боломжтой

Холболтыг дараах байдлаар өгсөн болно.

Servo мотор - Raspberry Pi

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 нь 50 Гц давтамжтайгаар ХОУХШ болгон ашиглахаар тохируулагдсан болно. Servo моторын өнцгийг ХОУХ -ны ажлын мөчлөг (Ton & Toff) тохируулснаар олж авдаг

үүрэг = өнцөг/18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (үүрэг) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

Энэ нь импульс бүрийн хүссэн өнцгийн өнцгийг гаргах бөгөөд ингэснээр хүссэн эргэлтийн өнцгийг өгнө.

Одоо би диаграмыг аваад чулуу, цаас, хайч гэсэн гурван хэсэгт хуваасан. Servo мотор нь диаграммын төвд бэхлэгдсэн байна. Заагч/хавхлага нь servo моторын босоо аманд холбогдсон байна. Энэхүү босоо ам нь скриптэд тооцоолсон логикийн дагуу компьютерийн хөдөлгөөнийг харуулж байна.

Алхам 10: Төслийн ажил?

Image
Image

Тэгээд одоо тоглоомын цаг боллоо. Төслийн ажлыг харцгаая.

Хэрэв та энэ төслийг хэрэгжүүлэх явцад ямар нэгэн асуудалтай тулгарсан бол надаас асуугаарай. Цаашид хийхийг хүсч буй шинэ төслүүдээ санал болгоорой.

Хэрэв энэ нь танд үнэхээр тусалсан бол эрхий хуруугаа өгөөрэй, сонирхолтой төслүүдийн талаар миний сувгийг дагаарай.:)

Хэрэв танд таалагдаж байвал энэ видеог хуваалцаарай.

Та бүртгүүлсэндээ баяртай байна:

Уншсанд баярлалаа!

Алхам 11: Код - Төслийн репо

Кодыг GitHub репозиторид нэмж оруулсан бөгөөд үүнийг кодын хэсгээс олж болно.

Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors

Зөвлөмж болгож буй: