【Python・OpenCV】Google ColaboratoryでOpenCVを使うには

※当サイトではアフィリエイト広告を利用しています

Python プログラミング 開発環境

【Python・OpenCV】Google ColaboratoryでOpenCVを使うには

2024-03-05

はじめに

画像処理に興味があるけど、環境構築が大変そう...
そんな方におすすめなのが、Google Colaboratory(以下、Colab)です。
ColabはブラウザでPythonのコードを実行できる便利なツールです。
インストール不要で、かつ簡単な操作で、高性能なGPUの使用も可能です。
しかも、OpenCVのインストール可能なため、いろいろな画像処理が簡単にできます。

ブラウザでの利用なので、スマホやタブレットでも操作可能です。
筆者はちょっとしたアイデアを試す時などに、iPadで利用したりします。

本記事では、ColabでOpenCVを利用するためのセットアップから、画像の読み込みや表示、加工などのサンプルコードの実行までを解説します。

Google Colabへアクセス

Google ColabはJupyter Notebookベースのクラウド環境で、Pythonでのプログラミングができます。

Google Colabのリンクはこちらです。
Google アカウントが必要ですが、お持ちでしたら早速アクセスしてみましょう。

このような画面からスタートします。

左下の「+ ノートブックを新規作成」ボタンをクリックします。

新規ノートブック作成

これで、準備ができました。

OpenCVを使う

2024年2月末現在、Google ColabにはすでにOpenCVがインストールされています。
Google Colabの環境にはpipがインストールされているので、下のコマンドでインストール済みのライブラリを確認してみましょう。

!pip list

Google Colabでは Cell (セル)と呼ばれる入力フィールドにコマンドやプログラムを入力します。
下図の様にセルの左側に▶︎(実行ボタン)があります。
図のようにコマンドを入力し、▶︎をクリックします。

約480のライブラリが最初からインストールされています。
OpenCVも下記の3種類がインストールされていました。

pip listで確認できるOpenCV

opencv-contrib-python 4.8.0.76
opencv-python 4.8.0.76
opencv-python-headless 4.9.0.80

標準モジュールのOpenCVとcontribはバージョン4.8.0、
headlessは本記事執筆時点の最新バージョンである4.9.0となっていました。

contrib、headlessとは

contribは、OpenCVの公式リポジトリには含まれていない追加のモジュールとアルゴリズムのコレクションです。
これらのモジュールは、開発段階または実験段階のものが多いですが、以下のようなさまざまな機能を提供します。

  • 顔認識
  • 物体検出
  • 機械学習
  • 3D復元
  • 画像ステッチング
  • 光学文字認識

headlessは、GUI機能を含まないOpenCVの軽量版です。
画像処理やコンピュータビジョンなどのタスクを実行できますが、ウィンドウや画像を表示することはできません。
headless版は、以下のような環境で役立ちます。

  • サーバ環境
  • クラウド環境
  • 組み込みシステム

画像ファイルを読み込む方法

ここでは2つのファイルの読み込み方法を紹介します。

ローカルにあるファイルをアップロードして読み込む

ファイルのアップロードは以下の手順で行います。

  1. 左サイドバーの「ファイル アイコン」をクリックします。
  1. 「アップロード」アイコンをクリックし、アップロードしたいファイルを選択し、アップロードします。

または、下の図の点線で表示したエリアにドラッグ&ドロップします。

  1. ファイルがアップロードされ、現在のディレクトリに保存されます。
  1. コード中では下の様に相対パスでアクセスができます。
import cv2
image = cv2.imread("テスト.png")
(広告) OpenCV関連書籍をAmazonで探す

Google Driveにあるファイルを読み込む

Google Driveにあるファイルにアクセスする操作は次のとおりです。

  1. 左サイドバーの「ファイル アイコン」をクリックします。
  1. 「Google Drive 」アイコンをクリックします。

下のダイアログが表示されるので、「Goole ドライブに接続」をクリックします。

  1. Googleドライブに接続するPythonのコードが記述されたセルが追加されます。
    メッセージにある様に▶︎をクリックしてみましょう。

コードはこちら。

from google.colab import drive
drive.mount('/content/drive')

数秒すると、Googleドライブが下の様に接続されます。

一度、Googleドライブに接続すると、上のコードの実行なしに「Google Drive 」アイコンをクリックするだけでGoogleドライブが接続されます。

  1. ファイルのアップロードは目的のフォルダーにドラッグ&ドロップすることでも行えます。
  2. Googleドライブのファイルにアクセスするにはパスが必要になります。
    カーソルを目的のファイルに合わせた時に表示される3点リーダーをクリックし、表示されるメニューの「パスをコピー」で取得します。

図の"image.jpg"を読み込むコードは下になります。

import cv2
image = cv2.imread("/content/drive/MyDrive/Colab Notebooks/image.jpg")

画像の表示方法

画像を表示する方法は複数ありますが、本ブログでもよく利用するmatplotlibを使う方法を紹介します。
matplotlibも、すでにインストールされているライブラリーの一つなので、インストールは不要です。
さらに、他の記事のコードを変更することなく、利用できます。

例として、【Python・OpenCV】画像を回転する - cv2.rotateとcv2.warpAffineの違いと使い分け の記事の最初のサンプルコードを動かしてみます。

サンプルコードで修正が必要なのは、入力画像のファイル パスの部分です。
画面上部の「+ コード」をクリックして、新しいセルを追加します。
次のコードをコピペして、左側に▶︎(実行ボタン)をクリックします。

import cv2
from matplotlib import pyplot as plt

# 画像を読み込む
image = cv2.imread("/content/drive/MyDrive/Colab Notebooks/image.jpg")

# BGRのチャンネル並びをRGBの並びに変更(matplotlibで結果を表示するため)
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 画像を時計回りに90°回転する
rotated_cw90 = cv2.rotate(rgb_image, cv2.ROTATE_90_CLOCKWISE)

# 画像を180°回転する
rotated_180 = cv2.rotate(rgb_image, cv2.ROTATE_180)

# 画像を反時計回りに90°回転する
rotated_ccw90 = cv2.rotate(rgb_image, cv2.ROTATE_90_COUNTERCLOCKWISE)

# 結果の可視化
plt.rcParams["figure.figsize"] = [12,6]                             # 表示領域のアスペクト比を設定
title = "cv2.rotate: codevace.com"
plt.figure(title)                                                   # ウィンドウタイトルを設定
plt.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.95)   # 余白を設定

plt.subplot(231)                                                    # 2行3列の1番目の領域にプロットを設定
plt.imshow(rgb_image)                                               # 入力画像を表示
plt.title("Original Image")                                         # 画像タイトル設定
plt.axis("off")                                                     # 軸目盛、軸ラベルを消す

plt.subplot(234)                                                    # 2行3列の4番目の領域にプロットを設定
plt.imshow(rotated_cw90)                                            # 時計回りに90°回転した画像を表示
plt.title("cv2.ROTATE_90_CLOCKWISE")                                # 画像タイトル設定
plt.axis("off")                                                     # 軸目盛、軸ラベルを消す

plt.subplot(235)                                                    # 2行3列の5番目の領域にプロットを設定
plt.imshow(rotated_180)                                             # 180°回転した画像を表示
plt.title("cv2.ROTATE_90_CLOCKWISE")                                # 画像タイトル設定
plt.axis("off")                                                     # 軸目盛、軸ラベルを消す

plt.subplot(236)                                                    # 2行3列の6番目の領域にプロットを設定
plt.imshow(rotated_ccw90)                                           # 反時計回りに90°回転した画像を表示
plt.title("cv2.ROTATE_90_COUNTERCLOCKWISE")                         # 画像タイトル設定
plt.axis("off")                                                     # 軸目盛、軸ラベルを消す

plt.show()

実行した結果はこちら。

画像を表示する基本のコードは次の様になります。
OpenCVのimread関数で画像を読み込んだ場合は、BGRのチャンネル並びをRGBの並びに変更に変更することを忘れないでください!

画像を1つだけ表示する場合は、以下のようにsubplotメソッドの実行は不要でimshowメソッドを実行します。

import cv2
from matplotlib import pyplot as plt

# 画像を読み込む
image = cv2.imread("/content/drive/MyDrive/Colab Notebooks/image.jpg")

# BGRのチャンネル並びをRGBの並びに変更
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

plt.imshow(rgb_image)                                               # 画像を表示
plt.show()

実行結果はこの様になります。

画像を複数表示する場合は、subplotメソッドで表示する場所の指定をします。

import cv2
from matplotlib import pyplot as plt

# 画像を読み込む
image = cv2.imread("/content/drive/MyDrive/Colab Notebooks/image.jpg")

# BGRのチャンネル並びをRGBの並びに変更
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# サブプロットに画像を表示
plt.subplot(121)                                                    # 1行2列の1番目の領域にプロットを設定
plt.imshow(rgb_image)                                               # 画像を表示
plt.show()

実行結果はこの様になります。
右の画像はチャンネルの並びを変更しなかった場合の結果です。
色合いがおかしくなってしまうので、OpenCVのimread関数で読み込んだ画像を表示する場合は忘れないでください。

複数画像を表示

おわりに

Google ColabでOpenCVを使う方法について紹介しました。
様々なデバイスで開発環境のセットアップ不要で利用できるところがとても便利です。
OpenCVなどのライブラリもインストール済みなのもよい点です。

無料プランでは、実行時間や使用可能メモリに制限がありますが、簡単なプログラムであれば十分に使えます。
積極的に使いこなしたい場合は、有料プランを検討してもよいかもしれません。
有料プランについてはこちらのリンクをご確認ください。

参考リンク

■(広告)Pythonのオススメ書籍■

-Python, プログラミング, 開発環境
-