Google APIを使って写真のExif情報を取得する(Python)

僕はよく写真を撮るのですが、写真ファイルにはExif(エグジフ、Exchangeable image file format)と言う撮影時の色々な情報を保持していて、撮影時のカメラの状態(ISO、絞り、露出とか)を持っています。僕の場合は撮影した写真はGoogleのPicasaウエブアルバム上で管理しています。当然、Picasa上からもExifを見れるのですが、ひとつずつしか見れないので面倒です。一気に見たいのです。スルッと見たいのですが、今の所そんな機能はないので、このExif情報を一覧形式で見るためにGoogle API(Python)を利用して何か作ろうかと思います。
あ、でも今回は本格的な何かを作り始めるのではなく、とりあえず今日中に出来る簡易的なものにしておきます。

Google-Developers

 

■どんなのもを作るのか
Picasaウエブアルバムから指定されたアルバム内の全写真の詳細情報(Exif)を取得してHTMLとして出力する。
Picasaのユーザー名、パスワード、アルバム名を引数として特定のアルバムを対象とする。
出力したHTMLファイルは自分でクリックして起動する。

 

■やること

・PythonからGoogleAPIを使う準備
・作ってみる
・動かしてみる

 

■HTMLファイルに出力する情報

・camera
・メーカ(make)
・モデル(model)
・ISO
・絞り(fstop)
・露出(exposure)
・レンズ焦点距離(focallength)
・フラッシュ(flash)
・日時(time)

 

 

●PythonからGoogleAPIを使う準備

GoogleのAPI(Python)を使うには
「Google Data APIs Python Client Library」というライブラリを入れる必要があるみたいです。

ここからダウンロード
http://code.google.com/p/gdata-python-client/downloads/list

gdata-2.0.17.zip

展開して

cd ~/デスクトップ/gdata-2.0.17

sudo python setup.py install

で、buildディレクトリが出来るのでその中の「atom」「gdata」ディレクトリを実行場所にコピーする

cp -R ~/デスクトップ/gdata-2.0.17/build/lib.linux-i686-2.7/* ~/tool

これから作るものは~/toolで作成して動かすので~/toolに配置しておく

 

●作ってみる

cd ~/tool
vi picasa.py

# -*- coding: utf-8 -*-
 
import gdata.photos.service
import gdata.media
import gdata.geo
import getpass
import sys
import datetime
 
#実行:python picasa.py ユーザ名 パスワード 'アルバム名'>aaa.html
 
#第1引数:ユーザ名(メールアドレス)
email=sys.argv[1]
#第2引数:パスワード
password=sys.argv[2]
#第3引数:アルバム名
albumname = sys.argv[3]
 
gd_client = gdata.photos.service.PhotosService()
gd_client.email = email
gd_client.password = password
gd_client.source = 'exampleCo-exampleApp-1'
gd_client.ProgrammaticLogin()
 
username=email
 
albumid = ""
albums = gd_client.GetUserFeed(user=username)
for album in albums.entry:
  if album.title.text == albumname:
    albumid = album.gphoto_id.text
 
photos = gd_client.GetFeed(
  '/data/feed/api/user/%s/albumid/%s?kind=photo' % (
    username, albumid))
 
print '<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">'
print '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
print '<body bgcolor="#585858" text="#E6D2B1"></body>'
print '<style type="text/css">'
print 'td, th { border: 1px #857464 solid; }'
print 'table { border: 1px #555555 solid; }'
print '.aa{ background-color: #39303A; }'
print '</style>'
print '<h2>Picasa WebAlbum -- %s</h2>' % (sys.argv[3])
 
 
for photo in  photos.entry:
  print '<table>'
  print '<tr><td><a href="%s"><img src="%s"/></a></td>' % (photo.content.src, photo.media.thumbnail[2].url)
  print '<td><table>'
  print '<tr><td>%s\n</td></tr>' % (photo.summary.text)
  if photo.exif.make and photo.exif.model:
  	camera = '%s %s' % (photo.exif.make.text, photo.exif.model.text)
  	exposure = '%s' % (photo.exif.exposure.text)
  	flash = '%s' % (photo.exif.flash.text)
  	focallength = '%s' % (photo.exif.focallength.text)
  	fstop = '%s' % (photo.exif.fstop.text)
  	iso = '%s' % (photo.exif.iso.text)
  	make = '%s' % (photo.exif.make.text)
  	model = '%s' % (photo.exif.model.text)
  	time = '%s' % datetime.date.fromtimestamp(int(photo.exif.time.text)/1000)
  else:
  	camera = 'unknown'
 
  print '<tr><td class="aa">camera:<td>%s\n</td></td></tr>' % (camera)
  print '<tr><td class="aa">メーカ(make):<td>%s\n</td></td></tr>' % (make)
  print '<tr><td class="aa">モデル(model):<td>%s\n</td></td></tr>' % (model)
  print '<tr><td class="aa">ISO:<td>%s\n</td></td></tr>' % (iso)
  print '<tr><td class="aa">絞り(fstop):<td>%s\n</td></td></tr>' % (fstop)
  print '<tr><td class="aa">露出(exposure):<td>%s\n</td></td></tr>' % (exposure)
  print '<tr><td class="aa">レンズ焦点距離(focallength):<td>%s\n</td></td></tr>' % (focallength)
  print '<tr><td class="aa">フラッシュ(flash):<td>%s\n</td></td></tr>' % (flash)
  print '<tr><td class="aa">日時(time):<td>%s\n</td></td></tr>' % (time)
  print '</table></td>'
  print '</tr>'
  print '</table>'
 
print '<br>'
print '<h2>-------------------Other Album----------------------</h2>'
albums = gd_client.GetUserFeed(user=username)
print '<table>'
for album in albums.entry:
  print '<tr><td class="aa">title:</td><td>%s</td><td class="aa">number of photos:</td><td>%s</td><td class="aa"> id:</td><td>%s</td></tr>' % (album.title.text,
      album.numphotos.text, album.gphoto_id.text)
 
print '</table>'
 
print'</html>'

 gistにも置いてあります

https://gist.github.com/brokendish/4753988

 

●動かしてみる

実行:python picasa.py ユーザ名 パスワード ‘アルバム名’>aaa.html

星空を撮影した時のカメラの情報を比較してみる
一覧にすると露出時間とかが比較しやすいので個人的には便利!

aaa.html - Chromium_002

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です