Estimada comunidad,
a medida que los videos se vuelven cada vez más importantes como "datos de medición" para evaluar,
Estoy pensando en una aplicación que combine un video de un proceso con otros datos escalares (series de tiempo).
Por ejemplo, una ventana JMP que reproduce un video en la mitad derecha y muestra otros datos de series temporales en la mitad izquierda,
indicando con una línea vertical, en qué escala de tiempo el video muestra la imagen correspondiente a algún proceso o dato de medición.
Para mostrar datos de series temporales, JMP es la elección correcta, pero ¿qué pasa con la reproducción de videos?
¿Es posible reproducir un video en JMP?
¿Es posible leer/analizar datos de video (por ejemplo, archivos mp4, mpeg, ...)?
¿Alguna experiencia con tareas como esta, alguna sugerencia?
¡Gracias por adelantado!
PD: usando JMP16.1 (Pro) en win10
JMP maneja archivos JPG y PNG sin ningún software externo. Puede convertirlos en matrices RGB y hacer su propio procesamiento.
Para cargar un video, cuadro por cuadro, puede usar OpenCV y Python, algo como esto
JMP's Python interface using OpenCV to find a face.Interfaz Python de JMP usando OpenCV para encontrar una cara.
solía python -m pip install opencv-python instalar.
pySetup =
"\[
# https://www.c-sharpcorner.com/article/detecting-faces-from-image-and-video-using-python/
# https://stackoverflow.com/questions/66942582/error-215assertion-failed-empty-in-function-cvcascadeclassifierdetec
# https://www.nps.gov/media/video/view.htm?id=C8B260AC-1DD8-B71B-0B793ECB496E64E5
import cv2
# Load the cascade
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# To capture video from webcam.
#cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture(file)
strcap = str(cap)
#print(cap,flush=True)
]\";
pyFinish = "\[
# Release the VideoCapture object
cap.release()
]\";
pyGet =
"\[
# Read the frame
_, img = cap.read()
#print(img,flush=True)
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Detect the faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# Draw the rectangle around each face
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Display
#cv2.imshow('Video', img)
#print(type(img),img.shape)
red = img[:,:,2]
green = img[:,:,1]
blue = img[:,:,0]
]\";
Python Init();
file = "https://www.nps.gov/nps-audiovideo/legacy/nature/C8B260AC-1DD8-B71B-0B793ECB496E64E5/nri-EOIntro3_240x134.mp4";
Python Execute( {file}, {strcap}, pySetup );
Show( strcap );
New Window( "x", bb = Border Box( Text Box( "" ) ), f=textbox() );
Wait( 1 );
frame=0;
While( 1,
x = Log Capture( rc = Python Execute( {}, {red, green, blue, faces}, pyGet ) );
If( Trim( x ) != "", Show( x ) );
If( rc == -1, Break() ); // -1 is python fail on eof
img = New Image( "rgb", {red / 255, green / 255, blue / 255} );
(bb << child) << delete;
bb << append( img );
frame += 1;
f<<SETTEXT></SETTEXT>
Tomé prestado el ejemplo del enlace y lo modifiqué para que JMP pudiera mostrar una imagen a la vez. Es muy rápido en este video de baja resolución, pero la mayoría de las caras no se reconocen, probablemente porque no miran directamente a la cámara. OpenCV tiene muchos algoritmos que encontrará útiles. construí este video hace mucho tiempo para la detección de movimiento.
No probé la cámara web, pero creo que debería funcionar.
Muchas gracias, creo que esto funcionará, necesito algo de tiempo para probar en detalle.
¡Estupendo! Si sigue la ruta Python+OpenCV, me gustaría ver lo que hizo.
(Estoy un poco avergonzado de no haber manejado mejor la excepción de fin de archivo. El rc==-1 está detectando cualquier cosa que salga mal, lo cual es lo suficientemente bueno cuando todo va bien. Es posible que necesite intentarlo... excepto en el código pyGet para distinguir entre la excepción EOF que espera y otras excepciones (como falta de memoria,...) que podrían ocurrir).
Alguien mas, OpenCV es una biblioteca de visión por computadora. La detección de rostros es solo una posibilidad.