Bloques OpenCV - VisioForge Media Blocks SDK .Net¶
Los bloques OpenCV (Open Source Computer Vision Library) proporcionan potentes capacidades de procesamiento de video dentro del VisioForge Media Blocks SDK .Net. Estos bloques permiten una amplia gama de tareas de visión por computadora, desde manipulación básica de imágenes hasta detección y seguimiento de objetos complejos.
Para usar los bloques OpenCV, asegúrese de que el paquete NuGet VisioForge.CrossPlatform.OpenCV.Windows.x64 (o el paquete correspondiente para su plataforma) esté incluido en su proyecto.
La mayoría de los bloques OpenCV típicamente requieren un elemento videoconvert antes de ellos para asegurar que el flujo de video de entrada esté en un formato compatible. El SDK maneja esto internamente cuando inicializa el bloque.
Bloque CV Dewarp¶
El bloque CV Dewarp aplica efectos de corrección de distorsión a un flujo de video, lo que puede corregir distorsiones de lentes gran angular, por ejemplo.
Información del bloque¶
Nombre: CVDewarpBlock (elemento GStreamer: dewarp).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVDewarpBlock se configura usando CVDewarpSettings. Propiedades clave:
DisplayMode(enumCVDewarpDisplayMode): Especifica el modo de visualización para la corrección de distorsión (ej.,SinglePanorama,DoublePanorama). El valor predeterminado esCVDewarpDisplayMode.SinglePanorama.InnerRadius(double): Radio interior para la corrección de distorsión.InterpolationMethod(enumCVDewarpInterpolationMode): Método de interpolación utilizado (ej.,Bilinear,Bicubic). El valor predeterminado esCVDewarpInterpolationMode.Bilinear.OuterRadius(double): Radio exterior para la corrección de distorsión.XCenter(double): Coordenada X del centro para la corrección de distorsión.XRemapCorrection(double): Factor de corrección de remapeo de coordenada X.YCenter(double): Coordenada Y del centro para la corrección de distorsión.YRemapCorrection(double): Factor de corrección de remapeo de coordenada Y.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVDewarpBlock;
CVDewarpBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
// Crear configuración de Dewarp
var dewarpSettings = new CVDewarpSettings
{
DisplayMode = CVDewarpDisplayMode.SinglePanorama, // Modo de ejemplo, el predeterminado es SinglePanorama
InnerRadius = 0.2, // Valor de ejemplo
OuterRadius = 0.8, // Valor de ejemplo
XCenter = 0.5, // Valor de ejemplo, el predeterminado es 0.5
YCenter = 0.5, // Valor de ejemplo, el predeterminado es 0.5
// InterpolationMethod = CVDewarpInterpolationMode.Bilinear, // Este es el predeterminado
};
var dewarpBlock = new CVDewarpBlock(dewarpSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, dewarpBlock.Input0);
pipeline.Connect(dewarpBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Dilate¶
El bloque CV Dilate realiza una operación de dilatación en el flujo de video. La dilatación es una operación morfológica que típicamente expande las regiones brillantes y reduce las regiones oscuras.
Información del bloque¶
Nombre: CVDilateBlock (elemento GStreamer: cvdilate).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
Este bloque no tiene configuraciones específicas más allá del comportamiento predeterminado. La dilatación se realiza con un elemento estructurante predeterminado.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVDilateBlock;
CVDilateBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var dilateBlock = new CVDilateBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, dilateBlock.Input0);
pipeline.Connect(dilateBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Edge Detect¶
El bloque CV Edge Detect utiliza el algoritmo detector de bordes Canny para encontrar bordes en el flujo de video.
Información del bloque¶
Nombre: CVEdgeDetectBlock (elemento GStreamer: edgedetect).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVEdgeDetectBlock se configura usando CVEdgeDetectSettings. Propiedades clave:
ApertureSize(int): Tamaño de apertura para el operador Sobel (ej., 3, 5, o 7). El valor predeterminado es 3.Threshold1(int): Primer umbral para el procedimiento de histéresis. El valor predeterminado es 50.Threshold2(int): Segundo umbral para el procedimiento de histéresis. El valor predeterminado es 150.Mask(bool): Si es verdadero, la salida es una máscara; de lo contrario, es la imagen original con los bordes resaltados. El valor predeterminado esfalse.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVEdgeDetectBlock;
CVEdgeDetectBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var edgeDetectSettings = new CVEdgeDetectSettings
{
ApertureSize = 3, // Valor de ejemplo, el predeterminado es 3
Threshold1 = 2000, // Valor de ejemplo, el tipo C# es int, el predeterminado es 50
Threshold2 = 4000, // Valor de ejemplo, el tipo C# es int, el predeterminado es 150
Mask = true // Valor de ejemplo, el predeterminado es false
};
var edgeDetectBlock = new CVEdgeDetectBlock(edgeDetectSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, edgeDetectBlock.Input0);
pipeline.Connect(edgeDetectBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Equalize Histogram¶
El bloque CV Equalize Histogram ecualiza el histograma de un fotograma de video usando la función cvEqualizeHist. Esto típicamente mejora el contraste de la imagen.
Información del bloque¶
Nombre: CVEqualizeHistogramBlock (elemento GStreamer: cvequalizehist).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
Este bloque no tiene configuraciones específicas más allá del comportamiento predeterminado.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVEqualizeHistogramBlock;
CVEqualizeHistogramBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var equalizeHistBlock = new CVEqualizeHistogramBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, equalizeHistBlock.Input0);
pipeline.Connect(equalizeHistBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Erode¶
El bloque CV Erode realiza una operación de erosión en el flujo de video. La erosión es una operación morfológica que típicamente reduce las regiones brillantes y expande las regiones oscuras.
Información del bloque¶
Nombre: CVErodeBlock (elemento GStreamer: cverode).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
Este bloque no tiene configuraciones específicas más allá del comportamiento predeterminado. La erosión se realiza con un elemento estructurante predeterminado.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVErodeBlock;
CVErodeBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var erodeBlock = new CVErodeBlock();
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, erodeBlock.Input0);
pipeline.Connect(erodeBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Face Blur¶
El bloque CV Face Blur detecta rostros en el flujo de video y aplica un efecto de desenfoque a ellos.
Información del bloque¶
Nombre: CVFaceBlurBlock (elemento GStreamer: faceblur).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVFaceBlurBlock se configura usando CVFaceBlurSettings. Propiedades clave:
MainCascadeFile(string): Ruta al archivo XML para el clasificador en cascada Haar primario usado para detección de rostros (ej.,haarcascade_frontalface_default.xml). El valor predeterminado es"haarcascade_frontalface_default.xml".MinNeighbors(int): Número mínimo de vecinos que cada rectángulo candidato debe tener para retenerlo. El valor predeterminado es 3.MinSize(Size): Tamaño mínimo posible del objeto. Los objetos más pequeños que esto son ignorados. Valor predeterminadonew Size(30, 30).ScaleFactor(double): Cuánto se reduce el tamaño de la imagen en cada escala de imagen. El valor predeterminado es 1.25.
Nota: Se debe llamar a ProcessPaths(Context) en el objeto de configuración para asegurar la resolución correcta de rutas para archivos cascade.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVFaceBlurBlock;
CVFaceBlurBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var faceBlurSettings = new CVFaceBlurSettings
{
MainCascadeFile = "haarcascade_frontalface_default.xml", // Ajustar ruta según sea necesario, este es el predeterminado
MinNeighbors = 5, // Valor de ejemplo, el predeterminado es 3
ScaleFactor = 1.2, // Valor de ejemplo, el predeterminado es 1.25
// MinSize = new VisioForge.Core.Types.Size(30, 30) // Este es el predeterminado
};
// Es importante llamar a ProcessPaths si no está proporcionando una ruta absoluta
// y confía en los mecanismos internos del SDK para localizar el archivo, especialmente cuando se despliega.
// faceBlurSettings.ProcessPaths(pipeline.Context); // o pasar el contexto apropiado
var faceBlurBlock = new CVFaceBlurBlock(faceBlurSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, faceBlurBlock.Input0);
pipeline.Connect(faceBlurBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Este bloque requiere archivos XML de cascada Haar para detección de rostros. Estos archivos típicamente se incluyen con las distribuciones de OpenCV. Asegúrese de que la ruta a MainCascadeFile esté correctamente especificada. El método ProcessPaths en el objeto de configuración puede ayudar a resolver rutas si los archivos están colocados en ubicaciones estándar conocidas por el SDK.
Bloque CV Face Detect¶
El bloque CV Face Detect detecta rostros, y opcionalmente ojos, narices y bocas, en el flujo de video usando clasificadores en cascada Haar.
Información del bloque¶
Nombre: CVFaceDetectBlock (elemento GStreamer: facedetect).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVFaceDetectBlock se configura usando CVFaceDetectSettings. Propiedades clave:
Display(bool): Si estrue, dibuja rectángulos alrededor de las características detectadas en el video de salida. El valor predeterminado estrue.MainCascadeFile(string): Ruta al XML para la cascada Haar primaria. El valor predeterminado es"haarcascade_frontalface_default.xml".EyesCascadeFile(string): Ruta al XML para detección de ojos. El valor predeterminado es"haarcascade_mcs_eyepair_small.xml". Opcional.NoseCascadeFile(string): Ruta al XML para detección de nariz. El valor predeterminado es"haarcascade_mcs_nose.xml". Opcional.MouthCascadeFile(string): Ruta al XML para detección de boca. El valor predeterminado es"haarcascade_mcs_mouth.xml". Opcional.MinNeighbors(int): Vecinos mínimos para retención de candidatos. Predeterminado 3.MinSize(Size): Tamaño mínimo del objeto. Predeterminadonew Size(30, 30).MinDeviation(int): Desviación estándar mínima. Predeterminado 0.ScaleFactor(double): Factor de reducción del tamaño de imagen en cada escala. Predeterminado 1.25.UpdatesMode(enumCVFaceDetectUpdates): Controla cómo se publican las actualizaciones/eventos (EveryFrame,OnChange,OnFace,None). PredeterminadoCVFaceDetectUpdates.EveryFrame.
Nota: Se debe llamar a ProcessPaths(Context) en el objeto de configuración para archivos cascade.
Eventos¶
FaceDetected: Ocurre cuando se detectan rostros (y otras características habilitadas). ProporcionaCVFaceDetectedEventArgscon un array de objetosCVFacey una marca de tiempo.CVFacecontieneRectparaPosition,Nose,Mouth, y una lista deRectparaEyes.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVFaceDetectBlock;
CVFaceDetectBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var faceDetectSettings = new CVFaceDetectSettings
{
MainCascadeFile = "haarcascade_frontalface_default.xml", // Ajustar ruta, predeterminado
EyesCascadeFile = "haarcascade_mcs_eyepair_small.xml", // Ajustar ruta, predeterminado, opcional
// NoseCascadeFile = "haarcascade_mcs_nose.xml", // Opcional, predeterminado
// MouthCascadeFile = "haarcascade_mcs_mouth.xml", // Opcional, predeterminado
Display = true, // Predeterminado
UpdatesMode = CVFaceDetectUpdates.EveryFrame, // Predeterminado, valores posibles: EveryFrame, OnChange, OnFace, None
MinNeighbors = 5, // Valor de ejemplo, el predeterminado es 3
ScaleFactor = 1.2, // Valor de ejemplo, el predeterminado es 1.25
// MinSize = new VisioForge.Core.Types.Size(30,30) // Predeterminado
};
// faceDetectSettings.ProcessPaths(pipeline.Context); // o contexto apropiado
var faceDetectBlock = new CVFaceDetectBlock(faceDetectSettings);
faceDetectBlock.FaceDetected += (s, e) =>
{
Console.WriteLine($"Marca de tiempo: {e.Timestamp}, Rostros encontrados: {e.Faces.Length}");
foreach (var face in e.Faces)
{
Console.WriteLine($" Rostro en [{face.Position.Left},{face.Position.Top},{face.Position.Width},{face.Position.Height}]");
if (face.Eyes.Any())
{
Console.WriteLine($" Ojos en [{face.Eyes[0].Left},{face.Eyes[0].Top},{face.Eyes[0].Width},{face.Eyes[0].Height}]");
}
}
};
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, faceDetectBlock.Input0);
pipeline.Connect(faceDetectBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Requiere archivos XML de cascada Haar. El método ProcessBusMessage en la clase C# maneja el análisis de mensajes del elemento GStreamer para disparar el evento FaceDetected.
Bloque CV Hand Detect¶
El bloque CV Hand Detect detecta gestos de mano (puño o palma) en el flujo de video usando clasificadores en cascada Haar. Internamente redimensiona el video de entrada a 320x240 para el procesamiento.
Información del bloque¶
Nombre: CVHandDetectBlock (elemento GStreamer: handdetect).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVHandDetectBlock se configura usando CVHandDetectSettings. Propiedades clave:
Display(bool): Si estrue, dibuja rectángulos alrededor de las manos detectadas en el video de salida. El valor predeterminado estrue.FistCascadeFile(string): Ruta al XML para detección de puño. El valor predeterminado es"fist.xml".PalmCascadeFile(string): Ruta al XML para detección de palma. El valor predeterminado es"palm.xml".ROI(Rect): Región de Interés para la detección. Las coordenadas son relativas a la imagen procesada de 320x240. Predeterminado (0,0,0,0) - fotograma completo (corresponde anew Rect()).
Nota: Se debe llamar a ProcessPaths(Context) en el objeto de configuración para archivos cascade.
Eventos¶
HandDetected: Ocurre cuando se detectan manos. ProporcionaCVHandDetectedEventArgscon un array de objetosCVHand.CVHandcontieneRectparaPositionyCVHandGestureparaGesture(Fist o Palm).
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVHandDetectBlock;
CVHandDetectBlock-->VideoRendererBlock;
Nota: El CVHandDetectBlock internamente incluye un elemento videoscale para redimensionar la entrada a 320x240 antes del elemento GStreamer handdetect.
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var handDetectSettings = new CVHandDetectSettings
{
FistCascadeFile = "fist.xml", // Ajustar ruta, predeterminado
PalmCascadeFile = "palm.xml", // Ajustar ruta, predeterminado
Display = true, // Predeterminado
ROI = new VisioForge.Core.Types.Rect(0, 0, 320, 240) // Ejemplo: fotograma completo de imagen escalada, predeterminado es new Rect()
};
// handDetectSettings.ProcessPaths(pipeline.Context); // o contexto apropiado
var handDetectBlock = new CVHandDetectBlock(handDetectSettings);
handDetectBlock.HandDetected += (s, e) =>
{
Console.WriteLine($"Manos encontradas: {e.Hands.Length}");
foreach (var hand in e.Hands)
{
Console.WriteLine($" Mano en [{hand.Position.Left},{hand.Position.Top},{hand.Position.Width},{hand.Position.Height}], Gesto: {hand.Gesture}");
}
};
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, handDetectBlock.Input0);
pipeline.Connect(handDetectBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Requiere archivos XML de cascada Haar para detección de puño y palma. El video de entrada es escalado internamente a 320x240 para el procesamiento por el elemento handdetect. El método ProcessBusMessage maneja los mensajes de GStreamer para disparar HandDetected.
Bloque CV Laplace¶
El bloque CV Laplace aplica un operador de Laplace al flujo de video, que resalta regiones de cambio rápido de intensidad, frecuentemente usado para detección de bordes.
Información del bloque¶
Nombre: CVLaplaceBlock (elemento GStreamer: cvlaplace).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVLaplaceBlock se configura usando CVLaplaceSettings. Propiedades clave:
ApertureSize(int): Tamaño de apertura para el operador Sobel usado internamente (ej., 1, 3, 5, o 7). Predeterminado 3.Scale(double): Factor de escala opcional para los valores Laplacianos calculados. Predeterminado 1.Shift(double): Valor delta opcional que se añade a los resultados antes de almacenarlos. Predeterminado 0.Mask(bool): Si es verdadero, la salida es una máscara; de lo contrario, es la imagen original con el efecto aplicado. El valor predeterminado es true.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVLaplaceBlock;
CVLaplaceBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var laplaceSettings = new CVLaplaceSettings
{
ApertureSize = 3, // Valor de ejemplo
Scale = 1.0, // Valor de ejemplo
Shift = 0.0, // Valor de ejemplo
Mask = true
};
var laplaceBlock = new CVLaplaceBlock(laplaceSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, laplaceBlock.Input0);
pipeline.Connect(laplaceBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Motion Cells¶
El bloque CV Motion Cells detecta movimiento en un flujo de video dividiendo el fotograma en una cuadrícula de celdas y analizando cambios dentro de estas celdas.
Información del bloque¶
Nombre: CVMotionCellsBlock (elemento GStreamer: motioncells).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVMotionCellsBlock se configura usando CVMotionCellsSettings. Propiedades clave:
CalculateMotion(bool): Habilitar o deshabilitar el cálculo de movimiento. Predeterminadotrue.CellsColor(SKColor): Color para dibujar las celdas de movimiento siDisplayes true. PredeterminadoSKColors.Red.DataFile(string): Ruta a un archivo de datos para cargar/guardar configuración de celdas. La extensión se maneja por separado conDataFileExtension.DataFileExtension(string): Extensión para el archivo de datos (ej., "dat").Display(bool): Si estrue, dibuja la cuadrícula e indicación de movimiento en el video de salida. Predeterminadotrue.Gap(TimeSpan): Intervalo después del cual el movimiento se considera terminado y se publica un mensaje de bus "movimiento terminado". PredeterminadoTimeSpan.FromSeconds(5). (Nota: Esto es diferente de un espacio de píxeles entre celdas).GridSize(Size): Número de celdas en la cuadrícula (Ancho x Alto). Predeterminadonew Size(10, 10).MinimumMotionFrames(int): Número mínimo de fotogramas en que el movimiento debe detectarse en una celda para activar. Predeterminado 1.MotionCellsIdx(string): Cadena separada por comas de índices de celdas (ej., "0:0,1:1") para monitorear movimiento.MotionCellBorderThickness(int): Grosor del borde para celdas con movimiento detectado. Predeterminado 1.MotionMaskCellsPos(string): Cadena que define posiciones de celdas para una máscara de movimiento.MotionMaskCoords(string): Cadena que define coordenadas para una máscara de movimiento.PostAllMotion(bool): Publicar todos los eventos de movimiento. Predeterminadofalse.PostNoMotion(TimeSpan): Tiempo después del cual se publica un evento "sin movimiento" si no se detecta movimiento. PredeterminadoTimeSpan.Zero(deshabilitado).Sensitivity(double): Sensibilidad al movimiento. El rango esperado puede ser 0.0 a 1.0. Predeterminado0.5.Threshold(double): Umbral para detección de movimiento, representando la fracción de celdas que necesitan haberse movido. Predeterminado0.01.UseAlpha(bool): Usar canal alfa para dibujar. Predeterminadotrue.
Eventos¶
MotionDetected: Ocurre cuando se detecta movimiento o cambia de estado. ProporcionaCVMotionCellsEventArgs:Cells: Cadena indicando qué celdas tienen movimiento (ej., "0:0,1:2").StartedTime: Marca de tiempo cuando el movimiento comenzó en el alcance del evento actual.FinishedTime: Marca de tiempo cuando el movimiento terminó (si aplica al evento).CurrentTime: Marca de tiempo del fotograma actual relacionado con el evento.IsMotion: Booleano indicando si el evento significa movimiento (true) o sin movimiento (false).
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVMotionCellsBlock;
CVMotionCellsBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var motionCellsSettings = new CVMotionCellsSettings
{
GridSize = new VisioForge.Core.Types.Size(8, 6), // Ejemplo: cuadrícula 8x6, predeterminado es new Size(10,10)
Sensitivity = 0.75, // Valor de ejemplo, el predeterminado de C# es 0.5. Representa sensibilidad.
Threshold = 0.05, // Valor de ejemplo, el predeterminado de C# es 0.01. Representa fracción de celdas movidas.
Display = true, // Predeterminado es true
CellsColor = SKColors.Aqua, // Color de ejemplo, predeterminado es SKColors.Red
PostNoMotion = TimeSpan.FromSeconds(5) // Publicar no_motion después de 5s de inactividad, predeterminado es TimeSpan.Zero
};
var motionCellsBlock = new CVMotionCellsBlock(motionCellsSettings);
motionCellsBlock.MotionDetected += (s, e) =>
{
if (e.IsMotion)
{
Console.WriteLine($"Movimiento DETECTADO en {e.CurrentTime}. Celdas: {e.Cells}. Iniciado: {e.StartedTime}");
}
else
{
Console.WriteLine($"Movimiento TERMINADO o SIN MOVIMIENTO en {e.CurrentTime}. Terminado: {e.FinishedTime}");
}
};
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, motionCellsBlock.Input0);
pipeline.Connect(motionCellsBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
El método ProcessBusMessage maneja los mensajes de GStreamer para disparar MotionDetected. La estructura del evento proporciona marcas de tiempo para inicio de movimiento, finalización y tiempo del evento actual.
Bloque CV Smooth¶
El bloque CV Smooth aplica varios filtros de suavizado (desenfoque) al flujo de video.
Información del bloque¶
Nombre: CVSmoothBlock (elemento GStreamer: cvsmooth).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVSmoothBlock se configura usando CVSmoothSettings. Propiedades clave:
Type(enumCVSmoothType): Tipo de filtro de suavizado a aplicar (Blur,Gaussian,Median,Bilateral). PredeterminadoCVSmoothType.Gaussian.KernelWidth(int): Ancho del kernel para filtrosBlur,Gaussian,Median. Predeterminado 3.KernelHeight(int): Alto del kernel para filtrosBlur,Gaussian,Median. Predeterminado 3.Width(int): Ancho del área a desenfocar. Predeterminadoint.MaxValue(fotograma completo).Height(int): Alto del área a desenfocar. Predeterminadoint.MaxValue(fotograma completo).PositionX(int): Posición X para el área de desenfoque. Predeterminado 0.PositionY(int): Posición Y para el área de desenfoque. Predeterminado 0.Color(double): Sigma para espacio de color (para filtro Bilateral) o desviación estándar (para Gaussian siSpatialSigmaes 0). Predeterminado 0.SpatialSigma(double): Sigma para espacio de coordenadas (para filtros Bilateral y Gaussian). Para Gaussian, si es 0, se calcula desdeKernelWidth/KernelHeight. Predeterminado 0.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVSmoothBlock;
CVSmoothBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var smoothSettings = new CVSmoothSettings
{
Type = CVSmoothType.Gaussian, // Ejemplo: desenfoque Gaussian, también el predeterminado
KernelWidth = 5, // Ancho del kernel, predeterminado es 3
KernelHeight = 5, // Alto del kernel, predeterminado es 3
SpatialSigma = 1.5 // Sigma para Gaussian. Si es 0 (predeterminado), se calcula del tamaño del kernel.
};
var smoothBlock = new CVSmoothBlock(smoothSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, smoothBlock.Input0);
pipeline.Connect(smoothBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto. Los parámetros específicos usados por el elemento GStreamer (color, spatial, kernel-width, kernel-height) dependen del Type elegido. Para dimensiones del kernel, use KernelWidth y KernelHeight. Width y Height definen el área para aplicar el desenfoque si no es el fotograma completo.
Bloque CV Sobel¶
El bloque CV Sobel aplica un operador Sobel al flujo de video, que se usa para calcular la derivada de una función de intensidad de imagen, típicamente para detección de bordes.
Información del bloque¶
Nombre: CVSobelBlock (elemento GStreamer: cvsobel).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVSobelBlock se configura usando CVSobelSettings. Propiedades clave:
XOrder(int): Orden de la derivada x. Predeterminado 1.YOrder(int): Orden de la derivada y. Predeterminado 1.ApertureSize(int): Tamaño del kernel Sobel extendido (1, 3, 5, o 7). Predeterminado 3.Mask(bool): Si es verdadero, la salida es una máscara; de lo contrario, es la imagen original con el efecto aplicado. El valor predeterminado es true.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVSobelBlock;
CVSobelBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var sobelSettings = new CVSobelSettings
{
XOrder = 1, // Predeterminado es 1. Usado para orden de la derivada X.
YOrder = 0, // Ejemplo: Usar 0 para orden Y para detectar principalmente bordes verticales. El predeterminado de la clase C# es 1.
ApertureSize = 3, // Predeterminado es 3. Tamaño del kernel Sobel extendido.
Mask = true // Predeterminado es true. Salida como máscara.
};
var sobelBlock = new CVSobelBlock(sobelSettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, sobelBlock.Input0);
pipeline.Connect(sobelBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado en su proyecto.
Bloque CV Template Match¶
El bloque CV Template Match busca ocurrencias de una imagen plantilla dentro del flujo de video.
Información del bloque¶
Nombre: CVTemplateMatchBlock (elemento GStreamer: templatematch).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVTemplateMatchBlock se configura usando CVTemplateMatchSettings. Propiedades clave:
TemplateImage(string): Ruta al archivo de imagen plantilla (ej., PNG, JPG) a buscar.Method(enumCVTemplateMatchMethod): El método de comparación a usar (ej.,Sqdiff,CcorrNormed,CcoeffNormed). PredeterminadoCVTemplateMatchMethod.Correlation.Display(bool): Si estrue, dibuja un rectángulo alrededor de la mejor coincidencia en el video de salida. Predeterminadotrue.
Eventos¶
TemplateMatch: Ocurre cuando se encuentra una coincidencia de plantilla. ProporcionaCVTemplateMatchEventArgs:Rect: Un objetoTypes.Rectrepresentando la ubicación (x, y, ancho, alto) de la mejor coincidencia.Result: Un valor double representando la calidad o resultado de la coincidencia, dependiendo del método usado.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVTemplateMatchBlock;
CVTemplateMatchBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
// Asegúrese de que "template.png" existe y es accesible.
var templateMatchSettings = new CVTemplateMatchSettings("ruta/a/su/template.png") // Ajustar ruta según sea necesario
{
// Method: Especifica el método de comparación.
// Ejemplo: CVTemplateMatchMethod.CcoeffNormed es frecuentemente una buena elección.
// El predeterminado de la clase C# es CVTemplateMatchMethod.Correlation.
Method = CVTemplateMatchMethod.CcoeffNormed,
// Display: Si es true, dibuja un rectángulo alrededor de la mejor coincidencia.
// El predeterminado de la clase C# es true.
Display = true
};
var templateMatchBlock = new CVTemplateMatchBlock(templateMatchSettings);
templateMatchBlock.TemplateMatch += (s, e) =>
{
Console.WriteLine($"Plantilla coincidente en [{e.Rect.Left},{e.Rect.Top},{e.Rect.Width},{e.Rect.Height}] con resultado: {e.Result}");
};
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, templateMatchBlock.Input0);
pipeline.Connect(templateMatchBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV y un archivo de imagen plantilla válido estén disponibles. El método ProcessBusMessage maneja los mensajes de GStreamer para disparar el evento TemplateMatch.
Bloque CV Text Overlay¶
El bloque CV Text Overlay renderiza texto sobre el flujo de video usando funciones de dibujo de OpenCV.
Información del bloque¶
Nombre: CVTextOverlayBlock (elemento GStreamer: opencvtextoverlay).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVTextOverlayBlock se configura usando CVTextOverlaySettings. Propiedades clave:
Text(string): La cadena de texto a superponer. Predeterminado:"Default text".X(int): Coordenada X de la esquina inferior izquierda de la cadena de texto. Predeterminado:50.Y(int): Coordenada Y de la esquina inferior izquierda de la cadena de texto (desde arriba, el origen de OpenCV es arriba-izquierda, el textoverlay de GStreamer podría ser abajo-izquierda). Predeterminado:50.FontWidth(double): Factor de escala de fuente que se multiplica por el tamaño base específico de la fuente. Predeterminado:1.0.FontHeight(double): Factor de escala de fuente (similar a FontWidth, aunque el elemento GStreamer usualmente tiene unfont-scaleo depende del tamaño en puntos). Predeterminado:1.0.FontThickness(int): Grosor de las líneas usadas para dibujar texto. Predeterminado:1.Color(SKColor): Color del texto. Predeterminado:SKColors.Black.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVTextOverlayBlock;
CVTextOverlayBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var textOverlaySettings = new CVTextOverlaySettings
{
Text = "¡VisioForge MediaBlocks.Net ES GENIAL!", // Predeterminado: "Default text"
X = 20, // Posición X del inicio del texto. Predeterminado: 50
Y = 40, // Posición Y de la línea base del texto (desde arriba). Predeterminado: 50
FontWidth = 1.2, // Escala de fuente. Predeterminado: 1.0
FontHeight = 1.2, // Escala de fuente (usualmente FontWidth es suficiente para opencvtextoverlay). Predeterminado: 1.0
FontThickness = 2, // Predeterminado: 1
Color = SKColors.Blue // Predeterminado: SKColors.Black
};
var textOverlayBlock = new CVTextOverlayBlock(textOverlaySettings);
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, textOverlayBlock.Input0);
pipeline.Connect(textOverlayBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado. Las propiedades de GStreamer colorR, colorG, colorB se establecen basándose en la propiedad Color.
Bloque CV Tracker¶
El bloque CV Tracker implementa varios algoritmos de seguimiento de objetos para seguir un objeto definido por un cuadro delimitador inicial en un flujo de video.
Información del bloque¶
Nombre: CVTrackerBlock (elemento GStreamer: cvtracker).
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada video | Video sin comprimir | 1 |
| Salida video | Video sin comprimir | 1 |
Configuración¶
El CVTrackerBlock se configura usando CVTrackerSettings. Propiedades clave:
Algorithm(enumCVTrackerAlgorithm): Especifica el algoritmo de seguimiento (Boosting,CSRT,KCF,MedianFlow,MIL,MOSSE,TLD). Predeterminado:CVTrackerAlgorithm.MedianFlow.InitialRect(Rect): El cuadro delimitador inicial (Left, Top, Width, Height) del objeto a seguir. Predeterminado:new Rect(50, 50, 100, 100).DrawRect(bool): Si estrue, dibuja un rectángulo alrededor del objeto seguido en el video de salida. Predeterminado:true.
Pipeline de ejemplo¶
graph LR;
SystemVideoSourceBlock-->CVTrackerBlock;
CVTrackerBlock-->VideoRendererBlock;
Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
// Asumiendo que SystemVideoSourceBlock ya está creado y configurado como 'videoSource'
var trackerSettings = new CVTrackerSettings
{
Algorithm = CVTrackerAlgorithm.CSRT, // CSRT es frecuentemente un buen rastreador de propósito general. Predeterminado: CVTrackerAlgorithm.MedianFlow
InitialRect = new VisioForge.Core.Types.Rect(150, 120, 80, 80), // Defina su ROI inicial del objeto. Predeterminado: new Rect(50, 50, 100, 100)
DrawRect = true // Predeterminado: true
};
var trackerBlock = new CVTrackerBlock(trackerSettings);
// Nota: El rastreador se inicializa con InitialRect.
// Para reinicializar el seguimiento en un nuevo objeto/ubicación en tiempo de ejecución:
// 1. Pausar o Detener el pipeline.
// 2. Actualizar trackerBlock.Settings.InitialRect (o crear nuevo CVTrackerSettings).
// Generalmente es más seguro actualizar configuraciones en un pipeline detenido/pausado,
// o si el bloque/elemento soporta cambios de propiedades dinámicos, esa podría ser una opción.
// Modificar directamente `trackerBlock.Settings.InitialRect` podría no reinicializar el elemento GStreamer subyacente.
// Puede que necesite remover y re-añadir el bloque, o consultar la documentación del SDK para capacidades de actualización en vivo.
// 3. Reanudar/Iniciar el pipeline.
var videoRenderer = new VideoRendererBlock(pipeline, VideoView1); // Asumiendo VideoView1
// Conectar bloques
pipeline.Connect(videoSource.Output, trackerBlock.Input0);
pipeline.Connect(trackerBlock.Output, videoRenderer.Input);
// Iniciar pipeline
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Observaciones¶
Asegúrese de que el paquete NuGet VisioForge OpenCV esté referenciado. La elección del algoritmo de seguimiento puede impactar significativamente el rendimiento y la precisión. Algunos algoritmos (como CSRT, KCF) son generalmente más robustos que los más antiguos (como Boosting, MedianFlow). Algunos rastreadores podrían requerir que los módulos contrib de OpenCV estén disponibles en su compilación/distribución de OpenCV.