BOKUのブログ

ジャンルにこだわらず、ノートの感じで書いてます

windows10にpycocotoolsとprotoc.exe(protocolbuffers)をインストールした手順メモ

tesorflow2.0のチュートリアルに手順として、以下のような記述がありました。

 !pip install pycocotools

protoc object_detection/protos/*.proto --python_out=

でも、その通り実行すると、Windowsの場合エラーになります。Windows10環境にインストールした手順をまとめておきます。環境は、Anacondaで、Python=3.7の仮想環境を作成してます。tensorflow2.0はインストール済です。

www.tensorflow.org

pycocotoolsとは

pycocotoolsとはCOCOAPIを、pythonで利用するためのツールです。COCOAPIは、CoCo(Common Object Context)という物体検出など様々な用途に使えるデータセットのことです。それを各言語で利用するためのAPIが「COCOAPI」です。

cocodataset.org

チュートリアルに書いてあるとおり「pip install pycocotools」でインストールできれば楽勝ですが、Windowsではpipでインストールできません。エラーがでまくります。Windows10で使うためには、ビルドする必要があります。(;^_^A

手順1:pycocotoolsのビルド準備

ビルドするには、python側で以下がインストールされている必要があります。

  • pip install setuptools
  • pip install cython
  • pip install matplotlib

コンパイラするために、Visual Studio 2017 build tools が必要です。

visualstudio.microsoft.com

Gitがインストールされてない場合は、Gitもインストールする必要があります。

arakan-pgm-ai.hatenablog.com

 

手順2:ビルド

適当な作業フォルダをカレントフォルダにして、以下を実行します。

git clone https://github.com/cocodataset/cocoapi.git

cocoapiフォルダができて、以下のような内容になってます。

f:id:arakan_no_boku:20200104163434p:plain

この「PythonAPI」フォルダをカレントフォルダにします。すると、そこにsetup.pyがあります。そのsetup.pyの中に「ext_modules」というブロックがあり、そこに

extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],

 とありますが、このコンパイラオプションはエラーになるので、

extra_compile_args=[],

に変更します。変更後のブロックは

ext_modules = [
    Extension(
        'pycocotools._mask',
        sources=['../common/maskApi.c', 'pycocotools/_mask.pyx'],
        include_dirs = [np.get_include(), '../common'],
        extra_compile_args=[],
    )
]

になります。 これを保存したら、setup.pyのあるフォルダをカレントにして以下を実行します。

python setup.py build_ext install

すると、そのフォルダに「pycocotools」というフォルダができます。あとでコピーしますが、とりあえず、次にいきます。

手順3:protoc.exeのインストール

protoc.exeは Protocol Buffersを扱うコマンドです。Protocol BuffersはGoogleが開発した「あらゆる種類のフォーマットをシリアライズすることができる」シリアライズフォーマットです。公式にサポートされた実装ではXMLJSONと同じくらい容易にシリアライズ機構を整備することができます。チュートリアルのデモ用モデルは、このフォーマットでシリアライズされているみたいで、元にもどすにはprotoc.exeというツールを使うというわけです。

 

インストールします。インストーラはないので、以下からダウンロードします。

github.com

protoc-xxxxx-win64.zipでいいと思います。ダウンロードしたら解凍して、どこかにおき、protoc.exeにパスを通します。ウィルスチェックソフトがはいっていると、protoc.exeが削除されるときありますので対応して消されないにはしないとだめです。

 

できたので試してみる

object-detectionのチュートリアルで試しに使ってみます。 デモソースを置くワークフォルダを、そこをカレントフォルダにして、以下を実行します。

git clone --depth 1 https://github.com/tensorflow/models

modelsフォルダができます。中身はこんな感じ。

f:id:arakan_no_boku:20200104170351p:plain

models/researchフォルダをカレントフォルダにして、protocコマンドを使います。

protoc.exe object_detection/protos/*.proto --python_out=.

成功すると、シリアライズされていたものが展開されて、reaeachフォルダに「object_detection」フォルダができます。そしたら。reaearchフォルダがカレントフォルダの状態で、

pip install .

を実行して、researchフォルダのモジュールをすべてインストールする・・。こんな感じです。やれやれ。たかがチュートリアルの実行でえらい手間取りました。Linuxでは以下の2行で終わることなのですが(笑)。

 !pip install pycocotools

protoc object_detection/protos/*.proto --python_out=

 ではでは。