Everyday FunkiEE!!

全方位型ファンキーSE

DOCOMOの文字認識Web APIを利用したデモサイト公開しました

前の記事で、
軽い気持ちでDocomoの文字認識 Web APIの利用申請出してみたら、忘れたころに申請通ったので最近試してます。

と書きましたが、画像文字認識を試すだけのデモサイトができたので公開します。

画像ファイルをアップするなり、Web上の画像URLを指定するなりしてみてください。

docomoocrdemosite


※デモなので、予告なく消す可能性がありますのであしからずm(_ _)m

NTT Docomo文字認識 Web API試してみる

軽い気持ちでDocomoの文字認識 Web APIの利用申請出してみたら、忘れたころに申請通ったので最近試してます。

がGAE上でurlfetchで試してみてもどーにも「api-keyがnullで不正です」と怒られる。
GAEのurlfetchだとHOSTヘッダーが書き換えられないとかなので、それが原因?分からない。。。

メモ用にコードだけ貼り付けておこう。

まずはWeb API利用するためのPythonラッパー。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from google.appengine.api.urlfetch import fetch, POST
from types import BooleanType
from urllib import urlencode

class Recognize(object):
    """
    ドコモ文字認識Web APIのPythonラッパー
    """

    def __init__(self, api_key):
        """
        @param api_key: Developer's API Key (required)
        """
        self.api_key = api_key

    def get_scenery_recognition(self, url, trim_xywh=None, segmentation=None, format=None, rotate=None, color=None):
        """
        GET Senery Recognition
        @param url: Image url. ( required )
        @param trim_xywh: Image trimming pixel data. array type variable order by x, y, width, height.
        @param segmentation: Do you split segments of recognize charactors. ( True: split segments, False: Not split )
        @param format: Response format. "xml" or "json" or "jsonp". ( default is "xml" )
        @param rotate: Image rotation angle. 0 or 90 or 180 or 270. ( default is 0 )
        @param color: Recognize charactor color. "white" or "black" or "unknown". ( default is "unknown" )
        """
        data = {
            "api-key": self.api_key,
            "image-url": url,
            "dictionary": "english+japanese",
        }
        if trim_xywh:
            assert len(trim_xywh) == 4, "trim_xywh is required 4 parameters ( trim-x, trim-y, trim-width, trim-height )"
            data["image-trim-x"] = trim_xywh[1]
            data["image-trim-y"] = trim_xywh[2]
            data["image-trim-width"] = trim_xywh[3]
            data["image-trim-height"] = trim_xywh[4]
        
        if segmentation:
            assert type(segmentation) is BooleanType, "seqmentation must be Boolean type parameter. ( value = %s )" % str(segmentation)
            data["letter-segmentation"] = str(segmentation).lower()

        if format: data["api-format"] = format
        if rotate: data["image-rotate"] = rotate
        if color: data["letter-color"] = color

        url = "https://scenery.recognize.jp/v1/scenery/api/recognition?%s" % urlencode(data)
        response = fetch(url=url)
        return response.content

呼び出し元はFlaskで以下のリクエストハンドラを定義。
@app.route('/test')
def test():
    rec = Recognize(r"APIキー")
    res = rec.get_scenery_recognition(url = r"http://www.google.co.jp/intl/ja_ALL/images/logos/images_logo_lg.gif", format = "json")
    return res
情報求む。

ゾンビの起源ここにあり - サンゲリア -

サンゲリア パーフェクト・コレクション [DVD]
サンゲリア パーフェクト・コレクション [DVD]
クチコミを見る


ホラー映画で有名なルチオ・フルチ監督の名作。
この監督「REC」とか「28週後」なんかも撮ってるんですね。

今となってはお決まりでもある「恋人がゾンビ化→相方やられる」の黄金パターンや、ゾンビを研究する博士役が見事やられちゃうお約束なんかもあっていいです。あとゾンビ映画には珍しく、木の破片が目に突き刺さるというスラッシャームービーっぽいシーンもあってびっくり。

ストーリーは、音信不通の父を探しに娘が呪われた島に行く。ゾンビ発生→命からがら逃げる。というごく普通のパターンながら、本当の物語は実は裏で進んでいたのだ!ってなるエンディング見事すぎる。
伏線も分かりやすいから、気づくといえば気づくのだけどそれでももっていき方が上手い。

ゾンビが土から這い出てきたり、「ブードゥー」というゾンビの起源となる描写が多いので、正にゾンビの原点を見ることができます。最近のハイパフォーマンスなゾンビに飽きてきたら、改めてこの作品を見ると古典ゾンビのよさを再認識できますよ。

REC [Blu-ray]
REC [Blu-ray]
クチコミを見る

