• Qt+openCV学习笔记(十六)Qt6.6.0rc+openCV4.8.1+emsdk3.1.37编译静态库


    前言:

    有段时间没来写文章了,趁编译库的空闲,再写一篇记录文档

    WebAssembly的发展逐渐成熟,即便不了解相关技术,web前端也在不经意中使用了相关技术的库,本篇文档记录下如何编译WebAssembly版本的openCV,可以给使用C++开发web前端的小伙伴使用

    一、安装需要的软件

    1.安装git

    这方便教程很多,不再重复。笔者使用的是git2.33

    2.安装cmake

    这个教程也很多,但笔者没有安装,使用的是Qt安装时,下载的

    3.安装emsdk3.1.37

    笔者偷懒了,也是搭建qt6.6.0时使用的版本,具体教程就不放置了

    若不想自己安装的,可以下载笔者使用的版本

    二、下载所需要的资源

    1.下载opencv4.8.1源码

    https://github.com/opencv/opencv/archive/refs/tags/4.8.1.zip

    2.下载opencv_contrib-4.8.1源码

    https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.1.zip

    3.wechat_qrcode模型

    detect.caffemodel

    detect.prototxt

    sr.caffemodel

    sr.prototxt

    4.xfeatures2d

    boostdesc_bgm.i

    boostdesc_bgm_bi.i

    boostdesc_bgm_hd.i

    boostdesc_binboost_064.i

    boostdesc_binboost_128.i

    boostdesc_binboost_256.i

    boostdesc_lbgm.i

    vgg_generated_48.i

    vgg_generated_64.i

    vgg_generated_80.i

    vgg_generated_120.i

    5.face_landmark_model.dat

    三、设置环境变量

    环境变量设置方法很多,可以直接设置系统的环境变量,笔者使用的是在一个cmd窗口中临时设置环境变量

    执行如下命令

    1. D:\emsdk\emsdk-3.1.37\emsdk_env.bat
    2. set path=D:\Qt\Tools\mingw1120_64\bin;D:\Program Files\Git\usr\bin;%path%

    若是查看环境变量执行如下

    echo %path%

    注:一定要记得,激活emsdk的环境变量 

    四、生成make文件

    在设置好环境变量的cmd中执行(请按实际目录执行)

    D:\Qt\Tools\CMake_64\bin\cmake-gui.exe

    打开如下窗口

    点击configure,弹出如下窗口

     以上是笔者的设置,点击Next,

    设置编译器,以下是笔者的设置

     

     之后就是等待完成,此过程时间有点长​

     configure完成后,修改配置选项

    笔者提示,很多库并没有做web上的兼容,建议先编译opencv官方推荐的选项,然后再根据自己的需要,增加其他模块

    以下是opencv官方使用的默认选项,可供有需要的小伙伴参考

    1. '-DPYTHON_DEFAULT_EXECUTABLE=D:\\Program\\Python310\\python.exe',
    2. '-DENABLE_PIC=FALSE',
    3. '-DCMAKE_BUILD_TYPE=Release',
    4. "-DCMAKE_TOOLCHAIN_FILE='emsdk-3.1.37\\cmake\\Modules\\Platform\\Emscripten.cmake'",
    5. "-DCPU_BASELINE=''",
    6. '-DCMAKE_INSTALL_PREFIX=/usr/local',
    7. "-DCPU_DISPATCH=''",
    8. '-DCV_TRACE=OFF',
    9. '-DBUILD_SHARED_LIBS=OFF',
    10. '-DWITH_1394=OFF',
    11. '-DWITH_ADE=OFF',
    12. '-DWITH_VTK=OFF',
    13. '-DWITH_EIGEN=OFF',
    14. '-DWITH_FFMPEG=OFF',
    15. '-DWITH_GSTREAMER=OFF',
    16. '-DWITH_GTK=OFF',
    17. '-DWITH_GTK_2_X=OFF',
    18. '-DWITH_IPP=OFF',
    19. '-DWITH_JASPER=OFF',
    20. '-DWITH_JPEG=OFF',
    21. '-DWITH_WEBP=OFF',
    22. '-DWITH_OPENEXR=OFF',
    23. '-DWITH_OPENGL=OFF',
    24. '-DWITH_OPENVX=OFF',
    25. '-DWITH_OPENNI=OFF',
    26. '-DWITH_OPENNI2=OFF',
    27. '-DWITH_PNG=OFF',
    28. '-DWITH_TBB=OFF',
    29. '-DWITH_TIFF=OFF',
    30. '-DWITH_V4L=OFF',
    31. '-DWITH_OPENCL=OFF',
    32. '-DWITH_OPENCL_SVM=OFF',
    33. '-DWITH_OPENCLAMDFFT=OFF',
    34. '-DWITH_OPENCLAMDBLAS=OFF',
    35. '-DWITH_GPHOTO2=OFF',
    36. '-DWITH_LAPACK=OFF',
    37. '-DWITH_ITT=OFF',
    38. '-DWITH_QUIRC=ON',
    39. '-DBUILD_ZLIB=ON',
    40. '-DBUILD_opencv_apps=OFF',
    41. '-DBUILD_opencv_calib3d=ON',
    42. '-DBUILD_opencv_dnn=ON',
    43. '-DBUILD_opencv_features2d=ON',
    44. '-DBUILD_opencv_flann=ON',
    45. '-DBUILD_opencv_gapi=OFF',
    46. '-DBUILD_opencv_ml=OFF',
    47. '-DBUILD_opencv_photo=ON',
    48. '-DBUILD_opencv_imgcodecs=OFF',
    49. '-DBUILD_opencv_shape=OFF',
    50. '-DBUILD_opencv_videoio=OFF',
    51. '-DBUILD_opencv_videostab=OFF',
    52. '-DBUILD_opencv_highgui=OFF',
    53. '-DBUILD_opencv_superres=OFF',
    54. '-DBUILD_opencv_stitching=OFF',
    55. '-DBUILD_opencv_java=OFF',
    56. '-DBUILD_opencv_js=ON',
    57. '-DBUILD_opencv_python2=OFF',
    58. '-DBUILD_opencv_python3=OFF',
    59. '-DBUILD_EXAMPLES=ON',
    60. '-DBUILD_PACKAGE=OFF',
    61. '-DBUILD_TESTS=ON',
    62. '-DBUILD_PERF_TESTS=ON',
    63. '-DBUILD_DOCS=OFF',
    64. '-DWITH_PTHREADS_PF=OFF',
    65. '-DCV_ENABLE_INTRINSICS=OFF',
    66. '-DBUILD_WASM_INTRIN_TESTS=OFF',
    67. "-DCMAKE_C_FLAGS='-s WASM=1 -s SINGLE_FILE=1 -s USE_PTHREADS=0 '",
    68. "-DCMAKE_CXX_FLAGS='-s WASM=1 -s SINGLE_FILE=1 -s USE_PTHREADS=0 '"

    内容比较多,需要大家细心设置,或第一次直接使用cmake命令 

    以下是笔者感兴趣的选项

    安装目录(生成的动态库的目录)

     是否生成付费相关的部分

     添加扩展库,注意要具体到modules目录

     

      再次点击configure后,可能还需要还需要设置多次,配置其他选项或下载文件

    继续点击configure(可以多点几次,有时多点几次就可以下载成功),

    若输出中仍然存在红色的文字,打开编译目录,找到日志文件CMakeDownloadLog.txt,查看缺少或下载失败的文件,下载完成后,按日志文件的提示,放入指定目录即可

    笔者已下载缺少的文件,处理方法如下

    1.把downloads和testdata两个目录,直接放在编译目录(笔者已整理好内部目录)

    再次点击configure,此时应该不会有红色的文字了(若存在,请自主解决)

    点击generate,生成makefile文件

    四、编译源码

    设置好环境变量的cmd中,切换目录到编译目录(请按实际目录执行)

    执行mingw32-make -j6 开始编译

    (6代表同时开6个线程编译,请读者按照自己机器的配置设置,以加快编译速度)

    些过程耗时较长,笔者等待了半小时左右

    编译完成后,执行mingw32-make install

    过会就可以在安装目录找到生成的静态库了,笔者是在编译目录下的install

    因时间关系,笔者本次就不添加测试程序了

    已生成的静态库(正式库+xfeatureds2d)​​​​​​​

    后记:

    1.WebAssembly开发,一般使用静态库,若有小伙伴执意使用动态库,可以自行编译下测试

    2.部分库,即使编译成功,也不一定能使用,或出错,如imgcodecs模块,笔者使用cv::imwrite()时,会导致网页异常退出

    3.笔者建议,不要使用world的库,发布程序时,库太大了,不实用

  • 相关阅读:
    jeecg-boot简单使用
    人不成熟的特征
    关于Vue使用props传值遇到的一些问题
    2022重庆自考本科怎么考?
    python-fire 链式调用解决命令行无法自动结束
    【滤波跟踪】基于matlab Huber函数和最大相关熵的抗差滤波算法GNSS导航定位粗差处理【含Matlab源码 2129期】
    kafka安装与相关配置详解
    详细教学——1688关键词搜索API操作流程
    Java项目:SSM失物招领网站信息管理系统
    【硬核】把一个MOS管制作成开关电路
  • 原文地址:https://blog.csdn.net/aggs1990/article/details/133561421