目次


ツイートに組み込まれた画像を分析して分類および認識する

Comments

このシリーズの第 1 回で、Bluemix 上に Python Web アプリを作成し、Twitter からライブ・ツイートを取得する作業を行いました。また、ツイートのテキストを JSON ファイルとテキスト・ファイルに保存する方法も説明しました。第 2 回では、アプリに Watson Tone Analyzer サービスを追加して、保存したテキスト・ファイルをアプリに取り込み、収集したツイートにまつわる感情を評価できるようにしました。今回のチュートリアルでは、収集したツイートに組み込まれている画像を分析する方法を説明します。

アプリケーションを作成するために必要なもの

  • このチュートリアル・シリーズの第 2 回で作成したアプリ
  • 第 1 回で生成した JSON 出力

アプリを実行するコードを入手する

1. アプリに Watson Visual Recognition サービスを追加する

まずは、Bluemix の開発スペースに Watson Visual Recognition サービスを追加します。このサービスを利用する目的は、第 1 回で JSON ファイルに収集したツイートに含まれる画像を分析することです。Watson Visual Recognition サービスでは、画像を分析して、場所、オブジェクト、顔、テキストなどの内容を認識することができます。

  1. Bluemix にログインします。
  2. 「Catalog (カタログ)」ページで、「Visual Recognition」タイルを見つけます。このサービスでは、1 日あたり 250 個の画像を無料で分析することができます。
  3. アプリに対してサービスをアンバインドしたままにして、システムが生成したサービスと資格情報の名前を受け入れ、必要なプランを選択してから「Create (作成)」をクリックします。サービスが作成されて Bluemix スペースに追加され、そのサービスがタイルとして「Services (サービス)」に示されます。
  4. サービスが Bluemix の開発スペースに追加された後は、サービスの資格情報を確認します。資格情報は JSON オブジェクトの形式で表示されます。API キーをメモしておいてください。後のステップで、このキーが必要になります。

2. ツイートから画像の URL を抽出する

Visual Recognition サービスは、次の 2 種類の入力を使用することができます。

  • JPEG および PNG 画像
  • JPEG および PNG 画像の URL

このチュートリアルでは、ツイートの集合に含まれるそれぞれの画像の URL を使用します。したがって、このステップではツイートから画像の URL を抽出し、それらの URL をファイルに保存します。

  1. アプリケーションのランディング・ページを開き、新しいノートブックを開きます。
  2. ツイートの JSON オブジェクトの構造を振り返ってください。画像の URL は、extended_entities という名前のノードに含まれています。 ノードの図

    画像の URL を抽出するためのコードを作成します。以下は、サンプル・コードからの抜粋です。ファイル名 (tweets2.json) は、第 1 回でツイートを保存するために使用した名前で置き換えてください。このコードをノートブック・セルで実行します。

    import json
    tweets_file = open('tweets2.json', 'r')
    images_file = open('images.txt','w')
    for line in tweets_file:
        parsed_json = json.loads(line)
        if 'extended_entities' in parsed_json:
            tweet_text = parsed_json['text']
            tweet_picture = parsed_json['extended_entities']['media'][0]['media_url']
            print tweet_text
            print tweet_picture
            images_file.write(tweet_picture)
            images_file.write('\n')
            print "==="

これで、すべての画像の URL を格納したテキスト・ファイルが準備できました。

3. Visual Recognition に接続して分析結果を取得する

次は、前のステップで抽出した画像の URL を Visual Recognition に取り込んで、Watson サービスが画像について教えてくれる内容を確認します。

Visual Recognition に接続するには、HTTP GET メソッドを使用します。GET リクエストで JSON レスポンスを取得するためには、以下のパラメーターをリクエストに指定する必要があります。

  • API キー。
  • Visual Recognition 画像分類サービスの URL。このチュートリアルを作成している時点では、その URL は https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify となっています。
  • Visual Recognition サービスのバージョン。このチュートリアルを作成している時点では、バージョンは 2016-05-20 です。

これらの API エンドポイントのすべてについては、このリンク先の Visual Recognition 資料で説明されています。

  1. 必須ライブラリーをインポートして、読み取り元のファイルと書き込み先のファイルを開きます。
    import requests
    import json
    
    images_file = open('images.txt','r')
    images_json = open('images.json', 'w')
  2. GET リクエストの必須パラメーターをすべて指定します。
    default_url = 'https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify'
    version = '2016-05-20'
    api_key = raw_input('[Visual Recognition] Enter the API key: ')
  3. GET 呼び出しを行い、レスポンスをファイルに保存します。
    for line in images_file:
        line = line.rstrip()
        url = default_url+'?&api_key='+api_key+'&url='+line+'&version='+version
        print url
        r = requests.get(url)
        data = json.dumps(r.json())
        print data
        #data = r.json()
        print >> images_json, data

これで、ツイート画像の分類がファイルに保存されました。このファイルを、詳細な分析に使用できます。Visual Recognition から返されたレスポンスを確認してください。

結果を示すコード・リスティング
結果を示すコード・リスティング

ご覧のように、各画像は 1 つ以上のクラスに分類されています。また、クラスごとに、分類の信頼度を表すスコアが割り当てられています。このサービスは組み込み分類子を使用していますが、独自の分類子を使用するようにサービスをトレーニングすることもできます。その方法については、このリンク先の「Creating a custom classifier」を参照してください。

まとめ

このチュートリアルでは、画像一式を分析して、それらの画像が属するカテゴリーを調べました。シリーズ最終回となる次のチュートリアルでは、今度は画像のテキストを分析し、その分析結果を第 2 回で得たテキストによる洞察と一緒に Watson Alchemy サービスに取り込みます。このようにテキスト以外のデータも取り込むことで、第 2 回で行った感情分析がさらに改善されることが明らかになります。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=ビジネス・アナリティクス
ArticleID=1037109
ArticleTitle=ツイートに組み込まれた画像を分析して分類および認識する
publish-date=09082016