Note of Pediatric Surgery

腸内細菌、R、ときどき小児外科

Python初心者がnumpyとOpenCVをインストールするためにしたこと

はじめに

臨床データを呼吸するように集めていく、というのは僕の一つの目標なのですが、自作のマークシートがあればいろいろと面白いことができないかな?と思っていました。

www.scanet.jp

業者に頼むのが一番手っ取り早かったの、スキャネットさんの担当者さんに来てもらったりして話を聞かせてもらったのですが、1つのマークシートを作成して、読み込めるようにするように20-30万かかってしまうということでした。Readymadeのもので間に合えばもっともっと安く済むのですが、残念ながら難しく、複数のマークシートも必要だったので、自分で作る必要があるかな?と思っておりました。

qiita.com

そんな中、こんなQiitaの記事を見つけてやってみようかな?という気になりました。PythonはQiimeで少しかじったくらいなのでちょっと心配でしたが…Pythonがほとんど入っていない環境に導入するのはなかなか大変でした。とりあえずやったことは

  1. Python3のインストール
  2. numpyのインストール
  3. OpenCVのインストール

になります。

1. Pythonをインストールする

Pythonのversionを確認する

MacであればPythonははじめからインストールされていますが、確認しておきます。

$ python --version
Python 2.7.10

どうやらPython2がインストールされているらしいことがわかりました。

Python2とPython3どっちを使うか

Python2系と Python3系の違いとは?どっち学ぶべきか? | ハジプロ!

これから、新しくPythonを学んでいきたい初心者はPython3系を学習していきましょう。当初は、Python2系でなければ、使えないライブラリも多々ありました。現在では、Python2系から3系への周辺のライブラリの移行もすすみ、Python3でも全く問題ありません。Python2系のサポートは2020年で終了する予定になっています。

とあるので、Python3にアップグレードしてみます。

Python3をインストールする

こちらを参考にしてみました。 qiita.com

Homebrew経由でPython3をインストールする

$ brew install python3

を実行すると

Error: The following formula
  python
cannot be installed as binary package and must be built from source.
Install the Command Line Tools:
  xcode-select --install

と怒られてしまう。どうやらxcodeが上手く働いていないことが問題のようなので、おとなしく従ってみる。

Xcodeをインストールし直す

xcode-select --install

そのあとに再度brew経由でインストールするとうまくいく。このサイトではvirtualenvpyenvで環境を分ける方法が推奨されているがとりあえず無視してみる。

エラーへの対処

もしbrew install python3を実行したときに

Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks

というエラーが出てしまったら、ディレクトリ’を作って権限を与えてあげればいいようです。

sudo mkdir /usr/local/Frameworks
sudo chown $(whoami):admin /usr/local/Frameworks

python 3.7.1 is already installed, it's just not linked

しかし、この際に

Warning: python 3.7.2 is already installed, it's just not linked
You can use `brew link python` to link this version.

という警告が出ることがありますので、素直に実行すると

$ brew link python
Linking /usr/local/Cellar/python/3.7.2... 20 symlinks created

と出るので、そうすれば

$ python3
Python 3.7.2 (default, Dec 27 2018, 07:35:06)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

と動いてくれます。

2. numpyをインストールする

numpyとは?

こちらのサイトによると、

numpyは配列(リスト)計算を高速にするためのPythonのライブラリです。Pythonには標準の機能としてリスト型変数がありますが、numpyはこれを強化したnumpy配列というものを扱います。では、numpy配列のどこがPythonのリストよりも優れているのでしょうか?それは、次の3点に尽きます。

1.処理速度が早くなる。 2.配列の扱い方が柔軟。 3.コードがシンプルで綺麗になる。

というような特徴があるようです。

python # Pythonを起動する
import numpy as np

これでOKだと思います。ここまでは簡単でした。ここで一度、Pythonを終了さえておく必要があります。Pythonを出てterminalに戻るにはControl+Dで良いようです。

3. OpenCVをインストールする

OpenCVとは?

www.sejuku.net

こちらのサイトによると、OpenCVとは

OpenCV(Open Source Computer Vision Library)は、コンピューターで画像や動画を処理するための機能がまとめて実装されている、オープンソースのライブラリです。

とのことです。

$ pip install opencv-python

最終的にこのスクリプトが動けば良いので、まずはpipをインストールする必要があります。

pipをインストールする

OpenCVのインストールにはpipが必要なようです。ちなみにpipとはWikipediaによると

pip("Pip Installs Packages" または "Pip Installs Python")はPythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムである。多くのPythonパッケージは、Python Package Index (PyPI) 上にある。

とのことです。インストールする方法はいろいろあるようで、エラーが起こって困ることも多いようですが、最終的にこのQiitaの記事が参考になりました。

qiita.com

$ curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python

このスクリプトを叩くとpipがインストールされると思います。

OpenCVをインストールする

pipもインストールできたので、

$ pip install opencv-python

このスクリプトからpipをインストールしようとしたところ、

matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.

と出てきてしまいましたので、大人しく従うことにします。つまりはnosetornadaoというパッケージをインストールせいということのようです。

noseとtornadeをインストールする

qiita.com

noseとは?

nose はユニットテスト用のライブラリです。ユニットテストとはプログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。

Tornadoとは

Tornadoは、Apache Licence 2.0に基づくオープンソースのノンブロッキングなWebサーバ&Webフレームワークです。TornadoはFriendFeedによって開発され、Facebookに吸収されたのちにオープンソース化されたフレームワークで、以下のような特徴があります。 * ノンブロッキングI/O * リアルタイム性 * シンプルなテンプレート * シングルスレッド、シングルプロセス

ということで、上記のサイトによると、下記でOKのようです。

$ sudo easy_install nose
$ sudo easy_install tornado

nosetornadoをインストールしてから、

$ pip install opencv-python

を再び実行したんですけど、今度は

Cannot uninstall 'numpy'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

と怒られてしまいます。どうやらnumpyが上手くアンインストールできないことが問題なようですが。いろいろと試した結果、

qiita.com

こちらの記事を参考にさせてもらい、

$ sudo pip install opencv-python --ignore-installed six

としたところうまくいきました。どうやらsixはpython2系と3系の差異を埋めてくれるユーティリティライブラリのことの’ようです。これでOpenCVもどうにかインストールできたようです。

4. 必要なライブラリがインストールできているか確認する

ライブラリがインストールできているかを確認する際はpip listというのが使えるようです。

Package                                Version
-------------------------------------- --------
altgraph                               0.10.2
backports-abc                          0.5
bdist-mpkg                             0.5.0
bonjour-py                             0.3
futures                                3.2.0
macholib                               1.5.1
matplotlib                             1.3.1
modulegraph                            0.10.4
nose                                   1.3.7
numpy                                  1.15.4
opencv-python                          3.4.4.19
pip                                    18.1

これでなんとかnumpyとopencvがインストールできていることがわかりました。めでたしめでたし。上手くいくといいなあ。