OpenPoseを用いた深層学習を使用した体の姿勢の推定の例で画像ではなく,動画ファイルにおける人の姿勢の推定を行う方法について
31 views (last 30 days)
Show older comments
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");
0 Comments
Answers (1)
Kojiro Saito
on 18 Apr 2022
こちらのドキュメント「ビデオ ファイルの読み取り」が参考になると思います。imreadは静止画像用の読み込み関数なので、mp4の動画の場合は、VideoReaderとreadFrameで読み取れます。
1フレームだけ読み取る場合は
vidObj = VideoReader"dance.mp4");
im = readFrame(vidObj);
とし、動画の全フレームを読み取ってそれぞれ処理する場合は、
vidObj = VideoReader"dance.mp4");
while hasFrame(vidObj)
im = readFrame(vidObj);
imshow(im)
% netInput からrenderBodyPoses までの処理をここに記載
end
としたらできると思います。
See Also
Categories
Find more on 深層学習、セマンティック セグメンテーション、検出 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!