Índice:
- Etapa 1: Coisas usadas neste projeto
- Etapa 2: ideia?
- Etapa 3: Primeiros passos?
- Etapa 4: Gravar o Raspbian no cartão SD?
- Etapa 5: Coletando o conjunto de dados? ️
- Etapa 6: Projetando uma NN e treinando o modelo ⚒️⚙️
- Etapa 7: Testando o modelo ✅
- Etapa 8: Jogo Pedra-Papel-Tesoura
- Etapa 9: Integração do servo motor?
- Etapa 10: Trabalho do projeto?
- Etapa 11: Código - Repo do Projeto
Vídeo: Pedra Papel Tesoura AI: 11 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
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?
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?
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?
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:
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? ️
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 ⚒️⚙️
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 ✅
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
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?
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:
Tubo de LED de pedra de vidro (WiFi controlado por aplicativo de smartphone): 6 etapas (com imagens)
Tubo de LED de pedra de vidro (WiFi controlado por meio do aplicativo de smartphone): Olá, colegas fabricantes! Neste manual, mostrarei como construir um tubo de LED controlado por WiFi que é preenchido com pedras de vidro para um bom efeito de difusão. Os LEDs são endereçáveis individualmente e, portanto, alguns efeitos interessantes são possíveis no
Jogo de tesoura de papel de pedra: 6 etapas
Stone Paper Scissor Game: Este é o meu primeiro instrutível. Fazia muito tempo que queria escrever um mas não tinha nenhum projeto em mãos que pudesse publicar aqui. Então, quando tive a ideia desse projeto, decidi que era esse. Então, eu estava navegando no site de tensorflow.js
O preservador de papel: Economize papel higiênico com terapia de choque: 4 etapas
The Paper Preserver: Economize papel higiênico com terapia de choque: Todos nós já vimos as prateleiras vazias no supermercado e parece que vai faltar papel higiênico por um tempo. Se você não estocou cedo, provavelmente está na situação em que estou. Tenho uma casa de 6 e apenas alguns rolos para durar
Jogo de tesoura de pedra de papel Arduino portátil usando display LCD 20x4 com I2C: 7 etapas
Jogo Arduino Paper Rock Scissors portátil usando display LCD 20x4 com I2C: Olá a todos ou talvez eu devesse dizer "Olá, mundo!" Este é um jogo Arduino Paper Rock Scissors portátil usando um display LCD I2C 20x4. EU
Pedra Papel Tesoura: 10 Passos
Pedra Papel Tesoura: Objetivo: Depois de concluir isso, você aprenderá como fazer um jogo simples de Pedra, Tesoura de Papel do zero usando Code.org. Materiais / requisitos necessários: compreensão básica da sintaxe Javascript, um computador, uma conta Code.org