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

2008年12月14日日曜日

GeoPlanetのPlaceType一覧 その2 はてなブックマークに追加

こじんてきにGeoPlanetに興味津々のため、引き続き調査メモです。
GeoPlanetのPlaceType一覧で世界全体でのコード分布がわかったので、次に日本でどのようなPlaceTypeがあるか、簡単なクローラーを作って調査してみました。
クローラーは、日本のwoeidからchirldrenを再起的に探索しています。ただし、途中で接続エラーになるため現状3000レコードくらいした探索できていません。
まだ、調査中なので網羅されていないコードがありそうです。


PlaceType 7 WOE_TOWN
市町村
例 府中市 普代村 嵐山町

8 Prefecture 県
例 北海道 滋賀県 京都府
日本語の場合は、nameがState(州)からPrefectureに変更になっている

9 Gun/Ku 郡/区
例  胆沢郡 遠田郡 乙訓郡
日本語の場合は、nameがCounty(州)から Gun/Kuに変更になっている
※現時点では区に対応するデータが見つからなかった。

10 WOE_LOCALADMIN 町丁目
例 ハウステンボス町 花高 鹿子前町


11 WOE_ZIP 郵便番号
例 857-4815 761-8058 023-1761
日本のデータでは7桁の完全な郵便番号しか存在しないようです。

12 WOE_COUNTRY 国
例 日本

13 WOE_ISLAND 島
本州 赤瀬 五島列島 沖ノ島

14 WOE_AIRPORT 空港
高松空港

15 WOE_DRAINAGE 川 湖沼
例 北上川 諏訪湖 涸沼

16 WOE_LANDFEATURE 地上物(観光地?)
例 女木海水浴場 三界山 岸和田市今池公園

20 WOE_POI POI(病院、駅、学校、役所、劇場)
例 ワーナー・マイカル・シネマズ東岸和田 佐世保駅 斉藤医院

22 WOE_SUBURB 番地
例 3丁目 (丁目なし)


24 WOE_COLLOQUIAL 地方
中部地方 八丈支庁 能登半島 中京地方

27 WOE_HISTORICALCOUNTY なくなった自治体 (?)
例 佐賀郡 Aoba-ku  龍神村
データをみると、なくなっていない自治体が多い、合併された等で形が変わっただけで変更になるのかも?その場合woeidは変更になるのだろうか?


WOE_HISTORICALCOUNTY で、どのくらい古いデータをもっているのか、合併情報のフレッシュネスあたりを調べていこうかと思います。


関連記事

GeoPlanetについて
GeoPlanetのPlaceType一覧
GeoPlanetのPlaceType一覧 その2

2008年12月10日水曜日

GeoPlanetのPlaceType一覧 はてなブックマークに追加

前回の続きです。

GeoPlanetのPlaceType一覧と意訳を作ってみました。


歴史上の場所といったデータやスポーツチームというplaceTypeが特徴的ですね。
ただ、同じIDで違う名前のものがあるようです。また、日本国内のデータ分布が調べたかったのですが、PlaceTypeだけの検索ができないので、日本の市町村合併をどのくらい網羅しているかがわからないですね。

0Undefined未定義未定義の場所
1Buildingビルディング住所表記内の街区(ハウス)ナンバーにマッチしているもの
2Street Segmentストリートセグメント住所表記内のストリートにマッチしているストリートセグメントです
3Nearby Buildingビルディング周辺住所表記内の街区(ハウス)ナンバーの近くに街区(ハウス)ナンバーを持つビルディング
4Streetストリート住所表記内のストリートにマッチしたもの
5Intersection交差点検索クエリーにマッチする道路の交差点
6Streetストリートストリート(通り)
7Town人が定住している場所、主に市、町、村
8Stateその国の中の最上位行政区分のうちの1つ(訳注 日本だと県)
9Countyその国の中の2階層目の行政区分のうちの1つ
10Local Administrative Areaローカル行政区分その国の中の3階層目の行政区分のうちの1つ
11Postal Code郵便番号一部または完全な郵便番号
12CountryISO 3166-1によって定義される国または属領のうちの1つ
13Island
14Airport空港空港
15Drainage水上物水に関連した地物(例えば川、運河、湖、湾、海)
16Land Feature地上物 土に関連した地物(例えば公園、山、浜辺)
17Miscellaneous寄せ集めの場所カテゴライズできない場所
18NationalityNaNAn area affiliated with a nationality
19SupernameSupername複数の国にまたがる地域
20Point of Interest関心点(訳注POI)関心点(例えば学校、病院、観光名所)
21Region地域複数の国の一部にまたがる地域
22Suburb 郊外郊外や団地といった町の区分
23Sports Teamスポーツチームスポーツチーム
24Colloquial口語口語で知られている場所名
25ZoneNaN特定の文脈(例えばMSA("Metropolitan Statistical Areas")またはエリアコード)の範囲内のエリア/td>
26Historical State歴史上の州その国の中の最上位階層目の行政区分で現在は利用されていないもの
27Historical County歴史上の郡その国の中の2階層目の行政区分で現在は利用されていないもの
29Continent大陸地球の主な大陸のうちの1つ
31Time Zoneタイムゾーンオルソン標準によって定義される地域(tzデータベース)
32Nearby Intersection近くの交差点 検索クエリーで通りの近くにある街路の交差点
An intersection of streets that is nearby to the streets in a query string
33Estate地所集合住宅、または名前の知られた分譲地
35Historical Town歴史上の町人が定住している場所にある、もう使われていない原名
36Aggregate集計集計された場所


