Библиотека MediaPipe построена на MacOS - PullRequest
2 голосов
/ 11 февраля 2020

Я пытаюсь собрать MediaPipe как библиотеку на macOS, чтобы иметь возможность использовать его в настольном проекте с CMake, но у меня возникают проблемы. Я пытаюсь преобразовать пример Hello World в библиотеку, используя hello_world.cc с MediaPipe в качестве внешней библиотеки. Я также пытался собрать библиотеки stati c и dynamici c, но у меня возникли проблемы с ними обоими.

В данный момент я застрял, и любая помощь будет принята с благодарностью.

Ниже приведены этапы построения библиотек и полученные ошибки:

  1. Как указано c библиотека

    • Я создал файл mediapipe/lib/BUILD со следующим содержанием
apple_static_library(
    name = "mediapipe",
    minimum_os_version = "10.14",
    platform_type = "macos",
    deps = [
        "//mediapipe/calculators/core:pass_through_calculator",
        "//mediapipe/framework:calculator_graph",
        "//mediapipe/framework/port:logging",
        "//mediapipe/framework/port:parse_text_proto",
        "//mediapipe/framework/port:status",
    ],
)
  • Встроенная библиотека
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/lib:mediapipe
  • Скопировано bazel-out/apl-darwin_x86_64-opt/bin/mediapipe/lib/mediapipe_lipo.a к моему настольному проекту

  • Проект был построен без ошибок, но при запуске выдает следующие ошибки:

Not found: ValidatedGraphConfig Initialization failed.
No registered object with name: PassThroughCalculator; Unable to find Calculator "PassThroughCalculator"
No registered object with name: PassThroughCalculator; Unable to find Calculator "PassThroughCalculator"
В качестве динамической c библиотеки

Я прочитал некоторые проблемы с github, которые возникают при создании библиотеки iOS dynamici c.

  • Файл сборки Bazel mediapipe/dylib/BUILD со следующим содержимым
load("@build_bazel_rules_apple//apple:macos.bzl", "macos_dylib")

macos_dylib(
    name = "mediapipe",
    minimum_os_version = "10.15",
    deps = [
        "//mediapipe/framework:calculator_framework",
        "//mediapipe/framework/port:commandlineflags",
        "//mediapipe/framework/port:file_helpers",
        "//mediapipe/framework/port:map_util",
        "//mediapipe/framework/port:parse_text_proto",
        "//mediapipe/framework/port:ret_check",
        "//mediapipe/framework/port:status",
        "//mediapipe/framework/port:statusor",
        "@com_google_absl//absl/strings",
        #"//mediapipe/graphs/hand_tracking:desktop_tflite_calculators",
        "//mediapipe/calculators/core:pass_through_calculator",
    ],
)
  • Встроенный dylib
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/dylib:mediapipe
  • Исправлен идентификатор dylib
chmod 755 mediapipe.dylib
install_name_tool -id mediapipe.dylib mediapipe.dylib
  • Скопировано bazel-bin/mediapipe/dylib/mediapipe.dylib в мой проект

  • Во время сборки я получаю ошибки компоновки:

Undefined symbols for architecture x86_64:
  "mediapipe::CalculatorGraph::Initialize(mediapipe::CalculatorGraphConfig const&)", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
      MediaPipeApp::setup() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::WaitUntilDone()", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::CloseInputStream(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::AddOutputStreamPoller(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::AddPacketToInputStream(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, mediapipe::Packet&&)", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::StartRun(std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, mediapipe::Packet, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, mediapipe::Packet> > > const&, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, mediapipe::Packet, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, mediapipe::Packet> > > const&)", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::CalculatorGraph()", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
      MediaPipeApp::setup() in MediaPipeApp.cpp.o
  "mediapipe::CalculatorGraph::~CalculatorGraph()", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
      MediaPipeApp::setup() in MediaPipeApp.cpp.o
  "mediapipe::internal::OutputStreamPollerImpl::Next(mediapipe::Packet*)", referenced from:
      mediapipe::PrintHelloWorld() in MediaPipeApp.cpp.o
ld: symbol(s) not found for architecture x86_64
...