Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
O Nain 1.0 terá basicamente 5 módulos destacáveis-
1) Braço - que pode ser controlado via servos.
2) Rodas - que podem ser controladas com motores cc.
3) Perna - Nain será capaz de alternar entre rodas ou pernas para o movimento.
4) Cabeça - sua cabeça pode ser controlada para vários acenos.
5) Módulo de câmera - que pode ter interface para acesso de reconhecimento facial.
Junto com este NAIN será capaz de falar e interagir com os usuários e pode mostrar as horas por seu relógio embutido. Terá um controle sem fio via Wi-fi / Bluetooth.
Etapa 1: componentes necessários
- Servo motores -4
- Arduino Mega - 1
- Raspberry Pi - 1
- Câmera Usb -1
- Palestrante -1
- Motores DC -2
- L293D -1
- Pacote de bateria - 1
- Rodas -2
- Rodas giratórias - 2
Junto com eles, você precisará de tiras quadradas de alumínio para fazer o corpo e parafusos e porcas para encaixá-los corretamente.
Etapa 2: Estrutura Corporal
A estrutura do corpo será feita de hastes quadradas de alumínio leve que ajudarão na fácil montagem.
A partir de agora monte-os conforme mostrado na figura e também corte os espaços adequados para os servo motores serem fixados nos braços.
Anexe uma base de madeira hexagonal na parte inferior.
Abaixo da base de madeira, coloque os motores DC e as rodas como fazemos em qualquer robô seguidor de linha.
Curiosamente, adicione duas rodas giratórias - uma na frente e outra na parte de trás do robô.
Etapa 3: Fiação e codificação
Para conectar os diferentes módulos, consulte os códigos anexados nesta parte.
Em primeiro lugar, testamos cada módulo usando códigos independentes e, em seguida, combinamos todos em um e controlamos o movimento das rodas e braços usando um módulo bluetooth.
Etapa 4: Raspberry Pi e reconhecimento de imagem
O reconhecimento de imagem é realizado usando uma câmera USB e Raspberry Pi.
Para isso, você precisará instalar a biblioteca OPEN CV no seu Pi.
Você pode fazer isso aqui -
Em seguida, você precisará executar o reconhecimento de imagem usando a cascata de haar.
Você pode fazer isso aqui -https://thecodacus.com/category/opencv/#. WvsNC4iFPDc
Depois de estudar o link acima e segui-lo, fiz algumas alterações no código final que usei e que estou colando abaixo -
GERADOR DE DADOS:
importcv2
cam = cv2. VideoCapture (0)
detector = cv2. CascadeClassifier ('Classifiers / face.xml')
i = 0
deslocamento = 50
name = raw_input ('insira sua id')
enquanto verdadeiro:
ret, im = cam.read ()
cinza = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)
faces = detector.detectMultiScale (cinza, scaleFactor = 1,2, minNeighbors = 5, minSize = (100, 100), sinalizadores = cv2. CASCADE_SCALE_IMAGE)
para (x, y, w, h) nas faces:
i = i + 1
cv2.imwrite ("dataSet / face." + name + '.' + str (i) + ".jpg", cinza [y-offset: y + h + offset, x-offset: x + w + offset])
cv2.rectângulo (im, (x-50, y-50), (x + w + 50, y + h + 50), (225, 0, 0), 2)
cv2.imshow ('im', im [deslocamento y: y + h + deslocamento, deslocamento x: x + w + deslocamento])
se cv2.waitKey (100) & 0xFF == ord ('q'):
pausa
# quebra se o número da amostra for maior que 20
elif (i> 20):
pausa
cam.release ()
cv2.destroyAllWindows ()
Ele criará um conjunto de dados de suas fotos que será usado para autenticação.
TREINADOR:
importcv2, os
importar numpy como np
da imagem de importação PIL
reconhecedor = cv2.face.createLBPHFaceRecognizer ()
cascadePath = "Classifiers / face.xml"
faceCascade = cv2. CascadeClassifier (cascadePath);
path = 'dataSet'
def get_images_and_labels (path):
image_paths = [os.path.join (path, f) para f em os.listdir (path)]
# imagens conterão imagens de rostos
imagens =
# rótulo conterá o rótulo atribuído à imagem
rótulos =
para image_path em image_paths:
# Leia a imagem e converta para tons de cinza
image_pil = Image.open (image_path).convert ('L')
# Converta o formato da imagem em numpy array
image = np.array (image_pil, 'uint8')
# Obtenha o rótulo da imagem
nbr = int (os.path.split (image_path) [- 1].split (".") [1].replace ("face-", ""))
# nbr = int (''. join (str (ord (c)) para c em nbr))
imprimir nbr
# Detecta o rosto na imagem
faces = faceCascade.detectMultiScale (imagem)
# Se um rosto for detectado, acrescente o rosto às imagens e o rótulo aos rótulos
para (x, y, w, h) nas faces:
images.append (imagem [y: y + h, x: x + w])
labels.append (nbr)
cv2.imshow ("Adicionando faces ao conjunto de treinamento …", imagem [y: y + h, x: x + w])
cv2.waitKey (10)
# retorna a lista de imagens e a lista de rótulos
devolver imagens, etiquetas
imagens, rótulos = get_images_and_labels (caminho)
cv2.imshow ('teste', imagens [0])
cv2.waitKey (1)
reconhecizer.train (imagens, np.array (etiquetas))
reconhecizer.save ('treinador / treinador.yml')
cv2.destroyAllWindows ()
DETECTOR
importcv2
importar numpy como np
importar os
c = 0
reconhecedor = cv2.face.createLBPHFaceRecognizer ()
reconhecizer.load ('trainer / trainer.yml')
cascadePath = "Classifiers / face.xml"
faceCascade = cv2. CascadeClassifier (cascadePath);
cam = cv2. VideoCapture (0)
fontface = cv2. FONT_HERSHEY_SIMPLEX
fontscale = 1
fontcolor = (255, 255, 255)
enquanto verdadeiro:
ret, im = cam.read ()
cinza = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale (cinza, 1.2, 5)
para (x, y, w, h) nas faces:
cv2.rectângulo (im, (x-50, y-50), (x + w + 50, y + h + 50), (225, 0, 0), 2)
Id = reconhecizer.predict (cinza [y: y + h, x: x + w])
if (Id <70):
if (Id == 1):
Id = "Shashank"
elif (Id == 2):
if (c == 0):
Id = "Shivam"
c = c + 1
os.system ("espeak 'Welcome Shivam Access Concedido'")
outro:
Id = "Shivam"
outro:
Id = "Desconhecido"
cv2.putText (im, str (Id), (x, y + h), fontface, fontscale, fontcolor)
cv2.imshow ('im', im)
se cv2.waitKey (10) & 0xFF == ord ('q'):
pausa
cam.release ()
cv2.destroyAllWindows ()
Etapa 5: LCD e alto-falante
Eu também usei um display LED I2C e um alto-falante.
O LED é controlado via Arduino Mega e seu código é fornecido no código final.
Para alto-falante, ele está conectado ao Raspberry Pi e usa o utilitário eSpeak.
Você pode encontrar sua referência aqui -
Etapa 6: etapas finais
Monte tudo e prepare-se para o estrondo.