macOS下编译opencv-4.5.2+opencv_contrib-framework

文章目录

  • 前言
  • 一、编译环境和工具
    • 1.系统环境和版本
    • 2.工具
    • 3.OpenCV版本
  • 二、编译步骤
    • 1.准备工作目录
    • 2.修改编译脚本
    • 3.开始编译
  • 遇到的问题
    • 尝试1:
    • 尝试2:
    • 尝试3:
  • 遇到的问题2


前言

本博主前后编译了OpenCV的各种版本,感兴趣的可以浏览之前的博文。此篇为iOS编译opencv-framework,官网发布的opencv-4.x-ios-framework.zip不包括opencv_contrib模块,如果不需要里面的功能,则可以直接使用官方版。

说明:本文使用的系统和软件版本以及工作目录都是本博真实环境,仅供参考。


一、编译环境和工具

1.系统环境和版本

macOS:
macOS下编译opencv-4.5.2+opencv_contrib-framework_第1张图片
Xcode:
macOS下编译opencv-4.5.2+opencv_contrib-framework_第2张图片

2.工具

Homebrew:
macOS下编译opencv-4.5.2+opencv_contrib-framework_第3张图片
CMake:
macOS下编译opencv-4.5.2+opencv_contrib-framework_第4张图片
如果没有cmake:

brew install cmake

3.OpenCV版本

opencv-4.5.2
opencv_contrib-4.5.2

二、编译步骤

1.准备工作目录

macOS下编译opencv-4.5.2+opencv_contrib-framework_第5张图片

2.修改编译脚本

脚本位置:
Workspace/opencv-4.5.2/platforms/ios/build_framework.py

一共需要修改三处,分别位于47行、491行、496行:

...
self.contrib = None
...
folder = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../.."))
...
parser.add_argument('--contrib', metavar='DIR', default=None, help='folder with opencv_contrib repository (default is "None" - build only main framework)')
...

改为

...
self.contrib = os.path.abspath(contrib)
...
folder = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../.."))
folder2 = os.path.join(os.path.join(os.path.dirname(folder), "opencv_contrib-4.5.2"))
...
parser.add_argument('--contrib', metavar='DIR', default=folder2, help='folder with opencv_contrib repository (default is "None" - build only main framework)')
...

简单说就是配置opencv_contrib的位置,根据自己的目录修改。

3.开始编译

cd Workspace
python opencv-4.5.2/platforms/ios/build_framework.py ios

按照官方的说法,执行上述这一行命令后,就会编译成功,在Workspace目录下会出现ios目录,里面包含着各种arm平台的framework包。
然而,经验告诉本博主,世上没有一次就编译通过的工程。。。


遇到的问题

首先,命令

python opencv-4.5.2/platforms/ios/build_framework.py ios

以及之前的所有准备工作都是OK的,问题是当前macOS版本已经不再支持python2,无法执行python命令,似乎所有新版macOS都不再支持python2。
macOS下编译opencv-4.5.2+opencv_contrib-framework_第6张图片

尝试1:

python3 opencv-4.5.2/platforms/ios/build_framework.py ios

得到了错误:

returned non-zero exit status 65

这个错误可以在GitHub上找到很多,以及各种解决办法。

尝试2:

macOS下编译opencv-4.5.2+opencv_contrib-framework_第7张图片

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

根据各位大神提供的解决方案,最多的是为python3建立软连接。但是,目录/usr/bin/是没有权限建立软连接的,如果在/usr/local/bin/python3就解决了。

尝试3:

python3 -m venv .venv
source .venv/bin/activate
python opencv-4.5.2/platforms/ios/build_framework.py ios

Bingo…
一定要能执行python而不是python3,尝试多次,对本博主的各种环境而言,最简单有效的就是建立虚拟环境,在虚拟环境中执行此命令。
另外,就不要尝试在macOS中安装python2了,过去的就让它过去吧。。。
编译后得到如下目录内容:
macOS下编译opencv-4.5.2+opencv_contrib-framework_第8张图片
macOS下编译opencv-4.5.2+opencv_contrib-framework_第9张图片
macOS下编译opencv-4.5.2+opencv_contrib-framework_第10张图片
整个编译过程确实比编译OpenCV4Android要简单很多。。。

参考链接:https://blog.csdn.net/GikkiAres/article/details/84338358

遇到的问题2

在调用二维码接口时,遭遇崩溃,因为iOS路径assert语句,简单处理方式就是注释四行路径检测:
wechat_qrcode.cpp中WeChatQRCode构造方法内:

//CV_Assert(utils::fs::exists(detector_prototxt_path));
//CV_Assert(utils::fs::exists(detector_caffe_model_path));
//CV_Assert(utils::fs::exists(super_resolution_prototxt_path));
//CV_Assert(utils::fs::exists(super_resolution_caffe_model_path));

你可能感兴趣的:(iOS开发,opencv,xcode)