親愛的社區,
隨著影片作為評估的「測量數據」變得越來越重要,
我正在考慮一個將流程影片與其他標量(時間序列)資料結合的應用程式。
例如,一個 JMP 視窗在右半部分播放視頻,並在左半部分顯示其他時間序列數據,
以垂直線表示,影片在時間刻度上顯示與某些流程或測量資料相對應的圖片。
對於顯示時間序列數據,JMP是正確的選擇,但是播放影片呢?
可以在 JMP 中播放影片嗎?
是否可以讀取/分析任何視訊資料(例如 mp4、mpeg、...檔案)?
有類似任務的經驗嗎,有什麼建議嗎?
先致謝!
PS:在win10上使用JMP16.1(Pro)
偉大的! 如果你走Python+OpenCV路線,我想看看你做了什麼。
(我有點尷尬沒有更好地處理文件結尾異常。 rc==-1 正在偵測任何出錯的情況,當一切順利時這就足夠了。 您可能需要在 pyGet 程式碼中使用 try... except 來區分您期望的 EOF 異常和可能發生的其他異常(例如記憶體不足,...)。)
還有誰,開放式電腦視覺是一個電腦視覺庫。 人臉偵測只是一種可能性。
非常感謝,我認為這會起作用,我需要一些時間來詳細測試。
JMP 無需任何外部軟體即可處理 JPG 和 PNG 檔案。 您可以將它們轉換為 RGB 矩陣並進行自己的處理。
要逐幀加載視頻,您可以使用 OpenCV 和 Python,如下所示
JMP's Python interface using OpenCV to find a face.JMP's Python interface using OpenCV to find a face.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 有很多有用的演算法。 我建造了這很久以前的影片用於運動檢測。
我沒有嘗試網路攝影機,但相信它應該可以工作。