0
0

iOS17 + XCode15 + Swift + OpenCV

Last updated at Posted at 2023-09-29

iphone15も出たし、iOSでOpenCVを使いたいと思い調査したところ、Objective-C関連は何もしなくても良くなってるみたい。Podもあるから楽勝!と思いきや、エラーがでて使えなかったので、コツコツとMakeしたら動くようになったのでメモしておきます。

試した環境

Macbook Air M1
Xcode15
MacOS Ventura 13.5.2

事前準備

Cmakeをインストール

brew install cmake

Python3をインストール

brew install python3

OpenCVのMake

Gitから落としてくる

git clone https://github.com/opencv/opencv.git -b 4.6.0
git clone https://github.com/opencv/opencv_contrib.git -b 4.6.0

Make実行。Targetは13以降で使いたいので13に設定してるが適宜変更

python3 opencv/platforms/apple/build_xcframework.py --out ios_opencv --contrib opencv_contrib --iphoneos_archs arm64 --build_only_specified_archs --iphoneos_deployment_target 13

Make時にエラーがでることがある。Python見つからないエラーで、2,3回やり直しましたよ。。
これが、このメモを書いた理由です。


The following build commands failed:
	PhaseScriptExecution Generate\ CMakeFiles/dephelper/gen_opencv_objc_source_ios /Users/gpdawson/OpenCV/ios/build/build-armv7-iphoneos/modules/objc_bindings_generator/OpenCV.build/Release-iphoneos/gen_opencv_objc_source_ios.build/Script-3FBBE1BDDA1370F9CBF43EC8.sh (in target 'gen_opencv_objc_source_ios' from project 'OpenCV')
(1 failure)
============================================================
ERROR: Command '['xcodebuild', 'BITCODE_GENERATION_MODE=bitcode', 'IPHONEOS_DEPLOYMENT_TARGET=9.0', 'ARCHS=armv7', '-sdk', 'iphoneos', '-configuration', 'Release', '-parallelizeTargets', '-jobs', '6', '-target', 'ALL_BUILD', 'build']' returned non-zero exit status 65.
============================================================
Traceback (most recent call last):
  File "/Users/gpdawson/OpenCV/opencv/platforms/ios/build_framework.py", line 181, in build
    self._build(outdir)
  File "/Users/gpdawson/OpenCV/opencv/platforms/ios/build_framework.py", line 139, in _build
    self.buildOne(target[0], target[1], main_build_dir, cmake_flags)
  File "/Users/gpdawson/OpenCV/opencv/platforms/ios/build_framework.py", line 318, in buildOne
    execute(buildcmd + ["-target", "ALL_BUILD", "build"], cwd = builddir)
  File "/Users/gpdawson/OpenCV/opencv/platforms/apple/cv_build_utils.py", line 13, in execute
    retcode = check_call(cmd, cwd = cwd)
  File "/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['xcodebuild', 'BITCODE_GENERATION_MODE=bitcode', 'IPHONEOS_DEPLOYMENT_TARGET=9.0', 'ARCHS=armv7', '-sdk', 'iphoneos', '-configuration', 'Release', '-parallelizeTargets', '-jobs', '6', '-target', 'ALL_BUILD', 'build']' returned non-zero exit status 65.

そんなときはPythonが見つかってないのでリンクする

ln -s /usr/local/bin/python3 /usr/local/bin/python

気を取り直して再度Make実行。

M1 Macbook Airで本が一冊読める程度には待つとできあがり

ios_opencv/iphoneos/opencv2.framework

Projectに組込

Xcode15で適当なProjectを作成して、作成したframeworkを組み込む。
この辺りは他でもいっぱい書いてある通りなのでさらっと流します。

  1. opencv2.frameworkをドロップする
    ✔Copy Item if needed
    ✔Create groups

  2. Target -> General -> Frameworks, Libraries, and Embedded Content
    2.1 opencv2.framework を Do not Embedに設定
    2.2 +を押して 「ibc++.tbd」 を追加

以上で、import opencv2の追加で使えるようになりました。
ググってると"Other Linker Flags" に -all_load を追加するとか、色々かいてあったけど
環境に依存するかもしれませんが無くてもOKでした。

適当にJpegをGrayscaleにするコードを書いて動作確認してできあがり。

0
0
1

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
0
0