Help us understand the problem. What is going on with this article?

Microsoft COCO が提供するデータとAPIを使用すると画像解析が簡単に出来た

More than 3 years have passed since last update.

Microsoft COCOとは

Screen Shot 2016-02-16 at 08.37.28.png

引用:http://mscoco.org/

画像の認識、セグメンテーション、キャプショニングがされているデータセットです。

画像処理をしたいと思っても最初に衝突する問題がデータセットの問題ですが、Microsoft COCOには必要なデータセットが用意されており、pythonとMatlabのAPIも提供されているため、使用するのが簡単なのが特徴です。

まずは下記からデータセットをダウンロードしてください。

http://mscoco.org/dataset/#download

Screen Shot 2016-02-16 at 08.39.31.png

上記のような画面が出てきます。
画像データはサイズが大きいので、どのような分析ができるか試したいだけでしたらValidation Dataをダウンロードして試すと良いと思います。

MS COCO API

上記のデータを分析するためのAPIです。
データをダウンロードさえすればこれで自由に分析できます。
私はpythonをよく使うのでpythonで環境構築して動作を試してみました。

https://github.com/pdollar/coco

# API Download
git clone https://github.com/pdollar/coco
# API install
cd coco/PythonAPI
python setup.py install

フォルダ構成と準備

cocoのフォルダに下記のデレィクトリを作成し、画像とアノテーションのデータを置いておきます。

annotations
images

MatlabAPI   README.txt  images      results
PythonAPI   annotations license.txt

PythonAPIのフォルダは下記のようになっており、ipython notebookを使用すると解析できます。

Makefile        pycocoDemo.ipynb    pycocotools
build           pycocoEvalDemo.ipynb    setup.py

ipython notebookの導入は下記を参考にしてください

http://qiita.com/icoxfog417/items/175f69d06f4e590face9

画像の解析

ではいよいよ解析に入ります。

重要そうなところだけピックアップして説明していきます。

画像の読み込みと準備

dataTypeのところにtrain2014,val2014,test2014の3種類から選択します。

dataDir ='..'
dataType='val2014'
annFile='%s/annotations/instances_%s.json'%(dataDir,dataType)

下記のコードでデータのカテゴリとスーパーカテゴリが分かります。
スーパーカテゴリはカテゴリの上位概念みたいなものです。
例:
カテゴリ:犬、猫・・
スーパーカテゴリ:動物

# initialize COCO api for instance annotations
coco=COCO(annFile)
# display COCO categories and supercategories
cats = coco.loadCats(coco.getCatIds())
nms=[cat['name'] for cat in cats]
print 'COCO categories: \n\n', ' '.join(nms)

nms = set([cat['supercategory'] for cat in cats])
print 'COCO supercategories: \n', ' '.join(nms)

下記のコードでどのカテゴリのデータを選択するかを選びます。
今回は"dog"を選択しています。
"dog"のカテゴリのデータからランダムに選択して読み込んでいます。

# get all images containing given categories, select one at random
catIds = coco.getCatIds(catNms=['dog']);
imgIds = coco.getImgIds(catIds=catIds );
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]

画像の読み込みと表示は下記で行います。

# load and display image
I = io.imread('%s/%s/%s'%(dataDirImage,dataType,img['file_name']))
plt.figure()
plt.imshow(I)

表示される画像です。
すごく癒されますね。笑

Screen Shot 2016-02-16 at 09.04.03.png

画像のフィルター

癒しの画像を解析してみます。

# load and display instance annotations
plt.imshow(I)
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
coco.showAnns(anns)

画像の犬のデータが緑になっていることが確認できます。
coco.getAnnIdsの部分でフィルターをかけています。
この関数の説明を見てみると下記のようになっています。
今回は読み込んだ画像のidをimgIds=img['id']で処理を行い、catIds=catIdsで画像のフィルタリングを行っています。

        """
        Get ann ids that satisfy given filter conditions. default skips that filter
        :param imgIds  (int array)     : get anns for given imgs
               catIds  (int array)     : get anns for given cats
               areaRng (float array)   : get anns for given area range (e.g. [0 inf])
               iscrowd (boolean)       : get anns for given crowd label (False or True)
        :return: ids (int array)       : integer array of ann ids
        """

Screen Shot 2016-02-16 at 09.06.24.png

画像のキャプション

次に画像のキャプションをみてみましょう。
画像のキャプションとは画像の説明文です。

caps.getAnnIdsで画像を指定してキャプションを取得しています。
他のコードで取得したキャプションを用いて画像とキャプションを生成しています。

# load and display caption annotations
annIds = caps.getAnnIds(imgIds=img['id']);
anns = caps.loadAnns(annIds)
caps.showAnns(anns)
plt.imshow(I)
plt.show()

Screen Shot 2016-02-16 at 09.23.16.png

キャプションの候補が複数確認できました。
キャプションは人によって解釈が異なるので複数候補がある方が助かりますね。

最後に

画像解析したくてもデータがない問題には直面しやすいと思います。
このように解析まで簡単にできるものを提供してくれているMicrosoftはさすがと言えます。
Visual Studio Codeなどオープン化が進んでいるMicrosoftの今後の活動にも注目です。

Error対応

RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ

上記のエラーの場合は~/.matplotlib/matplotlibrc に次の一行を追加する

backend : TkAgg
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした