nyanpyou Note

主な目的は調べたり作ったりしたプログラミング備忘録(予定)

OpenCVの導入について

前回Pythonの導入について書いたが、今回は自分がPythonを使うことになった理由の1つである、OpenCVなるものの導入方法を書こうと思う。
前半部分は、Pythonの時と同様に余談なので、本題部分には目次からGO。

2020/1/23追記
この方法でOpenCVをインストールした場合、特許で保護されているアルゴリズム(SURFとか)は入らないらしい。

Where did SIFT and SURF go in OpenCV 3? - PyImageSearch

これらが必要であれば、別の方法でインストールする必要がある。pipで行えるらしいが、試していないため詳細は不明。

OpenCVって何?

例によって、こいつは一体何者なのかの説明から。
OpenCVとは、「Open Source Computer Vision Library」の略称で、「オープンシーブイ」と読む。
ここで耳慣れないライブラリという言葉が出てきたが、ライブラリとはプログラミングを行う際に用いる道具箱みたいなもので、先人達が作った便利なプログラムを沢山まとめたものである。
Pythonをインストールした時点では「標準ライブラリ」と呼ばれるものだけがインストールされているが、OpenCVのような標準でないライブラリは、外部から自分で持ってくることができる。つまり、自分が今やりたい事に合わせて機能を適宜増やせるということである。便利ねぇ~。

ja.wikipedia.org

前回には書かなかったが、機械学習などに使えるライブラリが充実していることが、Pythonが今よく使われている理由の一つである。

ここで改めて正式名称を見ると一目瞭然だが、OpenCVとはつまり、コンピューターで画像を扱うためのライブラリの事だとわかる。

ja.wikipedia.org

2000年代にIntelによって開発されたもので、公式サイトによると2500以上の最適化されたアルゴリズムを含んでいるそうだ。正直多すぎて何ができるのか把握しきれないほど充実している。これを用いることで、誰でも簡単に、画像から望みの物体の情報(重心座標とか面積とか)を抽出したり、顔認識させたり、動体検知したりといったことが出来てしまう。便利ねぇ~(2回目)。

それでは、何となくOpenCVについて知ったところで、このライブラリの導入方法と、動作チェックを兼ねたちょっとした画像処理について以下で書いていこうと思う。

導入方法

OpenCVの導入には、Pythonに標準搭載されている、pip(ピップ)というコマンドを使う。これはPythonのパッケージ管理ツールであり、こいつを使うと、望みのパッケージをPython Package Indexというサイト(通称PyPI(パイピーアイ))から探して、自動でインストールまでやってくれる。便r(ry
ライブラリやパッケージといった単語が出てきているが、それぞれがどういうものを指すかをまとめてくれている人がいたので、混乱してきた時は以下を参考にしたい。

ai-inter1.com

では、このpipを使うためにコマンドプロンプトを立ち上げる。Pythonをインストールしたばかりだと、pipのバージョンが古いことがあるため、まずはバージョンアップから始める。コマンドプロンプトに、

python -m pip install --upgrade pip

と入力して実行する。すると、アップデートが開始されるので、しばらく待つ。

f:id:nyanpyou106:20200122112635p:plain
こんな画面になったらアップデート完了

pipのアップデートが完了したら、いよいよOpenCVをインストールする。先ほどと同様に、コマンドプロンプトに以下のコマンドを入力して実行する。

pip install opencv-python==3.4.2.17

3.4.2.17の部分はOpenCVのバージョンを示しているため、自分が必要とするバージョンを指定する。バージョンの指定は特にないよという場合は、==以降を省いて実行すればOK。今回は3.4.2.17を指定した。
[注:プログラミングでは、使用するライブラリなどのバージョンが少し違うだけで、参考にしたコードを実行できないということが多発する(1年半しか触っていなくても結構経験した)ため、そのコードがどういう環境でテストされたものか確認することはとても大事。忘れないようにしたい。]

f:id:nyanpyou106:20200122130801p:plain
インストール完了画面
pipのアップデートをしていない場合、画像のような注意が出る

上記コマンドを実行すると、OpenCVの他にNumPy(通称ナンパイ。ついついナンピィって読みがち)という、数値計算を得意とするパッケージもインストールされる。n次元配列を扱えるので、画像をPythonで扱うとよく使うことになるが、ここでは触れない。
では例のごとくOpenCVがちゃんとインストールできたか確認を行う。Pythonを対話モードで起動し、以下のように入力する。

#Python
import cv2
cv2.__version__

インストールが成功していない場合は、import cv2を実行した時点でエラーが出る。問題なくインポートが完了し、Python

'3.4.2'

と自分がインストールしたものと同じバージョンを返して来たら成功だ。やったぜ。

これでOpenCVが使えるようになった。せっかくなので、簡単な画像処理を試してみよう。

お試し会

お試しのために適当な画像を用意する。今回は、画像処理界隈でめちゃくちゃよく使われている、Lennaという画像を使用することにした。

f:id:nyanpyou106:20200122133931j:plain
Lenna 誇張じゃなくどこ行っても見る
完全に余談だが、このLennaさんって誰やねん問題はこちらの記事を参照。Lennaさんが誰なのか初めて知ったし、まさかWikipediaに記事があるとは思わなかったw

それでは、適当なディレクトリに以下のコードとLenna.jpgを保存する。コードの作成はどんなエディターを使っても問題ない(極論メモ帳とかでも大丈夫)が、自分はVisual Studio Codeを使用している。Visual Studio Codeのセットアップについても、メモ書きとして残しておいていいかもしれない。

#test.py

import cv2

img = cv2.imread("Lenna.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite("grayLenna.jpg", gray)

準備が出来たら、コードと画像を保存したディレクトリでコマンドプロンプトを開き、

python test.py

と入力して実行。ものの数秒でgrayLenna.jpgというファイルがディレクトリに作成される。ファイルを開き、グレースケールになったLennaが表示されれば成功だ。

f:id:nyanpyou106:20200122144643j:plain
このファイルが作成出来ていれば成功
たった4行でファイルの読み込み、カラー画像のグレースケール化、作成した画像の保存まで行えてしまうのだから、凄いものだ。これだけでも、PythonOpenCVの利便性を実感できたと思う。

おわり

今回はPythonでのOpenCVの導入方法をまとめた。自分と同じような初学者の参考になる内容になっていれば嬉しい。個人的備忘録は、調べものをするたびに適宜書いていくつもりだが、こういう記事をまとめるのも中々楽しい。次どんな内容にするかは未定。パッと思いつくのはArduinoの使い方くらいだろうか。Raspberry Piを使う予定もあるので、使い方を勉強しながらそれをまとめるかもしれない。
やるやる詐欺になるかどうかは神のみぞ知る()