OpenPoseを用​いた深層学習を使用し​た体の姿勢の推定の例​で画像ではなく,動画​ファイルにおける人の​姿勢の推定を行う方法​について

23 visualizzazioni (ultimi 30 giorni)
WH
WH il 14 Apr 2022
Modificato: WH il 22 Apr 2022
MATLAB初心者のものです.現在、深層学習を使用した体の姿勢の推定の例にあるコードを実行しています.
ここで、jpgやpngの画像での認識は確認できましたが、動画のmp4ファイルを実行するとエラー文が出てきて姿勢の推定が行なえません.
コードのどの部分を修正すれば良いのでしょうか?
%実行したコード
dataDir = fullfile(tempdir,'OpenPose');
trainedOpenPoseNet_url = 'https://ssd.mathworks.com/supportfiles/vision/data/human-pose-estimation.zip';
downloadTrainedOpenPoseNet(trainedOpenPoseNet_url,dataDir)
unzip(fullfile(dataDir,'human-pose-estimation.zip'),dataDir)
modelfile = fullfile(dataDir,'human-pose-estimation.onnx');
layers = importONNXLayers(modelfile,"ImportWeights",true);
layers = removeLayers(layers,layers.OutputNames);
net = dlnetwork(layers);
%写真
%im = imread("visionteam.jpg");
%im = imread("zitennsya.png");
%動画
im = imread("dance.mp4");
imshow(im)
netInput = im2single(im)-0.5;
netInput = netInput(:,:,[3 2 1]);
netInput = dlarray(netInput,"SSC");
[heatmaps,pafs] = predict(net,netInput);
heatmaps = extractdata(heatmaps);
montage(rescale(heatmaps),"BackgroundColor","b","BorderSize",3)
idx = 1;
hmap = heatmaps(:,:,idx);
hmap = imresize(hmap,size(im,[1 2]));
imshowpair(hmap,im);
heatmaps = heatmaps(:,:,1:end-1);
pafs = extractdata(pafs);
montage(rescale(pafs),"Size",[19 2],"BackgroundColor","b","BorderSize",3)
idx = 1;
impair = horzcat(im,im);
pafpair = horzcat(pafs(:,:,2*idx-1),pafs(:,:,2*idx));
pafpair = imresize(pafpair,size(impair,[1 2]));
imshowpair(pafpair,impair);
params = getBodyPoseParameters;
poses = getBodyPoses(heatmaps,pafs,params);
renderBodyPoses(im,poses,size(heatmaps,1),size(heatmaps,2),params);
%エラー文
使い方によるエラー imread>get_format_info
ファイル形式を特定できません。
エラー: imread (385)
fmt_s = get_format_info(fullname);
エラー: sample2 (26)
im = imread("dance.mp4");

Risposte (1)

Kojiro Saito
Kojiro Saito il 18 Apr 2022
こちらのドキュメント「ビデオ ファイルの読み取り」が参考になると思います。imreadは静止画像用の読み込み関数なので、mp4の動画の場合は、VideoReaderreadFrameで読み取れます。
1フレームだけ読み取る場合は
vidObj = VideoReader"dance.mp4");
im = readFrame(vidObj);
とし、動画の全フレームを読み取ってそれぞれ処理する場合は、
vidObj = VideoReader"dance.mp4");
while hasFrame(vidObj)
im = readFrame(vidObj);
imshow(im)
% netInput からrenderBodyPoses までの処理をここに記載
end
としたらできると思います。
  1 Commento
WH
WH il 22 Apr 2022
Modificato: WH il 22 Apr 2022
1フレーム分に関しては実行できました.
しかしながら,全フレームをやろうとするとエラーが出てきます.
どのように解決すればいいでしょうか?
-----エラー文
使い方によるエラー VideoReader/initReader
指定されたファイル名は、MATLAB パス内に見つかりませんでした。
エラー: audiovideo.internal.IVideoReader (行 136)
initReader(obj, fileName, currentTime);
エラー: VideoReader (行 104)
obj@audiovideo.internal.IVideoReader(varargin{:});
エラー: OpenPose (行 30)
vidObj = VideoReader("dance.mp4");

Accedi per commentare.

Categorie

Scopri di più su 深層学習、セマンティック セグメンテーション、検出 in Help Center e File Exchange

Prodotti


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!