FlutterとTensorFlowを使って、物体検出アプリを作る

FlutterとTensorFlowを使って、物体検出アプリを作る 技術メモ

以下のような物体検出アプリを作ってみました。基本的には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>

これでビルドすれば、動くはず。

上手くいけば動くはず!

もし、ダメだった場合は、コメントなどで教えて下さい。

※コップが複数あってもちゃんと認識してくれました。(汚くてすみません。)

おわりに

今回はソースの解説などは全くできませんでした。理解が追いつき次第、追記するか別記事にて紹介するかもしれません。

このアプリを軸に、『人がみんな笑顔になったらシャッターを切るアプリ』とか『何らかを自動検知して何らかをしてくれるアプリ』などを作ってみたいです。

コメント

タイトルとURLをコピーしました