Afin d'utiliser un GPU, le matériel doit-il être supporté par des cadres de programmation graphique (OpenGL/OpenCV) ? Où puis-je trouver une telle API ?
OpenCL et OpenGL sont tous deux traduits en instructions matérielles par le pilote du GPU. Vous avez donc besoin d'un pilote pour votre système d'exploitation qui prenne en charge ces cadres. La plupart des pilotes de GPU prennent en charge une version d'OpenGL, ce qui devrait fonctionner.
La norme OpenGL est maintenue par la Groupe Khronos et vous pouvez trouver des tutoriels à nehe .
Comment fonctionne OpenGL
OpenGL accepte les triangles en entrée et les dessine selon l'état qu'il a au moment où le dessin est émis. La plupart des fonctions OpenGL sont là pour modifier les opérations effectuées en manipulant cet état. La manipulation de l'image peut être faite en chargeant l'image d'entrée comme une texture et en dessinant plusieurs sommets avec la texture active, résultant en une nouvelle image (ou plus génériquement une nouvelle grille de données 2D).
À partir de la version > 2 (ou avec les bonnes extensions ARB), les opérations effectuées sur l'image peuvent être contrôlées par des programmes GLSL appelés vertex et fragment shaders (il existe d'autres shaders, mais ce sont les plus anciens). Un vertex shader sera appelé une fois par vertex, les résultats de celui-ci sont interpolés et transmis au fragment shader. Un fragment shader sera appelé à chaque fois qu'un nouveau fragment (pixel) est écrit dans le résultat.
Maintenant que tout cela concerne la lecture et l'écriture d'images, comment l'utiliser pour la détection d'objets ? Utilisez les sommets pour étendre la texture d'entrée sur toute la fenêtre. Au lieu de calculer des couleurs rgb et de les stocker dans le résultat, vous pouvez écrire un fragmentshader qui calcule des images en niveaux de gris / images de gradient et ensuite vérifie ces textures pour chaque pixel si le pixel est au centre d'un cycle avec une taille spécifique, une partie d'une ligne ou a juste un gradient relativement élevé par rapport à son environnement (bonne caractéristique) ou vraiment tout ce que vous pouvez trouver un bon algorithme parallèle pour. (je ne l'ai pas fait moi-même)
Le résultat final doit être relu par le processeur (vous pouvez parfois utiliser des shaders pour réduire l'échelle des données avant de le faire). OpenCL donne une impression moins graphique et offre beaucoup plus de liberté, mais est moins bien supporté.