Cara Comunità,
poiché i video stanno diventando sempre più importanti come "dati di misurazione" da valutare,
Sto pensando a un'applicazione che combina un video di un processo con altri dati scalari (serie temporali).
Ad esempio, una finestra JMP che riproduce un video nella metà destra e mostra altri dati di serie temporali nella metà sinistra,
indicando con una linea verticale, dove sulla scala temporale il video mostra l'immagine corrispondente ad alcuni dati di processo o di misura.
Per visualizzare i dati delle serie temporali, JMP è la scelta giusta, ma che dire della riproduzione di video?
È possibile riprodurre un video in JMP?
È possibile leggere/analizzare dati video (es. mp4, mpeg, ... file)?
Qualche esperienza con compiti come questo, qualche suggerimento?
Grazie in anticipo!
PS: utilizzando JMP16.1(Pro) su win10
JMP gestisce file JPG e PNG senza alcun software esterno. Puoi trasformarli in matrici RGB ed eseguire le tue elaborazioni.
Per caricare un video, fotogramma per fotogramma, puoi usare OpenCV e Python, qualcosa del genere
Interfaccia Python di JMP che utilizza OpenCV per trovare un volto.
ero solito python -m pip install opencv-python installare.
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>
Ho preso in prestito l'esempio dal collegamento e l'ho modificato in modo che JMP potesse guidarlo un'immagine alla volta. È molto veloce su questo video a bassa risoluzione, ma la maggior parte dei volti non viene riconosciuta, probabilmente perché non sono rivolti direttamente verso la fotocamera. OpenCV ha molti algoritmi che troverai utili. ho costruito questo video molto tempo fa per il rilevamento del movimento.
Non ho provato la webcam, ma credo che dovrebbe funzionare.
Grazie mille, penso che funzionerà, ho bisogno di un po' di tempo per testare in dettaglio.
Grande! Se segui il percorso Python + OpenCV, mi piacerebbe vedere cosa hai fatto.
(Sono un po' imbarazzato per non aver gestito meglio l'eccezione di fine file. rc==-1 rileva tutto ciò che va storto, il che è abbastanza buono quando tutto va bene. Potrebbe essere necessario provare ... tranne nel codice pyGet per distinguere tra l'eccezione EOF che ti aspetti e altre eccezioni (come memoria insufficiente, ...) che potrebbero verificarsi.)
Chiunque altro, Apri CV è una libreria di visione artificiale. Il rilevamento dei volti è solo una delle possibilità.