يجب أن يكون لديك إصدار عملي من 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 من خلال لصق محتوى SketchGraphConfig أدناه في العرض المرئي. انقر هنا للحصول على مساعدة بشأن العرض المرئي.
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 World!" (تحتوي كل حزمة) على سلسلة "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
، يسترد المثال جميع الحزم العشر من تدفق الإخراج، ويحصل على محتوى السلسلة من كل حزمة، ويطبعه في سجل الإخراج.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-05-14 (حسب التوقيت العالمي المتفَّق عليه)
[{
"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":"غير ذلك"
}]