Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ver.1.0
visión artificial
_______________________________________________________________
Nota preliminar
Sherlock constituye una herramienta estándar de ejecución de aplicaciones de
visión artificial orientado a entornos industriales.
Este manual se completa con los manuales originales suministrados por los
fabricantes del producto y con la información distribuida por Infaimon en
conjunto con este manual de usuario.
_____________________www.infaimon.com____________________ 3
visión artificial
_______________________________________________________________
INDICE
nº de página
_____________________www.infaimon.com____________________ 4
visión artificial
_______________________________________________________________
nº de página
_____________________www.infaimon.com____________________ 5
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 6
visión artificial
_______________________________________________________________
IFC SAPERA LT
Pc2Vision X64
PcVision Bandit II
PcVisionplus
PcCamlink
PcDig
PcRGB
VA21
VA31
VA40/41
VA50/51
_____________________www.infaimon.com____________________ 7
visión artificial
_______________________________________________________________
3. Licencias
Sherlock requiere de una licencia que puede estar ligada a una llave externa
(Mochila USB o puerto paralelo) o al “Frame Grabber” de DALSA Coreco.
Sherlock, sin licencia, funcionará en modo DEMO, pudiendo realizar todas las
funciones exceptuando la adquisición de imagen.
Para poder instalar las licencias de llave externa (USB o puerto paralelo), se
deberá instalar el software Sentinel, una vez ya esté instalado el software
Sherlock.
Start –> Programs –> ipd ... –> Sherlock –> License Manager.
_____________________www.infaimon.com____________________ 8
visión artificial
_______________________________________________________________
4. Herramientas
En Sherlock 7 los procesos o preprocesos que se utilizan en las herramientas
de área, línea o multilínea, los tendremos que clasificar en dos grupos:
monocromo y color. Esta separación se realiza ya que no serán los mismos
procesos y preproceso que podamos utilizar, dependiendo de si la imagen es
en color o en blanco y negro.
4.1. ROIs
Una ROI (región de interés) define el área de píxels a procesar. Una ventana
de imagen puede contener tantas ROI como sean necesarias.
_____________________www.infaimon.com____________________ 9
visión artificial
_______________________________________________________________
Los ROIs de tipo línea procesan los píxels a lo largo de la línea. Hay dos tipos
de ROIs de línea: Simple y Múltiple.
Simple
Punto Línea Poli-línea Arco Circunferencia
Múltiple
Rastrillo Radial Arco iris Ojo de Buey
Las ROI circunferencia, arco iris y ojos de buey procesan los píxels a lo
largo de sus líneas, no dentro o entre ellas.
_____________________www.infaimon.com____________________ 10
visión artificial
_______________________________________________________________
Para añadir una ROI a una ventana de imagen, hay que hacer clic en el botón
ROIs, en la barra de herramientas de la ventana, y después hay que hacer clic
en la ventana de imagen para definir la posición y tamaño de la misma.
Punto Un Clic.
Línea Dos clics, uno para cada extremo de la línea.
Poli-línea n clics, uno para cada vértice de la línea; doble clic izquierdo
para completar la línea.
Arco Tres clics, uno para cada límite del arco, uno que define la
curvatura.
Circunferencia Dos clic, uno para el centro y otro que define el radio.
Rastrillo Dos clic, uno para cada esquina del rectángulo que lo define.
Radial Tres clics, uno para situar el centro de la “rueda”, dos más
(Spoke) para situar el inicio y el fin del radio.
Arco Iris Cuatro clics, uno para cada extremo del arco iris, uno para
definir la curvatura del arco interior o exterior y uno para definir
la concentricidad del arco interno o externo.
Ojo de Buey Tres clics, uno para posicionar el centro del ojo de buey, uno
para definir el radio del círculo interno o externo y otro para
definir el otro radio interior o exterior.
Rectángulo Dos clics, uno para cada esquina opuesta.
Anillo Cuatro clics, uno para cada extremo del arco, uno para definir
el arco interno o externo y otro para definir el arco externo o
interno.
Polígono n clics, uno para cada vértice del polígono y hacer doble clic
izquierdo para completar el polígono.
Toroide Tres clics, uno para posicionar el centro del círculo, uno para
definir el radio interno o externo del círculo y uno para definir el
radio externo o interno del círculo.
Se asignan nombres por defecto a las ROIs que indican su tipo y orden de
creación: RectA, TorusA, RectB, RectC, SpokeA, etc. Para renombrar una
ROI, haga doble clic en ella dentro de la ventana de imagen o dentro del panel
de Programa abriendo el dialogo Edit.
_____________________www.infaimon.com____________________ 11
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 12
visión artificial
_______________________________________________________________
4.2. Preproceso:
A continuación se enumeran todos los prepocesos existentes. Dependiendo del
tipo de ROI seleccionado y de si la imagen es Monocromo o Color, se activarán
unos u otros. Son los siguientes:
1x3, 1x5, 1x7, 3x1, 3x3, 5x1, 5x5, 7x 1, Constant, Dice, Dilate, Equalize, Erode,
Fill, First DiffX, First Diff XY, First Diff Y, Flip H, Flip HV, Flip V, Gain Offset,
Gaussian, Gaussian 5x5, Gradient, Highpass, Highpass 5x5, Image Add, Image
AND, Image Extract, ImageInject, Image Max, Image Min, Image OR, Image
Retrieve, Image save, Image Sub AB, Image Sub Abs, Image Sub BA, Image
Windows, Image XOR, Invert, Laplace, Laplace 5x5, Median, Noise, Normalize,
Outline, Prewitt X, Prewitt XY, Prewitt Y, Project H, Project V, Random,
Roberts, Roberts Down, Roberts Up, Rotate, Second Diff X, Second Diff XY,
Second Diff Y, Sharpen, Skeleton, Smooth, Sobel X, Sobel XY, Sobel Y,
Treshold, Treshold Adaptive, Treshold Band, Treshold Down, Treshold Down
Masked, Treshold Local Adaptive, Threshold Up y Threshold Up Masked.
_____________________www.infaimon.com____________________ 13
visión artificial
_______________________________________________________________
4.2.2. Constant
4.4.3. Dice
Este preproceso proyecta sobre la imagen una cuadricula, que se puede definir
por el usuario y que definirá el tamaño de el rectángulo que cortará la imagen
separando los cuadros entre ellos. Este preproceso se emplea para segmentar
la imagen en n subimágenes.
_____________________www.infaimon.com____________________ 14
visión artificial
_______________________________________________________________
4.2.5. Equalize
Este preproceso varía el nivel de gris de todos los pixels del ROI, toma el valor
mínimo en nivel de gris de todos los pixels de la ROI y lo convierte 0. Realiza la
misma operación para el valor máximo convirtiéndolo en 255, de modo que
realiza un escalado de valores según este máximo y mínimo obteniendo una
imagen mucho más contrastada.
_____________________www.infaimon.com____________________ 15
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 16
visión artificial
_______________________________________________________________
4.2.10. Gradient
Aplica un filtro paso alto, dejando pasar las frecuencias altas dentro de la
imagen. Lo que equivale a marcar los detalles, como el perfil de las formas.
_____________________www.infaimon.com____________________ 17
visión artificial
_______________________________________________________________
4.2.13. Invert
Con esta función se invierte el valor de los pixels de toda la ROI pasando el 0 a
255, el 1 a 254 y así todos los pixels respectivamente.
4.2.15. Median
Este filtro realiza el filtro de mediana con una matriz de 3x3. Eliminando ruido
aleatorio de la imagen.
_____________________www.infaimon.com____________________ 18
visión artificial
_______________________________________________________________
4.2.16. Noise
4.2.17. Normalize
Ej. Tomamos un 10% al máximo y al mínimo. Esto convertirá los valores entre
0 y 25 en 0. Entre 240 y 255 en 255 y los demás los reescalará.
_____________________www.infaimon.com____________________ 19
visión artificial
_______________________________________________________________
4.2.18. Outline
Para poder utilizar este preproceso es necesario que la imagen este binarizada
previamente, para ello anteriormente se debe realizar un preproceso de
Threshold. Esta herramienta definirá la línea perimetral de los blobs.
_____________________www.infaimon.com____________________ 20
visión artificial
_______________________________________________________________
4.2.21. Random
Crea una imagen dentro del ROI sin tener en cuentra lo que hay previamente y
de forma aleatoria le da valor a los pixels.
4.2.22. Rotate
Este preproceso rotará la imagen un ángulo predefinido.
4.2.23. Sharpen
4.2.24. Skeleton
Para poder utilizar este preproceso es imprescindible realizar primero un
threshold para binarizar la imagen. Esta herramienta erosiona los puntos
periféricos del blob hasta encontrar la línea media del blob y deja un esqueleto
del mismo.
_____________________www.infaimon.com____________________ 21
visión artificial
_______________________________________________________________
4.2.25. Smooth
Suaviza la imagen para eliminar ruido, pero a la vez atenúa los cambios de
nivel de gris.
4.3. Algoritmos
Sherlock realiza una separación de algoritmos dependiendo de la herramienta
empleada.
Los algorítmos de línea son: Detect Edges, First edges, Inside Caliper, Max
Edge, Min Max, Outside Caliper.
Los Algoritmos de área disponibles son: Average, Barcode 1D, Barcode Data
Matrix, Barcode QR, Centroid, Connectivity, Count, Extrema, HVLine, Image
Extract, Inspect, MinMax, OCR Plus, Search-Correlation, Search-Geometric,
Search-LineBased, Statistics, Average(Channel), Color Correction Coefs, Color
Map, Color Presence Meter, Count(channel), Count(color), MinMax(channel),
Spot Meter-Block y Spot Meter-Statistical.
Herramientas de Línea:
A continuación se describen los procesos más utilizados en ROI de Líneas.
_____________________www.infaimon.com____________________ 22
visión artificial
_______________________________________________________________
4.4.1. INSIDE CALIPER y OUTSIDE CALIPER
• Edge Type.
• Edge sharpness threshold.
• Edge strenght treshold.
• Smooth filter size.
_____________________www.infaimon.com____________________ 23
visión artificial
_______________________________________________________________
4.4.2. EDGE COUNT
El algoritmo Edge Count cuenta el número de saltos de oscuro a claro o de
claro a oscuro, en una línea.
• Número máximo de
transiciones a contar.
• Nivel mínimo de la
transición.
• Número de píxels entre
transiciones.
• Dirección de detección.
• El número de transi-
ciones de oscuro a claro.
• El número de transi-
ciones de claro a oscuro.
• Las coordenadas de
transiciones.
Herramientas Multilínea:
A continuación se describen los procesos más utilizados en ROI de tipo
Multilíneas.
_____________________www.infaimon.com____________________ 24
visión artificial
_______________________________________________________________
• Nivel mínimo de la
transición.
• Dirección de la transición.
Herramientas Área:
_____________________www.infaimon.com____________________ 25
visión artificial
_______________________________________________________________
4.4.4. Conectivity
Conectivity es un proceso que siempre debe ir precedido por un preproceso de
threshold (binarización). Con Connectivity se obtiene información de los blobs
que aparecen en la imagen, segmentados previamente por un proceso de
binarización.
_____________________www.infaimon.com____________________ 26
visión artificial
_______________________________________________________________
En el cuadro de diálogo de la
izquierda se aprecian las distintas
medidas que se pueden obtener
con Conectivity.
4.4.5. Barcode
En Sherlock 7 los Barcode se han unido en tres: Barcode 1D, Barcode 2D y
Barcode QR.
BARCODE 1D
La herramienta de Barcode 1D
es realmente fácil de usar, de
modo automático, indica el tipo
de código y lo lee.
_____________________www.infaimon.com____________________ 27
visión artificial
_______________________________________________________________
Barcote 2D DataMatrix es
una herramienta que se
utiliza habitualmente en
modo automático.
En el caso de que se
quisiera ganar tiempo, se
debería ajustar manual-
mente los parámetros
para reducir el tiempo de
proceso.
BARCODE QR
_____________________www.infaimon.com____________________ 28
visión artificial
_______________________________________________________________
rangos de intensidad de píxels muy bajos. Otras no tienen los límites
marcados, pero una gran variedad de rangos de intensidad en sus píxels. En
algunas imágenes nos encontramos con ambas características. Por este
motivo, existen distintos algoritmos de búsqueda.
_____________________www.infaimon.com____________________ 29
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 30
visión artificial
_______________________________________________________________
Se puede controlar la
ejecución del algoritmo
modificando los pará-
metros de su cuadro de
diálogo Parameters.
Aquí el valor por
defecto 20 de min
contour length se ha
cambiado por 100, y se
ha entrenado la
estructura (execution
mode = train). Los
contornos que tienen
menos de 20 píxels de
longitud se han
eliminado.
_____________________www.infaimon.com____________________ 31
visión artificial
_______________________________________________________________
Search – Geometric puede localizar un
patrón con rotación. El ángulo de rotación
se devuelve en radianes.
Para ver más detalles acerca de los parámetros de este algoritmo, ver la ayuda
en línea de Search – Geometric.
El algoritmo Search – Line aprende las líneas rectas más intensas en una ROI,
y después encuentra la mayor coincidencia en el área de búsqueda.
Visualizar los bordes puede ayudar para ajustar los parámetros correctamente
cuando se está entrenando un patrón. Sin embargo, mostrar los bordes
_____________________www.infaimon.com____________________ 32
visión artificial
_______________________________________________________________
requiere un cierto tiempo, por tanto es conveniente poner view en none
cuando se realice la búsqueda
Para conocer más detalles acerca de los parámetros de este algoritmo puede
consultar la ayuda en línea Search – Line.
_____________________www.infaimon.com____________________ 33
visión artificial
_______________________________________________________________
Paso 3. Leer la estructura en una nueva imagen, y si se encuentra, devolver
su posición, la calidad del resultado y el string asociado.
El algoritmo OCR Gray Scale crea un mapa con todas las intensidades de los
píxels de la ROI, después utiliza la correlación de escalas de gris para
encontrar la mayor coincidencia en el área buscada. Cuanto mayor sea la
variación de intensidades en la estructura, más robusta será la búsqueda.
_____________________www.infaimon.com____________________ 34
visión artificial
_______________________________________________________________
Todos los elementos mostrados
en la pantalla anterior, quedan
registrados en esta base de
datos, donde se puede apreciar
la imagen enseñada las
características y el carácter
asignado.
Estas bases de datos se pueden
guardar para ser importardas en
posteriores OCR. Además se
puede modificar el carácter
asignado mediante el botón
Rename y eliminar una o todos
los elementos. También se
puede habilitar o deshabilitar los
elementos con la opción Toggle
Enable.
En Settings se encuentran
todas las características que se
pueden modificar .
El Acceptance level es el
porcentaje mínimo de similitud
para encontrar un patrón.
_____________________www.infaimon.com____________________ 35
visión artificial
_______________________________________________________________
OCR Gray Scale está pensado para leer caracteres con un contraste
elevado y que las diferencias entre el patrón y la imagen no sean muy
elevados. Para sistemas como podría ser la micropercusion u otras técnicas
que puedan deformar mucho los caracteres existen la herraienta OCR Plus con
una configuración más avanzada que permite leer OCR’s más complejos. La
herramienta OCR Plus tiene un coste adicional al de software Sherlock.
_____________________www.infaimon.com____________________ 36
visión artificial
_______________________________________________________________
4.5. Herramientas de Color
Sherlock dispone de una serie de herramientas de color. La utilización de una u
otra herramienta dependerá de las necesidades del usuario.
4, 5
_____________________www.infaimon.com____________________ 37
visión artificial
_______________________________________________________________
Cuando se ejecuta la investigación con este algoritmo, los píxels de la ROI se
comparan uno a uno con los colores de la base de datos. Si un píxel coincide
con uno de los colores, el contador del color se incrementa. Después de
analizar todos los píxels de la ROI, se devuelve la información del color con el
mayor índice de coincidencia.
_____________________www.infaimon.com____________________ 38
visión artificial
_______________________________________________________________
Recuerde que Color Presence Meter devuelve
información sólo acerca del color con la mayor
presencia. No se devuelve información de los
puntos de color naranja. Si los puntos naranjas no
estuvieran presentes en la ROI el valor de
mustard seguiría siendo de un 12%.
El parámetro used bits determina cuantos bits de color por plano se utilizan
durante el entrenamiento y el análisis. Este parámetro debe ser el mismo
durante el entrenamiento (run mode = Train) y durante el análisis (run mode =
Run). Una vez seleccionado, no se puede cambiar durante el entrenamiento o
el análisis.
Una base de datos de colores creados con este algoritmo puede importarse en
otra ROI ejecutando Color Presence Meter en la misma investigación. No se
puede importar a otra investigación. Aquí una ROI importa la base de datos
creada por RectA.
_____________________www.infaimon.com____________________ 39
visión artificial
_______________________________________________________________
Para añadir colores a la base de datos de algoritmos debe seguir los siguientes
pasos:
_____________________www.infaimon.com____________________ 40
visión artificial
_______________________________________________________________
4
6
Configuration Bit resolution determina cuantos bits por píxels, en los planos
de color se utilizan, cuando se hace el aprendizaje o cuando se analizan los
píxels. Cuanto menor sea el número, menos precisa será la coincidencia de
colores. La resolución debe ser ajustada (haciendo clic en el botón Change)
antes de entrenar cualquier color. Una vez ajustado no se puede cambiar
durante el periodo de entrenamiento o análisis.
_____________________www.infaimon.com____________________ 41
visión artificial
_______________________________________________________________
Para añadir colores a la base de datos de algoritmos debe seguir los siguientes
pasos:
_____________________www.infaimon.com____________________ 42
visión artificial
_______________________________________________________________
4
6
3
Spot Meter – Statistical color training
Configuration Used channels and Bit resolution determina cuantos bits por
píxels, en los planos de color, se utilizan cuando se hace el aprendizaje o
cuando se analizan los píxels. Cuanto menor sea el número, menos precisa
será la coincidencia de colores. La resolución se debe ajustar (haciendo clic en
el botón Change) antes de entrenar cualquier color. Seleccionando los canales
utilizados, se puede entrenar y analizar los tres, solo dos o solo uno de los
planos de color. Una vez ajustados estos parámetros no se pueden cambiar
durante el periodo de entrenamiento o análisis.
_____________________www.infaimon.com____________________ 43
visión artificial
_______________________________________________________________
Una base de datos de color creada por este algoritmo, puede exportarse a un
archivo con extensión .ucc, que a su vez se puede importar a otra ROI
ejecutando Spot Meter – Statistical, tanto en la misma investigación como en
investigaciones distintas.
En la imagen adjunta, sólo los píxels del rectángulo verde se utilizarán para
calcular el valor promedio para el color brown (marrón) en la base de datos de
color.
Se puede marcar el check box Show, para ver qué píxels, en el cuadro de
dialogo de la ventana de visualización, son reconocidos como los colores
seleccionados en la lista de colores. Se puede cambiar los parámetros
Distance (Block) o Threshold (Statistical) para incrementar o reducir la
distribución de colores reconocidos. Esta funcionalidad sirve para debuggar y
solo está disponible en modo Run, y solamente desde el cuadro de diálogo,
durante la creación de la base de datos. No es accesible durante la ejecución
de la investigación.
_____________________www.infaimon.com____________________ 44
visión artificial
_______________________________________________________________
En las siguientes imágenes, el área verde muestra qué píxels están incluidos
en la distribución del color red (rojo). En la imagen de la derecha, el Spot
Meter – Block’s Distance se ha incrementado, y por tanto se incluyen un
mayor número de píxels.
Una base de datos de color creada por uno de estos algoritmos, puede
exportarse a un archivo, que a su vez puede importarse a otras ROIs. Esto es
posible ejecutando el mismo algoritmo, en la misma investigación o en otras
investigaciones. Para Spot Meter – Block, la extensión del archivo es .lst;
para Spot Meter – Statistical, la extensión del archivo es .ucc.
_____________________www.infaimon.com____________________ 45
visión artificial
_______________________________________________________________
Una base de datos exportada desde una ROI ejecutando Spot Meter –
Block o Spot Meter – Statistical, e importada a otra ROI ejecutando el mismo
algoritmo no se comparte, incluso en la misma investigación, será una base de
datos distinta. Un cambio en la base de datos para una ROI no afectará la base
de datos para otra.
Las bases de datos de color creadas por Spot Meter – Block y Spot
Meter – Statistical son incompatibles, porque utilizan diferentes modelos
matemáticos. Una base de datos de color exportada desde Spot Meter –
Block no se puede importar en Spot Meter – Statistical, y viceversa.
_____________________www.infaimon.com____________________ 46
visión artificial
_______________________________________________________________
Para separar las estructuras en tres clases, se deberá definir tres thresholds
dimensionales en el espacio de color RGB para separar rojo de verde y de
azul, y después aplicar un algoritmo de análisis blob que funcione en color. El
centro de las estructuras no depende del color de estas, por tanto será más
fácil convertir cada color a un valor de nivel de gris, y después aplicar el
preproceso de segmentación (thresholding) y el algoritmo de análisis de blob
binario.
_____________________www.infaimon.com____________________ 47
visión artificial
_______________________________________________________________
4, 5
_____________________www.infaimon.com____________________ 48
visión artificial
_______________________________________________________________
En el cuadro de
diálogo Options
de la imagen
destino, seleccione
Reading como
imagen origen, y el
mapa de color
creado por el
algoritmo Color
Map como el
reading.
Los colores en la imagen origen – verde, rojo y azul – se han representado con
los valores 0, 1 y 2, respectivamente. Para analizar solo las estructuras verdes,
debe seleccionar el preprocesador Threshold Band, poner los parámetros
threshold low y threshold high en el mismo valor (en este caso 0), in value a
0, y out value a 255. Esto segmentará todos los píxels desde threshold low a
threshold high. Para realizar el algoritmo que cuente elementos, se ha de
seleccionar el proceso Connectivity – Binary. (Por defecto, el algoritmo
Connectivity – Binary procesará los pixels negros [0].)
_____________________www.infaimon.com____________________ 49
visión artificial
_______________________________________________________________
En esta imagen se utiliza una
ROI de tipo rectángulo en la
imagen destino y se ha confi-
gurado como Fit to image.
Cuando se ejecuta la
investigación, la imagen de
niveles de gris es segmentada,
de forma que solo los píxels
verdes (Valor 0) son
representados en negro. El
algoritmo Connectivity –
Binary devuelve el centro y el
recuadro envolvente de las
estructuras verdes.
Para analizar las estructuras rojas, poner los parámetros de Threshold Band,
threshold low y threshold high a 1 y 1; para azul, 2 y 2. Para analizar las
estructuras verdes y rojas a la vez, poner threshold low y threshold high a 0
y 1.
Max distance controla la distribución del color en el cubo de color 3D. Cuanto
mayor es max distance, mayor es el rango de colores que coincidirán en la
base de datos.
_____________________www.infaimon.com____________________ 50
visión artificial
_______________________________________________________________
5.-Calibración
Cualquier software de visión industrial, por defecto, realiza las medidas en
píxels. Sherlock dispone de un sistema que permte calibrar la imagen para
pasar los datos de pixels a un rango espacial.
_____________________www.infaimon.com____________________ 51
visión artificial
_______________________________________________________________
reales. Una ventana de imagen puede calibrarse mediante software o de forma
interactiva.
_____________________www.infaimon.com____________________ 52
visión artificial
_______________________________________________________________
La matriz de puntos de
los bordes encontrados
en cada ROI radial se
pasa como entrada a la
instrucción
Geometric:PtsToBestCi
rcle.
_____________________www.infaimon.com____________________ 53
visión artificial
_______________________________________________________________
Paso 3. Crear y rellenar un objeto calibrado
Clic en el botón
Add para crear un
objeto de
calibración vacío
_____________________www.infaimon.com____________________ 54
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 55
visión artificial
_______________________________________________________________
Este método requiere que se conozcan o se puedan calcular las relaciones
entre las distancias horizontales y verticales de la ventana de imagen con
respecto a las distancias en unidades reales; estas se suministran como
factores de escala a la instrucción IO:Calibration:Calibrate Using
Transformation Values.
_____________________www.infaimon.com____________________ 56
visión artificial
_______________________________________________________________
Una vez ejecutada la subrutina de calibración Calibration, pulsando la tecla
F11, las medidas de distancia punto a punto hechas en otra ventana de imagen
donde se aplica la calibración CalibarationA, tendrán como resultado unidades
calibradas.
_____________________www.infaimon.com____________________ 57
visión artificial
_______________________________________________________________
Calibración Manual
_____________________www.infaimon.com____________________ 58
visión artificial
_______________________________________________________________
6. Landmarks y Alineación
Una aplicación típica de visión artificial requiere el análisis de las mismas
estructuras en una serie de imágenes. Debido a la naturaleza de los equipos de
control del movimiento y de adquisición de imagen, o del propio objeto a
analizar en si mismo, las estructuras a analizar, raramente se encuentran en el
mismo sitio en cada imagen. Dado que una ROI, simplemente analiza los píxels
presentes, no hay forma de que conozca donde están los píxels correctos, un
desplazamiento o una rotación de los píxels a analizar pueden dar como
resultado un falso rechazo.
_____________________www.infaimon.com____________________ 59
visión artificial
_______________________________________________________________
Si el libro se desplaza de captura en captura, el código de barras puede que no
se encuentre dentro de la ROI, y por tanto no podrá ser leído.
Para asegurarse que la ROI analiza los píxels correctos, se puede crear un
esquema de alineación, para mover la ROI, con relación a uno o más puntos,
que pueden encontrarse en cada una de las imágenes a analizar.
_____________________www.infaimon.com____________________ 60
visión artificial
_______________________________________________________________
Si los píxels a analizar pueden sufrir rotación además de desplazamiento, son
necesarios dos puntos para calcular la rotación y el desplazamiento.
_____________________www.infaimon.com____________________ 61
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 62
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 63
visión artificial
_______________________________________________________________
la ROI rectangular que realice el algoritmo Barcode 1D. Si el libro se mueve a
mucha distancia en vertical, el código de barras puede salir de la región
ocupada por la ROI rectangular, y el algoritmo fallará.
Una forma útil de crear un landmark que pueda determinar los desplazamientos
horizontal y vertical, (sin rotación), consiste en aplicar una de las utilidades de
Búsqueda (Search), asumiendo que hay un solo patrón en el objeto que se
puede encontrar en cada imagen. En el libro, cada etiqueta tendrá los
caracteres “ISBN” debajo del código de barras, y se puede utilizar como
patrón, y el punto donde se encuentre el patrón puede utilizarse como
landmark.
_____________________www.infaimon.com____________________ 64
visión artificial
_______________________________________________________________
Es una práctica común poner las ROI que siguen a los landmark, para la
alineación, en una ventana de imagen distinta de la que contiene la ROI que
realice el trabajo real de la investigación.
_____________________www.infaimon.com____________________ 65
visión artificial
_______________________________________________________________
7. GUI
Esta sección describe la Interfaz de usuario de Sherlock 7.
Diseñada para facilitar el uso del programa, esta Interfaz consta de menús,
barras de herramientas, ayuda en línea y ventanas de diálogo.
Para facilitar la asimilación por parte del usuario, todas estas entidades tienen
el mismo sistema de funcionamiento que las ventanas de Windows.
7.1. Interfaz
Sherlock es un Entorno de Desarrollo Integrado (EDI) completo. En él se puede
diseñar, probar, corregir y ejecutar aplicaciones de visión artificial.
_____________________www.infaimon.com____________________ 66
visión artificial
_______________________________________________________________
Program
ROIs
Watch
_____________________www.infaimon.com____________________ 67
visión artificial
_______________________________________________________________
Parar/Abortar
Copiar/Pegar Debugging
la Investigación
Elementos del programa
_____________________www.infaimon.com____________________ 68
visión artificial
_______________________________________________________________
Los botones de menús File, Edit y Run abren y guardan Investigaciones, copian
elementos del Programa y ejecutan la Investigación.
_____________________www.infaimon.com____________________ 69
visión artificial
_______________________________________________________________
Una investigación tiene como mínimo una ventana de imagen. Puede tener
múltiples, no hay límite en el número de ventanas de imagen. Cada ventana de
imagen puede contener una sola imagen.
Para configurar una imagen hay que hacer doble clic en una ventana de
imagen con el objetivo de mostrar su cuadro de diálogo Options.
• El nombre de la
ventana de imagen
(imgB)
• Posibles Fuentes de
imagen:
- Una cámara
- Una segunda ventana.
- Una composición de imá-
genes color de 24-bit
desde planos monocromos
de 8-bit
- Un archivo de imagen
- Una secuencia de ar-
chivos de imágenes, para
simular la captura real-time
de una entrada de cámara.
_____________________www.infaimon.com____________________ 70
visión artificial
_______________________________________________________________
7.2.1. La barra de herramientas de la ventana de imagen
Mostramos a continuación la descripción de la barra de herramientas.
Mostrar el
diálogo Iniciar/Parar captura de cámara para esta
Options ventana de imagen sin procesar
Añadir ROIs
Guardar imagen en
un archivo
Guardar imagen en un
archivo con gráficos
Para añadir una ventana de imagen nueva, es necesario hacer click en el botón
_____________________www.infaimon.com____________________ 71
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 72
visión artificial
_______________________________________________________________
7.3.1. ROIs Área
En las ROI de Área se procesan los píxels interiores del área incluyendo los de
los bordes.
_____________________www.infaimon.com____________________ 73
visión artificial
_______________________________________________________________
Simple
Punto Línea Poli-línea Arco Circunferencia
Compuesta
Rastrillo Radial Arco iris Ojo de Buey
Las ROI Circunferencia, Arco iris y Ojos de Buey, procesan los píxels a
lo largo de sus líneas, no dentro o entre ellas.
Para añadir una ROI a una ventana de imagen, debe hacer clic en el botón
ROI’s, en la barra de herramientas de la ventana, y después hacer clic en la
ventana de imagen, para definir la posición y tamaño de la misma. Diferentes
ROIs requieren diferentes números de clic para definir su tamaño y posición.
Punto Un Clic.
Línea Dos clic, uno para cada extremo de la línea.
Poli-línea n clics, uno para cada vértice de la línea y doble clic izquierdo
para completar la línea.
Arco Tres clics, uno para cada límite del arco y uno que define la
curvatura.
Circunferencia Dos clics, uno para el centro y otro que define el radio.
Rastrillo Dos clics, uno para cada esquina del rectángulo que lo define.
Radial Tres clics, uno para situar el centro de la “rueda”, y dos más
(Spoke) para situar el inicio y el fin del radio.
Arco Iris Cuatro clics, uno para cada extremo del arco iris, uno para
definir la curvatura del arco interior o exterior, y uno para
definir la concentricidad del arco interno o externo.
Ojo de Buey Tres clics, uno para posicionar el centro del ojo de buey, uno
para definir el radio del círculo interno o externo y uno para
definir el otro radio interior o exterior.
_____________________www.infaimon.com____________________ 74
visión artificial
_______________________________________________________________
Rectángulo Dos clics, uno para cada esquina opuesta.
Anillo Cuatro clics, uno para cada extremo de un arco, uno para
definir el arco interno o externo y uno para definir el arco
externo o interno
Polígono n clics, uno para cada vértice del polígono y un doble clic
izquierdo para completar el polígono.
Toroide Tres clics, uno para posicionar el centro del círculo, uno para
definir el radio interno o externo del círculo y uno para definir el
radio externo o interno del círculo.
Se asignan nombres por defecto a las ROIs que indican su tipo y orden de
creación: RectA, TorusA, RectB, RectC, SpokeA, etc. Para renombrar una
ROI, deberá hacer doble clic en ella en la ventana de imagen o hacer clic sobre
la herramienta en el panel de Programa para abrir el dialogo Edit.
_____________________www.infaimon.com____________________ 75
visión artificial
_______________________________________________________________
7.3.3. Algoritmos
Para analizar los píxels definidos por una ROI, es necesario seleccionar un
algoritmo del cuadro de diálogo Edit de las ROI. Un algoritmo extrae
información de los píxels de una ROI, pero no modifica su contenido.
_____________________www.infaimon.com____________________ 76
visión artificial
_______________________________________________________________
Cada ROI puede ejecutar hasta tres algoritmos distintos. Los algoritmos se
ejecutan de forma secuencial e independiente; la ejecución de un algoritmo no
tiene relación con otro, excepto si se pasan datos de salida de un algoritmo a la
entrada de otro.
El uso más común de la ROI línea es para encontrar los límites (edges). Estos
límites se emplean tanto para la detección de defectos como para la medida.
La mayoría de los algoritmos de las ROI de Línea que buscan límites tienen
parámetros para determinar que se interpreta como un límite.
_____________________www.infaimon.com____________________ 77
visión artificial
_______________________________________________________________
o bien seleccionar una variable que contiene el valor del parámetro (var).
Cada ROI puede ejecutar hasta siete pre-procesadores distintos. Los pre-
procesadores se ejecutan secuencialmente; las modificaciones de los píxels
_____________________www.infaimon.com____________________ 78
visión artificial
_______________________________________________________________
realizados por un preprocesador previo afectan al siguiente, por tanto el orden
en algunas ocasiones es crítico.
Nota:
Use el botón Use los botones
para para cambiar el
borrar un orden de ejecución
preproceso. de los preprocesos.
_____________________www.infaimon.com____________________ 79
visión artificial
_______________________________________________________________
7.3.5 Posicionados de ROIs
Mediante la siguiente ventana es posible ajustar de forma precisa la posición
de una ROI, accediendo por la pestaña Position del cuadro de diálogo Edit.
Mover la ROI al
centro de la
Mover la ventana de imagen
ROI en
cualquier Expandir la ROI
dirección para enmarcar la
ventana de imagen
_____________________www.infaimon.com____________________ 80
visión artificial
_______________________________________________________________
Índice Coordenada
0000 0001 0002 0003 Nota
Tipo ROI
Punto(Point) Punto
Línea (Line) Inicio Fin
Circunferencia Centro Punto en
(Circle) circunferencia
Arco (Arc) Inicio Fin Punto en
el arco
Rastrillo (Rake) Arriba Abajo
Izquierda Derecha
Radial (Spoke) Centro Punto de Punto
inicio de una final de
línea una línea
Arco iris (Rainbow) Inicio arco Fin de arco Punto en Punto en 1
arco arco
interior o interior o
exterior exterior
Ojo de Buey Centro Punto en Punto en 2
(Bullseye) circulo interior circulo
o exterior exterior o
interior
Rectángulo Arriba Abajo
izquierda derecha
Anillo (Annulus) Inicio de Fin de arco Punto en Punto en 1
arco arco arco
interior o exterior o
exterior interior
Toroide (Torus) Centro Punto en Punto en 2
circulo interior circulo
o exterior exterior o
interior
Área Circular (Circle Centro Punto en
Area) círculo
Polígono y Poli-línea Uno para cada vértice, incluyendo los puntos de inicio y fin.
Notas:
1. El punto 0002 debe estar en el arco interno y el punto 0003 debe estar en el
arco externo, o viceversa, dependiendo del modo de creación de la ROI.
2. El punto 0001 debe estar en el círculo interno y el punto 0002 debe estar en
el círculo externo, o viceversa, dependiendo del modo de creación de la ROI.
_____________________www.infaimon.com____________________ 81
visión artificial
_______________________________________________________________
Es importante reseñar que dentro del menú Edit de la ROIs, el botón Snap
adquiere una nueva imagen en la ventana de imagen, pero no aplica los pre-
procesadores o algoritmos de la ROI.
_____________________www.infaimon.com____________________ 82
visión artificial
_______________________________________________________________
Se puede extraer información acerca de los píxels en la ROI en la pestaña
Properties del cuadro de diálogo Edit.
Para una ROI del tipo línea simple en una imagen monocromo (línea, arco,
circunferencia, poli-línea), el botón Histogram se reemplaza por el botón
Profile. Cuando se hace clic en este botón, se muestran las gráficas de la
intensidad de los píxels y de su gradiente (rango de cambio).
_____________________www.infaimon.com____________________ 83
visión artificial
_______________________________________________________________
Con este gráfico podemos interpretar que desde el píxel 0 hasta el píxel 20, la
intensidad de los píxels es de aproximadamente 200 (la intensidad de los píxels
a lo largo de la LineA esta justo por encima de 200). Sobre el píxel 21 (el borde
oscuro izquierdo), la intensidad cae a 75, después vuelve a subir a 150 (la zona
gris dentro de la cruz). Después vuelve a bajar a 75 en el píxel 57 (el borde
oscuro derecho), y después vuelve a subir aproximadamente a 200 hasta el
final de la línea.
_____________________www.infaimon.com____________________ 84
visión artificial
_______________________________________________________________
Para las imágenes de color, el histograma muestra la distribución de los planos
de color rojo, verde y azul de los píxels contenidosen dicha ROI.
_____________________www.infaimon.com____________________ 85
visión artificial
_______________________________________________________________
Tanto para imágenes monocromo como color, el botón Intensity muestra un
mapa de intensidad 3D de los píxels de la ROI.
Se puede rotar el gráfico 3D con el ratón. Estos gráficos pueden ser útiles para
hacer informes aunque esta información no es exportable al programa.
_____________________www.infaimon.com____________________ 86
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 87
visión artificial
_______________________________________________________________
7.4. Programa, Readings y Variables
A medida que se añaden ROIs a una ventana de imagen y se definen
algoritmos y pre-procesos en las ROIs, aparecen nuevas entradas en el panel
Program. Cuando se ejecuta la investigación, los elementos del programa se
ejecutan de forma secuencial y en orden descendente, de arriba abajo. Este
modo de ejecución no cambia a menos que se añadan instrucciones que
cambien este orden.
Ejemplo:
Notas:
_____________________www.infaimon.com____________________ 88
visión artificial
_______________________________________________________________
una matriz de puntos centroid[] (las coordenadas de los centroides de
todos los objetos), una matriz de números area[] (las áreas de todos los
objetos), etc.
_____________________www.infaimon.com____________________ 89
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 90
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 91
visión artificial
_______________________________________________________________
7.5. Variables
De la misma forma que en cualquier otro entorno de programación, las
variables en Sherlock, se usan como contenedores temporales de datos. Los
tipos de variables que se pueden crear son del mismo tipo que los de los
algoritmos readings generados: Numérico, Booleano, String, Punto y Línea
(individuales o matrices para todos los tipos).
Sin embargo, es posible modificar datos en variables, por tanto, uno de los
usos más comunes de las variables, es como asignación de nuevos valores de
los readings.
_____________________www.infaimon.com____________________ 92
visión artificial
_______________________________________________________________
Para guardar el valor de
un reading en una
variable, hay que hacer
doble clic en el reading
para mostrar su cuadro de
diálogo de edición. La lista
Store in variable muestra
solo las variables del
mismo tipo que el reading.
(arrObjectAreas y varD
son ambos de tipo N[ ] )
_____________________www.infaimon.com____________________ 93
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 94
visión artificial
_______________________________________________________________
7.6. Instrucciones
Las Instrucciones se utilizan para múltiples tareas; manipular los datos, hacer
cálculos, controlar el flujo del programa, leer en los puertos de entrada y
escribir en los puertos de salida, abrir y escribir archivos y realizar operaciones
adcionales de programación.
_____________________www.infaimon.com____________________ 95
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 96
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________ 97
visión artificial
_______________________________________________________________
Si el resultado de la expresión
lógica es cierta, cuando la
instrucción se ejecute, se seguirá la
rama “If” de If-Else. Si el resultado
es falso, se seguirá la rama “Else”.
(Display error message y Display
success message son instancias
de la instrucción IO:Reporter:Print.
_____________________www.infaimon.com____________________ 98
visión artificial
_______________________________________________________________
Nota: Hay que tener cuidado con los bucles while para evitar bucles infinitos.
_____________________www.infaimon.com____________________ 99
visión artificial
_______________________________________________________________
Una Label es
una instrucción
“haz nada” que
se puede in-
sertar en cual-
quier parte y
renombrarse
como nada.
El cuadro de
diálogo de la
instrucción
Jump muestra
todos los Label.
La expresión lógica While se ha reescrito para ver si intIndex está dentro del
rango de la matriz y si la última área leída es igual o mayor que 5. Si ambas
cláusulas se evalúan como falsas se saldrá del bucle. (intArea se ha
inicializado con un valor alto, para asegurarse que la primera vez que se evalúa
la expresión lógica, la cláusula [intArea]>=5 se evalúa como True.)
_____________________www.infaimon.com____________________100
visión artificial
_______________________________________________________________
Una instrucción Jump puede saltar a una Label solo si las dos
instrucciones están en la misma subrutina.
Las Labels pueden utilizarse también para introducir comentarios breves en los
programas.
7.6.2. Subrutinas
Para facilitar el seguimiento del programa, a menudo es conveniente o
necesario dividirlo en subrutinas.
_____________________www.infaimon.com____________________101
visión artificial
_______________________________________________________________
En esta estructura de
programa, cuando ejecute esta
investigación en modo
continuo:
_____________________www.infaimon.com____________________102
visión artificial
_______________________________________________________________
Sin embargo, el caso de este ejemplo,
la instrucción Return es necesaria si
no se quiere la prueba de anchura
cuando la de altura falla. (No importa
si ésta es un buena o mala subrutina,
solo es un ejemplo!)
Las subrutinas pueden anidarse tanto como sea necesario – Main puede
llamara a SubA, ésta puede llamar a SubB, que puede llamar a SubC, etc. –
pero para clarificar el programa no es conveniente anidar más de dos o tres
niveles de subrutinas distintas.
_____________________www.infaimon.com____________________103
visión artificial
_______________________________________________________________
Cada archivo abierto debe
asociarse con un “file handle”. Se
pueden activar hasta 10 handles
(0 – 9). Se debe especificar un
nombre de archivo valido
previamente creado en nuestro
sistema.
• Se abre el archivo
C:\Test\Width.txt
• ImgA adquiere una imagen
• RectA ejecuta sus
preprocesos y algoritmos
• MeanArrA calcula el promedio
de los valores en width[]
• Si el promedio es menor de 10,
se llama a la subrutina
Average width too low; sinó
el promedio se escribe en el
archivo.
• La investigación vuelve al inicio
y repite el proceso.
Esta configuración es válida, sin embargo, no tiene sentido abrir el fichero cada
vez que se pasa por el inicio del programa. (De hecho el programa funcionará
_____________________www.infaimon.com____________________104
visión artificial
_______________________________________________________________
correctamente, pero cada ejecución de Open después de la primera generará
un warning en tiempo de ejecución).
Si se selecciona Execute
before continuous
investigation, la subrutina se
llama automáticamente cada
vez que se haga clic en el
botón Run continuously de la
barra de herramientas
principal.
_____________________www.infaimon.com____________________105
visión artificial
_______________________________________________________________
Ventana Monitor
Muestra información en tiempo de ejecución, tal como mensajes de alerta,
errores y tiempos de proceso. Para ver el Monitor, seleccione ViewMonitor
del menú principal.
Guardar Seleccionar
Abrir / Cerrar
Limpiar contenido en
reporting Monitor archivo opciones
display visualización Puede seleccionar para ver
solamente la información que
es de su interés.
_____________________www.infaimon.com____________________106
visión artificial
_______________________________________________________________
Ventana Reporter
Guardar contenido en un
Borrar
Archivo
contenido
_____________________www.infaimon.com____________________107
visión artificial
_______________________________________________________________
7.8. Depuración (Debugging)
Cuando se desarrolla y prueba una investigación, es deseable – necesario en
muchos casos - ir paso a paso en la ejecución del programa, o muy
lentamente, para encontrar la fuente de un posible problema de programación.
Se pueden utilizar distintas opciones del debug de Sherlock, como por ejemplo
breakpoints, modo slow, y otras opciones de ejecución.
Modo ejecución Resaltar
paso a paso instrucciones
ejecutadas
_____________________www.infaimon.com____________________108
visión artificial
_______________________________________________________________
(En ambos modos, paso a paso y lento, haciendo un clic en el botón run
continuously tiene el mismo efecto que hacer clic en el botón run once; la
investigación se ejecuta una sola vez.)
7.8.4. Breakpoints
Un breakpoint marca una instrucción en la que la ejecución se para cuando
llega a ella.
Para añadir un
breakpoint, hay que
hacer clic derecho
en la instrucción, y
hacer clic en el
menú desplegable
Toggle Breakpoint.
Se marca el
breakpoint con un
punto rojo.
_____________________www.infaimon.com____________________109
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________110
visión artificial
_______________________________________________________________
7.9. Imágenes
En Sherlock podemos trabajar de distinta forma con las fuentes de imagen.
Esto nos cargará una imagen sobre la que podremos trabajar con Sherlock sin
ningún tipo de limitación.
Otra posibilidad es
trabajar con una
secuencia de imá-
genes, de forma que
podamos simular el
funcionamiento del
programa de forma
automática.
_____________________www.infaimon.com____________________111
visión artificial
_______________________________________________________________
Una vez tengamos estos archivos de configuración ya creados, deberemos ir a
la opción Sherlock/options/adquisition del menú principal y cuando hagamos
clic en acquisition se abrirá la siguiente ventana, y para acceder al hardware
debemos seguir los siguientes pasos:
• Img Windows:
• Composed:
_____________________www.infaimon.com____________________112
visión artificial
_______________________________________________________________
Composed nos permite cambiar los canales tanto de RGB, YUV32 o
YURBCR32 de orden y modificar la imagen. Esto nos puede ser de gran
utilidad con tarjetas no convencionales que gestionen de forma distinta los
canales RGB.
_____________________www.infaimon.com____________________113
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________114
visión artificial
_______________________________________________________________
La ventana código
_____________________www.infaimon.com____________________115
visión artificial
_______________________________________________________________
Si se escribe Vars. (con el punto) en
la ventana, las variables se muestran
en una lista desplegable.
Si arrastra Vars desde la lista
Predefined items a la ventana code,
y después se escribe el punto, se
mostrará la misma lista.
Si arrastra una variable desde la
ventana variable, Vars. Automática-
mente estará pendiente.
Ejemplo:
:
• Un modulo JavaScript solo tiene acceso a variables Sherlock, no a
readings.
• Una investigación Sherlock no puede acceder a variables JavaScript.
• Un modulo JavaScript no puede llamar a una subrutina Sherlock,
tampoco interactuar de otra forma con una investigación (excepto
leyendo y escribiendo variables y llamando a Sherlock.Monitor).
• Archivos abiertos y manipulados por Sherlock con la instrucción IO:File
no pueden accederse simultáneamente con operaciones por el
JavaScript System (FileClose, FileAppend, etc.), y viceversa.
_____________________www.infaimon.com____________________116
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________117
visión artificial
_______________________________________________________________
8. Controles ActiveX
8.1. Introducción
En muchas de las aplicaciones Sherlock, se crea un interface gráfico mediante
entornos de programación VB, C++, C#. La mayoría de las veces, las GUI de
Sherlock son de VB, C++ o C# con ellas se controlan los procesos de Sherlock,
apagado / encendido, modificar variables / parámetros / valores, mostrar
resultados e imágenes.
8.1.1. Ejemplos
El directorio de ejemplos contiene proyectos con Visual Studio para realizar una
Interface gráfica a medida del usuario. Podremos encontrar también ejemplos
con VB6, VB7 y C#.
Nota: La mayoría de los archivos de los proyectos están en “solo lectura”, para
poder modificarlos, tendremos que modificar este atributo del archivo.
_____________________www.infaimon.com____________________118
visión artificial
_______________________________________________________________
IpeDspCtrl
IpeDspCtrl
_____________________www.infaimon.com____________________119
visión artificial
_______________________________________________________________
Las funciones que se deben utilizar en todos los GUIs son las siguientes:
• Inicialización de Sherlock.
• Finalización de Sherlock.
• Carga del programa de Sherlock.
• Creación de ventanas de demostración y conexión de ellos a ventanas
de imagen.
• Lectura y escritura de variables.
_____________________www.infaimon.com____________________120
visión artificial
_______________________________________________________________
<SP7HOME>\Programs.
objIpeEngCtrl.InvLoad("Simple0.ivs")
'connect display
AxIpeDspCtrl1.ConnectEngine(objIpeEngCtrl.GetEngineObj())
AxIpeDspCtrl1.ConnectImgWindow("imgA")
Las variables constituyen una parte "de la cola" que une (conecta) las partes
diferentes del sistema. La GUI utiliza variables para recuperar resultados de
tratamiento y ajustar parámetros. Cualquier resultado y parámetros que una
GUI manipule / lea, tienen que estar unidas (conectadas) a variables. Los
resultados y parámetros de tratamiento pueden ser recuperados y ajustados
pero siempre se deben unir a variables previamente definidas.
‘reading
objIpeEngCtrl.VarGetDouble("varA", v)
‘setting
objIpeEngCtrl.VarSetDouble("varA", 0.0)
_____________________www.infaimon.com____________________121
visión artificial
_______________________________________________________________
_____________________www.infaimon.com____________________122
visión artificial
_______________________________________________________________
ADENDUM
_____________________www.infaimon.com____________________123
visión artificial
_______________________________________________________________
HRESULT VarSetBool ([in] BSTR bstrName,[in] VARIANT_BOOL val,[out,
retval] I_ENG_ERROR *pRet)
HRESULT VarGetBool ([in] BSTR bstrName,[out] VARIANT_BOOL *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT VarSetString ([in] BSTR bstrName,[in] BSTR val,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarGetString ([in] BSTR bstrName,[out] BSTR *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetPoint ([in] BSTR bstrName,[in, out]I_POINT *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarGetPoint ([in] BSTR bstrName,[out] I_POINT *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetLine ([in] BSTR bstrName,[in, out]I_LINE *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarGetLine ([in] BSTR bstrName,[out] I_LINE *pval,[out, retval]
I_ENG_ERROR *pRet)
HRESULT VarSetDoubleArray ([in] BSTR bstrName,[in]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetDoubleArray ([in] BSTR bstrName,[out]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarSetBoolArray ([in] BSTR bstrName,[in]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT VarGetBoolArray ([in] BSTR bstrName,[out]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT VarSetStringArray ([in] BSTR bstrName,[in]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetStringArray ([in] BSTR bstrName,[out]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarSetPointArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetPointArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarSetLineArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT VarGetLineArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT SoCamSnap ([in] BSTR bstrSo,[out, retval] I_ENG_ERROR *pRet)
HRESULT SoGetSize ([in] BSTR bstrSo,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)
HRESULT SoLiveSet ([in] BSTR bstrSo, BOOL bEnable,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoCameraSet ([in] BSTR bstrSo, long nCam,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoCameraGet ([in] BSTR bstrSo,[out] long *pnCam,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoImageSave ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
_____________________www.infaimon.com____________________124
visión artificial
_______________________________________________________________
HRESULT SoImageLoad ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoSourceGet ([in] BSTR bstrSo,[out] BSTR *pbstrSource,[out,
retval] I_ENG_ERROR *pRet)
HRESULT SoTriggerSet ([in] BSTR bstrSo, BOOL bExtTrig,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoTriggerGet ([in] BSTR bstrSo,[out] BOOL *pbExtTrig,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoTimeoutSet ([in] BSTR bstrSo, long nTimeoutMs,[out, retval]
I_ENG_ERROR *pRet)
HRESULT SoTimeoutGet (BSTR bstrSo,[out] long *pnTimeoutMs,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiMove ([in] BSTR bstrRoi, long nDx, long nDy,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiCoordMove ([in] BSTR bstrRoi, long nCoordIndex, long nDx, long
nDy,[out, retval] I_ENG_ERROR *pRet)
HRESULT RoiCoordGet ([in] BSTR bstrRoi, long nCoordIndex,[out] long
*pnCoord0,[out] long *pnCoord1,[out, retval] I_ENG_ERROR *pRet)
HRESULT RoiCoordSet ([in] BSTR bstrRoi, long nCoordIndex, long nCoord0,
long nCoord1,[out, retval] I_ENG_ERROR *pRet)
HRESULT RoiCoordArrayGet ([in] BSTR bstrRoi,[out]
SAFEARRAY(long)*psanCoordsX,[out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT RoiCoordArraySet ([in] BSTR bstrRoi,[in, out]
SAFEARRAY(long)*psanCoordsX,[in, out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT RoiShowAnnotGet ([in] BSTR bstrRoi,[out] BOOL *pbFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT RoiShowAnnotSet ([in] BSTR bstrRoi, BOOL bFlag,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiShowOutlineGet ([in] BSTR bstrRoi,[out] BOOL *pbFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT RoiShowOutlineSet ([in] BSTR bstrRoi, BOOL bFlag,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiSelectedGet ([in] BSTR bstrRoi,[out] BOOL *pbFlag,[out, retval]
I_ENG_ERROR *pRet)
HRESULT RoiSelectedSet ([in] BSTR bstrRoi, BOOL bFlag,[out, retval]
I_ENG_ERROR *pRet)
Create/Terminate engine
Functions
HRESULT IEngine::EngInitialize ([out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::EngTerminate ([out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::GetEngineObj ([out, retval] LONG *pnEngObj)
_____________________www.infaimon.com____________________125
visión artificial
_______________________________________________________________
Function Documentation
HRESULT IEngine::EngInitialize( [out, retval] I_ENG_ERROR * pRe ) [inherited]
t
EngInitialize Initializes the Engine.
Parameters:
pRet updated with I_OK on success
HRESULT IEngine::EngTerminate( [out, retval] I_ENG_ERROR * pRe ) [inherited]
t
EngTerminate Terminats the Engine
Parameters:
pRet updated with I_OK on success
HRESULT IEngine::GetEngineObj( [out, retval] LONG * pnEngOb ) [inherited]
j
GetEngineObj
This function is only used to connect Display OCX to engine when develiping
custom GUI
Returns:
Internal engine handle
Program management
Functions
HRESULT IEngine::InvLoad ([in] BSTR bstrFile,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::InvModeGet ([out] I_MODE *pnMode,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::InvModeSet ([in] I_MODE nMode,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::InvSave ([in] BSTR bstrFile,[out, retval] I_ENG_ERROR
*pRet)
Function Documentation
HRESULT IEngine::InvLoad( [in] BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
InvLoad Load program. Program name can contain full path, or just file name.
In the latter case engine will look for specified file in its program directory
Parameters:
_____________________www.infaimon.com____________________126
visión artificial
_______________________________________________________________
bstrFile file name
pRet updated with I_OK on success See also:
InvModeSet
HRESULT IEngine::InvModeGet( [out] I_MODE * pnMode
,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
InvModeGet Get engine run mode.
Parameters:
pnMode current engine run mode
pRet updated with I_OK on success
See also:
InvModeSet
HRESULT ( [in] I_MODE
nMode,
IEngine::InvModeSet
[out, retval] I_ENG_ERROR * pRet
) [inherited]
InvModeSet Set engine run mode. Following modes are supported:
I_EXE_MODE_ONCE - run program once I_EXE_MODE_CONT - run program
continuously I_EXE_MODE_CALIB- execute subroutines marked with
calibration flag I_EXE_MODE_HALT - abort program immediately at any
instruction I_EXE_MODE_HALT_AFTER_ITERATION - halt running after
finishing current program iteration
When requesting I_EXE_MODE_HALT engine may halt after returning from this
call. It is necessary to loop processing events and wait until InvModeGet returns
I_EXE_MODE_HALT
Parameters:
nMode new run mode
pRet updated with I_OK on success See also:
InvModeGet
HRESULT IEngine::InvSave( [in] BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
InvSave Save program
Parameters:
bstrFile file name
pRet updated with I_OK on success
Camera management
Functions
HRESULT IEngine::CamAcqAbort ([out, retval] I_ENG_ERROR *pRet)
_____________________www.infaimon.com____________________127
visión artificial
_______________________________________________________________
HRESULT IEngine::CamCountGet ([out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::CamSizeGet (long nCam,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)
Function Documentation
HRESULT IEngine::CamAcqAbort( [out, retval] I_ENG_ERROR * pRe ) [inherited]
t
CamAcqAbort Abort camera acquisiton; Usefull to abort pending hardware
trigger acquisiton. All abort all penging acquisitions.
Parameters:
pRet updated with I_OK on success
HRESULT IEngine::CamCountGet( [out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
CamCountGet Get number of cameras on the system
Parameters:
pnVal updated with number of cameras
pRet updated with I_OK on success
HRESULT IEngine::CamSizeGet( long nCam,
[out] long * pnWidth,
[out] long * pnHeight,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
CamSizeGet Get given camera sensor size
Parameters:
nCam zero based camera index
pnWidth updated with camera width (pixels)
pnHeight updated with camera height (pixels)
pRet updated with I_OK on success
Digital IO management
Functions
HRESULT IEngine::DigInIOCountGet ([out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigInIOGet (long nChannel,[out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigInIOWaitForPulse (long nChannel, BOOL bHighPulse,
long nTimeout,[out] BOOL *bTimeoutDetected,[out, retval]
I_ENG_ERROR *pRet)
_____________________www.infaimon.com____________________128
visión artificial
_______________________________________________________________
HRESULT IEngine::DigInIOWaitForState (long nChannel, BOOL bVal, long
nTimeout,[out] BOOL *bTimeoutDetected,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOAsyncPulse (long nChannel, BOOL bHighPulse,
long nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOCountGet ([out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOGet (long nChannel,[out] long *pnVal,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOPulse (long nChannel, BOOL bHighPulse, long
nPulseWidth,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOScheduleAsyncPulse (long nChannel, BOOL
bHighPulse, long nDelay, long nPulseWidth,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::DigOutIOSet (long nChannel, long nVal,[out, retval]
I_ENG_ERROR *pRet)
Function Documentation
HRESULT IEngine::DigInIOCountGet( [out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigInIOCountGet Returns the number of inputs avialable.
Parameters:
pnVal pointer to a variable receiving number of inputs
pRet updated with I_OK on success
HRESULT IEngine::DigInIOGet( long nChannel,
[out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigInIOGet Returns current state of the given output.
Parameters:
nChannel input index
pnVal pointer to a variable receiving current input state
pRet updated with I_OK on success
HRESULT IEngine::DigInIOWaitForPulse( long nChannel,
BOOL bHighPulse,
long nTimeout,
[out] BOOL * bTimeoutDetected,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigInIOWaitForPulse Waits until a given input pulses in a requested way
Parameters:
_____________________www.infaimon.com____________________129
visión artificial
_______________________________________________________________
nChannel input index
bHighPulse pulse we will wait for (TRUE: high->low, FALSE:
low->high)
nTimeout maximum wait time in miliseconds (-1 for an infinite
wait)
bTimeoutDetected set to TRUE is function timeout was detected
before detecting requested state
pRet updated with I_OK on success
HRESULT IEngine::DigInIOWaitForState( long nChannel,
BOOL bVal,
long nTimeout,
[out] BOOL * bTimeoutDetected,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigInIOWaitForState Waits until a given input enters requested state
Parameters:
nChannel input index
bVal input state that we will wait for
nTimeout maximum wait time in miliseconds (-1 for an infinite
wait)
bTimeoutDetected set to TRUE is function timeout was detected
before detecting requested state
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOAsyncPulse( long nChannel,
BOOL bHighPulse,
long nPulseWidth,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigOutIOAsyncPulse Pulse a digital output
Note:
This is a asynchronous pulse, Sherlock investigation will continue
execution after starting a pulse. The actual pulse will be performed in
another thread of execution.
See also:
DigOutIOPulse DigOutIOScheduleAsyncPulse
Parameters:
nChannel channel index
bHighPulse pulse polarity (TRUE for high-sleep-low "_-_", false for
low-sleep-high "-_-")
nPulseWidth - pulse width in miliseconds
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOCountGet( [out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigOutIOCountGet Get number of digital outputs
Parameters:
_____________________www.infaimon.com____________________130
visión artificial
_______________________________________________________________
pnVal updated with output count
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOGet( long nChannel,
[out] long * pnVal,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigOutIOGet Gets digital output
Parameters:
nChannel channel index
pnVal pointer to a variable receiving current output value
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOPulse( long nChannel,
BOOL bHighPulse,
long nPulseWidth,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigOutIOPulse Pulse a digital output
Note:
This is a synchronous pulse, Sherlock investigation will pause until the
pulse is finished.
See also:
DigOutIOAsyncPulse
Parameters:
nChannel channel index
bHighPulse pulse polarity (TRUE for high-sleep-low "_-_", false for
low-sleep-high "-_-")
nPulseWidth - pulse width in miliseconds
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOScheduleAsyncPulse( long nChannel,
BOOL bHighPulse,
long nDelay,
long nPulseWidth,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigOutIOScheduleAsyncPulse Schedule a digital output pulse
Note:
This function will schedule a synchronous pulse that will start a "nDelay"
number of miliseconds from the moment call is executed. Sherlock
investigation will continue execution after starting a pulse. The actual
pulse will be performed in another thread of execution.
See also:
DigOutIOPulse DigOutIOAsyncPulse
Parameters:
_____________________www.infaimon.com____________________131
visión artificial
_______________________________________________________________
nChannel channel index
bHighPulse pulse polarity (TRUE for high-sleep-low "_-_", false for
low-sleep-high "-_-")
nDelay - delay before starting the pulse
nPulseWidth - pulse width in miliseconds
pRet updated with I_OK on success
HRESULT IEngine::DigOutIOSet( long nChannel,
long nVal,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
DigOutIOSet Set a digital output
Parameters:
nChannel channel index
nVal new value (0 or 1)
pRet updated with I_OK on success
Variable management
Functions
HRESULT IEngine::VarGetBool ([in] BSTR bstrName,[out] VARIANT_BOOL
*pval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetBoolArray ([in] BSTR bstrName,[out]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::VarGetDouble ([in] BSTR bstrName,[out] double *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetDoubleArray ([in] BSTR bstrName,[out]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetLine ([in] BSTR bstrName,[out] I_LINE *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetLineArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetPoint ([in] BSTR bstrName,[out] I_POINT *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetPointArray ([in] BSTR bstrName,[out]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetString ([in] BSTR bstrName,[out] BSTR *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarGetStringArray ([in] BSTR bstrName,[out]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetBool ([in] BSTR bstrName,[in] VARIANT_BOOL
val,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetBoolArray ([in] BSTR bstrName,[in]
SAFEARRAY(VARIANT_BOOL)*paval,[out, retval] I_ENG_ERROR
*pRet)
_____________________www.infaimon.com____________________132
visión artificial
_______________________________________________________________
HRESULT IEngine::VarSetDouble ([in] BSTR bstrName,[in] double val,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetDoubleArray ([in] BSTR bstrName,[in]
SAFEARRAY(double)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetLine ([in] BSTR bstrName,[in, out]I_LINE *pval,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetLineArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_LINE)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetPoint ([in] BSTR bstrName,[in, out]I_POINT
*pval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetPointArray ([in] BSTR bstrName,[in]
SAFEARRAY(I_POINT)*paval,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetString ([in] BSTR bstrName,[in] BSTR val,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::VarSetStringArray ([in] BSTR bstrName,[in]
SAFEARRAY(BSTR)*paval,[out, retval] I_ENG_ERROR *pRet)
Function Documentation
HRESULT IEngine::VarGetBool( [in] BSTR bstrName
,
[out] VARIANT_BOOL * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetBool
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetBoolArray( [in] BSTR bstrName
,
[out] SAFEARRAY(VARIANT_BOOL)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetBoolArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetDouble( [in] BSTR bstrName
,
[out] double * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetDouble
Parameters:
_____________________www.infaimon.com____________________133
visión artificial
_______________________________________________________________
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetDoubleArray( [in] BSTR bstrName
,
[out] SAFEARRAY(double)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetDoubleArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetLine( [in] BSTR bstrName
,
[out] I_LINE * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetLine
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT IEngine::VarGetLineArray( [in] BSTR bstrName
,
[out] SAFEARRAY(I_LINE)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetLineArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetPoint( [in] BSTR bstrName
,
[out] I_POINT * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetPoint
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
_____________________www.infaimon.com____________________134
visión artificial
_______________________________________________________________
HRESULT ( [in] BSTR bstrName
IEngine::VarGetPointArray ,
[out] SAFEARRAY(I_POINT)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetPointArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarGetString( [in] BSTR bstrName
,
[out] BSTR * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetString
Parameters:
bstrName variable name
pval pointer to a variable receiving value
pRet updated with I_OK on success
HRESULT ( [in] BSTR bstrName
IEngine::VarGetStringArray ,
[out] SAFEARRAY(BSTR)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarGetStringArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetBool( [in] BSTR bstrName
,
[in] VARIANT_BOOL val,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetBool
Parameters:
bstrName variable name
val new value
pRet updated with I_OK on success
_____________________www.infaimon.com____________________135
visión artificial
_______________________________________________________________
HRESULT IEngine::VarSetBoolArray( [in] BSTR bstrName
,
[in] SAFEARRAY(VARIANT_BOOL)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetBoolArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetDouble( [in] BSTR bstrName
,
[in] double val,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetDouble
Parameters:
bstrName variable name
val new value
pRet updated with I_OK on success
HRESULT ( [in] BSTR bstrName
IEngine::VarSetDoubleArray ,
[in] SAFEARRAY(double)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetDoubleArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetLine( [in] BSTR bstrName
,
[in, out] I_LINE * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetLine
Parameters:
bstrName variable name
pval pointer to new value
pRet updated with I_OK on success
_____________________www.infaimon.com____________________136
visión artificial
_______________________________________________________________
HRESULT IEngine::VarSetLineArray( [in] BSTR bstrName
,
[in] SAFEARRAY(I_LINE)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetLineArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetPoint( [in] BSTR bstrName
,
[in, out] I_POINT * pval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetDouble
Parameters:
bstrName variable name
pval pointer to new value
pRet updated with I_OK on success
HRESULT IEngine::VarSetPointArray( [in] BSTR bstrName
,
[in] SAFEARRAY(I_POINT)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetPointArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
HRESULT IEngine::VarSetString( [in] BSTR bstrName
,
[in] BSTR val,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetString
Parameters:
bstrName variable name
val new value
pRet updated with I_OK on success
_____________________www.infaimon.com____________________137
visión artificial
_______________________________________________________________
HRESULT IEngine::VarSetStringArray( [in] BSTR bstrName
,
[in] SAFEARRAY(BSTR)* paval,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
VarSetStringArray
Parameters:
bstrName variable name
paval pointer to a variable array
pRet updated with I_OK on success
Functions
HRESULT IEngine::SoCameraGet ([in] BSTR bstrSo,[out] long *pnCam,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoCameraSet ([in] BSTR bstrSo, long nCam,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoCamSnap ([in] BSTR bstrSo,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::SoGetSize ([in] BSTR bstrSo,[out] long *pnWidth,[out] long
*pnHeight,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoImageLoad ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoImageSave ([in] BSTR bstrSo, BSTR bstrFile,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoLiveSet ([in] BSTR bstrSo, BOOL bEnable,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::SoSourceGet ([in] BSTR bstrSo,[out] BSTR
*pbstrSource,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTimeoutGet (BSTR bstrSo,[out] long *pnTimeoutMs,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTimeoutSet ([in] BSTR bstrSo, long nTimeoutMs,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTriggerGet ([in] BSTR bstrSo,[out] BOOL *pbExtTrig,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::SoTriggerSet ([in] BSTR bstrSo, BOOL bExtTrig,[out, retval]
I_ENG_ERROR *pRet)
Function Documentation
HRESULT IEngine::SoCameraGet( [in] BSTR bstrSo,
[out] long * pnCam,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoCameraGet
_____________________www.infaimon.com____________________138
visión artificial
_______________________________________________________________
Parameters:
bstrSo image window name (for example "imgA")
pnCam returns current camera
pRet updated with I_OK on success
HRESULT IEngine::SoCameraSet( [in] BSTR bstrSo,
long nCam,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoCameraSet
Parameters:
bstrSo image window name (for example "imgA")
nCam zero based camera index
pRet updated with I_OK on success
HRESULT ( [in] BSTR
bstrSo,
IEngine::SoCamSnap
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoCamSnap Acquire single image form the image window image source
Parameters:
bstrSo image window name (for example "imgA")
pRet updated with I_OK on success
HRESULT IEngine::SoGetSize( [in] BSTR bstrSo,
[out] long * pnWidth,
[out] long * pnHeight,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoGetSize Get image size of a given image window
Parameters:
bstrSo image window name (for example "imgA")
pnWidth pointer to a variable receiving width
pnHeight pointer to a variable receiving height
pRet updated with I_OK on success
HRESULT IEngine::SoImageLoad( [in] BSTR bstrSo,
BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoImageLoad Sets image window image source to a given file.
Parameters:
bstrSo image window name (for example "imgA")
bstrFile file name
pRet updated with I_OK on success
_____________________www.infaimon.com____________________139
visión artificial
_______________________________________________________________
HRESULT IEngine::SoImageSave( [in] BSTR bstrSo,
BSTR bstrFile,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoImageSave Saves current image window image to a given file.
Parameters:
bstrSo image window name (for example "imgA")
bstrFile file name
pRet updated with I_OK on success
HRESULT IEngine::SoLiveSet( [in] BSTR bstrSo,
BOOL bEnable,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoLiveSet Set/reset given image window into a "Live Acquisition" mode "Live
Acquisition" cases continuous image acquisiton when Sherlock Engine is in
HALT mode.
Parameters:
bstrSo image window name (for example "imgA")
bEnable TRUE to set "Live" mode, FALSE to turn it off
pRet updated with I_OK on success
HRESULT IEngine::SoSourceGet( [in] BSTR bstrSo,
[out] BSTR * pbstrSource,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoSourceGet Returns a string describing given image window's image source
Parameters:
bstrSo image window name (for example "imgA")
pbstrSource returned string
pRet updated with I_OK on success
HRESULT IEngine::SoTimeoutGet( BSTR bstrSo,
[out] long * pnTimeoutMs,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoTimeoutGet Gets image window hardware acquisition timeout value. If
acquisition takes more this value then time-out error is generated
Parameters:
bstrSo image window name (for example "imgA")
pnTimeoutMs timeout value
pRet updated with I_OK on success
HRESULT ( [in] BSTR
bstrSo,
IEngine::SoTimeoutSet
long nTimeoutMs,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
_____________________www.infaimon.com____________________140
visión artificial
_______________________________________________________________
SoTimeoutSet Sets image window hardware acquisition timeout value. If
acquisition takes more this value then time-out error is generated
Parameters:
bstrSo image window name (for example "imgA")
nTimeoutMs new timeout value
pRet updated with I_OK on success
HRESULT ( [in] BSTR
bstrSo,
IEngine::SoTriggerGet
[out] BOOL * pbExtTrig,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoTriggerGet Gets image window hardware trigger state.
Parameters:
bstrSo image window name (for example "imgA")
pbExtTrig trigger state
pRet updated with I_OK on success
HRESULT IEngine::SoTriggerSet( [in] BSTR bstrSo,
BOOL bExtTrig,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
SoTriggerSet Set image window hardware trigger state. It only affects camera
image sources.
Parameters:
bstrSo image window name (for example "imgA")
bExtTrig trigger state
pRet updated with I_OK on success
Functions
HRESULT IEngine::RoiCoordArrayGet ([in] BSTR bstrRoi,[out]
SAFEARRAY(long)*psanCoordsX,[out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::RoiCoordArraySet ([in] BSTR bstrRoi,[in, out]
SAFEARRAY(long)*psanCoordsX,[in, out]
SAFEARRAY(long)*psanCoordsY,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::RoiCoordGet ([in] BSTR bstrRoi, long nCoordIndex,[out]
long *pnCoord0,[out] long *pnCoord1,[out, retval] I_ENG_ERROR
*pRet)
HRESULT IEngine::RoiCoordMove ([in] BSTR bstrRoi, long nCoordIndex, long
nDx, long nDy,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiCoordSet ([in] BSTR bstrRoi, long nCoordIndex, long
_____________________www.infaimon.com____________________141
visión artificial
_______________________________________________________________
nCoord0, long nCoord1,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiMove ([in] BSTR bstrRoi, long nDx, long nDy,[out, retval]
I_ENG_ERROR *pRet)
HRESULT IEngine::RoiSelectedGet ([in] BSTR bstrRoi,[out] BOOL
*pbFlag,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiSelectedSet ([in] BSTR bstrRoi, BOOL bFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowAnnotGet ([in] BSTR bstrRoi,[out] BOOL
*pbFlag,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowAnnotSet ([in] BSTR bstrRoi, BOOL bFlag,[out,
retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowOutlineGet ([in] BSTR bstrRoi,[out] BOOL
*pbFlag,[out, retval] I_ENG_ERROR *pRet)
HRESULT IEngine::RoiShowOutlineSet ([in] BSTR bstrRoi, BOOL bFlag,[out,
retval] I_ENG_ERROR *pRet)
Function Documentation
HRESULT IEngine::RoiCoordArrayGet( [in] BSTR bstrRoi,
[out] SAFEARRAY(long)* psanCoordsX,
[out] SAFEARRAY(long)* psanCoordsY,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiCoordArrayGet Gets current value of a ROI coordinates.
Parameters:
bstrRoi ROI name
psanCoordsX x values
psanCoordsY y values
pRet updated with I_OK on success
HRESULT IEngine::RoiCoordArraySet( [in] BSTR bstrRoi,
[in, out] SAFEARRAY(long)* psanCoordsX,
[in, out] SAFEARRAY(long)* psanCoordsY,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiCoordArraySet Sets current values of a ROI coordinates.
Parameters:
bstrRoi ROI name
psanCoordsX x values
psanCoordsY y values
pRet updated with I_OK on success
HRESULT ( [in] BSTR
bstrRoi,
IEngine::RoiCoordGet
nCoordIndex
long
,
[out] long * pnCoord0,
[out] long * pnCoord1,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
_____________________www.infaimon.com____________________142
visión artificial
_______________________________________________________________
RoiCoordGet Gets current value of a given ROI coordinate.
Parameters:
bstrRoi ROI name
nCoordIndex coordinate index
pnCoord0 x value
pnCoord1 y value
pRet updated with I_OK on success
HRESULT ( [in] BSTR
bstrRoi,
IEngine::RoiCoordMove
nCoordIndex
long
,
long nDx,
long nDy,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiCoordMove Moves given ROI coordinate by give x,y
Parameters:
bstrRoi ROI name
nCoordIndex coordinate index
nDx x shift value
nDy x shift value
pRet updated with I_OK on success
HRESULT IEngine::RoiCoordSet( [in] BSTR bstrRoi,
nCoordIndex
long
,
long nCoord0,
long nCoord1,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiCoordSet Sets current value of a given ROI coordinate.
Parameters:
bstrRoi ROI name
nCoordIndex coordinate index
nCoord0 x value
nCoord1 y value
pRet updated with I_OK on success
HRESULT IEngine::RoiMove( [in] BSTR bstrRoi,
long nDx,
long nDy,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiMove Moves given ROI by give x,y
Parameters:
_____________________www.infaimon.com____________________143
visión artificial
_______________________________________________________________
bstrRoi ROI name
nDx x shift value
nDy x shift value
pRet updated with I_OK on success
HRESULT IEngine::RoiSelectedGet( [in] BSTR bstrRoi,
[out] BOOL * pbFlag,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiSelectedGet Gets current state to "ROI Selected"
Parameters:
bstrRoi ROI name
pbFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiSelectedSet( [in] BSTR bstrRoi,
BOOL bFlag,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiSelectedlineSet Sets current state to "ROI Selected"
Parameters:
bstrRoi ROI name
bFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowAnnotGet( [in] BSTR bstrRoi,
[out] BOOL * pbFlag,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiShowAnnotGet Gets current state to "Show ROI annotations"
Parameters:
bstrRoi ROI name
pbFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowAnnotSet( [in] BSTR bstrRoi,
BOOL bFlag,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiShowAnnotSet Sets current state to "Show ROI annotations"
Parameters:
bstrRoi ROI name
bFlag flag
pRet updated with I_OK on success
_____________________www.infaimon.com____________________144
visión artificial
_______________________________________________________________
HRESULT ( [in] BSTR
bstrRoi,
IEngine::RoiShowOutlineGet
[out] BOOL * pbFlag,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiShowOutlineGet Gets current state to "Show ROI Outline"
Parameters:
bstrRoi ROI name
pbFlag flag
pRet updated with I_OK on success
HRESULT IEngine::RoiShowOutlineSet( [in] BSTR bstrRoi,
BOOL bFlag,
[out, retval] I_ENG_ERROR * pRet
) [inherited]
RoiShowOutlineSet Sets current state to "Show ROI Outline"
Parameters:
bstrRoi ROI name
bFlag flag
pRet updated with I_OK on success
Control Events
IpeDspCtrl Rererence
All functions
_____________________www.infaimon.com____________________145
visión artificial
_______________________________________________________________
void DisconnectEngine (void)
void DisconnectImgWindow (void)
LONG GetWindow (void)
DOUBLE GetZoom (void)
LONG LoadImage (BSTR bstrFileName)
void SetFrameType (ULONG dwType)
void SetImage (LONG pImage)
void SetZoom (DOUBLE dZoom)
void ShowToolbar (LONG bShow)
LONG UpdateDisplay (void)
Parameters:
pEngine pointer to IpeEngCtrl object
LONG ( BSTR bstrImgWndNam )
IpeDspCtrlLib::_DIpeDspCtrl::ConnectImgWindow e
ConnectImgWindow Connects SherlockEngine image window to display
Parameters:
bstrImgWndName name of the image window in currently loaded
program in the IpeEngCtrl object
Returns:
always zero
void ( void )
IpeDspCtrlLib::_DIpeDspCtrl::DisconnectEngine
DisconnectEngine Disconnects currently connected IpeEngCtrl onject
void ( void )
IpeDspCtrlLib::_DIpeDspCtrl::DisconnectImgWindow
DisconnectImgWindow Disconnects currently connected SherlockEngine image
window
LONG IpeDspCtrlLib::_DIpeDspCtrl::GetWindow( void )
GetWindow
Returns:
pointer to an internal CScrollWnd that is used for display.
DOUBLE IpeDspCtrlLib::_DIpeDspCtrl::GetZoom( void )
GetZoom
Returns:
current zoom settings
_____________________www.infaimon.com____________________146
visión artificial
_______________________________________________________________
LONG ( BSTR bstrFileNam )
IpeDspCtrlLib::_DIpeDspCtrl::LoadImage e
LoadImage Load an image for displaying
Parameters:
bstrFileName image file name
void ( ULONG dwTyp )
IpeDspCtrlLib::_DIpeDspCtrl::SetFrameType e
SetFrameType Controls type of the display control edge type
Note:
Combinations of the following flags can be used For more info look at
MSDN DrawEdge function #define BDR_RAISEDOUTER 0x0001
#define BDR_SUNKENOUTER 0x0002 #define BDR_RAISEDINNER
0x0004 #define BDR_SUNKENINNER 0x0008
Parameters:
dwType flags for control edge painting
void IpeDspCtrlLib::_DIpeDspCtrl::SetImage( LONG pImag )
e
SetImage Sets new display image
Parameters:
pImage pointer to the CIpeImage object
void ( DOUBLE dZoo )
IpeDspCtrlLib::_DIpeDspCtrl::SetZoom m
SetZoom
Note:
Image is not refresed by this call. If you want to see image with new
zoom setting please use UpdateDisplay
Parameters:
dZoom new zoom setting; -1 for stretch-to-fit
void IpeDspCtrlLib::_DIpeDspCtrl::ShowToolbar( LONG bSho )
w
ShowToolbar Shows or hides the display toolbar
Parameters:
bShow 0 or 1
LONG ( void )
IpeDspCtrlLib::_DIpeDspCtrl::UpdateDisplay
UpdateDisplay Repaints the image display
Returns:
always zero
Control Events
_____________________www.infaimon.com____________________147
visión artificial
_______________________________________________________________
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void ( ULONG
nFlags,
IpeDspCtrlLib::_DIpeDspCtrlEvents::LButtonDown
LONG x,
LONG y
)
LButtonDown
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void ( ULONG
nFlags,
IpeDspCtrlLib::_DIpeDspCtrlEvents::LButtonUp
LONG x,
LONG y
)
LButtonUp
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
_____________________www.infaimon.com____________________148
visión artificial
_______________________________________________________________
void IpeDspCtrlLib::_DIpeDspCtrlEvents::MouseMove( ULONG nFlags,
LONG x,
LONG y
)
MouseMove
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void ( LONG hD )
IpeDspCtrlLib::_DIpeDspCtrlEvents::OverlayDraw C
OverlayDraw Callback to allow user to paint overlay
Parameters:
hDC HDC handle to overlay device context; needs to be cases to HDC
void ( ULONG
nFlags,
IpeDspCtrlLib::_DIpeDspCtrlEvents::RButtonDblClk
LONG x,
LONG y
)
RButtonDblClk
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void ( ULONG
nFlags,
IpeDspCtrlLib::_DIpeDspCtrlEvents::RButtonDown
LONG x,
LONG y
)
RButtonDown
Parameters:
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
void ( ULONG
nFlags,
IpeDspCtrlLib::_DIpeDspCtrlEvents::RButtonUp
LONG x,
LONG y
)
RButtonUp
Parameters:
_____________________www.infaimon.com____________________149
visión artificial
_______________________________________________________________
nFlags button flags
x pointer x position in IMAGE coordinates
y pointer y position in IMAGE coordinates
_____________________www.infaimon.com____________________150