Generando código desde GRIP

Generación de código con GRIP

Cuando ejecute su algoritmo de visión en un procesador pequeño como un roboRIO o Raspberry PI se recomienda ejecutar OpenCV directamente en el procesador sin la sobrecarga de GRIP. Para facilitar esto, GRIP puede generar código en C ++, Java y Python para la pipeline que usted cree. Este código generado se puede agregar a su proyecto de robot y ser llamado directamente desde su código de robot existente.

Fuentes de entrada como cámaras o directorios de imágenes y pasos de salida como NetworkTables no son generados. Su código debe proporcionar imágenes como matrices de OpenCV. En el roboRIO, la clase CameraServer proporciona imágenes en ese formato. Para obtener resultados, solo puede usar métodos getter generados para recuperar los valores resultantes, como los valores x e y de un contorno.

Generando el código

Para generar código, vaya a Tools > Generate Code. Aparecerá un cuadro de diálogo para guardar que le permite crear una clase C++, Java o Python que realiza los pasos de la pipeline GRIP.

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

Si genera código para ser usado en un proyecto preexistente, elija un directorio relevante para guardar la pipeline.

  • Usuarios de C++: la clase de la pipeline se divide en un encabezado y un archivo para ser implementado

  • Java Users: la clase generada carece de una declaración de paquete, por lo que una declaración debe ser agregada para que coincida con el directorio donde se guardó el archivo.

  • Usuarios de Python: el nombre del módulo será idéntico a la clase, así que la declaración de importación será algo así como from Pipeline import Pipeline

Estructura del código generado

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

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

Ejecutando la pipeline

Para ejecutar la Pipeline, llame al método de proceso con las fuentes (cámaras web, cámaras IP, archivos de imagen, etc.) como argumentos. Esto mostrará los resultados de cada operación en la pipeline con los métodos getFooOutput.

Obteniendo los resultados

Los usuarios pueden obtener los resultados de cada paso en la pipeline. Los resultados de estas operaciones serían accesibles a través de sus respectivos accesos. Por ejemplo:

Operación

getter en Java/C++

variable de Python

Umbral del RGB

getRgbThresholdOutput

rgb_threshold_output

Difuminación

getBlurOutput

blur_output

Erosión CV

getCvErodeOutput

mcv_erode_output

Encontrar contornos

getFindContoursOutput

find_contours_output

Filtrar contornos

getFilterContoursOutput

filter_contours_output

Si una operación aparece varias veces en la pipeline, los accesores para esas operaciones tienen el numero de esa operación:

Operación

Aparición

Accesor

Difuminación

Primera

getBlur0Output

Difuminación

Segunda

getBlur1Output

Difuminación

Tercera

getBlur2Output