Windows+Python 3.6+OpenCV環境構築(2018年)

2018年12月20日現在、Windows上で構築したAnacondaまたはMinicondaPython環境でOpenCVを使うには、以下の方法があるようだ。

  1. pipコマンドでopencv-pythonをインストール

    pip install opencv-python
    
  2. condaコマンドで、conda-forgeからopencvをインストール

    conda config --add channels conda-forge  # 過去に実行したことがあれば不要
    conda install -c conda-forge opencv
    

以前はMenpoプロジェクトの方々がメンテしていたバイナリパッケージを使うことが一般的だったらしく、conda install -n menpo opencvといったコマンドラインが紹介されているWebページもある。しかし、どうにもメンテが止まっているようなので避けた方が良さそう(Python 3.4用までで更新が止まっている)。

ちなみに自分はpipを使う方に落ち着いた。とは言っても特別に推奨するほどの理由は無い。単に、かつてconda-forgeからインストールした何かのパッケージがバグっていて苦労した経験からcondaで標準チャンネル以外を使いたくないだけ。なおOpenCVのインストールにだけconda-forgeを使えば良いんじゃないかと思って試したけれど、conda-forgeと標準チャンネルとの各種パッケージのバージョン違いが頭痛の種になりそうなので早々に諦めた。conda-forgeを使うなら、全面的にconda-forgeを使うようにした方がよさそうだなぁと思っている。

ともあれ。最後にopencv-pythonという素晴らしいパッケージを公開・メンテナンスしてくれているOlli-Pekka Heinisuo氏に感謝。

Python, Cython, Numba, TensorFlowの処理速度比較

Python, Cython, Numba, TensorFlowで、処理速度を比較してみた。未完成感あるけれど、いったん今日時点での結果を記録しておく。

github.com

原点を中心とした半径 1 の円の、x, y ともに正である領域(四分の一円)を考えると、その面積は  \frac{\pi r^{2}}{4} = \frac{\pi}{4} ということで円周率の四分の一である。続いて、この領域の x 軸と接している辺を n 等分した点それぞれから垂線 (a) を、円弧に到達するまで y 軸正方向に垂線を引く。ここで、各 (a) を高さ、\frac{1}{n} を幅とする長方形群を考えると、それらの面積の総和は n を大きくすればするほど四分の一円の面積に近づいていく。この区分求積法の考え方でもって円周率を求める処理を、Python, Cython, Numba, TensorFlow (GPU), TensorFlow (CPU) で実装して実行速度を比較した。

今回の実装では、Numba の優秀さが際立つ結果となった。TensorFlow での GPU 演算では演算が軽すぎるのか、GPU へのメモリー転送コストによってか CPU 使用時の方が速かったりする結果となっている。

TensorFlow だけは、まだ理解できた感覚が無い。もう少し、細かく見てみたい。

Anacondaの仮想環境が作られる標準のディレクトリを変更する

Anacondaconda コマンドでは、いわゆる仮想環境を作成することで任意のバージョンの Python やパッケージの組み合わせを一つの計算機で共存させることができる。今日は、その仮想環境のファイル群を配置する標準のディレクトリを変更する方法について書いておく。

続きを読む

Windows 10、コマンドプロンプトのTabキーでの補完を有効化する

Windows 10を初期化して再セットアップしたところ、コマンドプロンプトで Tab キーでコマンドラインの補完が行われなくなっていた。そこで修復方法をネットで調べたところ、レジストリを編集すれば治せるらしいとのこと。

具体的な手順は以下の通り:

  1. レジストリエディタで以下のキーを開く HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
  2. REG_DWORD 型の CompletionChar9 (タブ文字の ASCII コード) を設定する

f:id:sgryjp:20181102124041p:plain

最近は PC 環境の大半をクラウドサービスに移行していて、OS の初期化も気軽に行えるようになった。それでも細々とした再設定などは無くならないものだね。