Génération de code à partir de GRIP

Génération de code GRIP

Lorsque vous exécutez votre algorithme de vision sur un petit processeur tel qu’un roboRIO ou Raspberry PI, il est encouragé d’exécuter OpenCV directement sur le processeur sans la surcharge de GRIP. Pour faciliter cela, GRIP peut générer du code en C++, Java et Python pour le pipeline que vous avez créé. Ce code généré peut être ajouté à votre projet de robot et appelé directement à partir de votre code de robot existant.

Les sources d’entrée telles que les caméras ou les répertoires d’images et les étapes de sortie telles que NetworkTables ne sont pas générées. Votre code doit fournir des images sous forme compatible avec OpenCV. Sur le roboRIO, la classe CameraServer fournit des images dans ce format. Pour obtenir des résultats, vous pouvez simplement utiliser des méthodes pour récupérer les valeurs résultantes telles que les valeurs de contour x et y.

Génération de code

Pour générer du code, allez dans Tools > Generate Code. Cela fera apparaître une boîte de dialogue d’enregistrement qui vous permet de créer une classe C++, Java ou Python qui exécute les étapes du pipeline GRIP.

../../../../_images/generating-code.png

Si vous générez du code à utiliser dans un projet préexistant, choisissez un répertoire approprié dans lequel enregistrer le pipeline.

  • Utilisateurs C++: la classe du pipeline est divisée en un fichier d’en-tête et un fichier d’implémentation

  • Utilisateurs Java: la classe générée n’a pas de déclaration de package, donc une déclaration doit être ajoutée pour correspondre au répertoire où le fichier a été enregistré.

  • Utilisateurs Python: le nom du module sera identique à la classe, donc l’instruction import sera quelque chose comme from Pipeline import Pipeline

Structure du code généré

Pipeline:
  // Process -- this will run the pipeline
  process(Mat source)

  // Output accessors
  getFooOutput()
  getBar0Output()
  getBar1Output()
  ...

Exécution du pipeline

Pour exécuter le Pipeline, appelez la méthode du processus avec les sources (webcams, caméra IP, fichier image, etc.) comme arguments. Cela rendra disponible les sorties de chaque opération dans le pipeline avec les méthodes getFooOutput.

Obtenir les résultats

Les utilisateurs peuvent accéder aux sorties de chaque étape du pipeline. Les résultats de ces opérations seraient accessibles via leurs accesseurs respectifs. Par exemple:

Opération

Java/C++ getter

Variable Python

Seuil RGB

getRgbThresholdOutput

rgb_threshold_output

Flou (Blur)

getBlurOutput

blur_output

Érosion (CV Erode)

getCvErodeOutput

mcv_erode_output

Identifer les contours

getFindContoursOutput

find_contours_output

Filtrer les contours

getFilterContoursOutput

filter_contours_output

Si une opération apparaît plus d’une fois dans le pipeline, les accesseurs de ces opérations identiques seront numérotés, en commençant par le chiffre 0 pour le premier accesseur :

Opération

Ordre d’apparition

Accesseur

Flou (Blur)

Première

getBlur0Output

Flou (Blur)

Deuxième

getBlur1Output

Flou (Blur)

Troisième

getBlur2Output