【Flutter】3ステップで超簡単!google_ml_kitで顔検出をしよう

Dart

概要

どうも、@daiki1003です!

Flutterで画像から顔検出をする方法を備忘録的に
書いていきます。

基本的に、コピペのみで出来るのでぜひやってみてくださいね!
ソースコード全文も最後に載っけております!

それでは行ってみましょー!

執筆時環境

Flutter

Flutter 2.2.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision f4abaa0735 (4 weeks ago) • 2021-07-01 12:46:11 -0700
Engine • revision 241c87ad80
Tools • Dart 2.13.4

その他

Xcode 12.5.1
iOS 14.6

必要パッケージのインストール

# 顔検出用
google_ml_kit: ^0.7.0

# 画像撮影/選択用
image_picker: ^0.8.2

以前は、firebase_ml_visionと言うパッケージだったのですが、
現在DISCONTINUEDとなっており正常にcocoapodsで追加できません。
(これで数時間詰まった…)

各OS毎の準備

iOS

NSCameraUsageDescription
NSPhotoLibraryUsageDescription
Info.plistに追加

※iOSは10.x〜
※Xcodeは12.x〜

Android

minSdkVersion: 21
targetSdkVersion: 29

顔を検出していく

画像撮影ボタン

TextButton(
  onPressed: () async {
    final file = await ImagePicker().pickImage(source: ImageSource.camera);
    setState(() {
      _file = File(file?.path ?? '');
    });
  },
  child: const Text('カメラを起動する'),
),

顔認識

optionの作成

const options = FaceDetectorOptions(
  mode: FaceDetectorMode.accurate,
  enableLandmarks: true,
  enableClassification: true,
);

まず、オプションを作成します。
指定出来るオプションに関してはこちら。

設定
modemode(デフォルト)| accurate

顔を検出する際に速度を優先するか精度を優先するか。

enableLandmarksfalse(デフォルト)| true

顔の「ランドマーク」(目、耳、鼻、頬、口)を識別するかどうか。

enableContoursfalse(デフォルト)| true

顔の特徴の輪郭を検出するかどうか。輪郭は、画像内で最も目立つ顔についてのみ検出されます。

enableClassificationNO_CLASSIFICATIONS(デフォルト)| ALL_CLASSIFICATIONS

顔を「ほほ笑んでいる」や「目を開けている」などのカテゴリに分類するかどうか。

minFaceSizefloat(デフォルト: 0.1f

画像を基準とした、検出する顔の最小サイズ。

enableTrackingfalse(デフォルト)| true

複数の画像間で顔をトラッキングするために使用できる ID を顔に割り当てるかどうか。

輪郭の検出が有効になっていると、検出される顔が 1 つだけになり、顔トラッキングで有用な結果が得られません。このため、輪郭の検出と顔トラッキングの両方を有効にしないでください。検出速度の向上にもつながります。

顔検出用のインスタンスを取得

final detector = GoogleMlKit.vision.faceDetector(options);

顔を検出

final image = InputImage.fromFile(_file!);
final faces = await detector.processImage(image);

とても分かりやすいインタフェースですね。
検出された顔の数だけfacesが配列で返ってきます。

全体

全体のソースコードはgistに載せておきます。

最後に

いかがだったでしょうか?
本当、今やgoogleに魂さえ売ればなんでも簡単に出来るようになっていますね笑
とても助かります。

誰かのお役に立てば。

Twitterフォローお願いします

「次回以降も記事を読んでみたい!」
「この辺分からなかったから質問したい!」

そんな時は、是非@daiki1003のフォローお願いします♪

また、記事がとても役に立ったと思う人は
コーヒーを奢っていただけると非常に嬉しいです!

コメント

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