以下のような物体検出アプリを作ってみました。基本的にはGitHubのソースをクローンしてビルドするだけなのですが、iOSで動かそうとすると現状、少し手を加えてあげないと動かなかったので、今回はそこらへんの解説も交えながら説明していきます。

※うぇるちさん(@welchi_)の『FlutterとTensorFlow Lite(TFLite)でリアルタイム物体検出をしてみる』を参考にさせていただきました。
さっそく、物体検出アプリを作っていく(iOS)
GitHubからプロジェクトをCloneしてくる
Amish Gargさんが物体検出のサンプルアプリ(flutterプロジェクト)をGitHubに上げてくれているので、まずは、そのままCloneしてきます。
リポジトリのURL:https://github.com/am15h/object_detection_flutter
コマンドプロンプトで以下を入力します。
git clone https://github.com/am15h/object_detection_flutter.git
多分、Android版はここまでしてビルドすれば動くと思う
試せてはないですが、Android版は実機で動かせばこの時点で普通に動くと思います。
しかし、iOS版でビルドしようとすると、以下の不具合があり動きませんでした。
- info.plistの構文がおかしくてビルドに失敗する
- podfileが原因でビルドに失敗するときがある?
- そもそもバグがあって物体検出できない。
上記について、あんまり詳しくわかっていないですが、解決策が分かったので書いていきます。
プルリクエスト版に切り替える(2020年12月20日現在)
上でも書きましたが、2020年12月20日時点では、masterブランチの最新版だと、iOS端末で物体検出ができないようです(バグあり)
なので、プルリクエストにある修正版に切り替えましょう。
プルリクエスト:https://github.com/am15h/object_detection_flutter/pull/4
1.プルリクエストの番号を取得する。
2.以下のコマンドを入力して、プルリクをフェッチする。
※ブランチ名は何でもOKです(自分は「pr」とかにしました)
git fetch origin pull/番号/head:ブランチ名
3.以下のコマンドを入力して、ブランチを切り替える。
git checkout "2.で指定したブランチ名"
参考:
podfileを修正する
自分の場合、podfileの2行目のコメントアウトを外さないと動きませんでした。(CocoaPodsの仕組みを知りたいマン)
修正前:
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
続く…
修正後:
# Uncomment this line to define a global platform for your project
platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
続く…
info.pristを修正する
ここが一番の問題かもしれません。
info.plistの43行目あたりを以下のように修正しましょう。
修正前:
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>
<false/> ★ここの位置に注目してください
修正後:
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/> ★ここの位置に注目してください
<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>
これでビルドすれば、動くはず。
上手くいけば動くはず!
もし、ダメだった場合は、コメントなどで教えて下さい。

※コップが複数あってもちゃんと認識してくれました。(汚くてすみません。)
おわりに
今回はソースの解説などは全くできませんでした。理解が追いつき次第、追記するか別記事にて紹介するかもしれません。
このアプリを軸に、『人がみんな笑顔になったらシャッターを切るアプリ』とか『何らかを自動検知して何らかをしてくれるアプリ』などを作ってみたいです。
コメント