概要
どうも、@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, );
まず、オプションを作成します。
指定出来るオプションに関してはこちら。
設定 | |
---|---|
mode | mode (デフォルト)| accurate 顔を検出する際に速度を優先するか精度を優先するか。 |
enableLandmarks | false (デフォルト)| true 顔の「ランドマーク」(目、耳、鼻、頬、口)を識別するかどうか。 |
enableContours | false (デフォルト)| true 顔の特徴の輪郭を検出するかどうか。輪郭は、画像内で最も目立つ顔についてのみ検出されます。 |
enableClassification | NO_CLASSIFICATIONS (デフォルト)| ALL_CLASSIFICATIONS 顔を「ほほ笑んでいる」や「目を開けている」などのカテゴリに分類するかどうか。 |
minFaceSize | float (デフォルト: 0.1f )画像を基準とした、検出する顔の最小サイズ。 |
enableTracking | false (デフォルト)| true 複数の画像間で顔をトラッキングするために使用できる ID を顔に割り当てるかどうか。 輪郭の検出が有効になっていると、検出される顔が 1 つだけになり、顔トラッキングで有用な結果が得られません。このため、輪郭の検出と顔トラッキングの両方を有効にしないでください。検出速度の向上にもつながります。 |
顔検出用のインスタンスを取得
final detector = GoogleMlKit.vision.faceDetector(options);
顔を検出
final image = InputImage.fromFile(_file!); final faces = await detector.processImage(image);
とても分かりやすいインタフェースですね。
検出された顔の数だけfaces
が配列で返ってきます。
全体
全体のソースコードはgistに載せておきます。
最後に
いかがだったでしょうか?
本当、今やgoogleに魂さえ売ればなんでも簡単に出来るようになっていますね笑
とても助かります。
Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!
コメント