読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【ディープラーニング】AlchemyVisionの画像タグ付けAPIで動物画像をひたすらタグ付けするbotを作りました

タイトルの【ディープラーニング】はちょっと釣りくさいですが;

 

AlchemyVisionという、画像解析やテキスト解析にDeep Learningを利用できるAPIが話題になっています。

AlchemyAPIは米国のコロラド州デンバー発の人工知能系の技術を応用した自然言語処理や文書解析のサービスを、主に法人向けに展開している企業です。設立自体は2005年とすでに9年ほど経っていますが、シリーズAのファンドを受けたのは2013年になってからですし、名前を目にするようになったのは最近になってからです。

 

実際にいろいろな写真をデモに入れて試してみました。特に動物は精度が良く、犬の場合犬種("shiba"など)までタグ付けできるみたいです。一方、学習データに写真が多いのか、アニメのキャラやイラストは殆どタグ付けできませんでした。

 

そして、そのままAlchemyAPIを利用したtwitterbotも作ってみました。twitterを動物関連のワード検索して、画像のあるツイートを抽出、タグ付けしてツイートします。

AlchemyAnimals (AlcAnimals) on Twitter

アルパカは"cat"と"dog"の両方でタグ付けされました。"alpaca"ってタグは用意されていないみたいです。

 

一応コードも載せておきます。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)