Moravské přístroje, a. s., zdroj: https://www.mii.cz/art?id=1029&lang=405, vytištěno: 26.04.2024 8:10:00

Hlavní stránkaPodporaRady pro tvorbu aplikací

Rady pro tvorbu aplikací - změny velikosti obrazu v krocích strojového vidění u přístroje gl_camera
 Pravděpodobně jste během vývoje aplikace strojového vidění již zaznamenali, že při vložení některého z kroků, které mění velikost obrazu, se vám zobrazilo varování, že pro virtuální přístroj gl_camera není tento krok doporučen. Je to vskutku divné varování, které zaslouží bližší vysvětlení.

Toto varování samozřejmě neznamená, že by virtuální přístroj gl_camera, který pro svou činnost používá GPU, nedokázal měnit velikost obrazu, se kterým pracuje. Virtuální přístroj můžete na obrazovce zvětšovat a zmenšovat, a to i neproporčně, podle libosti. Tak v čem může být problém?

Při vložení kroku měnícího velikost obrazu do řetězce strojového vidění se objeví dialog s tímto varováním

Při vložení kroku měnícího velikost obrazu do řetězce strojového vidění se objeví dialog s tímto varováním

Virtuální přístroj gl_camera využívá pro vykreslování obrazu z kamery grafické rozhraní OpenGL. Pro zpracování obrazu využívá mohutného masivně paralelního výkonu současných grafických procesorů. Pomocí shaderů v jazyce GLSL dokáže v reálném čase s obrazem to, co je prostřednictvím CPU počítače nerealizovatelné. Základem, na kterém je vše postaveno, je tzv. vykreslovací kontext. Součástí tohoto kontextu, který sídlí v grafické paměti spravované grafickým procesorem, jsou např. fragmentové buffery obsahující vykreslovaný obraz, paměťové pixelové buffery velké jako originální obraz z kamery, bufferové objekty různých velikostí pro jednotlivé fáze zpracování obrazu, buffery maskovacích šablon, vertexové objekty pro dodatkovou grafiku, texturové objekty pro uschovávání obrazů, rasterizovaná písma, množství přeložených a slinkovaných shaderů a mnoho dalšího. Toto vše se musí při změně velikosti základního kontextu odstranit a vytvořit znovu. Již toto samo o sobě je velmi paměťově a výkonově náročný proces, ale to to stále ještě není ten hlavní problém. Potíž je v tom, jak jednotlivé grafické ovladače spravují grafickou paměť. Objekty často nejsou v grafické paměti uvolňovány okamžitě, ale o vše se starají samostatné uklízecí procesy. A požadavky, při kterých jsou s vysokou frekvencí odstaňovány a opět vytvářeny objekty v grafické paměti mohou vést ke kolapsu těchto uklízecích procesů. Při masivním používání změn velikosti obrazu je tedy dobré se pro danou grafickou kartu a konkrétní verzi grafických ovladaču nejprve přesvědčit, zda-li ovladače tuto zátěž zvládají.

I v případě ovladačů, které bez problémů zvládají opakované odstraňování starých a vytváření nových objektů v grafické paměti, zůstává tento proces náročným a silně zatěžujícím GPU i CPU počítače. Náročnost je dobře vidět na rozdílu doby běhu řetězce GPU kroků strojového vidění při prvním a všech dalších spuštění. První spuštění může být i stokrát pomalejší než další běhu v trvalém provozu. V aplikacích strojového vidění je vždy několik možností, jak požadavky na změny velikosti obrazu řešit bez nepřetržitých změn velikosti obrazu uvnitř jedné sekvence kroků virtuálního přístroje gl_camera. Získáme tak nejen bezpečnější, ale také mnohonásobně rychlejší aplikaci.

RC