Убедитесь, что у вас установлена рабочая версия MediaPipe Framework. См. инструкции по установке .
Чтобы запустить пример
hello world
:$ git clone https://github.com/google/mediapipe.git
$ cd mediapipe
$ export GLOG_logtostderr=1
# Need bazel flag 'MEDIAPIPE_DISABLE_GPU=1' as desktop GPU is not supported currently.
$ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/hello_world:hello_world
# It should print 10 rows of Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!В примере
hello world
используется простой граф MediaPipe в функцииPrintHelloWorld()
, определенной в прототипеCalculatorGraphConfig
.absl::Status PrintHelloWorld() {
// Configures a simple graph, which concatenates 2 PassThroughCalculators.
CalculatorGraphConfig config = ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "in"
output_stream: "out"
node {
calculator: "PassThroughCalculator"
input_stream: "in"
output_stream: "out1"
}
node {
calculator: "PassThroughCalculator"
input_stream: "out1"
output_stream: "out"
}
)");Вы можете визуализировать этот график с помощью MediaPipe Visualizer , вставив содержимое CalculatorGraphConfig ниже в визуализатор. См. здесь справку по визуализатору.
input_stream: "in"
output_stream: "out"
node {
calculator: "PassThroughCalculator"
input_stream: "in"
output_stream: "out1"
}
node {
calculator: "PassThroughCalculator"
input_stream: "out1"
output_stream: "out"
}Этот граф состоит из 1 входного потока графа (
in
) и 1 выходного потока графа (out
), а также двух последовательно соединенныхPassThroughCalculator
.Перед запуском графа объект
OutputStreamPoller
подключается к выходному потоку, чтобы позже получить выходные данные графа, а запуск графа запускается с помощьюStartRun
.CalculatorGraph graph;
MP_RETURN_IF_ERROR(graph.Initialize(config));
MP_ASSIGN_OR_RETURN(OutputStreamPoller poller,
graph.AddOutputStreamPoller("out"));
MP_RETURN_IF_ERROR(graph.StartRun({}));Затем в примере создаются 10 пакетов (каждый пакет содержит строку «Hello World!» со значениями отметки времени в диапазоне от 0, 1,... 9) с использованием функции
MakePacket
, добавляется каждый пакет в граф черезin
поток и, наконец, закрывает входной поток, чтобы завершить выполнение графа.for (int i = 0; i < 10; ++i) {
MP_RETURN_IF_ERROR(graph.AddPacketToInputStream("in",
MakePacket<std::string>("Hello World!").At(Timestamp(i))));
}
MP_RETURN_IF_ERROR(graph.CloseInputStream("in"));Затем с помощью объекта
OutputStreamPoller
пример извлекает все 10 пакетов из выходного потока, извлекает строковое содержимое из каждого пакета и печатает его в выходной журнал.mediapipe::Packet packet;
while (poller.Next(&packet)) {
LOG(INFO) << packet.Get<string>();
}
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-01-10 UTC.