คำถามที่พบบ่อย

วิธีแปลง ImageFrame และ GpuBuffers

เครื่องคิดเลข ImageFrameToGpuBufferCalculator และ GpuBufferToImageFrameCalculator ช่วยแปลงข้อมูลไปมาระหว่างแพ็กเก็ตประเภท ImageFrame กับ GpuBuffer ImageFrame หมายถึงข้อมูลรูปภาพในหน่วยความจำ CPU ในรูปแบบรูปภาพบิตแมปใดๆ ก็ตาม GpuBuffer หมายถึงข้อมูลรูปภาพในหน่วยความจำ GPU ดูรายละเอียดเพิ่มเติมได้ในส่วน GpuBuffer เป็น ImageFrame Converters คุณดูตัวอย่างได้ใน

วิธีแสดงภาพผลลัพธ์ของการรับรู้

AnnotationOverlayCalculator ช่วยให้วางผลลัพธ์การรับรู้ เช่น กรอบล้อมรอบ ลูกศร และวงรี ซ้อนทับบนเฟรมวิดีโอที่สอดคล้องกับวัตถุที่รู้จักได้ ผลลัพธ์อาจแสดงในหน้าต่างการวินิจฉัยเมื่อทำงานบนเวิร์กสเตชัน หรือในเฟรมพื้นผิวเมื่อทำงานในอุปกรณ์ คุณดูตัวอย่างการใช้ AnnotationOverlayCalculator ได้ในหัวข้อต่อไปนี้

วิธีเรียกใช้เครื่องคิดเลขพร้อมกัน

ภายในกราฟเครื่องคิดเลข MediaPipe จะเรียกใช้โหนดเครื่องคิดเลขแยกกันแบบขนานเป็นประจำ MediaPipe จะเก็บกลุ่มเทรดไว้ และเรียกใช้เครื่องคิดเลขแต่ละเครื่องเมื่อชุดข้อความพร้อมใช้งานและอินพุตทั้งหมดจะพร้อมใช้งานเร็วๆ นี้ อินสแตนซ์เครื่องคำนวณแต่ละรายการจะทำงานสำหรับอินพุต 1 ชุดต่อครั้งเท่านั้น ดังนั้นเครื่องคำนวณส่วนใหญ่จึงใช้งานร่วมกับเทรดได้เท่านั้น ไม่ใช่ปลอดภัยชุดข้อความ

ในการทำให้เครื่องคำนวณ 1 เครื่องประมวลผลอินพุตหลายรายการพร้อมกันได้ มี 2 วิธีที่เป็นไปได้ ดังนี้

  1. กำหนดโหนดเครื่องคำนวณหลายรายการและส่งแพ็กเกตอินพุตไปยังโหนดทั้งหมด
  2. ทำให้ชุดข้อความของเครื่องคิดเลขปลอดภัยและกำหนดการตั้งค่า max_in_flight

คุณสามารถทำตามแนวทางแรกได้โดยใช้เครื่องคำนวณที่ออกแบบมาเพื่อกระจายแพ็กเก็ตไปยังเครื่องคำนวณอื่นๆ เช่น RoundRobinDemuxCalculator RoundRobinDemuxCalculator รายการเดียวจะกระจายแพ็กเกตต่อเนื่องไปยังโหนด ScaleImageCalculator ที่กำหนดค่าเหมือนกันหลายรายการได้

วิธีที่ 2 อนุญาตการเรียกใช้สูงสุด max_in_flight ของเมธอด CalculatorBase::Process ในโหนดเครื่องคำนวณเดียวกัน แพ็กเก็ตเอาต์พุตจาก CalculatorBase::Process จะเรียงลำดับตามการประทับเวลาโดยอัตโนมัติก่อนที่จะส่งแพ็กเก็ตไปยังเครื่องคำนวณปลายทาง

ไม่ว่าจะดำเนินการด้วยวิธีใด คุณก็ต้องทราบว่าเครื่องคำนวณที่ทำงานแบบขนานจะไม่สามารถรักษาสถานะภายในไว้ในลักษณะเดียวกันกับเครื่องคำนวณตามลำดับปกติ

การประทับเวลาเอาต์พุตเมื่อใช้ ImmediateInputStreamHandler

ImmediateInputStreamHandler จะส่งแต่ละแพ็กเก็ตทันทีที่มาถึงสตรีมอินพุต ด้วยเหตุนี้ จึงสามารถส่งแพ็กเก็ตที่มีการประทับเวลาที่สูงขึ้นจากสตรีมอินพุตหนึ่ง ก่อนที่จะส่งแพ็กเกตที่มีการประทับเวลาต่ำกว่าจากสตรีมอินพุตอื่น หากมีการใช้ทั้งการประทับเวลาอินพุตเหล่านี้สำหรับแพ็กเก็ตที่ส่งไปยังสตรีมเอาต์พุตเดียว สตรีมเอาต์พุตนั้นจะร้องเรียนว่าการประทับเวลาไม่ได้เพิ่มขึ้นแบบเพียงอย่างเดียว เพื่อแก้ไขปัญหานี้ เครื่องคำนวณจะต้องระมัดระวังเมื่อแสดงผลแพ็กเก็ตหลังจากที่ประมวลผลการประทับเวลาเสร็จเรียบร้อยแล้วเท่านั้น ซึ่งทำได้โดยรอจนกว่าจะได้รับแพ็กเก็ตอินพุตจากสตรีมอินพุตทั้งหมดสำหรับการประทับเวลานั้น หรือไม่สนใจแพ็กเก็ตที่มาถึง โดยมีการประทับเวลาที่ประมวลผลแล้ว

