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

조회 수: 15 (최근 30일)
WH
WH 2022년 4월 14일
편집: WH 2022년 4월 22일
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");

답변 (1개)

Kojiro Saito
Kojiro Saito 2022년 4월 18일
こちらのドキュメント「ビデオ ファイルの読み取り」が参考になると思います。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
WH
WH 2022년 4월 22일
편집: WH 2022년 4월 22일
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");

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Motion Detection에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!