Sprawdź, czy masz działającą wersję MediaPipe Framework. Zapoznaj się z instrukcjami instalacji.
Aby uruchomić przykład
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!
W przykładzie
hello world
użyto prostego wykresu MediaPipe w funkcjiPrintHelloWorld()
zdefiniowanej w protokoleCalculatorGraphConfig
.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" } )");
Możesz zwizualizować ten wykres za pomocą narzędzia MediaPipe Visualizer, wklejając w wizualizatorze zawartość z CalculatorGraphConfig. Pomoc dotyczącą wizualizacji znajdziesz tutaj.
input_stream: "in" output_stream: "out" node { calculator: "PassThroughCalculator" input_stream: "in" output_stream: "out1" } node { calculator: "PassThroughCalculator" input_stream: "out1" output_stream: "out" }
Ten wykres składa się z 1 grafu wejściowego strumienia wejściowego (
in
) i 1 strumienia wyjściowego wykresu (out
) oraz 2 połączonych szeregowo strumieniPassThroughCalculator
.Przed uruchomieniem wykresu obiekt
OutputStreamPoller
jest połączony ze strumieniem danych wyjściowych, by później pobrać dane wyjściowe wykresu. Uruchomienie wykresu rozpoczyna się od funkcjiStartRun
.CalculatorGraph graph; MP_RETURN_IF_ERROR(graph.Initialize(config)); MP_ASSIGN_OR_RETURN(OutputStreamPoller poller, graph.AddOutputStreamPoller("out")); MP_RETURN_IF_ERROR(graph.StartRun({}));
Następnie przy użyciu funkcji
MakePacket
tworzymy 10 pakietów (każdy pakiet zawiera ciąg „Hello World!” z wartościami sygnatury czasowej z zakresu od 0, 1 do ... 9), dodaje każdy pakiet do wykresu przez strumień wejściowyin
i zamyka strumień, aby zakończyć działanie wykresu.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"));
Dzięki obiektowi
OutputStreamPoller
przykład pobiera wszystkie 10 pakietów ze strumienia danych wyjściowych, pobiera ciąg znaków z każdego pakietu i drukuje go w logu wyjściowym.mediapipe::Packet packet; while (poller.Next(&packet)) { LOG(INFO) << packet.Get<string>(); }
O ile nie stwierdzono inaczej, treść tej strony jest objęta licencją Creative Commons – uznanie autorstwa 4.0, a fragmenty kodu są dostępne na licencji Apache 2.0. Szczegółowe informacje na ten temat zawierają zasady dotyczące witryny Google Developers. Java jest zastrzeżonym znakiem towarowym firmy Oracle i jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2024-05-14 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Brak potrzebnych mi informacji"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Zbyt skomplikowane / zbyt wiele czynności do wykonania"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Nieaktualne treści"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Problem z tłumaczeniem"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Problem z przykładami/kodem"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Inne"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Łatwo zrozumieć"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Rozwiązało to mój problem"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Inne"
}]