Created
March 13, 2017 04:26
-
-
Save CyberFerret/8d0224490f280cc9c7c1aa64fe71fdc6 to your computer and use it in GitHub Desktop.
Face recognition demo - Main .rb file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# faceapp.rb | |
require 'rubygems' | |
require 'bundler' | |
Bundler.require | |
require 'sinatra' | |
# Load up all our secrets | |
Dotenv.load | |
# Set up our AWS authentication for all calls in this app | |
Aws.config.update({ | |
:region => 'us-east-1', | |
:credentials => Aws::Credentials.new(ENV['AWS_KEY'],ENV['AWS_SECRET']) | |
}) | |
# Default collection name | |
FACE_COLLECTION = "faceapp_test" | |
# The routes | |
get '/' do | |
# Show the main index page | |
erb :faceapp | |
end | |
post '/upload/:photoid' do | |
client = Aws::Rekognition::Client.new() | |
response = client.index_faces({ | |
collection_id: FACE_COLLECTION, | |
external_image_id: params[:photoid], | |
image: { | |
bytes: request.body.read.to_s | |
} | |
}) | |
"Image uploaded safely!" | |
end | |
post '/compare' do | |
content_type :json | |
client = Aws::Rekognition::Client.new() | |
response = client.search_faces_by_image({ | |
collection_id: FACE_COLLECTION, | |
max_faces: 1, | |
face_match_threshold: 95, | |
image: { | |
bytes: request.body.read.to_s | |
} | |
}) | |
if response.face_matches.count > 1 | |
{:message => "Too many faces found"}.to_json | |
elsif response.face_matches.count == 0 | |
{:message => "No face detected!"}.to_json | |
else | |
# "Comparison finished - detected #{ response.face_matches[0].face.external_image_id } with #{ response.face_matches[0].face.confidence } accuracy." | |
{:id => response.face_matches[0].face.external_image_id, :confidence => response.face_matches[0].face.confidence, :message => "Face found!"}.to_json | |
end | |
end | |
post '/speech' do | |
client = Aws::Polly::Client.new() | |
response = client.synthesize_speech({ | |
output_format: "mp3", | |
voice_id: "Joanna", | |
text: params[:tosay] | |
}) | |
Base64.encode64(response.audio_stream.string) | |
end | |
get '/collection/:action' do | |
client = Aws::Rekognition::Client.new() | |
collections = client.list_collections({}).collection_ids | |
case params[:action] | |
when 'create' | |
if !(collections.include? FACE_COLLECTION) | |
response = client.create_collection({ collection_id: FACE_COLLECTION }) | |
end | |
when 'delete' | |
if (collections.include? FACE_COLLECTION) | |
response = client.delete_collection({ collection_id: FACE_COLLECTION }) | |
end | |
end | |
redirect '/' | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment