タイトルの【ディープラーニング】はちょっと釣りくさいですが;
AlchemyVisionという、画像解析やテキスト解析にDeep Learningを利用できるAPIが話題になっています。
機械学習系サービスの簡単な紹介記事を書きました。深い話はおいおい。 AlchemyAPIのAlchemyVisionを使ってみる http://t.co/nxbUY7b7h3 #techsketch
— Jun Saeki (@sobeit) June 23, 2014
AlchemyAPIは米国のコロラド州デンバー発の人工知能系の技術を応用した自然言語処理や文書解析のサービスを、主に法人向けに展開している企業です。設立自体は2005年とすでに9年ほど経っていますが、シリーズAのファンドを受けたのは2013年になってからですし、名前を目にするようになったのは最近になってからです。
実際にいろいろな写真をデモに入れて試してみました。特に動物は精度が良く、犬の場合犬種("shiba"など)までタグ付けできるみたいです。一方、学習データに写真が多いのか、アニメのキャラやイラストは殆どタグ付けできませんでした。
dog: 0.993 animal: 0.948 shiba: 0.937 inu: 0.769 pic.twitter.com/f6TBeeMMwe
— 黒めだか (@takeshi0406) July 17, 2014
犬のタグ付けが詳細なのはなぜ? pic.twitter.com/DKOjl0bj2n
— 黒めだか (@takeshi0406) July 17, 2014
そして、そのままAlchemyAPIを利用したtwitterのbotも作ってみました。twitterを動物関連のワード検索して、画像のあるツイートを抽出、タグ付けしてツイートします。
AlchemyAnimals (AlcAnimals) on Twitter
dog: 0.956893 animal: 0.622459 pic.twitter.com/xWvsCfVvfp
— AlchemyAnimals (@AlcAnimals) July 18, 2014
アルパカは"cat"と"dog"の両方でタグ付けされました。"alpaca"ってタグは用意されていないみたいです。
dog: 0.832018 cat: 0.668188 animal: 0.622459 pic.twitter.com/DkXJnJBmLn
— AlchemyAnimals (@AlcAnimals) July 18, 2014
一応コードも載せておきます。AlchemyAPIのPythonモジュールが公式で用意されていますが、使い方がよくわからなかったのでそのままAPIのURLを叩きました。python-twitterの使い方は下の記事を参考にしました。
python-twitterの使い方(1) - 忘れないようにメモっとく
#!/usr/bin/python
#coding:utf-8
import urllib
import json
import twitter
import secret
import random
api = twitter.Api(
consumer_key = secret.twDict['consumer_key'],
consumer_secret = secret.twDict['consumer_secret'],
access_token_key = secret.twDict['access_token_key'],
access_token_secret = secret.twDict['access_token_secret']
)
alchemykey = "**************" #APIKEYの取得が必要
keywords = [u"animal",u"dog",u"cat",u"animals",u"zoo",
u"dogs",u"fish",u"bird",u"monkey",u"sheep",u"space+cats",
u"wildlife",u"猫",u"alpaca",u"pet",u"animal+crazy",
u"animal+cute",u"rare+animal",u"mountain+animal",u"national+geographic+animal",
u"aquarium+animal",u"animal+africa",u"species+asia",u"species africa",u"desert+animal"]
random.shuffle(keywords)
keyword = keywords[0]
search = api.GetSearch(keyword,count=100)
random.shuffle(search)
for tw in search:
if len(tw.media) == 0:
print "no picture"
else:
url = tw.media[0]["url"]
media_url = tw.media[0]["media_url"]
break
endpoint = "http://access.alchemyapi.com/calls/url/URLGetRankedImageKeywords?apikey="
access_url = endpoint + alchemykey + "&url=" + media_url + "&outputMode=" + "json"
endpoint = "http://access.alchemyapi.com/calls/url/URLGetImage"
f = urllib.urlopen(access_url)
api_open = f.read()
f.close()
print api_open
api_open = json.loads(api_open)
tags = api_open["imageKeywords"]
tweet = ""
for tag in tags:
print tag["text"], tag["score"]
tweet = tweet + tag["text"] + ": " + tag["score"] + """
""" #なぜか¥nで改行するとエラー
api.PostUpdate(tweet + url)