2009年1月27日火曜日

flickrと顔ラボAPIの連携(python flickrapi版) はてなブックマークに追加

富士フィルムの顔ラボAPIを使ってみたくなったのでちょっとテスト。
ぱっとみた感じは、なかなか良い精度で判定する模様です。画像の縦横比は1:1しかないみたいだけど、自分の目的としてはOK。

フロー
  1. flickrの画像URLを顔ラボAPIに渡します。
  2. 顔ラボの戻り値をflickrのnoteに設定


※flickrのflickr.photos.notes.addのAPIは500pxの画像をもとにnotoの位置指定をしますので500pxの画像(middle)を指定する必要があります
※当然flickrのappidや顔ラボAPIの認証キーは別途取得が必要です。

kaolab.py




# coding: UTF-8

import flickrapi
import urllib2
from lxml import objectify



api_key = 'xxxxxxxx'
secret_key = 'yyyyyy'
my_id = 'xxxxx@N00'
kao_id = 'aaaa'

flickr = flickrapi.FlickrAPI(api_key,secret_key)

#auth
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))

photo_id = 'bbbbb'
path = 'http://farm4.static.flickr.com/3481/bbbbb_2505c93628.jpg'
url = 'https://kaolabo.com/api/detect?apikey=' + kao_id + '&url='+path
tree = objectify.parse(urllib2.urlopen(url))
root = tree.getroot()
o=0
for face in root.faces.getchildren():
h = root.faces.face[o].get("height")
w = root.faces.face[o].get("width")
x = root.faces.face[o].get("x")
y = root.faces.face[o].get("y")
score = root.faces.face[o].get("score")
t = u'顔ラボAPI : http://kaolabo.com/webapi/'
set_note = flickr.photos_notes_add(photo_id = photo_id,note_x = x ,note_y = y, note_w = w,note_h =h,note_text = t )
o = o + 1

2009年1月17日土曜日

X02NKのSports TrackerのGPSデータをメールから取得する はてなブックマークに追加

SoftbankのNokia製携帯のX02NKSports Trackerを使うと生GPSデータが取得できます。取得したデータはBlueToothやメールで転送できるのでGPSデータでいろいろ遊ぼうと思いました。
ただ、MacだとX02NKのファイルを取り出すのが結構めんどうなので、簡単なツールを作ってみました。
そこSport TrackerのGPSログをメールで転送し、メールサーバからimapで取得してローカルに保存するスクリプトを作ってみました。

GMailにimapで接続し、携帯のメールアドレスかつ新着メールを探します。
見つかったら、bodyを取り出して保存します。
最後に該当のメールを既読に変更して終了。

getgmail.py




# vim:fileencoding=utf-8
import imaplib
"""
python getmail.py
"""
server = "imap.gmail.com"
user = "xxxxxx"
passwd = "yyyyyy"
mailadr = "@softbank.ne.jp"


M = imaplib.IMAP4_SSL(server)
M.login(user,passwd)
M.select()
typ, data = M.search(None, 'FROM', mailadr,'UNSEEN')
#typ, data = M.search(None, '(FROM mailadr)','NEW')

for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
body = data[0][1].split("\r\n\r\n")
msg = body[1]
ofile = open("track"+str(num)+".xml", "w")
ofile.write(msg)
ofile.close()
print num
M.store(num, '+FLAGS', '\SEEN')
M.close()
M.logout()


今日の参考リンク

X02NK Sports Tracker GPSでジョギング等のデータを保存出来るアプリ!

imaplib -- IMAP4 プロトコルクライアント
Gmailのメール一覧を取得CommentsAdd Star

2009年1月12日月曜日

geotoolsをjythonで利用する はてなブックマークに追加

国土地理院が出している基盤地図情報を見てみようと思ったのですが、自分の環境では、JPGIS形式の変換ツールが使えない。。。仕方ないのでGML版をGDAL/OGLで変換しようと思ったのですが、どうもうまくいかない。。。しゃあないので他の調べてみたらgeotoolsというJAVAのGIS Tool kitを発見した。
結構おもしろそうなツールですが、Javaはダメなんでjython経由で使って見ました。


shape fileにアクセスするサンプル

こちらの世界の人口データから、国名と人口を取り出す。

shape.py



"""
Usage:
CLASSPATH="/home/nishioka/src/geotools-2.5.1/gt-epsg-hsql-2.5.1.jar" jython shape.py

"""
import java.net.URL as uri
import java.io.File
import org.geotools.data.shapefile.ShapefileDataStore as shp


src = uri("file:////home/nishioka/data/TM_WORLD_BORDERS_SIMPL-0.3.shp")
data = shp(src)

name = data.getTypeNames()
#s = data.getSchema()
s = data.getSchema(name[0])

src = data.getFeatureSource(name[0])

ft = src.getSchema()
coll = src.getFeatures()
print coll.size()

it = coll.features()

while (it.hasNext() ):
f = it.next()
print str(f.getAttribute(5))+" "+ str(f.getAttribute(7))





実行結果




CLASSPATH="/home/nishioka/src/geotools-2.5.1/gt-shapefile-2.5.1.jar" ¥
jython
shape.py
246
Antigua and Barbuda 83039
Algeria 32854159
Azerbaijan 8352021
Albania 3153731
Armenia 3017661
Angola 16095214
American Samoa 64051
Argentina 38747148
Australia 20310208
Bahrain 724788
Barbados 291933
Bermuda 64174
Bahamas 323295
Bangladesh 15328112
Belize 275546
Bosnia and Herzegovina 3915238
Bolivia 9182015
Burma 47967266
Benin 8490301


今日はここまで。
どうも、GMLは非公式サポートでうまく読み込むことができなさそう。。。
結局windowsの変換ツールを使うのがFAっぽいのですが、もう少し調査します。


今日の参考リンク
SHPファイルへGeoToolsを使用してJavaからアクセスする為の基本コード - Blue blue glass moon
Technical Ramblings > Blog Archive > Using Jython + GeoTools

http://thematicmapping.org/downloads/world_borders.php