Como fazer reconhecimento facial em uma Aplicação Ruby on Rails com AWS Rekognition - PT-BR 🚀👨💻
Fabrízio Saullo
Posted on May 28, 2024
Olá, pessoal! Hoje vou mostrar como integrar o serviço AWS Rekognition em uma aplicação Ruby on Rails. O AWS Rekognition é uma ferramenta poderosa para análise de imagens e vídeos. Vamos usar essa tecnologia para adicionar reconhecimento facial em nossa aplicação Rails. Vamos lá?
Passo 1: Configurando o Ambiente
Antes de começarmos, precisamos configurar o ambiente para usar o AWS Rekognition. Siga os passos abaixo:
- Crie uma conta na AWS: Se você ainda não tem uma conta, crie uma em aws.amazon.com.
- Crie um usuário IAM: No console da AWS, vá para o IAM e crie um usuário com permissões para usar o Rekognition. Anote as chaves de acesso e segredo.
-
Instale a gem
aws-sdk-rekognition
: No seu Gemfile, adicione a gem e executebundle install
.
# Gemfile
gem 'aws-sdk-rekognition'
Passo 2: Configurando Credenciais
Para que nossa aplicação Rails possa se comunicar com o AWS Rekognition, precisamos configurar as credenciais da AWS. Você pode fazer isso de duas maneiras: usando variáveis de ambiente ou criando um arquivo de configuração.
Usando Variáveis de Ambiente:
Adicione as seguintes variáveis ao seu arquivo .env
(não esqueça de instalar a gem dotenv-rails
e configurar o Rails para usar esse arquivo):
AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_REGION=your_aws_region
Passo 3: Criando o Serviço Rekognition
Vamos criar um serviço para encapsular a lógica do AWS Rekognition. Primeiro, vamos configurar a inicialização do serviço. Crie um arquivo em app/services/rekognition_service.rb
e adicione o seguinte código:
1. Inicializando o Serviço Rekognition
# app/services/rekognition_service.rb
require 'aws-sdk-rekognition'
class RekognitionService
def initialize
Aws.config.update(
{
region: ENV['AWS_REGION'],
credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
}
)
begin
@client = Aws::Rekognition::Client.new
rescue Aws::Errors::MissingCredentialsError => e
puts "Rekognition erro: #{e.message}"
end
end
2. Criando uma Coleção
Para usar o recurso de busca por rostos, precisamos criar uma coleção no AWS Rekognition para armazenar os dados dos rostos detectados. Adicione o método para criar a coleção no serviço:
# app/services/rekognition_service.rb
class RekognitionService
# código de inicialização aqui...
def create_collection(collection_id)
@client.create_collection({ collection_id: collection_id })
rescue Aws::Rekognition::Errors::ServiceError => e
puts "Rekognition erro: #{e.message}"
end
end
Agora, crie a coleção diretamente no console Rails:
# No console Rails
rekognition_service = RekognitionService.new
rekognition_service.create_collection('my_faces_collection')
3. Adicionando Rostos à Coleção
Agora, vamos adicionar o método para adicionar rostos à coleção e obter o face_id no modelo User
:
# app/services/rekognition_service.rb
class RekognitionService
# código de inicialização aqui...
def add_faces_to_collection(collection_id, image_path)
image = File.read(image_path)
response = @client.index_faces({
collection_id: collection_id(type),
max_faces: 1,
image: {
bytes: image_bytes
}
})
response.face_records
rescue Aws::Rekognition::Errors::ServiceError => e
puts "Rekognition erro: #{e.message}"
end
end
No modelo User
, adicione um callback para adicionar a imagem à coleção quando o usuário for criado e salvar o face_id
:
# app/models/user.rb
class User < ApplicationRecord
mount_uploader :photo, PhotoUploader
after_create :add_face_to_collection
private
def add_face_to_collection
rekognition_service = RekognitionService.new
face_records = rekognition_service.add_faces_to_collection('my_faces_collection', self.photo.path)
face_id = face_records.first.face.face_id
self.update(face_id: face_id)
end
end
Buscando Usuários por Imagem
Agora, vamos adicionar o método para buscar usuários por imagem:
# app/services/rekognition_service.rb
class RekognitionService
# código de inicialização aqui...
def search_faces_by_image(collection_id, image_path)
image = File.read(image_path)
response = @client.search_faces_by_image({
collection_id: collection_id,
image: { bytes: image },
max_faces: 1,
face_match_threshold: 99
})
response.face_matches
rescue Aws::Rekognition::Errors::ServiceError => e
puts "Rekognition erro: #{e.message}"
end
end
Para buscar um usuário pelo rosto, você pode usar o seguinte exemplo no console Rails:
# No console Rails
rekognition_service = RekognitionService.new
face_matches = rekognition_service.search_faces_by_image('my_faces_collection', 'path_to_image')
face_id = face_matches.first.face.face_id
user = User.find_by(face_id: face_id)
puts user.inspect
Conclusão
Integrar o AWS Rekognition em uma aplicação Ruby on Rails é uma maneira excelente de adicionar funcionalidades avançadas de análise de imagem à sua aplicação. Com este guia, você pode configurar o Rekognition, adicionar rostos a uma coleção e buscar usuários por imagem. Espero que este guia tenha sido útil. Se tiver alguma dúvida, deixe um comentário!
Para mais detalhes sobre os endpoints do AWS Rekognition, consulte a documentação do SDK para Ruby.
Até a próxima!
Posted on May 28, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.