Si të konvertoni ImageFrames dhe GpuBuffers
Llogaritësit ImageFrameToGpuBufferCalculator dhe GpuBufferToImageFrameCalculator konvertohen mbrapa dhe me radhë midis paketave të llojit ImageFrame dhe GpuBuffer . ImageFrame i referohet të dhënave të imazhit në kujtesën e CPU-së në cilindo nga një numër formatesh imazhi bitmap. GpuBuffer i referohet të dhënave të imazhit në memorien GPU. Mund të gjeni më shumë detaje në seksionin Konceptet e kornizës Konvertuesit GpuBuffer në ImageFrame . Ju mund të shihni një shembull në:
Si të përfytyroni rezultatet e perceptimit
AnnotationOverlayCalculator lejon që rezultatet e perceptimit, të tilla si kutitë kufizuese, shigjetat dhe ovalet, të mbivendosen në kornizat e videos të rreshtuara me objektet e njohura. Rezultatet mund të shfaqen në një dritare diagnostikuese kur funksionon në një stacion pune, ose në një kornizë teksture kur funksionon në pajisje. Ju mund të shihni një shembull të përdorimit të AnnotationOverlayCalculator në:
Si të përdorni kalkulatorë paralelisht
Brenda një grafiku llogaritës, MediaPipe drejton në mënyrë rutinore paralelisht nyje të veçanta llogaritëse. MediaPipe ruan një grup temash dhe ekzekuton çdo kalkulator sapo një fill të jetë i disponueshëm dhe të gjitha hyrjet e tij janë gati. Çdo shembull i kalkulatorit ekzekutohet vetëm për një grup hyrjesh në të njëjtën kohë, kështu që shumica e kalkulatorëve duhet vetëm të jenë të përputhshëm me thread-in dhe jo të sigurt-thread-të .
Për të mundësuar që një kalkulator të përpunojë të dhëna të shumta paralelisht, ekzistojnë dy qasje të mundshme:
- Përcaktoni nyje të shumta llogaritëse dhe dërgoni paketat hyrëse në të gjitha nyjet.
- Bëjeni kalkulatorin të sigurt në fije dhe konfiguroni cilësimin e tij
max_in_flight.
Qasja e parë mund të ndiqet duke përdorur kalkulatorët e krijuar për të shpërndarë paketat nëpër kalkulatorë të tjerë, si RoundRobinDemuxCalculator . Një RoundRobinDemuxCalculator i vetëm mund të shpërndajë paketa të njëpasnjëshme nëpër disa nyje ScaleImageCalculator të konfiguruara në mënyrë identike.
Qasja e dytë lejon deri në max_in_flight thirrjet e metodës CalculatorBase::Process në të njëjtën nyje llogaritëse. Paketat e daljes nga CalculatorBase::Process renditen automatikisht me vulën kohore përpara se të kalojnë te kalkulatorët e rrjedhës së poshtme.
Me secilën qasje, duhet të jeni të vetëdijshëm se kalkulatori që funksionon paralelisht nuk mund të ruajë gjendjen e brendshme në të njëjtën mënyrë si një kalkulator normal sekuencial.
Nxjerrja e vulave kohore kur përdorni ImmediateInputStreamHandler
ImmediateInputStreamHandler dorëzon çdo paketë sapo të arrijë në një rrymë hyrëse. Si rezultat, ai mund të dorëzojë një paketë me një vulë kohore më të lartë nga një rrymë hyrëse përpara se të dërgojë një paketë me një vulë kohore më të ulët nga një rrymë tjetër hyrëse. Nëse këto stampa kohore të hyrjes përdoren të dyja për paketat e dërguara në një rrjedhë dalëse, ajo rrjedhë dalëse do të ankohet se vulat kohore nuk po rriten në mënyrë monotone. Për të korrigjuar këtë, kalkulatori duhet të kujdeset që të nxjerrë një paketë vetëm pasi të ketë përfunduar përpunimi për stampën e saj kohore. Kjo mund të realizohet duke pritur derisa të merren paketat hyrëse nga të gjitha rrjedhat hyrëse për atë vulë kohore, ose duke injoruar një paketë që arrin me një vulë kohore që tashmë është përpunuar.
Si të ndryshoni cilësimet në kohën e ekzekutimit
Ekzistojnë dy qasje kryesore për ndryshimin e cilësimeve të një grafiku llogaritës ndërsa aplikacioni është në punë:
- Rinisni grafikun e kalkulatorit me
CalculatorGraphConfigtë modifikuar. - Dërgoni opsione të reja kalkulatori përmes paketave në rrjedhat e hyrjes në grafik.
Qasja e parë ka avantazhin e përdorimit të mjeteve të përpunimit CalculatorGraphConfig si "nëngrafët". Qasja e dytë ka avantazhin e lejimit të kalkulatorëve dhe paketave aktive që të qëndrojnë në fluturim ndërsa cilësimet ndryshojnë. Kontribuesit e Mediapipe aktualisht po hetojnë qasje alternative për të arritur të dyja këto avantazhe.
Si të përpunoni rrjedhat e hyrjes në kohë reale
Korniza mediapipe mund të përdoret për të përpunuar rrjedhat e të dhënave ose në linjë ose jashtë linje. Për përpunimin offline, paketat futen në grafik sapo llogaritësit të jenë gati për t'i përpunuar ato paketa. Për përpunimin online, një pako për çdo kornizë futet në grafik ndërsa regjistrohet ai kornizë.
Korniza MediaPipe kërkon vetëm që paketave të njëpasnjëshme të caktohen stampa kohore në mënyrë monotonike në rritje. Sipas marrëveshjes, llogaritësit dhe grafikët në kohë reale përdorin kohën e regjistrimit ose kohën e prezantimit si vulën kohore për çdo paketë, me çdo vulë kohore që përfaqëson mikrosekonda që nga Jan/1/1970:00:00:00 . Kjo lejon që paketat nga burime të ndryshme të përpunohen në një mënyrë të qëndrueshme globalisht.
Normalisht për përpunimin offline, çdo paketë hyrëse përpunohet dhe përpunimi vazhdon për aq kohë sa është e nevojshme. Për përpunimin në internet, shpesh është e nevojshme të hidhen paketat hyrëse për të mbajtur ritmin me ardhjen e kornizave të të dhënave hyrëse. Kur hyrjet arrijnë shumë shpesh, teknika e rekomanduar për hedhjen e paketave është përdorimi i kalkulatorëve MediaPipe të krijuar posaçërisht për këtë qëllim, si FlowLimiterCalculator dhe PacketClonerCalculator .
Për përpunimin online, është gjithashtu e nevojshme të përcaktohet menjëherë se kur mund të vazhdojë përpunimi. MediaPipe e mbështet këtë duke përhapur kufijtë e stampave kohore midis kalkulatorëve. Kufijtë e vulave kohore tregojnë intervalet e vulave kohore që nuk do të përmbajnë pako hyrëse dhe ato lejojnë kalkulatorët të fillojnë menjëherë përpunimin e atyre vulave kohore. Llogaritësit e krijuar për përpunim në kohë reale duhet të llogarisin me kujdes kufijtë e stampës kohore në mënyrë që të fillojnë përpunimin sa më shpejt që të jetë e mundur. Për shembull, MakePairCalculator përdor SetOffset API për të përhapur kufijtë e stampave kohore nga rrjedhat hyrëse në rrjedhat dalëse.
A mund ta ekzekutoj MediaPipe në MS Windows?
Aktualisht transportueshmëria MediaPipe mbështet Debian Linux, Ubuntu Linux, MacOS, Android dhe iOS. Thelbi i kornizës MediaPipe është një bibliotekë C++ që përputhet me standardin C++11, kështu që është relativisht e lehtë të transferohet në platforma shtesë.