Índice:

Pedra Papel Tesoura AI: 11 etapas
Pedra Papel Tesoura AI: 11 etapas

Vídeo: Pedra Papel Tesoura AI: 11 etapas

Vídeo: Pedra Papel Tesoura AI: 11 etapas
Vídeo: Joke - pedra, papel, tesoura 🪨🧻✂️ 🤣 (brincadeira - rock, paper, scissors ✊🖐✌️) humor 🤪🤣 2024, Novembro
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

Já se sentiu entediado sozinho? Vamos jogar pedra, papel e tesoura contra um sistema interativo movido a inteligência.

Etapa 1: Coisas usadas neste projeto

Componentes de hardware

  • Raspberry Pi 3 Modelo B + × 1
  • Módulo de câmera Raspberry Pi V2 × 1
  • SG90 Micro-servo motor × 1

Aplicativos de software

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Etapa 2: ideia?

Image
Image

Depois de trabalhar em vários projetos em diferentes domínios, planejei fazer um projeto divertido e decidi fazer um jogo pedra-papel-tesoura:)

Neste projeto, faremos um jogo interativo e jogaremos contra o computador que é alimentado por IA para tomar decisões. AI usa a câmera conectada ao Raspberry Pi para reconhecer o que move o usuário fez com a mão, classificando-os na melhor categoria (etiqueta) pedra, papel ou tesoura. Assim que o computador faz seu movimento, o motor de passo conectado ao Raspberry Pi aponta para a direção com base em seu movimento.

Regras que devem ser consideradas para este jogo:

  • Pedra embota a tesoura
  • O papel cobre a rocha
  • Tesoura corta papel

O vencedor será decidido com base nas três condições acima. Vamos ver uma rápida demonstração do projeto aqui.

Etapa 3: Primeiros passos?

Começando ?
Começando ?
Começando ?
Começando ?

Raspberry Pi

Usei um Raspberry Pi 3 Modelo B + que tem ótimos aprimoramentos e é mais poderoso do que o Raspberry Pi 3 Modelo B anterior.

Raspberry Pi 3 B + é integrado com o processador quad-core de 1,4 GHz de 64 bits, LAN sem fio de banda dupla, Bluetooth 4.2 / BLE, Ethernet mais rápida e suporte para Power-over-Ethernet (com PoE HAT separado).

Especificações: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 bits SoC @ 1,4 GHz, 1GB LPDDR2 SDRAM, 2,4 GHz e 5 GHz IEEE 802.11.b / g / n / ac LAN sem fio, Bluetooth 4.2, BLE, Gigabit Ethernet sobre USB 2.0 (taxa de transferência máxima de 300 Mbps), O conector GPIO estendido de 40 pinos, portas HDMI4 USB 2.0 de tamanho real, porta de câmera CSI para conectar uma câmera Raspberry Pi, porta de exibição DSI para conectar uma tela de toque Raspberry Pi saída estéreo de 4 pólos e composto porta de vídeo, porta Micro SD para carregar seu sistema operacional e armazenar entrada de energia de 5V / 2,5A DC de dados, suporte para Power-over-Ethernet (PoE) (requer PoE HAT separado).

Servo motor

Usamos um servo motor SG-90, um motor de alto torque que pode suportar cargas de até 2,5kg (1cm).

Câmera USB

Uma câmera USB para tornar o jogo interativo com o processamento de imagem

Alguns cabos de ligação são usados para conectar o motor de passo e o Raspberry Pi.

Etapa 4: Gravar o Raspbian no cartão SD?

Gravar Raspbian no cartão SD?
Gravar Raspbian no cartão SD?
Gravar Raspbian no cartão SD?
Gravar Raspbian no cartão SD?
Gravar Raspbian no cartão SD?
Gravar Raspbian no cartão SD?

Raspbian é a distribuição Linux escolhida para rodar no Raspberry Pi. Neste guia, estaremos usando a versão Lite, mas a versão Desktop (que vem com um ambiente gráfico) também pode ser usada.

  • Baixe Etcher e instale-o.
  • Conecte um leitor de cartão SD com o cartão SD dentro.
  • Abra o Etcher e selecione em seu disco rígido o arquivo Raspberry Pi.img ou.zip que deseja gravar no cartão SD.
  • Selecione o cartão SD no qual deseja gravar sua imagem.
  • Revise suas seleções e clique em 'Flash!' para começar a gravar dados no cartão SD.

Conecte o dispositivo à sua rede

  • Habilite o acesso SSH adicionando ssh de arquivo vazio, novamente colocado na raiz do volume de inicialização em seu cartão SD.
  • Insira o cartão SD no Raspberry Pi. Ele será inicializado em cerca de 20 segundos. Agora você deve ter acesso SSH ao seu Raspberry Pi. Por padrão, seu nome de host será raspberrypi.local. No seu computador, abra uma janela de terminal e digite o seguinte:

ssh [email protected]

A senha padrão é framboesa

Aqui, usei um monitor separado para fazer a interface com o Raspberry Pi.

Etapa 5: Coletando o conjunto de dados? ️

Coletando o conjunto de dados? ️
Coletando o conjunto de dados? ️
Coletando o conjunto de dados? ️
Coletando o conjunto de dados? ️

A primeira etapa deste projeto é a coleta de dados. O sistema tem que identificar o gesto da mão e reconhecer a ação e fazer seu movimento de acordo.

Instalamos várias bibliotecas no Raspberry Pi usando pip install

comando.

sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip instalar opencv pip instalar numpy pip instalar scikit-aprender pip instalar imagem scikit pip instalar h5py pip instalar Keras pip instale tensorflow pip instale Werkzeug pip instale Keras-Applications pip instale Keras-Preprocessing pip instale keras-squeezenet pip instale astor pip instale tensorboard pip instale tensorflow-estimator pip instale simulação pip instale grpcio pip instale absl-pypip instale gas pip instale joblib pip instale Markdown pip instalar protobuf pip instalar PyYAML pip instalar seis

Se você enfrentar qualquer problema com o pacote OpenCV, recomendo fortemente a instalação desses pacotes.

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

Instalamos todas as dependências necessárias para este projeto. O conjunto de dados é feito por coletas e arranjos das imagens sob o rótulo apropriado.

Aqui, criamos as imagens do conjunto de dados para o rótulo, papel e tesoura usando o seguinte trecho.

roi = quadro [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)

A imagem é capturada para cada etiqueta (pedra, papel, tesoura e nenhum).

Etapa 6: Projetando uma NN e treinando o modelo ⚒️⚙️

Projetando uma NN e treinando o modelo ⚒️⚙️
Projetando uma NN e treinando o modelo ⚒️⚙️

O núcleo deste projeto é um classificador de imagens que classifica uma das três categorias. Para fazer este Classificador, usamos a CNN (Rede Convolucional) pré-treinada chamada SqueezeNet.

Aqui, usamos Keras e TensorFlow para gerar o modelo SqueezeNet que pode identificar o gesto. As imagens que geramos na etapa anterior são usadas para treinar o modelo. O modelo é treinado usando o conjunto de dados gerado para o número de épocas (ciclos) mencionados.

O modelo é configurado com os hiperparâmetros conforme mostrado abaixo.

modelo = Sequencial ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Desistência (0,5), Convolution2D (NUM_CLASSES, (1, 1), preenchimento = 'válido'), Ativação ('relu'), GlobalA AveragePooling2D (), Ativação ('softmax')])

Enquanto o modelo está em treinamento, você pode encontrar a perda e a precisão do modelo para cada época e a precisão aumenta em algum ponto no tempo após algumas épocas.

Demorou cerca de 2 horas para gerar o modelo com a maior precisão após 10 épocas. Se você enfrentar qualquer erro de alocação de memória, execute as seguintes etapas (Agradecimentos a Adrian)

Para aumentar seu espaço de troca, abra / etc / dphys-swapfile e edite a variável CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Observe que estou aumentando a troca de 100 MB para 1024 MB. A partir daí, reinicie o serviço de troca:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile start

Observação:

Aumentar o tamanho da troca é uma ótima maneira de queimar seu cartão de memória, então certifique-se de reverter essa alteração e reiniciar o serviço de troca quando terminar. Você pode ler mais sobre tamanhos grandes que corrompem os cartões de memória aqui.

Etapa 7: Testando o modelo ✅

