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

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

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

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

iOSアプリでOpenCVを使う方法については以下の記事をご覧ください。

動作環境

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

この記事執筆時の動作環境は以下の通りです。

  • macOS Catalina 10.15

OpenCVのビルド

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

  • Xcode
  • CMake
  • Git
  • Python
  • Numpy

XcodeとCMake以外はmacOSの場合はプレインストールされています。XcodeはApp StoreからインストールすればOKです。もちろん、Developerサイトからダウンロードしたものでも構いません。

CMakeのインストール

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

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

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

Download | CMake

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

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

#!/bin/sh

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

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

$ cmake --version
cmake version 3.16.5

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.3.0
└── public

build_opencvはビルド作業用ディレクトリ、publicはビルドした後のSDKを入れるディレクトリです。

ターミナルで次のように作業します。

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

$ cd build_opencv
$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=OFF ../ -DCMAKE_INSTALL_PREFIX=../public ../opencv-4.3.0

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

$ make -j7

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

$ make install

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

Xcodeのプロジェクト設定

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

SDKのコピー

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

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

OpenCVTest
├── OpenCVTest
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Assets.xcassets
│   │   ├── AppIcon.appiconset
│   │   └── Contents.json
│   ├── Base.lproj
│   │   └── Main.storyboard
│   ├── Info.plist
│   ├── OpenCVTest.entitlements
│   ├── ViewController.h
│   ├── ViewController.m
│   └── main.m
├── OpenCVTest.xcodeproj
│   ├── project.pbxproj
│   ├── project.xcworkspace
│   │   ├── contents.xcworkspacedata
│   │   └── xcuserdata
│   └── xcuserdata
└── common
    └── opencv
        ├── include
        └── lib

ヘッダーの設定

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

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

共有ライブラリの設定

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

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

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

  • libopencv_core.4.3.0.dylib
  • libopencv_imgproc.4.3.0.dylib

 

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

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

 

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

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

ライブラリが見つからないエラーが出るとき

ライブラリが見つからないというエラーが出る場合があります。この場合は、ライブラリの検索パスとフレームワークの検索パスの両方に、OpenCVのライブラリディレクトリへのパスを追加すると回避できます。

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

関連記事

  1. Xcodeの外部エディタを設定して効率アップ

  2. Notarization Service の条件の緩和終了

  3. MacアプリのUIテスト – ダイアログのテスト

  4. MacアプリのUITestingで User Defaults を制御…

  5. Xcode 10対応 : 古いヘッダーマップはサポートされなくなる

  6. XcodeのリファレンスはiOSとOS Xアプリの開発を区別してくれる…

  7. 古いOS対応アプリを最新Xcodeで作る

  8. iOS 13.4でWKWebViewがクラッシュするときはWebKit…

最近の著書

  1. 基礎から学ぶ SwiftUI

最近の記事