TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 995 subscribers
Post #205 757
Привет, это Катя, Flutter Dev Friflex 👋

Сегодня расскажу про распознавание лиц на Flutter. Это важный инструмент в современных мобильных приложениях: от разблокировки смартфона по лицу до автоматического заполнения данных по фото.

Используя Flutter, мы можем достаточно просто реализовать распознавание лиц, текста или звука, при этом кроссплатформенно. Сегодня я расскажу, как добавить распознавание лиц в свое приложение на Flutter с помощью Google ML Kit.

Зачем нужно распознавание лиц?
✔️
Безопасность — контроль доступа по лицу
✔️Идентификация — определение пользователя среди базы данных
✔️Интерактивные приложения — фильтры, маски и другие AR-фичи
✔️Автоматизация — например, распознавание посетителей в системе учета

Что нам понадобится
Для примера будем использовать пакет:
▪️google_mlkit_face_detection — для обнаружения лиц на изображениях
▪️image_picker — для выбора фото из галереи или камеры

Добавим в pubspec.yaml:

Yaml
dependencies:
  google_mlkit_face_detection: ^0.13.1
  image_picker: ^1.1.2


Настройка и инициализация

1️⃣ Импортируем пакеты:


import 'package:google_mlkit_face_detection/google_mlkit_face_detection.dart';
import 'package:image_picker/image_picker.dart';


2️⃣ Создаем переменные:

late ImagePicker _picker;
late FaceDetector _faceDetector;
dynamic _image;
Size? _imageSize;
List<Face> _faces = [];


3️⃣ Инициализируем в initState:

@override
void initState() {
  super.initState();
  _picker = ImagePicker();
  _faceDetector = FaceDetector(
    options: FaceDetectorOptions(),
  );
}


4️⃣Закрываем детектор в dispose:

@override
void dispose() {
  _faceDetector.close();
  super.dispose();
}


Логика распознавания
▫️Метод для получения и обработки изображения:


Future<void> _getAndScanImage({final bool? isFromCamera}) async {
  // Очищаем данные
  setState(() {
    _image = null;
    _faces = [];
    _imageSize = null;
  });

  // Получаем изображение
  final imageXFile = await _picker.pickImage(
    source: isFromCamera != null && isFromCamera
        ? ImageSource.camera
        : ImageSource.gallery,
  );

  // Обрабатываем
  if (imageXFile != null) {
    final inputImage = InputImage.fromFilePath(imageXFile.path);
    final facesList = await _faceDetector.processImage(inputImage);
    final imageAsBytes = await imageXFile.readAsBytes();
    final imageDecoded = await decodeImageFromList(imageAsBytes);

    setState(() {
      _faces = facesList;
      _image = imageDecoded;
      _imageSize = Size(
        imageDecoded.width.toDouble(),
        imageDecoded.height.toDouble(),
      );
    });
  }
}


▫️Отображение результата

Expanded(
  child: FittedBox(
    child: SizedBox(
      width: _imageSize!.width,
      height: _imageSize!.height,
      child: CustomPaint(
        painter: FacePainter(
          faceList: _faces,
          imageFile: _image,
        ),
      ),
    ),
  ),
)


Здесь FacePainter — это кастомный класс, который рисует рамки вокруг найденных лиц. Про CustomPainter рассказывала в этом посте.

Как видите, добавить распознавание лиц на Flutter можно буквально в несколько шагов. ML Kit обрабатывает изображение прямо на устройстве, без отправки данных на сервер, что повышает безопасность и скорость работы.
  • 🔥 7
  • ❤ 4
  • 👍 1
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →