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

31 views (last 30 days)
WH
WH on 14 Apr 2022
Edited: WH on 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");

Answers (1)

Kojiro Saito
Kojiro Saito on 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 Comment
WH
WH on 22 Apr 2022
Edited: WH on 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");

Sign in to comment.

Categories

Find more on 深層学習、セマンティック セグメンテーション、検出 in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!