2016-01-25 1 views

ответ

16

Есть несколько вариантов. Самый простой способ, вероятно, установить локально в том, как сайт OpenCV рекомендует:

git clone https://github.com/Itseez/opencv.git 
cd opencv/ 
mkdir build install 
cd build 
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/path/to/opencv/install .. 
make install 

Затем добавьте следующую строку в файл WORKSPACE:

new_local_repository(
    name = "opencv", 
    path = "/path/to/opencv/install", 
    build_file = "opencv.BUILD", 
) 

Создать opencv.BUILD в том же каталоге, что и рабочее пространство со следующими :

cc_library(
    name = "opencv", 
    srcs = glob(["lib/*.so*"]), 
    hdrs = glob(["include/**/*.hpp"]), 
    includes = ["include"], 
    visibility = ["//visibility:public"], 
    linkstatic = 1, 
) 

Тогда ваш код может зависеть от @opencv//:opencv связать в .so лет под Lib/и ссылки на заголовки под включать /.

Однако это не очень портативно. Если вы хотите портативное решение (и вы чувствуете амбициозность), вы можете добавить OpenCV git repo в свою рабочую область и загрузить &. Что-то вроде:

# WORKSPACE 
new_git_repository(
    name = "opencv", 
    remote = "https://github.com/Itseez/opencv.git", 
    build_file = "opencv.BUILD", 
    tag = "3.1.0", 
) 

И сделать opencv.BUILD что-то вроде:

cc_library(
    name = "core", 
    visibility = ["//visibility:public"], 
    srcs = glob(["modules/core/src/**/*.cpp"]), 
    hdrs = glob([ 
     "modules/core/src/**/*.hpp", 
     "modules/core/include/**/*.hpp"] 
    ) + [":module-includes"], 
) 

genrule(
    name = "module-includes", 
    cmd = "echo '#define HAVE_OPENCV_CORE' > [email protected]", 
    outs = ["opencv2/opencv_modules.hpp"], 
) 

... 

Тогда ваш код может зависеть от более конкретных задач, например, @opencv//:core.

В качестве третьего варианта вы указываете как cmake, так и OpenCV в файле WORKSPACE и используете genrule для запуска cmake на OpenCV из Bazel.

+1

Большое спасибо! Я пошел с самым простым вариантом (первым). Некоторые незначительные исправления, если кто-то использует OpenCV 3.1.0: cc_library ( name = "opencv", srcs = glob (["lib/*. So *"]), hdrs = glob (["include/**/* .hpp "]), включает в себя = [" включить "], visibility = [" // visibility: public "], linkstatic = 1, ) –

+0

Спасибо, я обновил код в первом примере. – kristina

+0

@kristina второе решение не переносится ни одним. существует много отсутствующих файлов, которые генерируются при запуске cmake, а не только 'opencv_modules.hpp' –

2

Успешное использование первой опции @ kristina.

  1. Установка OpenCV:

    git clone https://github.com/Itseez/opencv.git 
    
    cd opencv/ 
    
    mkdir build install 
    
    cd build 
    
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 
    
    make install 
    
  2. Изменить WORKSPACE файл (в tensorflow/WORKSPACE клонированного из GitHub) файла opencv.BUILD

    new_local_repository(
    
    name = "opencv", 
    
    path = "/usr/local", 
    
    build_file = "opencv.BUILD", 
    
    ) 
    
  3. Делают в том же месте, WORKSPACE файл :

    cc_library(
    
    name = "opencv", 
    
    srcs = glob(["lib/*.so*"]), 
    
    hdrs = glob(["include/**/*.hpp"]), 
    
    includes = ["include"], 
    
    visibility = ["//visibility:public"], 
    
    linkstatic = 1, 
    
    ) 
    
  4. Вы, возможно, придется конфиг путь OpenCV ЛИЭС:

а. Убедитесь, что вы /etc/ld.so.conf.d/opencv.conf файл с содержанием:

/usr/local/lib 

б. Выполните команду:

sudo ldconfig -v 
+0

Как включить int мой файл BUILD? – Pototo

+0

Обязательно получите файлы .h. Не уверен, как это сработало для других. Это то, что моя сборка выглядела как: пакет (default_visibility = [ "// видимости: общественность"]) cc_library ( имя = "OpenCV", SRCS = Глоб ([ "Lib/* так *"]), ДРЧА = Глоб ([ "включает в себя/opencv2/**/*. ч", "включают в себя/opencv2/**/*. HPP", ]), strip_include_prefix = "включает в себя", linkstatic = 1, видимость = ["// видимость: общедоступная"], ) – tdeegan

1

Это то, что я сделал только для OpenCV 2.4.13.2, core/. Этот подход исходит из источника opencv, который адаптирован из принятого ответа выше @kristina.

Первая вещь, чтобы добавить http_archive для выпуска OpenCV 2.4:

# OpenCV 2.4.13.2 
new_http_archive(
    name = "opencv2", 
    url = "https://github.com/opencv/opencv/archive/2.4.13.2.zip", 
    build_file = "third_party/opencv2.BUILD", 
    strip_prefix = "opencv-2.4.13.2", 
) 

А затем добавьте файл third_party/opencv2.BUILD как:

cc_library(
    name = "dynamicuda", 
    hdrs = glob([ 
     "modules/dynamicuda/include/**/*.hpp", 
    ]), 
    includes = [ 
     "modules/dynamicuda/include" 
    ], 
) 

cc_library(
    name = "core", 
    visibility = ["//visibility:public"], 
    srcs = glob(["modules/core/src/**/*.cpp"]), 
    hdrs = glob([ 
     "modules/core/src/**/*.hpp", 
     "modules/core/include/**/*.hpp", 
    ]) + [ 
     ":module_includes", 
     ":cvconfig", 
     ":version_string", 
    ], 
    copts = [ 
     "-Imodules/dynamicuda/include", 
    ], 
    # Note that opencv core requires zlib and pthread to build. 
    linkopts = ["-pthread", "-lz"], 
    includes = [ 
     "modules/core/include", 
    ], 
    deps = [ 
     ":dynamicuda", 
    ], 
) 

genrule(
    name = "module_includes", 
    cmd = "echo '#define HAVE_OPENCV_CORE' > [email protected]", 
    outs = ["opencv2/opencv_modules.hpp"], 
) 

genrule(
    name = "cvconfig", 
    outs = ["cvconfig.h"], 
    cmd = """ 
cat > [email protected] <<"EOF" 
// JPEG-2000 
#define HAVE_JASPER 

// IJG JPEG 
#define HAVE_JPEG 

// PNG 
#define HAVE_PNG 

// TIFF 
#define HAVE_TIFF 

// Compile for 'real' NVIDIA GPU architectures 
#define CUDA_ARCH_BIN "" 

// NVIDIA GPU features are used 
#define CUDA_ARCH_FEATURES "" 

// Compile for 'virtual' NVIDIA PTX architectures 
#define CUDA_ARCH_PTX "" 
EOF""" 
) 

genrule(
    name = "version_string", 
    outs = ["version_string.inc"], 
    cmd = """ 
cat > [email protected] <<"EOF" 
"\\n" 
) 

Обратите внимание, что я ничего не поставил в version_string.inc. Это просто строковый литерал C++, который не влияет на функциональность OpenCV. Если вы действительно заинтересованы в этом файле, см. Это example.

После этого вы можете добавить цель с зависимостями от @opencv2//:core.