2011年6月27日月曜日

face.comのAPIをrubyのライブラリを使って遊んでみる

face.comのAPIを使って、flickrのinterestingに掲載された画像のうち、顔の画像だけ選択し、顔の部分には笑い男の画像をつけてみます。
なお笑い男の画像は自分で用意してください。
あとAPIはhttp://developers.face.com/で簡単に登録できます。
画像の修正にはrmagickを使ってますので、昨日の記事を参考にインストールしといてください。

rubyにface.comを扱えるライブラリがあるので、インストール
#sudo gem install face

以下のコードに、api部分を入力する、

require 'rubygems'
require 'face'
require 'open-uri'
require 'nokogiri'
require 'RMagick'
include Magick


client = Face.get_client(:api_key => 'api_key', :api_secret => 'api_secret')
url = "http://www.flickr.com/explore/interesting/2011/06/"
laughingman_image = Magick::Image.read('laughingman.gif').first
url_list = Array.new
img_url_list = Array.new

#flickrからURLを取得
data = open( url )
doc = Nokogiri::HTML( data )

doc.css('a').each do |f|
 begin
  if /\/explore\/interesting\/(\d+)\/(\d+)\/(\d+)\// =~ f.attribute('href').value
   url_list << f.attribute('href').value
  end
 rescue
  next
 end 
end

puts 'flickrの日付URL取得完了'

url_list.each do |f|
 img_url = URI.join(url, f)
 img_data = open( img_url )
 img_data = Nokogiri::HTML( img_data )
 img_data.css('img.pc_img').each do |img|
  img_url_list << img.attribute('src').value
 end
end

puts 'imgの個別URL取得完了'

#face.comのAPIにURLをわたして画像を認識させ、顔があれば、顔の部分に笑い男を貼り付ける。
img_url_list.each do |img_url|
 data = client.faces_detect(:urls => img_url )
 filename = File.basename( img_url )

 photo = data['photos']
 photo.each do |photo|
  if photo['tags'].first #tagsは配列形式で帰ってくるので、firstを付けてます。
   image = Magick::Image.read( img_url ).first #RMagickで読み込んだファイルも配列なので、firstを付ける。
   begin
    photo['tags'].each do |tag|
     width = photo['width'] * (tag['width'] / 100)
     height = photo['height'] * (tag['height'] / 100)
     x = photo['width'] * (tag['center']['x'] / 100)
     y = photo['height'] * (tag['center']['y'] / 100)
     overlay_image = laughingman_image.resize_to_fit(width, height)
     image.composite!(overlay_image, x-width/2, y-height/2, OverCompositeOp)
    end
    image.write("./img/#{filename}")
    puts filename
   rescue
    puts '処理に失敗しました。'
    next
   end
  end
 end
end

参考;http://labs.appshelf.info/category/face-com/

0 件のコメント:

コメントを投稿