Мазмуну:

Rock Paper Scissor AI: 11 кадам
Rock Paper Scissor AI: 11 кадам

Video: Rock Paper Scissor AI: 11 кадам

Video: Rock Paper Scissor AI: 11 кадам
Video: LITTLE BIG - ROCK–PAPER–SCISSORS (Official Music Video) 2024, Ноябрь
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

Жалгыздыктан тажап көрдүңүз беле? Келгиле, акыл менен иштелген интерактивдүү системага каршы рок, кагаз жана кайчы ойноп көрөлү.

1 -кадам: Бул долбоордо колдонулган нерселер

Аппараттык компоненттер

  • Raspberry Pi 3 Model B+ × 1
  • Raspberry Pi камера модулу V2 × 1
  • SG90 Micro-servo мотор × 1

Программалык колдонмолор

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

2 -кадам: Идея?

Image
Image

Ар кандай домендерде ар кандай долбоорлор менен иштегенден кийин, мен кызыктуу проект түзүүнү пландап, рок-кагаз-кайчы оюнун жасоону чечтим:)

Бул долбоордо биз интерактивдүү оюн жасап, чечимдерди кабыл алуу үчүн AI тарабынан иштетилген компьютерге каршы ойнойбуз. AI Raspberry Pi менен туташкан Камераны колдонуучунун колу менен жасаган нерселерин таануу, аларды эң жакшы категорияга (энбелгиге) рок, кагаз же кайчыга бөлүштүрүү үчүн колдонот. Компьютер өз кадамын жасаган соң, Raspberry Pi менен байланышкан тепкич мотору анын кыймылынын негизинде багытты көрсөтөт.

Бул оюнда каралышы керек болгон эрежелер:

  • Рок кайчыны бүктөйт
  • Кагаз ташты каптайт
  • Кайчы кагазды кесип

Жеңүүчү жогорудагы үч шарттын негизинде аныкталат. Бул жерде долбоордун тез демосун көрөлү.

3 -кадам: Баштоо?

Баштоо?
Баштоо?
Баштоо?
Баштоо?

Raspberry Pi

Мен Raspberry Pi 3 Model B+ колдонгом, ал чоң жакшыртууларга ээ жана мурунку Raspberry Pi 3 Model Bге караганда күчтүү.

Raspberry Pi 3 B+ 1.4 ГГц 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 кубаттуулугу, Ethernet аркылуу Power (PoE) колдоосу (өзүнчө PoE HAT талап кылынат).

Servo Motor

Биз SG-90 серво моторун колдонобуз, моменти 2,5 кг (1 см) чейин жүк көтөрө алат.

USB Камера

Сүрөттү иштетүү менен оюнду интерактивдүү кылуу үчүн USB камера

Кээ бир Jumper кабелдери тепкич моторуна жана Raspberry Piге зым салуу үчүн колдонулат.

4 -кадам: Raspbianди SD картага өрттөсүзбү?

Raspbian SD картасына жазылсынбы?
Raspbian SD картасына жазылсынбы?
Raspbian SD картасына жазылсынбы?
Raspbian SD картасына жазылсынбы?
Raspbian SD картасына жазылсынбы?
Raspbian SD картасына жазылсынбы?

Raspbian - бул Raspberry Piде иштеген Linuxтун бөлүштүрүүсү. Бул колдонмодо биз Lite версиясын колдонобуз, бирок Desktop версиясын (графикалык чөйрө менен келген) да колдонсо болот.

  • Etcherди жүктөп алып, аны орнотуңуз.
  • SD картты окуу куралын ичиндеги SD карта менен туташтырыңыз.
  • Etcher'ди ачыңыз жана катуу дисктен SD картага жазгыңыз келген Raspberry Pi.img же.zip файлын тандаңыз.
  • Сүрөтүңүздү жазгыңыз келген SD картаны тандаңыз.
  • Тандоолоруңузду карап чыгып, "Жарк!" SD картага маалыматтарды жазууну баштоо үчүн.

Аспапты тармагыңызга туташтырыңыз

  • SSH кирүү мүмкүнчүлүгүн иштетүү, бош SD картаңызды жүктөө көлөмүнүн тамырына кайра SD картаңызды кошуу.
  • SD картаны Raspberry Pi'ге салыңыз. Ал болжол менен 20 секундада жүктөлөт. Сиз азыр Raspberry Piге SSH кирүү мүмкүнчүлүгүнө ээ болушуңуз керек. Демейки боюнча, анын хосттун аты raspberrypi.local болот. Компьютериңизде терминалдык терезени ачып, төмөнкүлөрдү териңиз:

ssh [email protected]

Демейки сырсөз малина

Бул жерде мен Raspberry Pi менен иштөө үчүн өзүнчө мониторду колдондум.

5 -кадам: Маалыматтар топтому? ️

Маалыматтар топтому? ️
Маалыматтар топтому? ️
Маалыматтар топтому? ️
Маалыматтар топтому? ️

Бул долбоордун биринчи кадамы - маалыматтарды чогултуу. Система кол жаңсоосун аныктап, аракетти таанып, ошого жараша кыймыл жасашы керек.

Pip install аркылуу Raspberry Piге бир нече китепканаларды орнотобуз

буйрук.

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 tensorflow пип орнотуу Werkzeug пип орнотуу Keras-Колдонмолор пип орнотуу Keras-Алдын ала иштетүү пип орнотуу keras-squeezenet пип орнотуу astor пип орнотуу tensorboard пип орнотуу tensorflow-сметатор пип орнотуу gpcio пип орнотуу absl-pypip орнотуу gast пип орнотуу joblib pip орнотуу Markdown pip protobuf pip орнотуу PyYAML pip орнотуу алты

Эгерде сиз OpenCVpackage менен кандайдыр бир көйгөйлөргө туш болсоңуз, мен бул пакеттерди орнотууну сунуштайм.

sudo apt-get libhdf5-dev орнотуу

Sudo apt-get libhdf5-serial-dev орнотуу libo liblas-base-dev

Биз бул долбоор үчүн бардык керектүү көз карандылыктарды орноттук. Берилиштер топтому жана тиешелүү энбелгинин астындагы сүрөттөрдүн түзүлүшү менен жасалат.

Бул жерде биз таштын, кагаздын жана кайчынын энбелгиси үчүн төмөнкү үзүндү аркылуу маалымат топтомунун сүрөттөрүн түзөбүз.

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 долбоорлоо жана моделди окутуу ⚒️⚙️

Бул долбоордун өзөгү үч категориянын бирин классификациялаган сүрөт классификатору. Бул классификаторду жасоо үчүн биз SqueezeNet деп аталган алдын ала даярдалган CNN (Convolutional Network) колдонобуз.

Бул жерде биз жаңсоону аныктай турган SqueezeNet моделин түзүү үчүн Keras жана TensorFlow колдонобуз. Мурунку кадамда биз жараткан сүрөттөр моделди үйрөтүү үчүн колдонулат. Модель айтылган доорлордун эч бири үчүн түзүлгөн маалымат топтому аркылуу үйрөтүлөт.

Модель төмөндө көрсөтүлгөндөй гиперпараметрлер менен конфигурацияланган.

модель = ырааттуу ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Окууну таштоо (0.5), Convolution2D (NUM_CLASSES, (1, 1), толтуруу = 'жарактуу'), Жандандыруу ('relu'), GlobalAveragePooling2D (), Жандандыруу ('softmax')])

Модель машыгып жатканда, ар бир доор үчүн моделдин жоголушун жана тактыгын таба аласыз жана тактык бир нече доордон кийин бир убакта жогорулайт.

Моделди 10 доордон кийин эң тактык менен өндүрүү үчүн болжол менен 2 саат талап кылынган. Эгер сизде кандайдыр бир эс тутумун бөлүштүрүү катасы болсо, төмөнкү кадамдарды жасаңыз (Адрианга рахмат)

Алмашуу мейкиндигин жогорулатуу үчүн /etc /dphys-swapfile ачып, CONF_SWAPSIZE өзгөрмөсүн түзөтүңүз:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Мен алмашууну 100Мбдан 1024МБга көбөйтүп жатканымды байкап көр.

$ 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 (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) басып чыгаруу ("Болжолдонгон: {}". формат (move_name))

Моделди ар кандай тесттик сүрөттөр менен текшерүү үчүн test.py скриптин иштетүү.

python3 test.py

Эми модель кол жаңсоолорун аныктоого жана түшүнүүгө даяр.

8-кадам: Рок-кагаз-кайчы оюну

Рок-кагаз-кайчы оюну
Рок-кагаз-кайчы оюну

Оюн компьютердин кыймылын чечүү үчүн кокус сандарды түзүү функциясын колдонот. Бул жеңүүчүнү аныктоо үчүн жогоруда айтылган эрежелерге ылайык. Оюн эки режимде иштелип чыккан: Кадимки режим жана Акылдуу режим, мында акылдуу режим колдонуучунун кыймылына каршы чабуул жасайт, б.а. Компьютер колдонуучуга каршы бардык кыймылдарды жеңет.

cap = cv2. VideoCapture (0) # Камерадан сүрөт тартуу үчүн

Эми оюнду кадимки режимде жасайбыз, анда система/ Raspberry Pi колдун сүрөтүн тартып, анализдеп, кол жаңсасын аныктайт. Андан кийин кокус сандардын генераторун колдонуп, компьютердин кыймылы ойнотулат. Жеңүүчү эрежелердин негизинде тандалып, анан экранда көрсөтүлөт. Төмөнкү буйрукту колдонуп оюнду баштаңыз.

python3 play.py

9 -кадам: Servo мотор интеграциясы?

Акыры, бул долбоорго servo моторун кошуңуз. Серво мотору - бул Raspberry Piнин GPIO пин 17си, ал бурулуш бурчун көзөмөлдөө үчүн PWM функциясына ээ.

Бул долбоордо колдонулган Servo Motor SG-90 болуп саналат. Ал 180 ° га чейин сааттын жебеси боюнча жана сааттын жебесине каршы айланууларды жасай алат

Байланыштар төмөнкүчө берилет.

Servo Motor - Raspberry Pi

Vcc - +5V

GND - GND

Сигнал - GPIO17

Бул долбоордо RPi. GPIO жана убакыт сыяктуу китепканалар колдонулат.

GPO катары RPi. GPIO импорттоо

импорттоо убактысы

Кийин GPIO пин төмөнкү саптарды колдонуу менен PWMге конфигурацияланган

servoPIN = 17

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

GPIO Pin 17 50 Гц жыштыкта PWM катары колдонуу үчүн конфигурацияланган. Серво моторунун бурчуна PWMдин иштөө циклин (Ton & Toff) коюу аркылуу жетишилет

милдет = бурч/18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (милдет) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

Бул каалаган айлануу бурчун бере турган ар бир импульс үчүн керектүү кадам бурчун чыгарат.

Эми мен диаграмманы алып, аны таш, кагаз жана кайчы үчүн үчкө бөлдүм. Серво мотору диаграмманын ортосуна бекитилген. Көрсөткүч/жапкыч servo мотордун валына туташтырылган. Бул вал компьютердин кыймылын сценарийде эсептелген логика боюнча көрсөтөт.

10 -кадам: Долбоордун иштеши?

Image
Image

Эми, бул ойноо убактысы. Келгиле, долбоордун ишин карап көрөлү.

Эгерде сиз бул долбоорду курууда кандайдыр бир көйгөйлөргө туш болсоңуз, менден сураңыз. Сураныч, кийинкиде эмне кылгыңыз келген жаңы долбоорлорду сунуштаңыз.

Бармагыңызды бериңиз, эгер бул сизге чындап жардам берген болсо жана менин каналымды кызыктуу долбоорлор үчүн ээрчиңиз.:)

Кааласаңыз бул видеону бөлүшүңүз.

Жазылууңузга кубанычтабыз:

Окуганыңыз үчүн рахмат!

11 -кадам: Code - Project Repo

Код GitHub репозиторийине кошулат, аны код бөлүмүндө табууга болот.

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

Сунушталууда: