OpenCVのセットアップ方法(macOSアプリ用)

OpenCVはオープンソースの画像処理やマシンラーニングを行うためのライブラリです。多くの機能を持っており、画像処理やマシンラーニングの処理を一から全て実装するよりも効率的に開発出来ます。

高機能なだけではなく、非常に高速です。内部ではOpenCLやSIMD、IPP (Intel Performance Primitive)、スレッドによる並列化などを行い、普通に愚直に実装したら得られない速度を実現しています。

この記事では、OpenCVを使ったmacOSアプリを開発するための、OpenCVの開発環境のセットアップ方法を解説します。

iOSアプリのセットアップ方法については、次の記事を参照してください。

関連記事

OpenCVはオープンソースの画像処理やマシンラーニングを行うためのライブラリです。高機能なライブラリで、画像処理やマシンラーニングの処理を一から全て実装するよりも効率的にアプリ開発を行えます。 高機能なだけではなく、非常に高速です[…]

スポンサーリンク

OpenCVのビルド

この記事の執筆時点では、macOS用のビルド済みバイナリが公開されていないので、ソースコードからライブラリをビルドすることにしました。OpenCVのビルドには、以下のものが必要です。

  • Xcode
  • CMake
  • Git
  • Python
  • NumPy

macOS 12.3未満までは、PythonとNumpyがOSにプレインストールされていますが、macOS 12.3以降はインストールが必要です。XcodeはApp Store版とXip版のどちらでも使用可能です。

Xcodeのインストール

Xcodeのインストール方法については、次の記事をご覧ください。

関連記事

Apple Platformのアプリ開発にはXcodeを使用します。何回かに分けてアプリの開発方法を紹介します。準備回の今回はとりあえず開始するために最初に必要なことを紹介します。 Apple Developer Programへ[…]

PythonとNumPyのインストール

PythonとNumPyはXcodeのセットアップ中にインストールされます。Xcodeをセットアップしてください。

スポンサーリンク

CMakeのインストール

CMakeはv3.19.2でApple Silicon及びXcode 12以降のビルドシステムに対応しました。古いバージョンを使っている場合はアップデートしましょう。

CMakeはHomebrewからもインストールできますが、私は公式サイトからダウンロードする方法でインストールしました。

(1) 公式サイトのダウンロードページからmacOS用のファイルをダウンロードします。

Download | CMake

(2) ダウンロードしたdmgをマウントし、CMake.appをアプリケーションフォルダにコピーします。

(3) PATHCMake.app内のbinディレクトリへのパスを追加します。いくつか方法があります。macOS 10.15未満でシェルがBashの場合は~/.profileを編集して以下の様にパスを追加します。macOS Catalina 10.15以降でデフォルトのzshをシェルに設定している場合は、~/.zshrcを編集してください。

export PATH=/Applications/CMake.app/Contents/bin:$PATH

(4) ターミナルを再起動して、cmake --versionを実行してパスが通っているか確認します。

% cmake --version
cmake version 3.24.0-rc5

CMake suite maintained and supported by Kitware (kitware.com/cmake).

OpenCVをビルドする

OpenCVのmacOS用のビルド済みのバイナリは公開されていないので、ソースファイルをダウンロードしてビルドします。

OpenCVのGitHubのリポジトリからソースファイルのアーカイブをダウンロードします。

Releases · opencv/opencv · GitHub

ダウンロードしたアーカイブを展開し、次のようなディレクトリ構成になるように、build_opencvpublicディレクトリを作ります。

.
├── build_opencv
├── opencv-4.6.0
└── public

build_opencvはビルド作業用ディレクトリ、publicはビルドした後のSDKを入れるディレクトリです。ターミナルで次のように作業します。

(1) build_opencvディレクトリに移動して、ビルドの準備作業を実行します。

% cd build_opencv
% cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DBUILD_EXAMPLES=OFF -DCMAKE_INSTALL_PREFIX=../public ../opencv-4.6.0

CMAKE_OSX_DEPLOYMENT_TARGETは動作最低OSです。ここでは11.0を指定しています。

CMAKE_OSX_ARCHITECTURESはビルドするバイナリのCPUアーキテクチャです。ここでは、Universal Binaryになるようにx86_64arm64を指定しています。

(2) ビルドします。ビルドには少し時間がかかりますが、進捗率が表示されるので不安にならずに見守れます。

% make -j7

(3) SDKのファイル一式をpublicフォルダにコピーします。

% make install

OpenCVを使うアプリをビルドするときに必要になるファイルがpublicフォルダにコピーされます。

Xcodeのプロジェクト設定

ビルドしたライブラリを使うには、Xcodeのプロジェクトの設定が必要です。

SDKのコピー

次のようにSDKのファイル一式をコピーします。私の場合は、プロジェクト単位の方が都合が良いので、プロジェクト内にコピーします。プロジェクトのルートディレクトリにcommonというフォルダを作り、commonの中にopencvというフォルダ作ります。public/usr/local/includepublic/usr/local/libopencvにコピーします。

次のようなディレクトリ構成になります。

OpenCVTest
├── OpenCVTest
│   ├── AppDelegate.swift
│   ├── Assets.xcassets
│   ├── Base.lproj
│   ├── OpenCVTest.entitlements
│   └── ViewController.swift
├── OpenCVTest.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   └── xcuserdata
└── common
    └── opencv
        ├── include
        └── lib

ヘッダー検索パスの設定

OpenCVのヘッダファイルを読み込めるようにするため、検索パスを追加します。

ターゲットの設定の「Search Paths」の「Header Search Paths」に$(inherited) $(PROJECT_DIR)/common/opencv/includeを追加します。

「Header Search Paths」に検索パスを設定する
「Header Search Paths」に検索パスを設定する

共有ライブラリの設定

共有ライブラリは、アプリケーションパッケージ内にコピーして使用するように設定します。

(1) プロジェクトに共有ライブラリを登録します。

OpenCVは複数のライブラリに分かれています。使用する機能に合わせたライブラリをプロジェクトに登録します。例えば、基本的な画像処理であれば、次の2つです。

  • libopencv_core.4.6.0.dylib
  • libopencv_imgproc.4.6.0.dylib
Finderからドラッグ&ドロップする
Finderからドラッグ&ドロップする
「Create groups」を選択し、アプリのターゲットをONにする
「Create groups」を選択し、アプリのターゲットをONにする

(2) アプリケーションパッケージ内のFrameworksにコピーされるように設定します。

ターゲットの設定の「Build Phases」に「Copy File」フェーズを追加します。既にFrameworksフォルダにコピーする「Copy File」フェーズがあれば、そこに追加登録しても問題ありません。

「New Copy Files Phase」を選択する
「New Copy Files Phase」を選択する
「Destination」から「Frameworks」を選択し、追加ボタンをクリックする
「Destination」から「Frameworks」を選択し、追加ボタンをクリックする
追加するライブラリを選択し、「Add」ボタンをクリックする
追加するライブラリを選択し、「Add」ボタンをクリックする

共有ライブラリのファイル名について

4.3.0など特定のバージョンに限定される問題かもしれませんが、共有ライブラリに埋め込まれるリンク情報がlibopencv_core.4.3.dylibのように末尾の.0が削除されてしまっている状態で入っています。そのため、使うときにライブラリが見つからないというエラーになってしまいます。一番簡単な解決方法はライブラリファイルの名前変更です。libopencv_core.4.3.dylibなど、リンク情報と同じ名前に変更しておくと回避できます。シンボリックリンクが作成されていますが、削除してしまって問題ありません。

プロジェクト単位でコピーしていると、他に影響を与えないので、気軽に名前を変更できます。

ライブラリ検索パスを追加する

ライブラリ検索パス検索パスに、common/opencv/libディレクトリを追加します。Xcodeのバージョンによっては、共有ライブラリをプロジェクトに登録したときに、ライブラリ検索パスも追加されるのですが、バージョンによっては追加されません。

ライブラリが見つからないエラーが出るときは、ビルド設定のLibrary Search Paths$(inherited) $(PROJECT_DIR)/common/opencv/libと入力してください。

「Library Search Paths」にライブラリ検索パスを設定する
「Library Search Paths」にライブラリ検索パスを設定する
スポンサーリンク
最新情報をチェックしよう!