28週後… [Blu-ray]
28週後… [Blu-ray]
クチコミを見る

学園ゾンビ天国 - HIGHSCHOOL OF THE DEAD -

学園モノ × ゾンビ = 『Highschool of the Dead』
学園黙示録 HIGHSCHOOL OF THE DEAD 1 [Blu-ray]
学園黙示録 HIGHSCHOOL OF THE DEAD 1 [Blu-ray]
クチコミを見る


最近ゾンビブームが着々と拡がりつつある日本でもゾンビ映画ならぬゾンビアニメとは珍しい。
全般的にエロ描写が多いのが目につく(不自然なパンチラどんだけ笑)けども、それを除けばなかなかよい出来だと思う(12話のエンディングはちとつまらんが)。特に第1話の終わりで、主人公が友人のアタマをぶっ飛ばすという早すぎる展開笑(全12話と短いことを考えればそうでもない?)。あとはミリオタのデブチン君(名前忘れた)が中盤以降にいい味出してる。

何より12話と短いのが非常に残念。続けようと思えばまだまだ続けることができるぐらいの中途半端なところで終わってしまう。せめてもう少し伏線を回収してから終わってほしかったな。


アニメなのでゾンビ導入編としてはいい素材だと思うので、「ゾンビに興味あるけどグロはちょっと。。。」な人とかにお勧めかも。

活字でもジョジョ - 恥知らずのパープルヘイズ -

恥知らずのパープルヘイズ −ジョジョの奇妙な冒険より−
恥知らずのパープルヘイズ −ジョジョの奇妙な冒険より−
クチコミを見る

ジョジョの奇妙な冒険のスピンオフ作品 on 活字ver。

舞台は第五部完結の半年後。裏切り者、パンナコッタ・フーゴに焦点を当てた内容。
原作の漫画では活躍の場が極端に少なかった彼ですが、本作では主人公ということもあり、かつ活字ということもあってか、心情描写が多い。そのため、漫画ではイマイチ掴みきれなかったフーゴというキャラクターを存分に堪能できる。

さらに、原作のマンガともうまーくリンクしてて(なにげに第4部ともリンクしてたり)、なんだか伊坂幸太郎風の仕上がりなのも個人的にはウマー。

味わい方は人それぞれにしても、やはり原作ジョジョの第5部を読み直してから本作に手を出すのが一番味わい深いんじゃなかろうか。そして、本作読了後に第5部の読み直すという1粒で2度おいしい作品ですよ。

ジョジョの奇妙な冒険 30~39巻(第5部)セット (集英社文庫―コミック版) (集英社文庫(コミック版))
ジョジョの奇妙な冒険 30~39巻(第5部)セット (集英社文庫―コミック版) (集英社文庫(コミック版))
クチコミを見る

未来は暗いよどこまでも - ザ・ホード 死霊の大群 -

ザ・ホード 死霊の大群 [DVD]
ザ・ホード 死霊の大群 [DVD]
クチコミを見る


真面目?なゾンビ映画。
生き残り数人 vs 大量ゾンビ。

パッケージを見る限りでは、大量のゾンビとの血で血を洗う派手な戦闘シーンが売りなのかと思ってましたが、そうではありませんでした。意外と演出は地味です。でも、ストーリー展開が意外で「そうきたか」となりましたね。

多少肩透かしを食った感じに受け取る人もいるかもしれないけど、僕はホラー映画らしい結末で好きです。

ホラーってこうだよねって、ホラーの本質を思い出させてくれる作品。

ゾンビ系ヒューマン映画 - コリン LOVE OF THE DEAD -

ずいぶんと久しぶりの更新になってしまった。

コリン LOVE OF THE DEAD スペシャル・エディション [DVD]
コリン LOVE OF THE DEAD スペシャル・エディション [DVD]
クチコミを見る

ゾンビの帝王「ジョージ・A・ロメロ」の最新作。
予算6000円で作り上げて話題になったとか。

物語は、ゾンビ化しかかった主人公(コリン)が記憶を頼りに街を彷徨うというもの。言ってしまえばゾンビが主役の作品です。ゾンビが主役だからか、会話が極端に少ない(笑)。これも低予算のなせる技なのか。

ゾンビ映画としては、王道からは外れてヒューマン要素(ゾンビだけど)が盛り込まれていて、なにやら見終わった後に感動すら覚えます。

体裁としてはゾンビ映画なんですが、立派なヒューマンドキュメンタリー映画(ゾンビなのに)の仕上がりとなっています。
一味違ったゾンビ映画を見たい方、いかがでしょうか。

原作とは違った味わい -屍鬼 (全11巻) -

