読者です 読者をやめる 読者になる 読者になる

パワポのスライド上でプログラムを動かす

はじめに

パワーポイントには.NET Frameworkのプログラムを貼り付ける機能があります。これを用いることで、よりインタラクティブな発表を行うことができます。

つくり方

前回の記事でExcelから.NET Frameworkの自作関数を呼び出す方法を調べました。COMと呼ばれるインターフェースにより、ExcelVBAからメソッドを見えるようにしています。

今回は.NET Frameworkでつくった自作Formをパワポから参照できるようにして、スライド上に自作のプログラムを貼り付けます。前回は一つの関数だけなので簡単にできましたが、Formとなると様々なイベントなどをCOMで見えるようにする必要があり難しそうです。調べてみるとMicrosoftがサンプルを公開していたので、これを利用したいと思います。
Windows 8 C# ActiveX control (CSActiveX) sample in C#, XML for Visual Studio 2008

顔検出

前回はUSBカメラ画像の表示をしたので、ちょっと変えて顔検出結果をリアルタイムにパワポ上に表示させてみます。Haar-like/AdaBoostの顔検出だとOpenCV実装済みなので、試してみましょう。
Microsoftのサンプルにユーザーコントロールが入っているのでそれを顔検出用に変更します。
StartボタンとPictureBoxとラベルがあります。

実装は分かりやすくするため、StartボタンのClickイベントに書いていきます。

Cpp.FaceDetection _facedetection = new Cpp.FaceDetection();
private void startButton1_Click(object sender, EventArgs e)
{
  Task.Factory.StartNew(() =>
  {
    for (; ; )
    {
      // 検出結果画像
      this.pictureBox1.Image = _facedetection.Run();
      // 検出数
      this.label1.Text = string.Format("{0}", _facedetection.num_detected);
    }
  });
}

OpenCVの顔検出はC++のFaceDetectionクラスに実装しました。Run()を呼ぶとBitmapが返ってきます。
プロジェクトを管理者権限でビルドすると、パワポから参照できるようになっています。開発タブのコントロール選択から選べるはずです。

パワポの発表画面を開いて、Startボタンを押すと検出がリアルタイムで行われるようになりました。顔は自分のだと恥ずかしいので、絵文字にしてます。(ほんとは検出しちゃだめなんですけどね)


f:id:wildpie:20141230144243p:plain

Consoleの表示

スクリプト言語系のConferenceに行くと、発表中にプログラムを動かす光景をよく見ます。ここではパワポ上でcmd.exeを動かしてみます。
(参考:http://uchukamen.com/Programming1/Process/
パワポ上でPythonが動くとおもしろいかなと思って試したんですが、このリンクの方法では動きませんでした。


f:id:wildpie:20141230151916p:plain

グラフの表示

ちょっと前の記事でC#のChartを使って散布図の書き方を調べました。その後、Oxyplotという使いやすいのがあったので移行したんですが、Chartで散布図をかいてみます。内容はこの記事のまんまです。

PRML本のclassificationという例を対象に二値分類を行います。アルゴリズムはSoft Confidence-Weight Learningです。オンライン学習なので点が追加されるたびに識別線が更新されます。


f:id:wildpie:20141230155451p:plain

アニメーションで識別線が更新されていきます。
最終的にはこんな感じになります。


f:id:wildpie:20141230155524p:plain
マウスのクリックイベントで点を追加するなんて実装でもおもしろいかもしれません。

まとめ

発表をよりわかりやすくするために.NETのプログラムをパワポに貼り付けました。むかし大学のアルゴリズムの授業でパワポのアニメーションを効果的に使用している先生がいてすごく感動しました。ただ、アニメーションを作るのは大変ですので、プログラムで動きをつけるのは一つの手かもしれません。この記事がよりわかりやすい発表の手助けになれば幸いです。と言いたいとこですが、他のパソコンでは動作しない あんど 動きが怪しい ので実際の発表には使えないです。(*_ _)