내 세상

[Mac OS] OpenCV 이전 버전 Brew로 설치하기. 본문

Technical/Mac OS

[Mac OS] OpenCV 이전 버전 Brew로 설치하기.

sga8 2019. 8. 2. 15:54
728x90
반응형

아래의 예시는 MacOS에 OpenCV 3.4.2 버전을 설치하는 방법임.

 

이전 버전의 git history를 확인해야 하기 때문에 git clone을 진행함.

    git clone https://github.com/Homebrew/homebrew-core.git

    cd homebrew-core

 

위의 경로로 이동하여 아래의 명령어를 통해 commit id를 확인함.

    git --no-pager log --pretty=oneline -- Formula.opencv.rb | grep 3.4.2

 

아래의 결과를 확인할 수 있음.

    664f1dfde0ac86efe5dde9b8e6aa358d61641d33 opencv: update 3.4.2 bottle.

    06eae891074e0b879e742bf54560f89a11f183df opencv: update 3.4.2 bottle.

    5d788ad44b7bfda6a99ce7bb3c63b8c616fe5c02 opencv 3.4.2

 

Commit ID의 앞자리 8자리를 입력하여 해당 버전의 루비스크립트를 참조해서 현재 파일을 수정해야함.

아래 5d788ad4는 5d788ad44b7bfda6a99ce7bb3c63b8c616fe5c02 opencv 3.4.2 의 앞 8자리임.

    https://raw.githubusercontent.com/Homebrew/homebrew-core/5d788ad4/Formula/opencv.rb

 

이제 brew를 사용하여 package install 정보를 수정해주어야 함.

    brew edit opencv

 

아래의 내용으로 수정해주면 됨. 아래의 빨간 색으로 표시된 부분이 수정/추가 된 부분임.

class Opencv < Formula

  desc "Open source computer vision library"

  homepage "https://opencv.org/"

  url "https://github.com/opencv/opencv/archive/3.4.2.tar.gz"

  sha256 "81dbd5e7e9f8a4c936b94629bf4765745942a1d634ae38ec08bc57b73b28ffc5"

  revision 2

 

  bottle do

    sha256 "0db1ccdfadbedd53d2dbf59d05321ce7fab22130784df3a76db10dc3851481e4" => :high_sierra

    sha256 "91541d1656691eb1944c4ab8cf37d055b66c78aae49306928a87aca3bc0d8367" => :sierra

    sha256 "9d5b496cf6c95ddf2ea16de69e0898cccd5b4753014a36394bcc90787691ed78" => :el_capitan

  end

 

  depends_on "cmake" => :build

  depends_on "pkg-config" => :build

  depends_on "eigen"

  depends_on "ffmpeg"

  depends_on "glog"

  depends_on "harfbuzz"

  depends_on "jpeg"

  depends_on "libpng"

  depends_on "libtiff"

  depends_on "numpy"

  depends_on "openexr"

  depends_on "python"

  depends_on "python@2"

  depends_on "tbb"

 

  resource "contrib" do

    url "https://github.com/opencv/opencv_contrib/archive/3.4.2.tar.gz"

    sha256 "45a52764ebd2558fa0b7fd8dc47379b37dd0956d912abbf7c786228374fdf60d"

  end

 

  def install

    ENV.cxx11

    ENV.prepend_path "PATH", Formula["python@2"].opt_libexec/"bin"

 

    resource("contrib").stage buildpath/"opencv_contrib"

 

    # Reset PYTHONPATH, workaround for https://github.com/Homebrew/homebrew-science/pull/4885

    ENV.delete("PYTHONPATH")

 

    py2_prefix = `python2-config --prefix`.chomp

    py2_lib = "#{py2_prefix}/lib"

 

    py3_config = `python3-config --configdir`.chomp

    py3_include = `python3 -c "import distutils.sysconfig as s; print(s.get_python_inc())"`.chomp

    py3_version = Language::Python.major_minor_version "python3"

 

    args = std_cmake_args + %W[

      -DCMAKE_OSX_DEPLOYMENT_TARGET=

      -DBUILD_JASPER=OFF

      -DBUILD_JPEG=ON

      -DBUILD_OPENEXR=OFF

      -DBUILD_PERF_TESTS=OFF

      -DBUILD_PNG=OFF

      -DBUILD_TESTS=OFF

      -DBUILD_TIFF=OFF

      -DBUILD_ZLIB=OFF

      -DBUILD_opencv_hdf=OFF

      -DBUILD_opencv_java=ON

      -DBUILD_opencv_text=OFF

      -DOPENCV_ENABLE_NONFREE=ON

      -DOPENCV_EXTRA_MODULES_PATH=#{buildpath}/opencv_contrib/modules

      -DWITH_CUDA=OFF

      -DWITH_EIGEN=ON

      -DWITH_FFMPEG=ON

      -DWITH_GPHOTO2=OFF

      -DWITH_GSTREAMER=OFF

      -DWITH_JASPER=OFF

      -DWITH_OPENEXR=ON

      -DWITH_OPENGL=OFF

      -DWITH_QT=OFF

      -DWITH_TBB=OFF

      -DWITH_VTK=OFF

      -DWITH_IPP=OFF

      -DBUILD_opencv_python2=ON

      -DBUILD_opencv_python3=ON

      -DPYTHON2_EXECUTABLE=#{which "python"}

      -DPYTHON2_LIBRARY=#{py2_lib}/libpython2.7.dylib

      -DPYTHON2_INCLUDE_DIR=#{py2_prefix}/include/python2.7

      -DPYTHON3_EXECUTABLE=#{which "python3"}

      -DPYTHON3_LIBRARY=#{py3_config}/libpython#{py3_version}.dylib

      -DPYTHON3_INCLUDE_DIR=#{py3_include}

    ]

 

    # The compiler on older Mac OS cannot build some OpenCV files using AVX2

    # extensions, failing with errors such as

    # "error: use of undeclared identifier '_mm256_cvtps_ph'"

    # Work around this by not trying to build AVX2 code.

    if MacOS.version <= :yosemite

      args << "-DCPU_DISPATCH=SSE4_1,SSE4_2,AVX"

    end

 

    args << "-DENABLE_AVX=OFF" << "-DENABLE_AVX2=OFF"

    unless MacOS.version.requires_sse42?

      args << "-DENABLE_SSE41=OFF" << "-DENABLE_SSE42=OFF"

    end

 

    mkdir "build" do

      system "cmake", "..", *args

      system "make"

      system "make", "install"

      system "make", "clean"

      system "cmake", "..", "-DBUILD_SHARED_LIBS=OFF", *args

      system "make"

      lib.install Dir["lib/*.a"]

      lib.install Dir["3rdparty/**/*.a"]

    end

  end

 

  test do

    (testpath/"test.cpp").write <<~EOS

      #include <opencv2/opencv.hpp>

      #include <iostream>

      int main() {

        std::cout << CV_VERSION << std::endl;

        return 0;

      }

    EOS

    system ENV.cxx, "-std=c++11", "test.cpp", "-I#{include}/opencv3",

                    "-o", "test"

    assert_equal `./test`.strip, version.to_s

 

    ["python2.7", "python3"].each do |python|

      output = shell_output("#{python} -c 'import cv2; print(cv2.__version__)'")

      assert_equal version.to_s, output.chomp

    end

  end

end

 

728x90
반응형