วิธีเปลี่ยนการตั้งค่าระหว่างรันไทม์

การเปลี่ยนการตั้งค่าของกราฟเครื่องคิดเลขขณะที่แอปพลิเคชันทำงานอยู่ทำได้ 2 วิธีดังนี้

  1. เริ่มต้นกราฟเครื่องคำนวณที่มีการแก้ไข CalculatorGraphConfig อีกครั้ง
  2. ส่งตัวเลือกเครื่องคิดเลขใหม่ผ่านแพ็กเก็ตในสตรีมอินพุตกราฟ

วิธีการแรกมีประโยชน์จากการใช้เครื่องมือประมวลผลของ CalculatorGraphConfig เช่น "กราฟย่อย" วิธีที่ 2 มีข้อดีคือทำให้เครื่องคำนวณและแพ็กเก็ตที่ใช้งานอยู่ทำงานต่อไปได้ในขณะที่มีการเปลี่ยนแปลงการตั้งค่า ผู้ร่วมให้ข้อมูล Mediapipe กำลังตรวจสอบทางเลือกอื่นๆ เพื่อให้ได้ประโยชน์ทั้ง 2 ข้อนี้

วิธีประมวลผลสตรีมอินพุตแบบเรียลไทม์

เฟรมเวิร์ก Mediappe จะใช้เพื่อประมวลผลสตรีมข้อมูลทั้งแบบออนไลน์หรือออฟไลน์ได้ สำหรับการประมวลผลแบบออฟไลน์ ระบบจะพุชแพ็กเก็ตลงในกราฟทันทีที่เครื่องคำนวณพร้อมประมวลผลแพ็กเก็ตเหล่านั้น สำหรับการประมวลผลออนไลน์ จะมีการพุชแพ็กเก็ต 1 แพ็กสำหรับแต่ละเฟรมลงในกราฟเมื่อมีการบันทึกเฟรมนั้น

เฟรมเวิร์ก MediaPipe ต้องการเพียงกำหนดแพ็กเก็ตต่อเนื่องที่เพิ่มขึ้นเรื่อยๆ เท่านั้น โดยทั่วไปแล้ว เครื่องคิดเลขและกราฟแบบเรียลไทม์จะใช้เวลาบันทึกหรือเวลานำเสนอเป็นการประทับเวลาสำหรับแพ็กเก็ตแต่ละรายการ โดยการประทับเวลาแต่ละรายการจะแสดงไมโครวินาทีนับตั้งแต่ Jan/1/1970:00:00:00 วิธีนี้จะช่วยให้แพ็กเก็ตจากแหล่งที่มาต่างๆ ได้รับการประมวลผลตามลำดับที่สอดคล้องกันทั่วโลก

โดยปกติสำหรับการประมวลผลแบบออฟไลน์ ทุกแพ็กเก็ตอินพุตจะได้รับการประมวลผลและการประมวลผลจะดำเนินต่อไปตราบเท่าที่จำเป็น สำหรับการประมวลผลแบบออนไลน์ มักต้องวางแพ็กเก็ตอินพุตเพื่อตามให้ทันกับเฟรมข้อมูลอินพุต เมื่อมีอินพุตเข้ามาบ่อยเกินไป เทคนิคที่แนะนำสำหรับการตัดแพ็กเก็ตคือการใช้เครื่องคำนวณ MediaPipe ที่ออกแบบมาเพื่อวัตถุประสงค์นี้โดยเฉพาะ เช่น FlowLimiterCalculator และ PacketClonerCalculator

สำหรับการประมวลผลข้อมูลออนไลน์ ยังต้องกำหนดโดยทันทีว่าการประมวลผลจะดำเนินการต่อได้เมื่อใด MediaPipe รองรับเรื่องนี้โดยการขยายขอบเขตการประทับเวลาระหว่างเครื่องคำนวณ ขอบเขตของการประทับเวลาจะแสดงช่วงเวลาของการประทับเวลาที่จะไม่มีแพ็กเก็ตอินพุต และช่วยให้เครื่องคำนวณเริ่มประมวลผลการประทับเวลาเหล่านั้นได้ทันที เครื่องคิดเลขที่ออกแบบมาสำหรับการประมวลผลแบบเรียลไทม์ควรคำนวณขอบเขตการประทับเวลาอย่างรอบคอบเพื่อให้เริ่มประมวลผลโดยเร็วที่สุด ตัวอย่างเช่น MakePairCalculator ใช้ API ของ SetOffset เพื่อเผยแพร่ขอบเขตการประทับเวลาจากสตรีมอินพุตไปยังสตรีมเอาต์พุต

ฉันสามารถเรียกใช้ MediaPipe บน MS Windows ได้ไหม

ปัจจุบัน MediaPipe ความสามารถในการถ่ายโอนได้รองรับ Debian Linux, Ubuntu Linux, MacOS, Android และ iOS หัวใจสำคัญของเฟรมเวิร์ก MediaPipe คือไลบรารี C++ ที่เป็นไปตามมาตรฐาน C++11 การย้ายไปยังแพลตฟอร์มอื่นจึงค่อนข้างง่าย