Microsoft DreamSparkがMicrosoft Imagineに変わりました.

大学生なら無料でMicrosoftのOSやサーバー,Visual Studio,Office製品が手に入れられるという正に夢のようなDreamSparkが「Imagine」に変わりました.

具体的に何が変わったのでしょうか?公式アナウンスによると…
DreamSparkは9月7日をもってMicrosoft Imagineになります

サブスクリプションの内容や特典に変更はございません。

別に何も変わらないようです.

というわけで名前だけの変更という感じなんでしょうか.今のところ

OpenCV-Python チュートリアル 日本語版

OpenCV-Python チュートリアル

鳥取大学の小山田 雄仁先生が和訳したものをWebで公開なさってました.

今まで公式のドキュメントを拙い英語能力で和訳しながら勉強していたのですが.今後はこちらを参考にしながら進めていきたいと思います.ありがたや.

ゼミ旅行紀2016

年に一度のイベントのゼミ旅行.今年は東京に行きました.

仙台-東京

交通機関を出発直前まで決めておらず,前日に第一候補のバスの予約をしようとしたら丁度良い時間のものが見つからなかったので棄却.当日の始発のJRを乗り継いで行こうと決めました.青春18きっぷなら格安だなと思い調べるも丁度利用期間外だったので通常料金で行くことに.