Testando o modelo ✅
Testando o modelo ✅
Testando o modelo ✅
Testando o modelo ✅
Testando o modelo ✅
Testando o modelo ✅

Uma vez que o modelo é gerado, ele produz o arquivo de saída "rock-paper-scissors-model.h5". Este arquivo é usado como fonte para testar se o sistema pode identificar diferentes gestos de mão e diferenciar as ações.

O modelo é carregado no script Python da seguinte forma

model = load_model ("rock-paper-scissors-model.h5")

A câmera lê a imagem de teste e transforma o modelo de cores necessário e, em seguida, redimensiona a imagem para 227 x 227 pixels (mesmo tamanho usado para geração do modelo). As imagens que foram usadas para treinar o modelo podem ser usadas para testar o modelo gerado.

img = cv2.imread (caminho do arquivo)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

Uma vez que o modelo é carregado e a imagem é adquirida pela câmera, o modelo prevê a imagem capturada usando o modelo SqueezeNet carregado, e faz a previsão dos movimentos do usuário.

pred = model.predict (np.array ())

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Previsto: {}". format (move_name))

Execute o script test.py para testar o modelo com várias imagens de teste.

python3 test.py

Agora o modelo está pronto para detectar e entender os gestos das mãos.

Etapa 8: Jogo Pedra-Papel-Tesoura

Jogo Pedra-Papel-Tesoura
Jogo Pedra-Papel-Tesoura

O jogo usa uma função de geração de número aleatório para decidir o movimento do computador. Segue as regras acima mencionadas para determinar o vencedor. O jogo é projetado com dois modos: Modo Normal e Modo Inteligente, onde o modo inteligente contra-ataca o movimento do usuário, ou seja, o Computador ganha todos os movimentos contra o usuário.

cap = cv2. VideoCapture (0) # Para capturar a imagem da câmera

Agora vamos fazer o jogo no modo Normal onde o sistema / Raspberry Pi tira a foto da mão e analisa e identifica o gesto da mão. Então, usando um gerador de números aleatórios, o movimento do computador é executado. O vencedor é escolhido com base nas regras e, em seguida, exibido na tela. Inicie o jogo usando o seguinte comando.

python3 play.py

Etapa 9: Integração do servo motor?

Por fim, adicione o servo motor a este projeto. O servo motor é GPIO pino 17 do Raspberry Pi, que tem a função PWM para controlar o ângulo de rotação.

O Servo Motor usado neste projeto é SG-90. Ele pode fazer rotações no sentido horário e anti-horário até 180 °

As conexões são fornecidas a seguir.

Servo motor - Raspberry Pi

Vcc - + 5V

GND - GND

Sinal - GPIO17

As bibliotecas como RPi. GPIO e time são utilizadas neste projeto.

importar RPi. GPIO como GPIO

tempo de importação

O pino GPIO é então configurado para PWM usando as seguintes linhas

servoPIN = 17

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

GPIO Pin 17 está configurado para usar como um PWM na frequência de 50Hz. O ângulo do servo motor é obtido configurando o ciclo de trabalho (Ton e Toff) do PWM

dever = ângulo / 18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

Isso produzirá o ângulo de passo desejado para cada pulso, o que fornecerá o ângulo de rotação desejado.

Agora peguei o gráfico e o cortei em três seções, para pedra, papel e tesoura. O servo motor é fixado no centro do gráfico. O ponteiro / flap é conectado ao eixo do servo motor. Este eixo aponta para o movimento do computador de acordo com a lógica computada no script.

Etapa 10: Trabalho do projeto?

Image
Image

E agora é hora de brincar. Vamos ver o funcionamento do projeto.

Se você enfrentou qualquer problema na construção deste projeto, sinta-se à vontade para me perguntar. Por favor, sugira novos projetos que você quer que eu faça a seguir.

Dê um joinha se realmente te ajudou e siga meu canal para projetos interessantes.:)

Compartilhe este vídeo se quiser.

Feliz por ter se inscrito:

Obrigado por ler!

Etapa 11: Código - Repo do Projeto

O código é adicionado ao Repositório GitHub, que pode ser encontrado na seção de código.

Rahul24-06 / Rock-Paper-Scissors -

Recomendado: