機械学習による図形描画

機械学習の結果を基に,図形の描画を行う.

今回は,推定結果から楕円と四角どちらかを描画する.

shapepredict.gif

図形の推定

前回は文字で推定結果を表示したが,そこで対応する図形をMainCanvasに追加すればよい.

      private void MainCanvas_PointerReleased(object sender, PointerRoutedEventArgs e)
      {
          //drawingStrokeがnullでなければ,描き終わったことを示すためnullにしておく
          if (drawingStroke != null)
          {
              if (strokePredictModel != null)
              {
                  var predEngine = mlContext.Model.CreatePredictionEngine<StrokeData, StrokePredict>(strokePredictModel);
                  var result = predEngine.Predict(GetStrokeData(drawingStroke));
                  if (result.Prediction)
                  {
                      AddMessage("Ellipse");
                      //ここにストロークの位置,大きさで楕円をキャンパスに追加
                  }
                  else
                  {
                      AddMessage("Rect");
                      //ここにストロークの位置,大きさで四角形をキャンパスに追加
                  }
              }

              drawingStroke = null;
          }
      }

ストロークの位置,大きさ

Path.Data.Bounds

によりRect型で取得できる

var rect = drawingStroke.Data.Bounds;
//rect.X //ストロークを囲う矩形の左上X座標
//rect.Y //ストロークを囲う矩形の左上Y座標
//rect.Width  //ストロークを囲う矩形の横幅
//rect.Height //ストロークを囲う矩形の縦幅

図形の生成

楕円はWindows.UI.Xaml.Shapes.Ellipse,四角形はWindows.UI.Xaml.Shapes.Rectangleを使用する.

var ellipse = new Windows.UI.Xaml.Shapes.Ellipse {
    Stroke = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)),
    StrokeThickness = 1
};
ellipse.Width = 100;
ellipse.Height = 100;
MainCanvas.Children.Add(ellipse);
Canvas.SetLeft(ellipse, 50);
Canvas.SetTop(ellipse, 50);

課題提出方法

招待されているBoxアップロードフォルダ「情報メディア基礎ゼミ(森谷)」の「第6回」へ,完成させた課題のソリューションフォルダをZIP圧縮し,ファイルを以下の名前でアップロードしてください.

ファイル名:XXFIXXX_6th.zip(例:18FI999_6th.zip)

提出締め切り:6月13日(金) 23:59

BOXアップロードフォルダの招待メールが来ていない方は森谷までメール連絡ください.

任意課題

ストロークの色や太さを変更できる,図形補間のオンオフ,画像の保存など,独自の機能を実装せよ.

ヒント:Shapeクラスの図形もXAMLからUI上に配置し,イベントを持たせることが可能である.

<Ellipse x:Name="PenColorBlack" Margin="10, 10, 10, 10" Fill="Black" Width="20" Height="20" RelativePanel.Below="PredictModeSwitch" PointerPressed="PenColorBlack_PointerPressed"></Ellipse>
<Ellipse x:Name="PenColorGreen" Margin="10, 10, 10, 10" Fill="LimeGreen" Width="20" Height="20" RelativePanel.Below="PredictModeSwitch" RelativePanel.RightOf="PenColorBlack" PointerPressed="PenColorGreen_PointerPressed"></Ellipse>
advance.gif

課題提出方法

招待されているBoxアップロードフォルダ「情報メディア基礎ゼミ(森谷)」の「第6回」へ,完成させた課題のソリューションフォルダをZIP圧縮し,ファイルを以下の名前でアップロードしてください.

ファイル名:XXFIXXX_6th_advance.zip(例:18FI999_6th_advance.zip)

提出締め切り:6月13日(木) 23:59

BOXアップロードフォルダの招待メールが来ていない方は森谷までメール連絡ください.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-06-09 (月) 12:12:19