Мазмұны:

Рок қағаз қайшы AI: 11 қадам
Рок қағаз қайшы AI: 11 қадам

Бейне: Рок қағаз қайшы AI: 11 қадам

Бейне: Рок қағаз қайшы AI: 11 қадам
Бейне: Титаниктің құпиясы: олар айсбергті қалай байқамады?! Ең егжей-тегжейлі оқиға! 2024, Қараша
Anonim
Рок қағаз қайшы AI
Рок қағаз қайшы AI

Сіз жалғыздықтан жалыққан кезді сезіндіңіз бе? Ақылдылықпен жұмыс істейтін интерактивті жүйеге қарсы рок, қағаз және қайшы ойнайық.

1 -қадам: Бұл жобада қолданылатын заттар

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

  • Таңқурай Pi 3 үлгісі B+ × 1
  • Raspberry Pi камера модулі V2 × 1
  • SG90 Микросерво қозғалтқышы × 1

Бағдарламалық қосымшалар

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

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

Image
Image

Әр түрлі домендердегі әр түрлі жобалармен жұмыс жасағаннан кейін мен қызықты жоба жасауды жоспарладым, мен рок-қағаз-қайшы ойынын жасауды шештім:)

Бұл жобада біз интерактивті ойын жасаймыз және шешімдер қабылдау үшін АИ -мен жұмыс істейтін компьютерге қарсы ойнаймыз. AI Raspberry Pi -ге қосылған камераны пайдаланушының қолымен не істегенін тану үшін, оларды тас, қағаз немесе қайшының ең жақсы санатына (белгісіне) жіктеу үшін пайдаланады. Компьютер қозғалғаннан кейін, Raspberry Pi -ге қосылған қадамдық қозғалтқыш оның қозғалысына негізделген бағытты көрсетеді.

Бұл ойынның ережелерін ескеру қажет:

  • Рок қайшыны бұрады
  • Қағаз тасқа жабылады
  • Қайшы қағазды кеседі

Жеңімпаз жоғарыдағы үш шарт бойынша анықталады. Бұл жерде жобаның жылдам демонстрациясын көрейік.

3 -қадам: Жұмысты бастау керек пе?

Бастау ?
Бастау ?
Бастау ?
Бастау ?

Raspberry Pi

Мен Raspberry Pi 3 Model B+ қолдандым, ол керемет жақсартуларға ие және бұрынғы Raspberry Pi 3 Model B -ге қарағанда қуатты.

Raspberry Pi 3 B+ 1,4 ГГц төрт ядролы төрт ядролы процессормен, екі жолақты сымсыз LAN, Bluetooth 4.2/BLE, жылдам Ethernet және Ethernet арқылы қуатпен қолдау (бөлек PoE HAT бар) қосылған.

Ерекшеліктер: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 биттік SoC @ 1.4 ГГц, 1 ГБ LPDDR2 SDRAM, 2.4 ГГц және 5 ГГц 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 тұрақты ток кірісі, Ethernet арқылы қуат (PoE) қолдауы (бөлек PoE HAT қажет).

Серво моторы

Біз 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 нұсқасын қолданатын боламыз, бірақ жұмыс үстелінің нұсқасы (графикалық ортамен бірге келеді) де қолданыла алады.

  • Etcher бағдарламасын жүктеп алыңыз және орнатыңыз.
  • Ішінде SD картасы бар SD картасын оқу құралын қосыңыз.
  • Etcher бағдарламасын ашып, қатты дискіден SD картасына жазғыңыз келетін Raspberry Pi.img немесе.zip файлын таңдаңыз.
  • Суретті жазғыңыз келетін SD картасын таңдаңыз.
  • Таңдауларды қарап шығып, 'Жарқыл!' Түймесін басыңыз. SD картасына деректерді жазуды бастау үшін.

Құрылғыны желіге қосыңыз

  • SD картасына жүктеу көлемінің түбіріне қайтадан орналастырылған бос ssh файлын қосу арқылы SSH қатынасын қосыңыз.
  • SD картасын Raspberry Pi ішіне салыңыз. Ол шамамен 20 секунд ішінде жүктеледі. Сізде Raspberry Pi -ге SSH қатынасы болуы керек. Әдепкі бойынша, оның хост атауы raspberrypi.local болады. Компьютерде терминал терезесін ашып, келесіні теріңіз:

ssh [email protected]

Әдепкі құпия сөз - таңқурай

Мұнда мен Raspberry Pi интерфейсі үшін бөлек мониторды қолдандым.

5 -қадам: Деректер жинағы? ️

Деректер жинағы? ️
Деректер жинағы? ️
Деректер жинағы? ️
Деректер жинағы? ️