当日の朝,寝過ごしてしまい始発の時間を逃す失態を犯してしまい,新幹線で行くことにしました.しかし自分はゼミ旅行の前日から東京入りすることにしていたので時間的に余裕はあったのですが,早めに行って友人に会ったり行きたいところもあったので多少金を積んで予定通りに行くことに.新幹線は乗るのも数年ぶりという出不精な田舎者だったのですが,早くて快適で感動しました(小学生並みの(ry).しかしまぁ若くて時間もある自分にはもうちょいハードな環境で旅をした方が良いかなという気がしないでもなかったです.村上春樹氏は金で買えるものは時間と静けさだと思うといっていましたが,若さの中にあっては時間も静けさよりも過酷さこそが価値あるものであったりするかもな…と思いながら快適な旅を過ごしていました.

武者小路実篤記念館

mushako_kinenkan1

予定通りお昼くらいに東京駅について,調布市にある武者小路実篤記念館に行きました.氏の著作は全部読んだわけではないのですが『世間知らず』『友情』『母と子』等を読んで「あたらしき村」などの活動を知り面白いと感じたので是非一度行ってみたいと思っていました.

氏の彫刻

記念館につくと丁度ガイドの方が付いて家や庭を案内してくれるサービスを受けられる時間帯で,参加しました.池や庭の植物やヒカリモや当時にしては現代的な機能を持った家の様子など普段入れない台所やお風呂も見れてラッキーでした.

武者小路実篤記念館の石垣

しかし蚊の多さにはまいってしまいました.半袖半ズボンという血のバーゲンセール会場みたいな格好で庭を回ったため死ぬほど刺されました.受付では虫よけも貸してもらえるのでばっちり体に吹き付けてから庭の見学に行くことをお勧めします.館内では氏の絵や書やコレクションなどが展示され,資料室もあり充実していました.実篤氏の作品と同じモチーフで静物画を描いてみよう!という体験コーナーもあったので腕に自信のある方は是非お試しください.

八王子

友人のアパートは八王子にあります.東京駅からだと1時間くらいかかるので結構遠いのを実感しました.京王八王子駅で降りたのですがそこから5kmくらい離れてるためランニングしながらいくことにしました.死ぬほど疲れましたが気持ちよかったです.友人のM青年は地元の旧帝出てからフリーターしながら本を書いているというクレイジーな人でその割にものすごいストイックな性格なので面白いのですが.彼は晩御飯に炊き込みご飯を作ってくれました.おいしかったです.21時くらいにコンビニの夜勤に行ってしまったのでPCで彼の著作を読みながら寝ました.躁うつみたいな内容の作品が多くて面白かったので早く本が売れてくれるといいなと思います.

国立新美術館

次の日は東京は雨予報だったんですが幸いそれほど強くならず午後にはやんでくれたので助かりました.集合は午後だったので午前中は新国立美術館に行きました.企画展でアカデミア美術館のベネチア絵画展と二科展がやっていてベネチア絵画展の方を見ました.日ごろアニメばかり見てるのでクラシックな絵画を見るのは教養としてもいい刺激になりました(小並感).地下にあるセレクトショップでお土産を買えてよかったです.

Team Labの展示

ゼミメンツと合流してから表参道のビルでやってるTeam Labの展示に行きました.Kinectとプロジェクタという最強のタッグを使ったっぽい(多分)メディアアートが2つ展示されていてなかなか面白かったです.プロジェクタがエラー起こしてる奴があったのが気になりましたが服を認識してきれいな模様を投影してくれる作品とか参考になりました.

Team Labの展示

土木展

その後乃木坂の方でやっていた土木展に行きました.土木業界の3Kのイメージを払拭するべく(?)開催された土木展は女性のお客さんが多くてびっくりしました.いわゆるドボジョのブームはガチだったようです.土木展もkinectを使ったプロジェクションマッピング系の展示が多く,今最もホットなメディアアート手法(?)なのだと思い知らされました.
土木展の展示1
土木展の展示2

売店では土木展のロゴがプリントされた正直絶望的なダサさのTシャツやテトグルミみたいなクッションが売っててネタに事欠かない感じで良かったです.お土産を買いました.

渋谷で晩御飯兼飲み会

人大杉.映画エベレストの面白さについて熱弁したのを覚えています.

渋谷の夜景

科学未来館

次の日は科学未来館に行きました.二日酔いが結構しんどかったのですが東京テレポート駅から歩いて移動するうちにある程度回復しました.科学未来館では忍者展がやっていてキッズのお客様が楽しんでらっしゃいました.

科学未来館_忍者展の展示1

常設展ではこれまたkinectプロジェクションマッピング的展示や阪大の不気味なコミュニケーションロボットとの会話を楽しめました.

科学未来館_常設展展示1

解散

その後近所でお昼ご飯を食べて解散になりました.無計画に近かった割には色々回れて楽しめました.自分は帰りは高速バスを取っていたので渋谷で同じバスのW青年とカラオケで時間をつぶした後,バスタ新宿から出発しました.次回は計画をしっかり練って秋葉巡りやアニメ聖地巡礼ツアーをやりたいと思います.以上です

DENSO A.I. Tech Seminarに申し込みました

2016年10月15日(土)に開催.コンピュータビジョン・機械学習関連の講演を聴けるようです.

さっきTwitterのTLを見てたらフォローしている技術者の方が上のツイートをRTしていて知りました.一次申し込みが本日までということでラッキーでした.

抽選があるということで当選していればいいなぁ….

追記(2016.10.7):残念ながら抽選漏れしました….残念.

OpenCVの描画機能

目標

コード

上記の関数では,以下の共通する引数が与えられます.

  • img: 図形を描画したい画像の場所
  • color: 図形の色.BGRで表現するにはタプルを(eg: 青であれば(255, 0, 0)),グレイスケールであればスカラー値を与えます.
  • thickness: 線や円などの太さ.図形を塗りつぶしたければ -1 を与えます.デフォルトでは thickness = 1 です.
  • lineType: 線のタイプ.8-connnectedかアンチエイリアスな線にするか,等.デフォルトでは 8-connected です.cv2.LINE_AA は見た目のよい曲線となるアンチエイリアスな線になります.

線を描く

線を描くには,線の始点と終点の座標を与える必要があります.黒い画像の上に,青い線を左上から右下に描画します.

黒い画像に青線を描画するプログラム

実行結果

draw_blueline

長方形を描く

長方形を描くには,長方形の左上端と右下端の座標を与える必要があります.

cv2.rectangle(画像,左上端,右下端,色,太さ)

円を描く

円を描くには,中心の座標と半径を与える必要があります.

円を描画するプログラム

実行結果

draw_circle

楕円を描く

楕円を描くには,いくつかの変数を与える必要があります.まずは中心の座標(x,y),次は長径と短径です(長径, 短径).角度は反時計回りの楕円の回転の角度です.starAngleとendAngleは長軸から時計回りのアーク長の始まりと終わりを示します.i.e. 0と360与えれば完全な楕円になります.より詳細な情報は cv2.ellipse() を確認してください.

楕円を描画するプログラム

実行結果

draw_ellipse

ポリゴンを描く

ポリゴンを描くには,頂点座標を与える必要があります.各頂点は1×2行形式の配列にint32型で与える必要があります,

ポリゴンを描画するプログラム

実行結果

draw_polygon

第3引数のisClosedFalseを与えると閉じた図形ではなくすべての点を繋ぎます.

cv2.polylines()は複数の線を描画する事ができます.描画したい線のリストを作りこの関数に与えるだけです.すべての線は独立して描画されます.線のグループを描画するときには cv2.line()でそれぞれの線を描画するよりも高速でよりよい手法です.

画像にテキストを追加する

画像にテキストを追加するには次のことを決める必要があります

  • 描きたいテキストデータ
  • 配置したい位置の座標(i.e. データが始まるのは左下です)
  • フォントタイプ(cv2.putText()ドキュメントでサポートするフォントを確認してください)
  • 色や太さ,線のタイプなどの設定.視認性を良くするためにcv2.LINE_AAの使用が推奨されています

画像にテキストを追加するプログラム

実行結果

add_text2img

ビデオを表示する

カメラからビデオをキャプチャする

時に,Webカメラのライブ映像をキャプチャしなければならないときがあるでしょう.OpenCVはそのためのシンプルなインターフェースを提供しています.カメラからの映像をキャプチャして,グレースケールに変換して表示してみましょう(私はUSBウェブカメラを使用しています).始めるためのタスクは本当にシンプルです.

ビデオをキャプチャするためにはVideoCaptureオブジェクトを作る必要があります.引数はデバイスのインデックス値かビデオファイルの名前です.デバイスのインデックスはそれぞれのカメラに固有の単なる数字です.通常は一つのカメラが接続されています(私の場合は).二つ目以降のカメラは1ずつ数値を変えれば選択できます.その後,フレームbyフレームでキャプチャできます.ただ,最後にキャプチャをリリースするのを忘れてはいけません.

カメラ映像をグレースケールに変換して表示するプログラム

実行結果
cap_video_from_cam

cap.read()の戻り値はbool(True/False)です.フレームが正しく読み込めていればTrueになります.戻り値でビデオの終わりをチェックすることができます.

時々,capがキャプチャを初期化しない時があります.その場合はコードエラーが表示されます.初期化されているかどうかはcap.isOpend()メソッドで確認することできます.Trueであれば問題ありません.またはcap.open()でオブジェクトの示すポインタを開くことができます.

cap.get(propId)メソッドを使ってビデオの特徴を知ることができます.propIdは0から18の数字で,それぞれの数字はビデオのプロパティを示しています.いくつかの値はcap.set(propId, value)を使うことで変更できます.Valueには設定したい値を入力します.

例えば,フレームのwidthとheightはcap.get(3)cap.get(4)で調べることができます.

cap.getメソッドで取得したフレームサイズを表示させた実行画面
cap_video_from_cam_with_prop

私の場合デフォルトで640×480になっていました.320×240に変更したいのでret = cap.set(3, 320)とret = cap.set(4,240)を追加します.

変更後の実行画面
cap_video_from_cam_modify

もしカメラの映像が真っ暗であったり,エラーが出たときは,他のアプリケーションでカメラを使用していないか確認してください.

ファイルからビデオを再生する

変更はカメラインデックスをビデオファイルの名前にすることだけで,あとはカメラからのキャプチャと同じです.フレームを表示している間は,正しい時間をcv2.waitKey()で使用してください.低すぎると高速になり,高すぎるとスローになります.通常は25ミリ秒が良いでしょう.

ファイルからビデオを再生するプログラム

実行画面
play_video_from_file

ffmpegやgstreamerの適切なバージョンを確認してインストールしてください.もっぱらffmpeg/gstreamerの誤ったインストールのために,Video Captureで頭が痛くなるような動作が発生することがあります.

ビデオを保存する

ビデオをキャプチャして,フレームbyフレームで処理したものは保存しておきたいです.画像ならcv2.imwrite()を使えば非常にシンプルにできることですが,ここでは少し操作が必要です.

ここではVideoWriterオブジェクトを作成します.出力されるファイルの名前(eg: output.avi)をFourCCコードを指定します(詳細は次の後で説明します).次にfpsとフレームサイズを入力します.最後はisColorフラグです.Trueならばエンコーダはカラーのフレームとみなし,それ以外ならばグレースケールのフレームとみなし機能します.

FourCCはビデオコーデックを指定するための4バイトコードです.利用可能なコードはfourcc.orgで確認できます.利用可能なコーデックはプラットフォームに依存します.

FourCCコードはMJPGの場合は cv2.VideoWriter_fourcc('M','J','P','G') あるいは cv2.VideoWriter_fourcc(*'MJPG') として指定できます.

下のコードではカメラをキャプチャして,垂直方向にすべてのフレームを逆転させ保存しています.

カメラ映像を垂直方向に逆転させて保存するプログラム

実行結果
save_a_video save_a_video_output

写真を表示する

写真を表示するサンプルプログラム

実行結果
2016-09-02
cv2.imread()で画像を読み込みます.
画像はコードと同じディレクトリに入れるか,あるいは完全なPathを指定してください.
第二引数は画像の読み込み方法を指定します.デフォルトではカラー画像として読み込みます.

  • cv2.IMREAD_COLOR : カラー画像を読み込みます.透過情報がある場合は無視されます.デフォルト.(あるいは1)
  • cv2.IMREAD_GRAYSCALE : グレースケール画像を読み込みます.(あるいは0)
  • cv2.IMREAD_UNCHANGED : アルファチャンネルを含むような画像を読み込みます.(あるいは-1)
  • その他 : cv::ImreadModes

読み込める画像フォーマットにはBMP,JPEG,DIB,PNG,WEBP,TIFF,EXR等があります.

『詳解OpenCV』のC++による解説ではIplImageという構造体で画像を扱っていますが,PythonバインディングではNumpyArrayという配列を使っています.
NumpyはPythonで科学数値計算を行うためのパッケージです.Cで記述されているため,高速な処理が可能になります.

cv2.imshow()で画像を表示します.

cv2.waitKey()はプログラムを止め,キー入力を待ちます.正の数が引数に与えられると,プログラムはその数のミリ秒分待った後,何も入力されなくても処理を再開します.0や負の数をが設定されると,このプログラムは永遠にキー入力を待ちます.

cv2.DestroyAllWindows()はウィンドウを閉じ,関連するメモリをすべて開放します.

Python3.5 + OpenCV3.1 勉強メモ – はじめに

OpenCV3.1とpython3.5を使って画像認識の勉強を始めました.
手始めに『詳解 OpenCV』(オライリージャパン, 2009)を読んでいます.
しかしこの本はOpenCV2かつC++で説明されています.
そのため当然ながらOpenCV3.1 Pythonバインディングとは仕様が異なる部分が多いので,webで調べながらこの本で紹介されている機能をPythonに置き換えるのが目的です.

私の環境を以下に示します.

[OS]Windows 10 Pro 64bit
[MEM]8G
[CPU]Corei7 2600@3.4GHz
[GPU]GTX660
[IDE]Microsoft VisualStudio 2015 + Python Tools for VisualStudio
[Python]3.5(Anaconda3 4.1.1)
[OpenCV]3.1.0

OpenCV3.1.0の公式ドキュメントのOpenCV-Python Tutorialsを参考にしながら進めて参ります.
完全に初学者なので間違ってる記述が多くなると思います.
コメントなどでご指摘いただければ大変ありがたいです.