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 件のコメント:
コメントを投稿