Como fazer reconhecimento facial em uma Aplicação Ruby on Rails com AWS Rekognition - PT-BR 🚀👨‍💻

fbzsaullo

Fabrízio Saullo

Posted on May 28, 2024

Como fazer reconhecimento facial em uma Aplicação Ruby on Rails com AWS Rekognition - PT-BR 🚀👨‍💻

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:

  1. Crie uma conta na AWS: Se você ainda não tem uma conta, crie uma em aws.amazon.com.
  2. 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.
  3. Instale a gem aws-sdk-rekognition: No seu Gemfile, adicione a gem e execute bundle install.
# Gemfile
gem 'aws-sdk-rekognition'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Agora, crie a coleção diretamente no console Rails:

# No console Rails
rekognition_service = RekognitionService.new
rekognition_service.create_collection('my_faces_collection')
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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!

💖 💪 🙅 🚩
fbzsaullo
Fabrízio Saullo

Posted on May 28, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related