OpenPoseを用いた深層学習を使用した体の姿勢の推定の例で画像ではなく,動画ファイルにおける人の姿勢の推定を行う方法について
23 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposte (1)
Kojiro Saito
il 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
としたらできると思います。
Vedere anche
Categorie
Scopri di più su 深層学習、セマンティック セグメンテーション、検出 in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!