画像解析をUnityでやってみよう。2回目です。
今回はWebCamTextureを使って、カメラ画像の表示を行います。

前回で、作るサンプルアプリの要件を決めました。
今回は、読み取りに使用するカメラを起動し、画面に表示するというところをテーマに進めます。

WebCamTextureを使おう

WebCamTexture?

カメラ画像を読み込む為に、WebCamTextureを使用します。
WebCamTextureを使用すると、iPhoneのフロントカメラやバックカメラ、またAndroidのカメラなど、デバイス毎にカメラを取得し、起動し、カメラからの映像をTextureとして入手できます。
今回は、iPhoneでしか行いませんが、Androidでも特にコード修正の必要なく動きました。(どのカメラを使うかの指定は場合わけが必要な場合がありますが。)
Textureとして扱えるので、後々にOpenCVforUnityの機能を使用してMatに変換したりすることが可能です。

(余談)Mat??

Matは、Matrixのことです。画像の情報や、その他の情報を、OpenCVではよくMatという形式に保持して返してきます。
例えばカラー画像だったら、チャンネル毎の値をMat形式で扱ったり、輪郭の情報をMatで扱ったり。。とにかくなんでもかんでもMatという印象です。
Matについて詳しくはこちら
Matは今回は特に使いません。また改めて紹介します。

今回はWebCamTextureです。結構クセあるので、まずカメラの画像を画面いっぱいに表示するところまでをやってみます。

カメラの映像をWebCamTextureを使ってRawImageに出力してみよう

カメラの映像をRawImageに表示するのはとても簡単です。 RawImageコンポーネントをアタッチしたGameObjectに、以下のスクリプトを貼り付けます。
(私はRawImageにCameraのスクリプトをはっつけてしまいましたが、どのオブジェクトがやっても良いです。コードは変える必要がありますが。)

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(RawImage))]
public class DeviceCamera : MonoBehaviour
{    
    private RawImage cameraImage;
    private WebCamTexture webCamTexture;       

    void Awake()
    {
        cameraImage = GetComponent<RawImage>();         
    }

    void Start()
    {
        webCamTexture = new WebCamTexture();
        cameraImage.texture = webCamTexture;
        webCamTexture.Play();
    }        
}

これだけ。
実際にはカメラが取得できない時などのエラー処理をした方がいいですが、今回はサンプルアプリなので割愛します。
これでカメラ映像を取得してRawImageに映像が表示されます。 私の環境はMacですが、起動すると、Macのカメラが起動して、RawImageに映像が表示されます。

※Unityで起動する場合は、使用しているパソコンにカメラが付いていないとエラーになるはずです。その場合は、WebCamTextureにdevices()というメソッドがあるので、それでカメラを取得してエラー処理をした方が安全です。

実機で確認してみる

Unity上で動いたので、実機で確認してみます。




落ちた。。

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

info.plistにカメラ使用の旨を記載する

iOSは、カメラの画像を使うために、このアプリはカメラを使用しますよ。ということを明示してあげなければなりません。
info.plistに、カメラ使います!と宣言しないとダメです。
これは、Xcodeからもできますが、Unityからやった方が良いです。ソースコード管理とかもあるので。

BuildSettings>PlayerSetting>OtherSettingの中に以下のような項目があります。
ここになにかを記載してビルドすると、info.plistに自動的に反映されます。
記載する文字列はなんでも良いらしい。。 info.plistの設定

実機で再確認

これでもう一度ビルドすると。。
アクセスの許可ダイアログが出てきて無事起動しました。
(ここでさきほどinfo.plistに入力した文字が使われるようです。) カメラアクセスの確認

よっしゃよっしゃと思い、カメラの表示を確認します。
カメラの表示
むむ??回転してる?
ということで、ここからややこしくなるのでした。。
今回はとりあえずWebCamTextureの設定から実機での起動までを行いました。
次回はこの表示を正しくします。
てことでまた次回。
さようなり〜