関連記事

GeoPlanetについて
GeoPlanetのPlaceType一覧
GeoPlanetのPlaceType一覧 その2

2008年12月9日火曜日

GeoPlanetについて はてなブックマークに追加

Yahoo Developer Network(アメリカ版)GeoPlanet APIは日本語の住所検索(大字くらいまで)やランドマーク検索(島、目標物)ができるうえ、住所の親子関係や隣接情報といった情報も保持しています。

親子関係をしっかり持ったGeo系WebAPIが少ない現状、GeoPlanetの使い道はいろいろありそうなので、自分用のメモがてらに整理してみました(世界の地物をWoEIDというユニークのIDで管理しようとしているため、このID体系がはやった場合に、複数のWebリソースをWoEIDをキーに串刺しして利用できそうです)。



/places
fliterにマッチした情報を返します
filterで利用できるものは、キーワードとplacetypesです。
東京タワー,芝公園&WOE_LOCALADMIN(町丁目名),太平洋(詳細情報あり

/place/{woeid}
指定したwoeidの詳細情報を返します
詳細情報は、緯度経度、Boundingbox(矩形)などです。
石垣市,三重県,豊橋市,東京タワー

/place/{woeid}/parent
指定したwoeidの親データを返します。 市町村だった場合は県、県だった場合は国
石垣市,三重県,豊橋市

/place/{woeid}/ancestors
指定したwoeidの親階層を下の階層から順番に返します。belongtosとの違いは、完全な親子関係のものしか返さないようです。
大字とかがどの都道府県に入っているかがわかります。また住所表記のサポートもできそうです。
東京都台東区浅草1丁目,三重県,豊橋市,名古屋城


/place/{woeid}/belongtos
親階層を順番にたどって表示します。ancestorsとの違いは、上位であればジャンルが違っている親も郵便番号や地域圏名(関東、アジア、世界)も返します
東京都台東区浅草1丁目,三重県,豊橋市,名古屋城

/place/{woeid}/neighbors
該当するwoeidをもつ情報の近くの場所を返します
ポリゴンデータ+アルファのデータをもとのやっているようですね
※必ずしも地理的に隣接するというわけではないことに注意すべきです。
石垣市(404 not found航路は出てこない),三重県,木更津(地続きではない川崎が出てくることに注目、アクアラインで接続している)


/place/{woeid}/siblings
指定したwoeidの親が一緒の兄弟情報を返します(松戸市の場合は千葉県の市町村一覧)
松戸市,台東区(東京は特殊で23区のみしかかえってこない),日本(世界の国)

/place/{woeid}/children
該当するwoeidを親とする情報を返します(子一覧)
例 木更津,豊橋(placetypeが町丁目のみ)

/placetypes
placetypeの一覧を返します。
placetype一覧(詳細付)

/placetype
placetypeの詳細説明を返します
※コードが一緒でも選択する言語でplacetype名が変わるみたい,WOE_STATEがstateやprefecutreになった。
9(country),8(WOE_STATE)





ぱっと思いつくのは、都道府県、市町村といったカテゴリを生成することに利用できそうですね。ただ、階層構造があれれっという場所も多いですし、そもそもwoeidがまったく世の中に流通していないので利用するには独自にJISコード等とのマッチングが必要になりますね。

ほかにも,YQLというSQLライクなフィルターもあるようです。


関連記事

GeoPlanetについて
GeoPlanetのPlaceType一覧
GeoPlanetのPlaceType一覧 その2

2008年12月6日土曜日

Flickr GeoFeedとGoogle Static APIとの連携 はてなブックマークに追加

Google blogger上でFlikr GeoFeedGoogle Static Map APIとの連携をするモジュールを書いてみた。
Flikr GeoFeedはjsonpでも動くので、javascriptのみなので気軽にblog等に貼付けれると思います。
ローカル上では問題なく動くのですが、bloggerでは出たり出なかったりするときがあるの調査中です。