face.comのAPIを使って、似た顔を判別させる方法
face.comのAPIをrubyのライブラリを使って遊んでみる
今回はface.comにAKB48の顔写真DBを作り、twitterのアイコンがどれだけAK48のメンバーに似てるか、表示させます。
DBは予め登録してある前提で。
コントローラー
class IndexController < ApplicationController
def index
end
def show
require 'face'
require 'open-uri'
require 'uri'
require 'net/http'
@entries = Array.new
http = Net::HTTP.new( 'api.twitter.com', 80 )
req = Net::HTTP::Get.new( "http://api.twitter.com/1/users/profile_image/#{params[:user]}.json?size=original" )
res = http.request( req )
img_url = URI.parse( res['location'] ).to_s
client = Face.get_client(:api_key => '' , :api_secret => '')
data = client.faces_recognize(:urls => img_url , :uids => 'all@akbtter')
photos = data['photos']
photos.each do |photo|
photo['tags'].each do |tags|
unless tags['uids'] == []
confidence = tags['uids'][0]['confidence']
uid = tags['uids'][0]['uid']
member = Member.find_by_uid( uid )
hash = {"name" => member.name, "confidence" => confidence }
@entries << hash
end
end
end
end
end
ビュー
#index/index.html.erb
AKBったー
twitterのIDを入力すれば、そのユーザーのアイコンがAKBの誰に似ているか判定してくれます。
※現在は神7にのみ対応
<% form_tag :action => 'show' do %>
<%= text_field_tag 'user' %>
<%= submit_tag 'チェック' %>
<% end %>
#index/show.html.erb
<% unless @entries.count == 0 %>
<% @entries.each do |f| %>
<%= f["name"] %>に似ています。
似ている度:<%= f["confidence"] %>%
<% end %>
<% else %>
似ているメンバーはいません。
<% end %>
マイグレーション
class CreateMembers < ActiveRecord::Migration
def self.up
create_table :members do |t|
t.string :name, :uid
t.timestamps
end
end
def self.down
drop_table :members
end
end
で、デザインとか整えたりすると、こんな感じのサービスになります。
http://akb.heroku.com
0 件のコメント:
コメントを投稿