亲爱的社区,
随着视频作为评估“测量数据”越来越重要,
我正在考虑一个将流程视频与其他标量(时间序列)数据相结合的应用程序。
例如,一个 JMP 窗口在右半部分播放视频,在左半部分显示其他时间序列数据,
用垂直线表示,视频在时间尺度上显示与某些过程或测量数据相对应的图片。
对于显示时间序列数据,JMP 是正确的选择,但播放视频呢?
是否可以在 JMP 中播放视频?
是否可以读取/分析任何视频数据(例如 mp4、mpeg、...文件)?
有这样的任务经验,有什么建议吗?
提前致谢!
PS:在win10上使用JMP16.1(Pro)
JMP 无需任何外部软件即可处理 JPG 和 PNG 文件。 您可以将它们转换为 RGB 矩阵并进行自己的处理。
要逐帧加载视频,您可以使用 OpenCV 和 Python,类似这样
JMP 的 Python 接口使用 OpenCV 找人脸。
我用了python -m pip 安装 opencv-python安装。
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>
我从链接中借用了示例并对其进行了修改,以便 JMP 可以一次驱动它一张图片。 这段低分辨率视频的速度非常快,但大多数人脸都无法识别,可能是因为他们没有直接面对摄像机。 OpenCV 有很多你会发现有用的算法。 我盖了这很久以前的视频用于运动检测。
我没有尝试使用网络摄像头,但相信它应该可以工作。
非常感谢,我认为这会起作用,我需要一些时间来详细测试。
伟大的! 如果你走 Python+OpenCV 路线,我想看看你做了什么。
(我有点不好意思没有更好地处理文件结束异常。 rc==-1 正在检测出任何问题,当一切顺利时这已经足够好了。 您可能需要尝试...除了在 pyGet 代码中以区分您期望的 EOF 异常和可能发生的其他异常(如内存不足,...)。)
还有谁,开放式CV是一个计算机视觉库。 人脸检测只是一种可能性。