お久しぶりです。

時が経つのは早いですね。。 その間に面白い案件に関われたので、画像解析をテーマに短期(もしくは長期?)連載をします。 第1回目です。

とりあえず、ブログを書くのは久々です。
正直もういいやという気持ちでなんも書いていませんでした。
これではいかん!ということで、テーマを決めて、技術共有や自分達用のメモ、会社の認知につながればいいなと思って再開します。

今回のテーマはUnityで画像解析です!

なぜ画像解析か?というと、昨今、ARやVRなどが話題となっていることと、一番大きな理由は、「案件でやったから」です。
残念ながら、契約上の理由でどのようなアプリなのか、どういうことをしたのかは詳しく書けません。
しかし、UnityとOpenCVで結構いろいろできたので、復習も兼ねて、自分でテーマを決めて、画像解析系のアプリを作ってみちゃおう!と思います。

ちゃんと更新するので、気になった人は飽きずにみてくださいね。
すでに5回分くらいは溜まってますから。。。

とりあえず画像解析といえば、名刺管理アプリや、レシートの読み取りなどが有名どころかな?と思います。
Snowなどの顔認識系のほうが幅広く有名かもしれませんね。
名刺アプリやレシートの読み取りなどは文字解析などが主だと思いますので、もう少し簡単そうなテーマはないかな。。
ということで、カメラで楽譜を読んで音鳴らしてみようかなと思います。

簡単に言いますが、たぶん結構難しそう。。下手すると文字より難しんじゃないか。。??
でも音符の種類は文字より少ないし。。音なったら派手だし。。

ということでとりあえずこのテーマで行こうと思います。

どのように連載を進めるか?

まずは、ブログを連載するに当たって、どのようなものを作ろうとしているのか、どのような構成で連載が進むのか書いた方がいいなと思ったので、 第1回目では、要件定義とアジェンダを記載します。
このブログ用に新規に開発するので、正直楽譜の解析がうまくいくかわかりません。だっていまからやるもん。
(とはいえ、だいたいのアプローチはあるので、途中で頓挫は無いようにします。)

画像解析の案件をやってみて思ったのは、トライアンドエラーの繰り返しです。 もういろいろ試しまくるしかないです。 おそらく画像解析を専門にしている方であれば、トライの数が少なくなっていくんだろうなとは思いますが、基本的にはいろいろ試すことが大事だと思います。
この連載は、その試行錯誤の記録を通して、OpenCVとUnityでどんなことができるのかをご紹介させて頂くつもりです。 ということで、アプリの要件を大体決めます。

作るアプリの要件定義

  • ゴール
    • 楽譜をiPhoneのカメラで撮影すると、その楽譜の内容を読み込んで、音を再生する
  • 要件定義
    1. ト音記号などは読まない。音階については、ト音記号であると決め打ちで決定することにする
    2. 五線譜と音符の位置から、音階を読み取ることができる
    3. 音符の種類は、2分音符と4分音符だけとする。また、連符も対応しない(各音符の上が線で繋がっているやつです。)
    4. 五線譜、2分音符、4部音符の他のその他の記号は読み込み対象としない。(テンポの記号なども無視し、固定値とする。)
    5. 画面は1画面だけ。カメラの映像を写し、撮影ボタンを押すと、撮影した写真を読み取り、解析をし、結果の音を出す。
  • 環境
    1. 開発にはUnity2017.3を使用
    2. 対象デバイスは、iPhone7とする。(自分の持っている端末がこれなので)
    3. .NET4.6を使います。(これは正直使わなくてもいいけど、C#の構文の勉強のためにもあげました。)


かなり要件を小さくしました。しかし画像処理系はこれくらいが一番始めのアプローチとしていいのかなと思います。環境による影響も大きいので、できるだけ処理する対象は小さい方が良い気がします。
とりあえずはサンプルアプリですので、これくらいの規模でやってみようと思います。それでもやることは多いのです。
ということで、かなり要件絞り込みました。こんな簡単な楽譜あるのか?と思いますが、探したらありました。
きらきら星です。
サンプルに使用する楽譜は、ドレミファソラシド 8つの音で弾ける やさしいメロディ いろいろな楽器で楽しめる!を拝借します。
では作るサンプルアプリの要件はこれくらいにして、次は連載のアジェンダです。

連載の流れ

  1. iPhoneカメラから取得した映像を画面に表示しよう!

    WebCamTextureを使用したカメラ起動から、ハマるポイントなどを解説します。

  2. カメラから取得した映像を、OpenCVforUnityを使って、いろいろ変換してみよう

    OpenCVforUnityを使用して、カメラ映像をグレースケール化したり、2値化したりしてみます。画像処理の前処理段階の準備。という感じです

  3. 五線譜を読み取ってみよう!

    実際にカメラで撮影し、五線譜を読み取ってみます。OpenCVの線分検出を主に使用します。

  4. 音符を読み取ってみよう

    カメラに映った音符を認識し、種類の判定を行います。どのようなアプローチが考えられるのかを考察し、検証します。

  5. 音階を判別して、音を鳴らしてみよう

    五線譜と音符の位置から、どの音なのかを判別します。これはOpenCVを使用せず、すべて前処理で認識し終わっている情報を元に行うので、解説はあんまりしないと思います。結果確認という感じです。

以上がおおまかなアジェンダです。 各項目を1回でまとめて書くととてもながぁい記事になるので、いくつかに分割します。 自分もコツコツと続けられるようなペースで、2,3日に1つくらいのペースでアップしていこうと思います。

それでは長くなりましたが、また次回。 次からはもう少し短めに。。

さようなり〜