【簡単】iOSでカメラアプリを作る時の実装の3タイプ

次のサイトにあるサンプルコードを使えばそれだけでカメラ機能を実装することができます.

ただ,カメラ実装方法2のAVFoundation FrameworkのAVCaptureStillImageOutputを使用する方法を使うときに,デフォルトのままだと,

 //縦いっぱいに表示(横がはみ出る) 
 layer.videoGravity = AVLayerVideoGravityResizeAspectFill;

となっていて,iPadとかの画面が大きいデバイスだと,表示されている画像とデバイスに保存する画像とで見え方が違うなどの問題が生じます.なので,videoGravity部分に注意して,下の3つのどれか指定してあげればよいです.大きい画面だと

layer.videoGravity = AVLayerVideoGravityResizeAspect;

がいいと思います.iPhoneとか小さい画面サイズならあまり影響しないので気にしなくていいかも?stack overflowにも同じ質問あったのと,自分も悩んだのでまとめてみました.

Objective-C実装

AVCaptureVideoPreviewLayer *layer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];

 //サイズ指定一覧
 //縦横とも収まるサイズ 
 layer.videoGravity = AVLayerVideoGravityResizeAspect;

 //縦いっぱいに表示(横がはみ出る) 
 layer.videoGravity = AVLayerVideoGravityResizeAspectFill;

 //全画面表示へリサイズ(画面を引き延ばし) 
 layer.videoGravity = AVLayerVideoGravityResize;

Swift実装

    let layer = videoPlayerView.layer as AVPlayerLayer

 //サイズ指定一覧
 //縦横とも収まるサイズ )
 layer.videoGravity = AVLayerVideoGravityResizeAspect

 //縦いっぱいに表示(横がはみ出る) 
 layer.videoGravity = AVLayerVideoGravityResizeAspectFill
  
 //全画面表示へリサイズ(画面を引き延ばし) 
 layer.videoGravity = AVLayerVideoGravityResize

スマートフォン上でのディープラーニングによる物体認識アプリケーション

f:id:tanno-r:20160218220346j:plain

ディープラーニングを使ったスマホアプリ外観

AppStoreで"ディープラーニング", "deep learning"で検索すると次の2つが引っかかります. ディープラーニングが注目され始めた2012年から4年ほど経つが,ディープラーニングと名を売ったiPhoneアプリとしてAppStoreで公開されているのは2つしか見つかりません...(自分の検索の仕方が悪い??)

勿論,LINEスタンプのレコメンデーションにあるように,システム内部でディープラーニングを取り入れているサービスは沢山存在すると思うけど,気軽にディープラーニングを体験できるようなスマホアプリって以外に存在しないものなんですね.

過去には,2014年8月にGoogleに買収されたJetPac社による「Jetpac Spotter」が存在していましたが,現在は非公開.このアプリに用いられていた認識エンジンはオープンソースフレームワークDeepBeliefSDKとしてGitHubに現在も公開されています.

今回開発したアプリ(iOS版)

バージョン管理のためにここに追加した機能を追記していきます.

デモ画面はバージョン1.0で,次の機能があります.

【バージョン1.0】

  • 結果表示@5
  • 精度選択
  • カロリー調整(バーコントロール)
  • 認識時間表示
  • トータルカロリー


iOS上でのディープラーニングによる物体認識

【バージョン1.1】

  • 言語選択機能の追加(英語/日本語)

f:id:tanno-r:20160218220346j:plain

【バージョン1.2】

  • 撮影画像のサムネイル表示
  • 認識結果のサムネイル表示@5

iPhoneバージョン

f:id:tanno-r:20160221035446j:plain

iPadバージョン

f:id:tanno-r:20160221035448j:plain

iPhoneバージョン(GUIの配置を変更)+認識結果のサムネイル表示

f:id:tanno-r:20160221225212j:plain

f:id:tanno-r:20160221225215j:plain

画像を表示する部分には青色で枠線を囲むように変更してみました.また,認識結果をサムネイルで確認できるようにしました.認識結果部分で表示させている画像は認識エンジンのファインチューンにも使っているUECFOOD-100 Dataset(URL:http://foodcam.mobi/dataset100.html)を使っています.

認識結果のサムネイル表示は
Real-time food intake classification and energy expenditure estimation on a mobile device

(論文URL: 

http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=7299410)を参考にしました.今回は認識対象にチャーハンを選んでみましたが,チキンライスやピラフなど似たような食事が上位にサムネイル表示されているのがわかって見てて結構楽しい!笑

ただ,iPhone 5sは4インチだから結果表示がキツイ…けど,サムネイル付きだと結果がわかりやすくていいな!画面の都合上,トップ5までしか表示してないけど,iPadのデモ用ではトップ10まで表示しようかな?結果が沢山表示された方が見てて楽しいし.

 

GUI部分で「こんな風なGUIにしてみたら?」などありましたら,Twitterかコメントに書いていただけたら幸いですm(_ _)m

 

【追加予定機能】

認識部分

  • セグメンテーション
  • 領域補正
  • 料理領域の方向推定

カロリー部分

  • 四郡点数

その他

  • Google Map連携(食事記録のマッピング)
  • Twitter連携(Twitter版に画像をアップロード)
  • ランクボタンを消して,認識結果をタッチすればカロリ−が記録できるように仕様変更?→カメラの近くに部品があった方が,使いやすい?
  • 多言語対応 

Google Maps SDK for iOSの実機画面表示の不具合

Googleの公式リファレンス

通りにやってもシミュレータ上では表示されるが実機で実行すると画面が表示されない.

 

解決法:

stackoverflow.com

  1. In XCode, go to Product > Scheme > Edit Scheme...
  2. Select the "Run" Tab on the left.
  3. Select the "Options" sub-tab on the top.
  4. Change "GPU Frame Capture" from "Automatically Enabled" or "OpenGL ES" to either "Metal" or "Disabled".

の通りやれば直る.デフォルトではAutomatically Enabledになってると思うので,Metalに変更するといいかも.

2016年の目標

人工知能に関する断創録を参考に,2016年の目標を立ててみた.

スパース性に基づく機械学習 (機械学習プロフェッショナルシリーズ)

スパース性に基づく機械学習 (機械学習プロフェッショナルシリーズ)

 
深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

 
深層学習: Deep Learning

深層学習: Deep Learning

 

 

(1)DeepLearning

続きを読む

Torch7のインストール法

インストール環境

 

torch.ch

公式HPの通りにやってもうまくインストールできないので,

これの

Torch 7 Scientific Computer Framework with cuDNN – NVIDIA Jetson TK1

の部分に書いてInstallation通りにやったらできた.別途,

brew install luajit

によりluajitを入れとく必要がある?

torchのインストールの仕方(簡単コマンド)

  1. $brew install luajit
  2. $ git clone https://github.com/torch/ezinstall.git
  3. $ cd ezinstall
  4. $ sudo ./install-deps
  5. $ sudo ./install-luajit+torch

Torch7のインストールとtorch-iosのビルド、実行

参考文献

  1. Torch7 のインストール - のんびりしているエンジニアの日記
  2. clementfarabet/torch-ios · GitHub
  3. Torch | Getting started with Torch

自分のMacBook Proだと何故かインストールが失敗するので,

開発用Macminiで試してみる.

 

El Capitanだと/usr/localとかのPermissionがYosemiteから変更になって,rootlessが働いて失敗する.なので,Permissionを変更してやってから試す必要がある.

 

参考文献3の公式の通りに実行してみる...

>>Error: could not find ipython in PATH. Do you have it installed?

というエラー吐きやがった.エラー文でぐぐったら出てくるけど...ちょっと保留にして,python3系をmacに入れてみることにする.

にある通り,python2系とpython3系の切り替えできるように後々したいな.

python3系をインストールしてから,

pip install ipython

を実行すると,

>>[Errno 13] Permission denied: '/Library/Python/2.7/site-packages/decorator.py'

またエラー

sudo chown -R $USER /Library/Python/2.7/site-packages/

でERROR13は改善したが,

>>[Errno 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

またエラー

を見ると,El Capitanによるエラーらしい.(20151101)

 

 

 

pipのヴァージョンが古いとの指摘があったので,upgradeしとく

>>You are using pip version 7.1.0, however version 7.1.2 is available.

>>You should consider upgrading via the 'pip install --upgrade pip' command.

 

 

 

el capitanのpermission errorの改善方法

この通りにやれば一応うまくいく

>>Error: Failure while executing: git stash pop --quiet

ってエラーは出るっぽいけど…