openCVで画像解析をしてみよう!
カテゴリ:インターン生ブログ
はじめに
こんにちは!今回は、前回機械学習について軽く紹介したので、関連の強いpythonの環境構築の手順を説明し、openCVについて軽く触れたいと思います。
Pythonは理解しやすくフレームワークの種類も豊富な言語なので、是非参考にしてください!
また、弊社ではWebプロモーション成功事例集をまとめた限定資料を無料で配布しています。
Webマーケティングに興味がある方は、下記ページより目を通してみてください。
インストール方法
Macにはデフォルトでpython2系がインストールされています。現在ではpython3系がpythonとして主流になっているので、python3系を別途でインストールし、有効にするところまでを解説していきたいと考えています。(現在のMacではpython 2.7がプリインストールされているそうなので、もしMacOSでpython3系を使用したい方は参考になると思います。)
インストール方法はいくつかあると思いますが、Homebrewというパッケージ管理システムとpyenvというバージョン切り替えツールを使用した方法でご紹介します。Macで他の言語で開発をしている方であれば、すでに使用されている方も多いと思います。
またwebで集客する方法を別の記事にまとめております。
詳しく解説しているので、web集客について深く知りたい方は、ぜひこちらもご覧ください。
Homebrewのインストール
Homebrewを使用するには、XCodeまたはApple DeveloperサイトからXCodeコマンドラインツールのインストールが必要になるので、まだの方は各自でインストールしてください。
Homebrewのインストールは下記のサイトからインストールコマンドをコピーして、ターミナルで実行することでインストールが可能です。
完了後に、下記コマンドを実行してHomebrew X.X.Xのような(Xは数字)文字が表示されていれば正常にインストールされています。
brew -v
pyenvのインストール
Homebrewを用いてインストールします。以下コマンドを実行してください。
brew install pyenv
最終的にこのような画面が表示されていれば成功です。一応下記コマンドを実行して正常にインストールされているか確認しましょう!
pyenv -v
また、pyenvを設定するために以下コマンドを順にターミナルで実行してください!実行後に何も表示されませんが問題ありません!
echo $SHELL
・実行結果が/bin/bash
の場合、以下のコマンドを順に実行してください。
echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.bash_profile
echo ‘export PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.bash_profile
echo ‘eval “$(pyenv init -)”‘ >> ~/.bash_profile
source ~/.bash_profile
・実行結果が/bin/zsh
の場合、以下のコマンドを順に実行してください。
echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.zshrc
echo ‘export PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.zshrc
echo ‘eval “$(pyenv init -)”‘ >> ~/.zshrc
source ~/.zshrc
Pythonのインストール
先ほどインストールしたpyenvを用いてpythonをインストールしてみましょう。
pyenvでは複数のバージョンのPythonを使用することができます。まず、どのようなバージョンのPythonを使用することができるのかを下記コマンドで確認してみましょう。
pyenv install –list
実行結果表示された中から好きなバージョンをインストールできます。今回は下記コマンドで、「3.6.5」をインストールしました。
pyenv install 3.6.5
しばらく時間が経った後に、以下のような画面が表示されていればインストール完了です。
次に以下のコマンドを実行して、[3.6.5]が表示されていればちゃんとインストールされたことが確認できます。
pyenv versions
しかしながらこの状態ではまだ、[3.6.5]ではなく標準でインストールされているバージョンのpythonを使用してしまいます。
これを解決するために以下のコマンドを実行することで、今回インストールしたバージョンのPythonを使用するように設定を変更しましょう!
pyenv global 3.6.5
以下のコマンドで確認してみましょう!
python –version
正しく設定できていれば[3.6.5]と表示されます。
ここまでで、[3.6.5]のバージョンが使えるようになる場合もありますが、私は使えなかったので追加のコマンドを実行します。上のコマンドで[3.6.5]と表示された場合はこの処理は不要です。
eval “$(pyenv init -)”
この処理についての詳しい解説はここではしないので、以下を参考にしてください。
以上で完了です!
openCVのインストール
先ほどインストールしたHomebrewを用いてopenCVをインストールすることができます。下記のコマンドを実行することでしばらく時間が経てば完了します。
brew install opencv
pythonで使用することを想定して、下記コマンドを実行しましょう。
pip install opencv-python
これで完了です。
簡単な画像解析を行ってみる
上の画像のキウイの個数を数えるプログラムを作成します。
手順は、
- 画像の読み込み
- 画像をぼかす(前処理)
- 閾値(しきいち)処理で2値化(前処理)
- 物体の輪郭を検出
- 検出した輪郭を写真に描画
- 角輪郭の重心を求めて座標としてリストに追加
- 個数を表示
です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import cv2 import numpy as np import matplotlib.pyplot as plt imageGRAY = cv2.imread("kiui.jpg", cv2.IMREAD_GRAYSCALE) imageBGR = cv2.imread("kiui.jpg", cv2.IMREAD_COLOR) blur = cv2.GaussianBlur(imageGRAY, (59, 59), 0) ret1, th1 = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) contours ,hierarchy= cv2.findContours(th1.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) frame = cv2.drawContours(imageBGR, contours, -1, (0,0,0), 10) cv2.imwrite("/Users/vscode/vscode/python-study/kakou-kiui.jpeg", frame) count = [] for i in contours : x = 0 y = 0 for n in i : x += n[0][0] y += n[0][1] count.append([x/len(i), y/len(i)]) count = np.array(count) print("結果 : " + str(len(count)) + "個") |
上記がサンプルコードです。一つ一つの処理について今回は解説しませんが、上の手順の順番通りに記述してあるので、わかりやすいと思います。
この結果が12個でした(笑)
一部分しか映っていないものをどうするかなどの議論はもちろんあるとは思いますが、上記のコードであれば写っている物は全てカウントされるはずなので、結果は15個を期待していましたが、3個ほど少ない結果になりました。
この原因として考えられるのが、画像を最初にぼやかして閾値で二極化している点にあると思われます。これによりキウイ同士の距離が近いものが同じ物体として扱われてしまい、個数が減ったものだと考えられます。
実際、その後一つずつキウイを消して確認したところ下の画像のようにまとめて計算されていたことがわかりました。
これを解決する方法として、「ぼかさなきゃいいじゃん!」と言われそうですが、ぼかさないとキウイを一つの物体として認識できずにタネなども一つの物体に含まれてしまったりしてしまいます。ぼかす処理をなくして実行してみたら235個でした(笑)これでは全然だめですね。。。
このような画像の個数を、ちゃんと数えることができるように画像を処理することが必要になります。この画像解析の技術に関してはまた、別で紹介できればと思いますので、今回はここで終わります!
弊社inglowでは、これから広告の運用を考えられている方、あるいはこれから広告代理店に運用をお願いされる方向けに、「業界別Web広告の成功事例」をまとめた資料を無料配布しております。
下記のフォームに入力いただくだけで、無料で資料をダウンロードしていただけます。ぜひご利用下さい。