いやー、やっと完結。
既に原作を読んでストーリーは分かっているものの、ビジュアルとして追体験できる漫画も面白い。

ホラーを主体とした中にも、藤崎流の笑いを織り込んでくるのがいいね。
原作を読んだ人も、そうでない人もどちらにもお勧めの作品。

屍鬼 11 (ジャンプコミックス)
屍鬼 11 (ジャンプコミックス)
クチコミを見る


社会人は大人買いをお勧めします。

Nikon D3100で試すEye-Fiで楽々デジイチ入門

奥さんの誕生日プレゼントということで、デジタル一眼レフカメラがほしいとの希望をかなえるべく「Nikon D3100」を買ってあげました。さらにPCやネット上へのアップを楽できたら楽しそうと思って、前々から気になってたEye-Fiを試すことにしました。

購入したのは以下2点。
Nikon デジタル一眼レフカメラ D3100 ダブルズームキット D3100WZNikon デジタル一眼レフカメラ D3100 ダブルズームキット D3100WZ
販売元:ニコン
(2010-09-16)
販売元:Amazon.co.jp
クチコミを見る

(ほんとは標準レンズキットを買ったんだけど、Amazonにこれしかなかった。。。)

Eye-Fi Connect X2 4GB EFJ-CN-4GEye-Fi Connect X2 4GB EFJ-CN-4G
販売元:Eye-Fi Japan
(2010-05-20)
販売元:Amazon.co.jp
クチコミを見る

こっちがEye-Fi。一番スタンダードな4Gモデル。

開封

ウキウキしながら帰宅後に、早速開封。
DSC00604


Eye-Fiのパッケージを開けるとこんなの。Eye-FiのSDカードと、付属でリーダーもついてくる。
DSC00605


カメラの組み立ては奥さんにまかせて、完成したのがコチラ。
DSC00610


ブラックのボディが重厚さを感じさせる。正統派な見た目ですね。
DSC00611


Eye-Fi設定

Eye-Fiの説明書を読むと、初めにPCで設定しろとあるのでやりました。以下その流れ。

最初にEye-Fi使うためのユーザー登録。メアドとパスワードを指定してアカウントを作成する。
eyefi-01


なんかアップデートしてくれと出たので、アップデートする。
eyefi-02


続いてEye-Fiカードの設定。
とりあえずは自宅の無線LANの設定をする。
eyefi-03


デフォルトでPCにもアップされる。Eye-Fiサーバーでも一時的に保存してくれるっぽい。
eyefi-04


外部サイト連携

Flickrと連動させる。
連携サービス多いな。
eyefi-05


Flickrの認証情報を求められるので入力。
eyefi-06


認証OKて出る。
eyefi-07


で、連携できますよと。
eyefi-08


動画もアップしまっせと。
eyefi-09


完了した!
eyefi-10


さっそく写真を撮ってみる

準備がすべて整ったところで、早速写真を撮ってみる。







パシャリ。







チラッ。。。





なんとっ、本当に自動でPCにアップしているではありませんかっ。
eyefi-11



と、









は、




ドキドキしながらFlickr覗くと。
こっちもアップされてるぅぅぅぅ。
eyefi-12


Eye-FiいいよEye-Fi

デジイチについては、まだまだ慣れていないのでなんともですが、Eye-Fiはなんかもう快感ですね。
アップロードするのに、ケーブル不要。転送操作不要。わずらわしい作業から一気に開放されます。

使ってみて感じたEye-Fiのポイントは、
・ケーブルレスが楽チン
・外部サイトへのアップがいいね
・転送スピード早い(PCへの転送は、転送開始からものの数秒で転送完了する)
てな感じです。


「なんか難しそう」てなるかもしれないですが、やってみると意外とすんなりできるもんです。楽してカメラを楽しむのにお奨めな製品ですね。快適ケーブルレスカメラ生活をどうでしょうか。

GAE 1.4.3もしくは1.5.0.0にアップデートしたら開発サーバ起動しなくなった問題を解決した

GAEのSDKを1.5.0.0にアップデートすると開発サーバ起動に失敗した。
起動ログは、
WARNING  2011-05-20 21:45:30,963 urlfetch_stub.py:108] No ssl package found. urlfetch will not be able to validate SSL certificates.
INFO     2011-05-20 21:45:31,040 appengine_rpc.py:159] Server: appengine.google.com
INFO     2011-05-20 21:45:31,040 appcfg.py:440] Checking for updates to the SDK.
DEBUG    2011-05-20 21:45:31,040 appengine_rpc.py:364] Sending HTTPS request:
POST /api/updatecheck?release=1.5.0×tamp=1301428458&api_versions=%5B%271%27%5D HTTPS/1.1
Host: appengine.google.com
X-appcfg-api-version: 1
Content-type: application/octet-stream
User-agent: appcfg_py/1.5.0 win32/5.1.2600.2 Python/2.5.2.final.0


