Решение задач распознавания на Flutter

от автора

Задачи распознавания изображений и звука имеют широкий спектр применений в различных приложениях. Используя Flutter, как мощный фреймворк для разработки кроссплатформенных мобильных приложений, вполне возможно реализовать функционал распознавания данных в несколько шагов.

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

1. Распознавание лиц

Процесс распознавания лица.

Процесс распознавания лица.

Распознавание лиц является широко используемой задачей в приложениях, связанных с идентификацией и безопасностью. Для реализации функций распознавания лиц на Flutter вы можете использовать библиотеку Google ML Kit Face Detection, которая предоставляет полезные инструменты для обнаружения и идентификации лиц на изображении. Пример кода для распознавания лиц:

Импортируем нужные библиотеки

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

Создаем переменные

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

Инициализируем переменные в initState методе

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

Закрываем детектор в 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,                                 ),                               ),                             ),                           ),                         ),

2. Распознавание текста

Процесс распознавания текста.

Процесс распознавания текста.

Распознавание текста является полезной функцией в задачах сканирования документов, оптического распознавания символов (OCR) и других подобных приложений. Вы можете использовать библиотеку Google ML Kit Text Recognition для распознавания текста на Flutter. Ниже приведен пример кода для распознавания текста:

Импортируем нужные библиотеки

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

Создаем переменные

  late TextRecognizer _recognizer;   File? _imageFile;   String _scanResults = '';

Инициализируем переменные в initState методе

@override   void initState() {     super.initState();     _recognizer = TextRecognizer();     );   }

Закрываем рекогнайзер в dispose методе

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

Метод для получения и обработки изображения

 Future<void> _getAndScanImage() async {

Очищаем данные при выборе нового изображения

    setState(() {       _imageFile = null;       _scanResults = '';     });     final XFile? pickedImage = await ImagePicker().pickImage(         source: ImageSource.gallery,     );     if (pickedImage != null) {       final File imageFile = File(pickedImage.path);       setState(() {         _imageFile = imageFile;       });       await _scanImage(imageFile);     }   }

Обрабатываем полученный файл

    Future<void> _scanImage(File imageFile) async {     final results = await _recognizer.processImage(       InputImage.fromFile(         _imageFile!,       ),     );     setState(() {       _scanResults = results.text;     });   }

Полученный текст можно вывести виджетом Text, передав туда _scanResults. Так же можно отображать используемое изображение любым удобным способом, просто обернув всё в Column.

3. Распознавание звука

Процесс распознавания речи.

Процесс распознавания речи.

Распознавание звука имеет много возможностей применений, включая задачи распознавания речи и звукового анализа. Для реализации функций распознавания звука на Flutter вы можете использовать библиотеку speech_to_text, которая предоставляет инструменты для распознавания и транскрибирования речи в реальном времени. Ниже приведен пример кода для распознавания речи с использованием библиотеки speech_to_text:

Импортируем нужные библиотеки

import 'package:speech_to_text/speech_recognition_result.dart'; import 'package:speech_to_text/speech_to_text.dart';

Создаем переменные

  late SpeechToText _speechToText;   String _recognizedText = '';

Инициализируем переменные в initState методе

@override   void initState() {     super.initState();     _speechToText = SpeechToText();     );   }

 Закрываем рекогнайзер в dispose методе

  @override   void dispose() {     _speechToText.cancel();     super.dispose();   }

Метод для начала обработки речи в текст

  Future<void> _startListening() async {

Очищаем текст при начале обработки

    setState(() {       _recognizedText = '';     });     await _speechToText.listen(       pauseFor: const Duration(seconds: 2),       listenOptions: SpeechListenOptions(         listenMode: ListenMode.dictation,       ),       onResult: _onSpeechResult,     );   }

Метод для остановки обработки речи в текст

  Future<void> _stopListening() async {     await _speechToText.stop();     setState(() {});   }

Метод для преобразования речи в текст

  void _onSpeechResult(     SpeechRecognitionResult result,   ) {     setState(() {       _recognizedText = result.recognizedWords;     });   }

Полученный текст можно вывести виджетом Text, передав туда _recognizedText.

Вариантов для использования данных технологий огромное количество, например, для отслеживания лица — это аутентификация по биометрии, различные маски для фото/видео, для распознавания текста — это перевод текста на другой язык, преобразование написанных от руки текстов в печатный текст, а для распознавания звука — так же перевод с одного языка на другой, создание заметок, ввод текст голосом и др.


ссылка на оригинал статьи https://habr.com/ru/articles/890700/