iOS(とiOS Simulator)でOpenCVを使いたいと思い、いろいろ試した試行錯誤と成功方法の記録です。2024年10月に取り組んだことなので、雑な記述が多いです。
環境
- MacBook Air
- Apple M1
- CMake 3.30.5
- Python 3.13.0
- Xcode 15.4
- macOS Sonoma 14.6.1
動いたが目的に合わなかった
CocoaPodsを使って導入する
OpenCVを使う目的が、特徴量の検出である、ORB、KAZE、AKAZE、SIFTなどを使うことだったので、OpenCVのバージョンが、SIFTの特許が切れてORBなどと同じように使えるようになったv4.4.0以降である方が良かったため、動かすことができたが、採用せずその後も試行錯誤を続けた。
バージョンが4.3.0でも大丈夫である人は最も簡単に利用できると思うので試してみると良いと思う。
試してダメだったこと
iOS版のOpenCVパッケージを読み込んで使う
OpenCV側がiOSのためにパッケージを公開していたので、それを試してみた。パッケージはOpenCVのgithubリポジトリのReleasesからダウンロードできる。
このような記事を参考にした。
「Building for Apple Platforms」通りに自前でビルド
Cmake、Pythonなどを揃えて実行したが、エラーが起きずにPythonのコードは実行できるが、たくさんのFailedが出てビルドに失敗。
このような記事と公式のインストラクションを参考にした。
成功した方法
日本語で探していてもどうしようもなかったので、OpenCVの英語のドキュメントを読んだり、英語で検索したりしたが全く解決できなかったので、OpenCVのissuesをみたら自分と同じような問題に直面している人がいて、それに対して以下の記事を紹介していて、それ通りにやったら問題なく動いた。
方法
- Python、CMakeなどを準備する
- OpenCVをクローンする
- 記事内では4.9.0でcheckoutしているが、しなくても問題なくビルドできた
- OpenCVをビルドする
- 記事はvisionProで使えるようにターゲットに追加しているが、私はiPhoneでしか使わないので削除して実行した
python3 platforms/apple/build_xcframework.py --out build_all \
--iphoneos_deployment_target 14.0 \
--iphoneos_archs arm64 \
--iphonesimulator_archs arm64,x86_64 \
--build_only_specified_archs True \
--without objc
まとめ
iOSに自前でビルドしたOpenCVを導入して、適切に特徴量検出をすることができた。またXcodeのシミュレーターでも実行を確認できた。