LoginSignup
10
25

More than 3 years have passed since last update.

Google ColaboratoryでOpenCVをためす

Last updated at Posted at 2020-08-17

自分のPCには、何もソフトウェアをインストールせずに、次のような画像処理をためすことができます

入力画像(元画像)

出力画像(変換後の画像)、猫の顔の位置を認識して、そこに円を書き足しています。

Google Colaboratoryを使用しますので、Googleアカウントは必要になります。

1. Google Colaboratoryにつなげます

「Googleドライブ」と検索して、Googleアカウントでサインインします。

「新規」「その他」「アプリの追加」を選択します。

Colaboratoryを選択します。

「続行」をクリックして、Colaboratoryをインストールします。

インストールが終わると、「新規」「その他」から、「Google Colaboratory」を選ぶことができます。

「Google Colaboratory」を選択すると、新規ファイルが作られてColaboratoryが始まります。

これ以降は、3.必要なファイルを用意する、以外はすべてColaboratoryの中での操作となります。

2. OpenCV、描画ライブラリ(matplotlib)の読み込み

Colaboratoryの最初のセルに以下を打ち込んで、Shift+Enterキーを押す。OpenCVのバージョン(2020.08.17時点で4.1.2)が表示されればOKです。

%matplotlib inline # matplotlibの出力をインライン(ポップアップじゃない)にする。
import cv2 # opencvの読み込み
import matplotlib.pyplot as plt # matplotlibを読み込んで、pyplotを pltという名前で使う。
print(cv2.__version__) # opencvのバージョンを表示して、読み込みを確認する。
# 出力
# 4.1.2

3. 必要なファイルを用意する

https://github.com/opencv/opencv/tree/master/data/haarcascadesから学習済みのデータをダウンロードする。

とりあえず、猫の顔を認識するための、haarcascade_frontalcatface.xml ファイルをクリックします。

「Raw」を「右クリック」してファイルを保存します。

4. ファイルをColaboratoryにアップします

次のコードを、2つ目のセルに記述してShift+Enterキーを押します。

from google.colab import files # colaboratoryのライブラリからファイル操作を使用する。
f = files.upload() # ファイルをアップロードする。

「ファイル選択」を押して、ファイルをアップロードします。

ファイルは次の2つをアップします。

  1. 変換したい画像ファイル
  2. haarcascade_frontalcatface.xml (3.必要なファイルを用意する、でダウンロードしたファイル)

以下のコードを次のセルに記述してShift+Enterを押して実行し、アップロードしたファイルの名前が出力されることを確認してください(この例の場合、変換したい画像のファイル名は、"IMG_20200808_181512.jpg"です)。

!ls # システムコマンドのlsを実行して、ファイルがアップされているか確認する。
# 出力
# haarcascade_frontalcatface.xml    IMG_20200808_181512.jpg  sample_data

5. OpenCVで画像を読み込む

新しいセルに、次のコードを記述してShift+Enterを押して実行してください。

# ファイル名(IMG_20200808_181512.jpg)は、自分の画像のファイル名に変えてください。
img = cv2.imread("./IMG_20200808_181512.jpg") # 画像の読み込み
show_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) # 表示のためBGRをRGBに変換する。
plt.imshow(show_img) # matplot.libを用いて読み込んだ画像を表示します。

次のように、アップロードした画像が表示されればOKです。
またアップロードファイルは、ある程度時間が経つとColaboratory内から消えてしまうので、その時は、再度アップロードしてください。

6. 顔認識して、顔の位置に丸と矢印を描画する

次のコードを新しいセルに書いて、Shift+Enterを押して実行してください。cv2.circle、cv2.putTextの詳細は、OpenCVの描画機能などをご参照ください。

# 学習済みファイルからモデルを生成
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalcatface.xml')
# グレー画像を生成
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 顔認識
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

# 認識結果でループする x,y:顔矩形の左上, w,h:顔矩形の幅と高さ
for (x,y,w,h) in faces:
  # 顔の位置に丸を描く
  img = cv2.circle(img,(x+int(w/2),y+int(h/2)),int(max(w/2,h/2)),(0,0,255),12)
  # 文字によって矢印を描く
  cv2.putText(img,"<---",(x+w,y+int(h/2)),
    cv2.FONT_HERSHEY_SIMPLEX,8,(0,0,255),32,cv2.LINE_AA)

# 描画用にRGBに変換 
show_img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# 結果の描画
plt.imshow(show_img)

次のように猫の顔に丸が書かれ、矢印が付いていれば成功です。

ただ、顔を認識できない時もあります。例えば、この画像では、後ろに三毛猫さんがこちらを向いているのですけど、その顔は、認識できていません。

7. OpenCVのその他の機能

OpenCV-Pythonチュートリアル等のサイトをご参照ください。

10
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
25