INFO     2011-05-20 21:45:31,930 appcfg.py:457] The SDK is up to date.
INFO     2011-05-20 21:45:31,963 rdbms_sqlite.py:58] Connecting to SQLite database '' with file 'c:\\docume~1\\\x92\x89\x95\xbd\\locals~1\\temp\\dev_appserver.rdbms'
ERROR    2011-05-20 21:45:31,963 dev_appserver_main.py:615] : unable to open database file
DEBUG    2011-05-20 21:45:31,963 dev_appserver_main.py:617] Traceback (most recent call last):
  File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_main.py", line 612, in main
    dev_appserver.SetupStubs(appinfo.application, **option_dict)
  File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 4538, in SetupStubs
    rdbms_sqlite.connect(database='')
  File "C:\Program Files\Google\google_appengine\google\appengine\api\rdbms_sqlite.py", line 61, in connect
    return sqlite3.connect(_sqlite_file)
OperationalError: unable to open database file
いろいろデバッグしながらソースを追ってみると、どうも開発サーバー起動中にsqliteでDBに接続しようとしているところで失敗しているのがわかった。結論から先に言うと、原因はおそらくパスに日本語が含まれていてパスがうまく解釈できなかったから。試しに開発サーバー起動時のオプションで「--rdbms_sqlite_path=C:/temp/datastore.rdbms」などとして、起動するとうまくいった。
やれやれだぜ。

RDBMSサポートするの?しないの?Googleさん?

問題が解決できたので一安心なんだが、どうにも納得いかない。それは、今のところGAEではRDBMSサポートをしていないし、製品ロードマップにもRDBMSサポートについては言及がない(ためしに「mysql」「sqlite」「rdbms」などでページを検索してみたけど、ヒットなし)。そのくせ、オプションには上記の「--rdbms_sqlite_path」を含めてRDBMSに関するオプションがいくつか存在する。
  --rdbms_sqlite_path=PATH   Path to the sqlite3 file for the RDBMS API.
  --mysql_host=HOSTNAME      MySQL database host that the rdbms API will use. (Default '%(mysql_host)s')
  --mysql_port=PORT          MySQL port to connect to. (Default %(mysql_port)s)
  --mysql_user=USER          MySQL user to connect as. (Default %(mysql_user)s)
  --mysql_password=PASSWORD  MySQL password to use. (Default '%(mysql_password)s')
  --mysql_socket=PATH        MySQL Unix socket file path. (Default '%(mysql_socket)s')
これ見る限りではめちゃくちゃRDBMSサポートする気満々なんだよなぁ。「RDBMS API」って言葉も出てるし。別にRDBMSサポートするならするでもちろんうれしいんだけど、機能追加されているってことはちゃんとアナウンスしてほしいなぁ。さらに言うと、上記のRDBMS関連オプションを特に指定しない場合でもデフォルトの動作としてsqliteでDB接続しようとしちゃう。RDBMS APIを隠し機能として通すんだったら、オプション指定されない限りDB接続しないのが筋なんじゃなかろうか。

まとめ

  • GAE製品ロードマップでは、RDBMSサポートについて言及なし(→参考
  • ただし、SDK 1.4.3、1.5.0.0の開発サーバーでは、RDBMS APIのオプションがある(リリースノートでは特に言及なし→参考
  • RDBMS APIのオプションを何も指定しない場合、sqliteでDB接続(作成)する
  • 上記DB接続でパス(デフォルトはユーザーのホームディレクトリ配下)に日本語が含まれていると(恐らく)開発サーバの起動で失敗する
  • 上記原因で起動失敗する場合は、dev_appserver起動時のオプションで「--rdbms_sqlite_path=C:/temp/datastore.rdbms」のようにRDBMSファイルのパスを指定する
他にもハマッてる人いるんじゃないかと思うので、参考になれば幸いです。

今回の教訓

ハマったときは面倒でもデバッグ--;

追記(2011/11/13)

現在GAEプレビュー版は終了して、正式運用が開始されてます。
SDKの1.6.0になると、「--rdbms_sqlite_path」オプションがなくなってます。ちなみにこのオプション指定なしでも開発サーバーは起動しました。
やれやれ。
プロフィール
RSS登録
カテゴリ
合わせて読みたい
あわせて読みたいブログパーツ
記事検索
はてブ
Flickr
www.flickr.com
訪問者数

    ブログランキング
    人気ブログランキングへ
    • ライブドアブログ