2011年7月17日日曜日

face.comのAPIを使って、類似の顔を検索するサービスを作ってみる。

このへんで使った技術を使って、実際にサービスを作ってみる。
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 件のコメント:

コメントを投稿