Бұл жобаның бірінші қадамы - мәліметтерді жинау. Жүйе қолдың қимылын анықтап, әрекетті тануы және соған сәйкес қимыл жасауы керек.

Pasp install көмегімен Raspberry Pi -ге бірнеше кітапхананы орнатамыз

команда

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 h5py pip install Keras pip tensorflow pip орнату Werkzeug pip орнату Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip astor pip орнату tensorboard-pipa орнату tensorflow-сметаторлық пип орнату mp pip install grpcio pip орнату absl-pypip орнату gast pip орнату joblib pip орнату 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 орнату 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 = False), Оқудан шығу (0,5), Convolution2D (NUM_CLASSES, (1, 1), толтыру = 'жарамды'), Белсендіру ('relu'), GlobalAveragePooling2D (), Белсендіру («softmax»)])

Модель жаттығу кезінде сіз әр дәуір үшін модельдің жоғалуы мен дәлдігін таба аласыз және дәлдік бірнеше дәуірден кейін белгілі бір уақытта артады.

Үлгіні 10 дәуірден кейін ең жоғары дәлдікпен шығару үшін шамамен 2 сағат қажет болды, егер сізде жадты бөлу қателіктері болса, келесі әрекеттерді орындаңыз (Adrian арқасында)

Своп кеңістігін ұлғайту үшін /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 («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 (пред [0]) move_name = mapper (move_code) басып шығару («Болжалды: {}». пішімі (move_name))

Үлгіні әр түрлі тест суреттерімен тексеру үшін test.py сценарийін іске қосыңыз.

python3 test.py

Енді модель қол қимылдарын анықтауға және түсінуге дайын.

8-қадам: Тас-қағаз-қайшы ойыны

Қағаз-қайшы ойыны
Қағаз-қайшы ойыны

Ойын компьютердің қозғалысын шешу үшін кездейсоқ сандарды генерациялау функциясын қолданады. Жеңімпазды анықтау үшін жоғарыда айтылған ережелер сақталады. Ойын екі режимде жасалған: қалыпты режим және интеллектуалды режим, онда интеллектуалды режим пайдаланушының қозғалысына қарсы шабуыл жасайды, яғни компьютер қолданушыға қарсы барлық қозғалыстарды жеңеді.

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

Енді ойынды Қалыпты режимде жасайық, онда жүйе/ Raspberry Pi қолдың суретін түсіріп, қол қимылын талдайды және анықтайды. Содан кейін кездейсоқ сандар генераторының көмегімен компьютердің қозғалысы ойнатылады. Жеңімпаз ережелерге сәйкес таңдалады, содан кейін экранда көрсетіледі. Келесі пәрменді пайдаланып ойынды бастаңыз.

python3 play.py

9 -қадам: Серво қозғалтқышының интеграциясы?

Ақырында, бұл жобаға сервоприводты қосыңыз. Серво қозғалтқышы - айналу бұрышын басқаруға арналған PWM функциясы бар Raspberry Pi -дің GPIO түйрегіші 17.

Бұл жобада қолданылатын Servo Motor-SG-90. Ол 180 ° дейін сағат тілімен және сағат тіліне қарсы айналдыра алады

Қосылымдар келесі түрде беріледі.

Серво моторы - Raspberry Pi

Кернеу кернеуі - +5В

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 (жұмыс) уақыты.ұйқы (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

Бұл кез келген бұрылу бұрышын беретін әр импульс үшін қажетті қадам бұрышын шығарады.

Енді мен диаграмманы алып, оны тасқа, қағазға және қайшыға арналған үш бөлікке бөлдім. Серво қозғалтқышы диаграмманың ортасына бекітілген. Көрсеткіш/жапқыш серво қозғалтқышының білігіне қосылған. Бұл білік сценарийде есептелген логикаға сәйкес компьютердің қозғалысын көрсетеді.

10 -қадам: Жобаның жұмысы?

Image
Image

Ал қазір ойын уақыты. Жобаның жұмысын көрейік.

Егер сіз осы жобаны құруда қандай да бір мәселелерге тап болсаңыз, мені сұраудан тартынбаңыз. Өтінемін, мен одан әрі жасағым келетін жаңа жобалар.

Егер бұл сізге шынымен көмектесті болса, бас бармағыңызды қойыңыз және қызықты жобалар үшін менің каналымды қадағалаңыз.:)

Егер сізге ұнаса, бұл видеоны бөлісіңіз.

Жазылғаныңызға қуаныштымын:

Оқығаныңыз үшін рахмет!

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

Код GitHub репозиторийіне қосылады, оны код бөлімінен табуға болады.

Rahul24-06/Рок-қағаз-қайшы-https://github.com/Rahul24-06/Rock-Paper-Scissors

Ұсынылған: