のしメモ アプリ開発ブログ

Unityアプリとかロボットとか作ってるときに困ったこととかメモ

Unityでアナグリフ画像を生成するSuper3DMakerをリリースしました

f:id:noshipu:20170808232508p:plain

Super3DMakerをリリースしました!
スマホのカメラでアナグリフな画像を作れるSuper3DMakerをリリースしました

iOS

Android

スマホのカメラを使ってこんな感じのアナグリフな3D画像が撮れます

2017/08/11 画像差し替えました


アナグリフ画像を生成するコードについて

Texture2Dのピクセル情報を取得し、アナグリフ画像に変換しています。
処理的にはこちらの画像処理を行います。

2017/08/09 説明とコードを修正

モノクロエフェクトをかけた後に、左目用画像の赤色を抜き、右側画像に緑色と青色を抜き、色の平均値をとって色を選びます。

アナグリフな画像を生成するコードはこんな感じ

for (int i = 0; i < length; i++) {
    // 左目用画像の平均値
    float left_average = (m_LeftCaptureColor [i].r + m_LeftCaptureColor [i].g + m_LeftCaptureColor [i].b) / 3;
    var left_color = new Color (left_average, 1f, 1f);

    // 右目用画像の平均値              
    float right_average = (m_RightCaptureColor [i].r + m_RightCaptureColor [i].g + m_RightCaptureColor [i].b) / 3;
    var right_color = new Color (1f, right_average, right_average);

    // 平均を出力
    resultColors [i] = (left_color + right_color) / 2;
}

ChainerをWindowsにインストールする手順メモ

Windowsで仮想環境(Ubuntu)を作成し、そこでChinerを動かすまでのメモです

手順

1. Ubuntuインストールする

(1) VirtualBoxのインストー

下記リンクのダウンロードリンクから[WindowsHosts]を選択しインストールする
Downloads – Oracle VM VirtualBox

(2) UbuntuのROMのダウンロード

下記リンクからubuntu-ja-16.04-desktop-amd64.iso(ISOイメージ)をダウンロードする
https://www.ubuntulinux.jp/download/ja-remix

(3) VirtualBoxUbuntuをインストー

a. VirtualBoxを起動
b. [新規]->[エキスパートモード]を選択
c. 各種項目入力
f:id:noshipu:20170730022354p:plain
d. 仮想ハードディスクは32Gに設定し環境作成
e. 起動を押す
f. 初回起動時に起動ハード・ディスクの選択がでてくるので、(2)でダウンロードしたISOファイルを選択する
g. 起動が始まり、[Ubuntuをインストールを選択]->[Ubuntuのインストール中にアップデートをダウンロードする]にチェックを入れる
h. そのままインストールを進める

備考1

OSインストール後に再起動がかかると下記エラーがでて止まった

intel_rapl: no valid rapl domains found in pcackege 0

[仮想マシン]->[リセット]をしたら解決

備考2

ログイン後に仮想マシンを使いやすくするためにGuestAdditionsをインストール、[デバイス]->[クリップボードの共有]->[双方向]を設定しておくといいです。

2. Chainerのインストー

各種ソフトウェアをインストー

$ sudo apt-get install python-pip
$ sudo pip install --upgrade pip
$ sudo pip install chainer==1.24.0
$ sudo apt-get install python-matplotlib

3. Chainerを動かしてみる

(1) Chainerの公式サンプルのダウンロード
$ wget https://github.com/pfnet/chainer/archive/v1.24.0.tar.gz
$ tar xzf v1.24.0.tar.gz
(2) サンプルプログラムを実行
$ python chainer-1.24.0/exammnist/train_mnist.py 

こんな出力がでていれば成功です

GPU: -1
# unit: 1000
# Minibatch-size: 100
# epoch: 20

Downloading from http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...
Downloading from http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz...

...

19          0.00946827  0.104435              0.997167       0.9811                    550.189       
20          0.00728352  0.0844704             0.99795        0.9846                    582.161

以上です。

参考文献

Interface 2017年8月号

Cross Platform Native PluginsでXcodeのエラーが出た時の対処メモ

Cross Platform Native Pluginsを使っている状態のUnity5.6でiOSビルド後にXcodeでエラーがでるみたいです。

エラー内容
Implicit declaration of function 'ConvertToNSString' is invalid in C99 CPNPCloudServicesBinding.m.
Implicit delcation of function 'FromJson' is invalid in C99 CPNPCloudServicesBinding.m
Implicit delcation of function 'CStringcopy' is invalid in C99 CPNPCloudServicesBinding.m
Implicit delcation of function 'ToJsonCString' is invalid in C99 CPNPCloudServicesBinding.m
Implicit delcation of function 'NotifyEventListener' is invalid in C99 CPNPCloudServicesBinding.m

参考リンク

解決方法がCross Platform Native Pluginsのフォーラムに記載されてあります。
http://www.voxelbusters.com/products/native-plugins/forum/index.php?p=/discussion/946/unity-5-6-compile-errors-in-xcode

手順

1. 下記からPostProcessBuild.csをダウンロード

https://drive.google.com/file/d/0Bx892xLNWQ7sbmJDbktzTXhEYnM/view

2. 対象のプロジェクトのファイルを置き換え

Standard Assets/VoxelBusters/NativePlugins/Editor/PostProcessBuild.csをダウンロードしたファイルに置き換え

3. ビルドし直す

ビルドし直すとエラーがなくなります。

Actions on Googleを始める

Actions on Google

音声を使用した会話形式のアプリが作れるツールです。
Google Homeのアプリもシミュレータで確認しながら作れるみたいなので試してみました。

サンプルではAPI.AIのNode.jsを使ったアプリで、Firebaseを使ってデプロイできるようになっています。
今回は公式のGetStartedをやりながら手順をメモしたものになります。

参考資料について

公式のGet startedを参考に進めていきます。公式マニュアルを読みながらの方が、最新で細かいところも書いているのでおすすめです。
https://developers.google.com/actions/get-started/


実行手順

1. ActionsのプロジェクトとAPI.AIエージェントを作成

(1) サンプルアプリケーションを導入

https://github.com/actions-on-google/apiai-facts-about-google-nodejs
サンプルのフォルダを作成します。(今回は`SampleAction`というフォルダ名とする)
`SampleAction/FactsAboutGoogle.zip`
`SampleAction/functions/index.js`
というディレクトリ階層になるように配置します。

(2) Activity controlsから権限を編集

Chromeの下記の権限を有効に設定します。
・ウェブとアプリのアクティビティ
・音声アクティビティ
・端末情報
編集はこちらから。
https://myaccount.google.com/activitycontrols?pli=1
f:id:noshipu:20170717025103p:plain

(3) プロジェクトとAgentを作成する

a. Actions on Google Developer Consoleに移動します
b. `Add Project`から`FactsApp`を選択しプロジェクト名をSampleActionと入力、regionをJapanに設定し、`Create Project`を選択します。
c. `Use API.AI`から`CREATE ACTIONS ON API.AI`を選択しActionsをビルドします。
d. API.AIコンソールが立ち上がり、Agentの画面でそのままSaveを押して情報を保存します。

(4) FactsAppのAgentにサンプルプロジェクトを復元

a. 左側のナビゲーションバーにある、Agent名の右にある歯車アイコンを押します。

f:id:noshipu:20170717141911p:plain

b. `Export and Import`タブを選択します。
c. `RESTORE FROM ZIP`を押し、先ほど配置した`SampleAction/FactsAboutGoogle.zip`を選択します。
d. RESTOREとテキストボックスに入力し、`RESTORE`ボタンを押し、その後`DONE`ボタンを押します。

2. fulfillmentをデプロイ

firebaseを使用してデプロイします

(1) Node.jsをインストールする

後述しますが、v6以上のインストールが必要です。
※Node.jsのインストール手順説明は飛ばします。

(2) firebaseクライアントソフトをインストー

npm install -g firebase-tools

(3) Googleアカウントでログイン

下記を実行しGoogleにログイン

firebase login

(4) firebaseをActionsのプロジェクトに紐付けます

a. {PROJECT_ID}を確認する

`firebase list`を叩くと先ほど作ったプロジェクトのIDを確認することが可能です。
先ほどの管理ページからも確認することが可能です。

b. プロジェクトに紐付ける
cd SampleAction/functions
firebase use {PROJECT_ID}

`Now using project {PROJECT_ID}`と表示されたら成功です。

(5) デプロイ開始

下記コマンドを実行します

cd SampleAction/functions
npm install
firebase deploy --only functions

=================実行時にエラーが起きた場合=================
実行時にNode.jsのバージョンが古く、下記のメッセージが表示されたのでアップデート。

Error: There was an unknown problem while trying to parse function triggers. Please ensure you are using Node.js v6 or greater.

Node v8.0.0だと下記のエラーが

TypeError: Cannot read property 'pipesCount' of undefined

v8.1.4にあげて再度実行すると成功しました。
=================実行時にエラーが起きた場合ここまで=================

デプロイに成功するとこのようなメッセージが表示されます。

✔  Deploy complete!

Project Console: {PROJECT CONSOLE URL}
Function URL (factsAboutGoogle): {FUNCTION URL}

{FUNCTION URL}をコピーしておく

(6) URLを設定

a. API.AIのページに戻る
b. 左側のナビゲーションバーから`Fulfillment`を選択し`ENABLED`にする
c. URLの入力を求められるので{FUNCTION URL}を入力し`SAVE`を押す

f:id:noshipu:20170717152129p:plain
Basic認証を設定することも可能です。ローカル開発機を使いたい場合はngrok等のツールを使えば可能だが、脆弱性に気をつける必要があるとのことです。

3. シミュレータを動かす

(1) API.AIのページの左側のナビゲーションバーから`Integrations`を選択

(2) Actions on GoogleのカードがOnになっていることを確認

f:id:noshipu:20170717153312p:plain

(3) そのままカードをクリック

(4) そのままカードをクリックして`TEST`ボタンをクリック

`TEST`ボタンが存在しない場合は`AUTHORIZE`ボタンを押してから`TEST`をクリックします。
`TEST`を押すとAgentがアップロードされてシミュレータでテストできるようになります。

(5) `Test your Assistant app`の項目の`VIEW`をクリック

(6) シミュレータのWebページが開くので、`START`をクリック

(7) シミュレータのチャットのテキストボックスに入力

`talk to my test app`を入力するとこんな形でメッセージが返ってきたらサンプルの実行成功です。

Welcome to Facts about Google! Do you want to hear about Google's history or do you want to hear about its headquarters?

(8) アプリを使ってみる

下記のメッセージを送るとIntentを呼び出して試せます。
`talk to Facts about Google about cats`
`talk to Facts about Google`
`talk to Facts about Google about Google"s history`

日本語の設定ができたりもするので、Zip内の設定ファイルを編集して色々試してみようと思います。

何か間違いや、問題があればお気軽にコメント等ください。