美文网首页iOS技术点
iOS opencv.framework太大了怎么办?手把手教你

iOS opencv.framework太大了怎么办?手把手教你

作者: 会飞的大马猴 | 来源:发表于2019-08-23 10:50 被阅读0次

    开发的时候有的项目可能用的opencv,然后我们去官网下载那些已经编译好的opencv,少则100m + 多则200m+,但是我们可能只用了其中的几个方法,很多代码就是没用的了(这里我不知道打成framework以后,还能不能自动删除没用的代码,没去验证,感觉不会),这里教大家如果去裁剪opencv

    1.下载cmake

    cmake 必不可少, 直接去官网下载mac版本就行 cmake,然后安装就行了

    2.opencv的组成

    首先我们要知道 opencv 是由好多个模块组成的,下面我们来看一下,究竟是由哪些模块组成

    • (1) 首先去github 下载 源码
    git  clone https://github.com/opencv/opencv.git
    

    或者直接下载zip

    ps 我这里用的2.4.13版本,因为这个版本的脚本 比较友好(主要是我google 到了怎么改)

    • (2) 我们来看看opencv 模块的目录


      image.png

    很明显 core 是所有模块都需要依赖的, 那比如说我在开发中可能只用到来imgproc 模块,那我编译的时候只需要编译 core imgproc模块就行了,其实这里还以来了一个 world 模块,还有一些第三方的东西

    3.编辑脚本

    脚本的目录为 platforms/ios/build_framework.py
    这个就是我们需要编辑的脚本

    cmakeargs = ("-GXcode " +
                     "-D BUILD_SHARED_LIBS=OFF "+
                     "-D BUILD_opencv_core=ON "+
                     "-D BUILD_opencv_imgproc=ON "+
                     "-D BUILD_opencv_world=ON "+
                     "-D BUILD_opencv_gpu=OFF "+
                     "-D BUILD_opencv_calib3d=OFF "+
                     "-D BUILD_opencv_contrib=OFF "+
                     "-D BUILD_opencv_features2D=OFF "+
                     "-D BUILD_opencv_flann=OFF "+
                     "-D BUILD_opencv_highgui=OFF "+
                     "-D BUILD_opencv_legacy=OFF "+
                     "-D BUILD_opencv_ml=OFF "+
                     "-D BUILD_opencv_nonfree=OFF "+
                     "-D BUILD_opencv_objdetect=OFF "+
                     "-D BUILD_opencv_photo=OFF "+
                     "-D BUILD_opencv_stitching=OFF "+
                     "-D BUILD_opencv_video=OFF "+
                     "-D BUILD_opencv_videostab=OFF "+
                     "-DCMAKE_BUILD_TYPE=Release " +
                     "-DCMAKE_TOOLCHAIN_FILE=%s/platforms/ios/cmake/Toolchains/Toolchain-%s_Xcode.cmake " +
                     "-DCMAKE_INSTALL_PREFIX=install") % (srcroot, target)
    

    可以看到 只有core imgproc world 是ON 其他都是OFF

    targets = [("armv7s", "iPhoneOS"),
                   ("arm64", "iPhoneOS"),
                   ("x86_64", "iPhoneSimulator")]
    

    把没用的指令集干掉,不要模拟器 把x86的干掉

    3.执行脚本

    cd 到脚本的目录 直接** python build_framework + 输出路径 ** 就行了 ,过一会framework就打好了,我们看到3个指令集只有40m


    image.png

    PS 遇到编译出错 error: implicit declaration of function 'read' is invalid in C99 ...

    找到 3rdparty/zlib 下的3个文件 加入#include <unistd.h>
    三个文件分别为gzwrite.c gzread.c gzlib.c

    问题一:enum { NO, GAIN, GAIN_BLOCKS }; Expected identifier

    只要把NO修改成 NO_EXPOSURE_COMPENSATOR 或 NO_EXPOSURE_COMPENSATOR = 0

    问题二:core.hpp header must be compiled as C++ 或 base.hpp header must be compiled as C++

    解决:把调用了OpenCV文件的.m文件修改为.mm,以及viewController.m修改为viewController.mm

    相关文章

      网友评论

        本文标题:iOS opencv.framework太大了怎么办?手把手教你

        本文链接:https://www.haomeiwen.com/subject/emkzsctx.html