www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I5_07_7_myPplDetection_kalman.m

    clc;clear;close all;imtool close all;

%% 僐儞僺儏乕僞價僕儑儞僨儌丗恖偺専弌丒僩儔僢僉儞僌
I = imread('I5_07_7_people2.png');
I1 = imresize(I, 1.5, 'Antialiasing',false);
figure; imshow(I);       % 1僼儗乕儉昞帵

%% 恖偺専弌 乮偙偙偱偼丄惢昳撪憼偺恖偺専弌婍傪巊梡乯
roi = [40 95 320 140];     % 専嶕椞堟傪惂尷乮嬻側偳偱偼専弌晄梫乯
bboxes = detectPeopleACF(I1, roi, 'Model','caltech', ...
            'WindowStride',2, 'NumScaleLevels', 4)

%% 専弌偝傟偨恖偺埵抲偵丄巐妏偄榞偲僥僉僗僩傪捛壛
I2 = insertObjectAnnotation(I1, 'rectangle', bboxes, 'People', 'FontSize',24, 'LineWidth', 2);
imshow(I2);shg;

%% 摦夋偱偺専弌
% 摦夋僼傽僀儖偐傜夋憸傪撉崬傓僆僽僕僃僋僩偺惗惉
videoReader = vision.VideoFileReader('vippedtracking.mp4', 'VideoOutputDataType','uint8');
% 價僨僆昞帵梡偺僆僽僕僃僋僩偺嶌惉
sz = get(0,'ScreenSize');
%videoPlayer  = vision.DeployableVideoPlayer('Location',[10 sz(4)-300]);
videoPlayer  = vision.DeployableVideoPlayer();

% START/STOP儃僞儞昞帵
a1=true; a2=true;
sz = get(0,'ScreenSize');
figure('MenuBar','none','Toolbar','none','Position',[20 sz(4)-150 100 120])
uicontrol('Style', 'pushbutton', 'String', 'START',...
        'Position', [20 70 80 40], 'Callback', 'a1=false;');
uicontrol('Style', 'pushbutton', 'String', 'STOP',...
        'Position', [20 20 80 40], 'Callback', 'a2=false;');
step(videoPlayer, I1);   
while a1; drawnow; end      % START儃僞儞偑墴偝傟傞傑偱懸偮
      
cnt = 1;
while ~isDone(videoReader) && a2 && cnt<230
  I = step(videoReader);   % 1僼儗乕儉撉崬傒
  I = imresize(I, 1.5, 'Antialiasing',false);

  [bboxes, scores] = detectPeopleACF(I, roi, ...
          'Model','caltech', 'WindowStride', 2, 'NumScaleLevels', 4);

  % 専弌偝傟偨恖偺埵抲偵丄巐妏偄榞偲僥僉僗僩傪捛壛
  I2 = insertShape(I, 'rectangle', bboxes, 'LineWidth', 2);
  
  step(videoPlayer, I2);
  
  drawnow limitrate;
  cnt = cnt +1;
end

%% 嵞搙幚峴乮僂僃僀僩傪憓擖偟偰備偭偔傝幚峴乯
release(videoReader);
a1=true; a2=true;
step(videoPlayer, I1);   
while a1; drawnow; end
      
cnt = 1;
while ~isDone(videoReader) && a2 && cnt<230
  I = step(videoReader);   % 1僼儗乕儉撉崬傒
  I = imresize(I, 1.5, 'Antialiasing',false);

  [bboxes, scores] = detectPeopleACF(I, roi, ...
          'Model','caltech', 'WindowStride', 2, 'NumScaleLevels', 4);

  % 専弌偝傟偨恖偺埵抲偵丄巐妏偄榞偲僥僉僗僩傪捛壛
  I2 = insertShape(I, 'rectangle', bboxes, 'LineWidth', 2);
  
  step(videoPlayer, I2);
  
  drawnow limitrate;
  pause(0.2);
  cnt = cnt +1;
end


%% 僩儔僢僉儞僌傪梡偄偰曗彏乮専弌寢壥丗墿怓丄曗彏寢壥丗愒怓乯%%%%%%%%%%%%%%%%%%%
% 塣摦曽掱幃傪梡偄梊應偟偨傝丄岆嵎傪娷傓娤應抣傪曗惓
% 僇儖儅儞僼傿儖僞乕偲丄儃乕儖偺僙僌儊儞僥乕僔儑儞偺丄僷儔儊乕僞愝掕乮M師尦偺捈岎嵗昗宯偵懳墳乯
% 僇儖儅儞僼傿儖僞乕偺僐儞僗僩儔僋僞傪梡偄傞偙偲偱嵶偐偔儌僨儖偺掕媊摍壜擻
param.motionModel           = 'ConstantVelocity';  % 埵抲悇掕偵梡偄傞塣摦曽掱幃丗堦掕懍搙偱堏摦偡傞偲偟偰丄師偺埵抲傪悇掕丅摍壛懍搙儌僨儖傕壜
param.initialEstimateError  = [2 1];               % 偦傟偧傟僩儔僢僉儞僌弶婜偺埵抲瑩x偺悇掕抣偵懳偡傞暘嶶 (惓婯暘晍)
param.motionNoise           = [5, 5];              % 塣摦曽掱幃偵懳偡傞岆嵎偺暘嶶 (埵抲丄懍搙)
param.measurementNoise      = 100;                 % 専弌偝傟偨埵抲偵懳偡傞岆嵎偺暘嶶 (惓婯暘晍)
  
% 僔僗僥儉僆僽僕僃僋僩嶌惉
release(videoReader);
isTrackInitialized    = false;

release(videoReader);
a1=true; a2=true;
step(videoPlayer, I1);   
while a1; drawnow; end
% 摦夋傪堦僼儗乕儉偢偮張棟

cnt = 1;
while ~isDone(videoReader) && a2 && cnt<230

  I = step(videoReader);     % 1僼儗乕儉撉傒庢傝

  % 恖(慜宨)偺専弌丒拞怱揰専弌
  I = imresize(I, 1.5, 'Antialiasing',false);  
  [bboxes, scores] = detectPeopleACF(I, roi, ...
            'Model','caltech', 'WindowStride', 2, 'NumScaleLevels', 4);

  % 恖偑専弌偝傟偨応崌丄偦偺埵抲偵墿怓偱巐妏榞傪昤夋
  if ~isempty(bboxes)     
    isObjectDetected = true;
    detectedLoc = [bboxes(1,1)+bboxes(1,3)/2  bboxes(1,2)+bboxes(1,4)/2];   %拞怱偺寁嶼
    % 専弌偝傟偨恖偺埵抲偵丄巐妏偄榞(墿)偲拞怱偵娵(墿)傪昤夋
    I = insertShape(I, 'rectangle', bboxes, 'LineWidth', 2);
    I = insertShape(I, 'FilledCircle', [detectedLoc 5], 'Color','Yellow', 'Opacity',1);
  else
    isObjectDetected = false;
    detectedLoc = [];
  end

  if ~isTrackInitialized   % 僩儔僢僉儞僌巒傑偭偰偄側偄偲偒
    if isObjectDetected      % 嵟弶偵恖傪専弌偟偨偲偒
      % 恖偑嵟弶偵専弌偝傟偨帪丄僇儖儅儞僼傿儖僞乕傪嶌惉
      kalmanFilter = configureKalmanFilter(param.motionModel, ...
        detectedLoc, param.initialEstimateError, ...             %専弌偝傟偨応強傪弶婜埵抲偵愝掕
        param.motionNoise, param.measurementNoise);

      isTrackInitialized = true;
      trackedLoc = correct(kalmanFilter, detectedLoc);
    else   % 恖偑傑偩尒偮偐偭偰偄側偄応崌
      trackedLoc = [];label = '';
    end

  else    % 僩儔僢僉儞僌拞偺応崌 (僇儖儅儞僼傿儖僞偱僩儔僢僉儞僌)
    if isObjectDetected    % 恖偑専弌偝傟偨応崌
      predict(kalmanFilter);  % 夋憸僲僀僘摍偵傛傞埵抲専弌岆嵎傪丄梊應抣偱掅尭(correction)
      trackedLoc = correct(kalmanFilter, detectedLoc);
    else  % 僩儔僢僉儞僌拞偵恖偑尒偮偐傜側偐偭偨応崌
      trackedLoc = predict(kalmanFilter); % 恖偺埵抲傪梊應
    end
  end

  % 僩儔僢僉儞僌埵抲偵愒娵傪忋彂偒
  if ~isempty(trackedLoc)
    I = insertShape(I, 'FilledCircle', [trackedLoc 5], 'Color','Red', 'Opacity',1); 
  end

  step(videoPlayer, I);   % 價僨僆1僼儗乕儉昞帵
  
  pause(0.2);
  cnt = cnt +1;
  drawnow limitrate;
end % while

release(videoReader);
release(videoPlayer);

%% 廔椆










% Copyright 2015 The MathWorks, Inc.