ويجب التأكّد من توفّر إصدار صالح من إطار عمل MediaPipe. عرض تعليمات التثبيت.
لتنفيذ مثال
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" }
يتكوّن هذا الرسم البياني من مصدر إدخال واحد للرسم البياني (
in
) ومصدر بيانات واحد للرسم البياني. (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". العالم!" ذات قيم طابع زمني تتراوح بين 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
، يسترجع المثال جميع القيم العشر الحزم من تدفق الإخراج، للحصول على محتوى السلسلة من كل حزمة وطباعته في سجل الإخراج.mediapipe::Packet packet; while (poller.Next(&packet)) { LOG(INFO) << packet.Get<string>(); }
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2024-08-20 (حسب التوقيت العالمي المتفَّق عليه)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"لا يحتوي على المعلومات التي أحتاج إليها."
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"الخطوات معقدة للغاية / كثيرة جدًا."
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"المحتوى قديم."
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"ثمة مشكلة في الترجمة."
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"مشكلة في العيّنات / التعليمات البرمجية"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"غير ذلك"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"يسهُل فهم المحتوى."
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"ساعَدني المحتوى في حلّ مشكلتي."
},{
"type": "thumb-up",
"id": "otherUp",
"label":"غير ذلك"
}]
{
"last_modified": "تاريخ التعديل الأخير: 2024-08-20 (حسب التوقيت العالمي المتفَّق عليه)",
"state": ""
}