2010-07-19
Silverlight 4 で Webカメラキャプチャ & JPEG としてローカル保存
Silverlight 4 では、DirectShow でやろうとするとそれなりに面倒な、Webカメラが対応している解像度、フレームレートの一覧が VideoCaptureDevice.SupportedFormats であっさり取れてしまいます。.NET Framework 本家にも実装してほしいですね。
Silverlight 4 の標準ライブラリでは、JPEG 画像が生成できないので、Silverlight 界隈では、ほぼデファクトスタンダードとなっている FJCore で JPEG 画像を生成しています。
利用方法は以下のような感じ。
// 保存ボタンが押されたら、保存ダイアログを開き、 // WriteableBitmap を Jpeg に変換して保存 private void buttonSave_Click(object sender, RoutedEventArgs e) { bool? dialogResult = this.saveDialog.ShowDialog(); if (dialogResult == true) { // WriteableBitmap を JPEGに変換して保存 byte[] fileBytes = CreateImageAsJpeg(_bmp, 80); // ユーザーのボタン操作によってファイル保存処理を // 行わないとセキュリティ例外 using (Stream fs = (Stream)this.saveDialog.OpenFile()) { // ユーザーが指定したファイル名で保存 fs.Write(fileBytes, 0, fileBytes.Length); fs.Close(); } } }
CreateImageAsJpeg の中身はこのような感じ。http://blogs.msdn.com/b/davrous/archive/2009/12/18/silverlight-4-tutorial-adding-avatar-support-to-the-wcf-ria-services-business-template.aspx のコードを若干修正。
/// <summary> /// ビットマップをJpegのバイト列へ変換します /// </summary> /// <param name="bitmap">変換元画像</param> /// <param name="quality">圧縮品質(0:最高圧縮率〜100:最高品質)</param> /// <returns>Jpegエンコードされたバイト列</returns> private byte[] CreateImageAsJpeg(WriteableBitmap bitmap, int quality) { int width = bitmap.PixelWidth; int height = bitmap.PixelHeight; int bands = 3; byte[][,] raster = new byte[bands][,]; for (int i = 0; i < bands; i++) { raster[i] = new byte[width, height]; } for (int row = 0; row < height; row++) { for (int column = 0; column < width; column++) { int pixel = bitmap.Pixels[width * row + column]; raster[0][column, row] = (byte)(pixel >> 16); raster[1][column, row] = (byte)(pixel >> 8); raster[2][column, row] = (byte)pixel; } } ColorModel model = new ColorModel { colorspace = ColorSpace.RGB }; FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster); // JPEG形式でエンコード MemoryStream stream = new MemoryStream(); FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, quality, stream); encoder.Encode(); // MemoryStream の先頭に移動 stream.Seek(0, SeekOrigin.Begin); // MemoryStream の内容を配列にコピー byte[] binaryData = new Byte[stream.Length]; long bytesRead = stream.Read(binaryData, 0, (int)stream.Length); return binaryData; }
2010-05-16
C# と .NET Micro Framework ではじめるマイコンプログラミング
マイコン程度のスペックで動作する、.NET Micro Framework というエディションがあります。これを利用することで、マイコンのプログラミングが C# で行えるようになります。
.NET Micro Framework が動作する Arduino とピン互換なボード FEZ Domino が日本でも入手できるようになったので、早速試してみました。このボードは、microSD カードの読み書きや USB ホストにも対応しています。
USBケーブルが刺さっていますが、これは電源用であり、別途電源を用意すればスタンドアロンで動作します。もちろん、USBケーブルをつないだ状態であれば、ブレークポイントを設定しながら実機上でデバッグすることも可能です。
上記の動画のアプリのために記述したソースコードはこれだけ。.NET Micro Framework の標準ライブラリのみで記述してみました。
.NET Micro Framework は、初期設定さえしてしまえば、通常の Visual Studio での .NETアプリ開発とほとんど変わらない感覚で扱うことができます。Visual Studio ではおなじみのコード補完機能 IntelliSense なども、もちろん有効ですので、キーを打った回数は全体の文字数の1/3くらいかと思います。
以下に、簡単ですが導入までの手順をまとめてみました。動作は、Windows 7 (x64) 上で確認しています。
デバイスの入手から開発環境の構築まで
1. デバイスの入手
今回は http://tinyclr.jp/products/fez-domino.htm から購入しました。
2. Visual C# 2008 Express SP1 の入手
現時点の .NET Micro Framework は Visual Studio 2010 には対応していないようなので、
http://www.microsoft.com/express/downloads/#2008-Visual-CS
で、Visual Studio 2008 Express タブ -> Visual C# 2008 Express Edition を選択し、Japanese を選択してダウンロード、インストールします。
3. .NET Micro Framework 4.0 SDK の入手
から Software Development Kit (SDK) を入手し、インストールします。
デバイスマネージャーから手動でドライバをインストールします。
ドライバのファイルは以下にあります。
(x86の場合)
C:\Program Files\GHI Electronics\GHI NETMF v4.0 SDK\USB Drivers\
(x64の場合)
C:\Program Files (x86)\GHI Electronics\GHI NETMF v4.0 SDK\USB Drivers\
インストールが完了すると、下図のように表示されます。
6. 動作確認
ボードと通信ができているかどうかを確認するためのツールとして、MFDeploy.exe が用意されています。MFDeploy.exe は以下の場所にインストールされています。
(x86の場合)
C:\Program Files\Microsoft .NET Micro Framework\v4.0\Tools
(x64の場合)
C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.0\Tools
起動すると、以下のような画面が表示されます。
Device で USB を選択し、 Ping ボタンをクリックすると、ボードが正常であれば、
Pinging... TinyCLR
といった応答が返ります。異常がある場合には、Error が返ります。
以上で開発環境の設定は終了です。
開発手順
1. プロジェクトの作成
Visual C# 2008 Express を起動し、[ファイル(F)] -> [新しいプロジェクト(P)] を選択すると、以下の画面が表示されます。ここで、Console Application を選択します。
2. プロジェクトの設定
[プロジェクト(P)] -> [.. のプロパティ] を選択し、.NET Micro Framework タブを選択します。ここで、Deployment の項目を図のように設定します。
これで F5 キーを押すと記述したプログラムが実機上で動作するようになります。
まとめ
いやはや、便利な時代になりましたね。以下、参考サイトです。
- .NET Micro Framework
- http://www.microsoft.com/netmf/default.mspx
- .NET Micro Framework の本家サイトです。
- TinyCLR.com
- http://www.tinyclr.com/
- 今回のボードの開発元です。本文はこのサイトで配布されている Beginners E-Book の記述を参考にしました。
- TinyCLR.jp
- http://tinyclr.jp/
- 日本での代理店のサイトです。ここから今回のデバイスを入手しました。
2009-10-27
ソインスウブンカイカメラを作ってみた
目の前に書かれた数字を素因数分解したいあなたに朗報です。
このアプリを実行すると、目の前の数字が素因数分解されるようになります。
v1.2 MTM04版 http://tinyurl.com/y9fzox9
v1.1 初回リリース版 http://tinyurl.com/ykmj7cj
なお、実行するためには、
- Windows XP 以降 (Windows 7 (x86,x64) で動作を確認)
- Microsoft Office 2003 または 2007 (Office 2007 で確認)
- Office 2010 の場合には、「方法 1: SharePoint Designer 2007 をインストールすることによって MODI をインストールする」 http://support.microsoft.com/kb/982760 の手順に従って MODI をインストールしてください。
- .NET Framework 3.0 以降 (Vista以降、または、Tweenが動けばおそらく不要)
- 320x240 がキャプチャ可能な USBカメラ
が必要です。動かない場合には、readme.txt を参照して下さい。
やりましたね!!!
- きっかけ
| tokoya | ソインスウブンカイカメラ。写る数字をなんでも瞬時に素因数分解する。RSA暗号の安全性が脅かされるため。即座に発売禁止。 | link |
2009-06-23
CV・ARに関する普通じゃない勉強会2.0に参加してきました
前回に引き続き、CV・ARに関する普通じゃない勉強会2.0 にいってきました。今回は、ARの次は?というお題目ということで、たくさんのぶっ飛んだ発表がありました。また、質疑応答も、ぶっ飛んだ内容をしっかりフォローするやりとりとなっていて、とても楽しい時間を過ごさせていただきました。
さて、今回は、「多数のセンサ、クリエーターと技術者を結ぶオープンソースプロジェクトKAKEHASHI」という題目でしゃべらせていただきました。またもやスライドをさらしておきますね。
詳細については、もう少々おまちくださいませ。
関連リンク
KAKEHASHI
昨年夏に開催した電脳スターラリーに関するエントリ















