Решение задач распознавания на 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 _faces = [];
Инициализируем переменные в initState методе
@override
void initState() {
super.initState();
_picker = ImagePicker();
_faceDetector = FaceDetector(
options: FaceDetectorOptions(),
);
}
Закрываем детектор в dispose методе
@override
void dispose() {
_faceDetector.close();
super.dispose();
}
Метод для получения и обработки изображения
Future _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 _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 _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 _startListening() async {
Очищаем текст при начале обработки
setState(() {
_recognizedText = '';
});
await _speechToText.listen(
pauseFor: const Duration(seconds: 2),
listenOptions: SpeechListenOptions(
listenMode: ListenMode.dictation,
),
onResult: _onSpeechResult,
);
}
Метод для остановки обработки речи в текст
Future _stopListening() async {
await _speechToText.stop();
setState(() {});
}
Метод для преобразования речи в текст
void _onSpeechResult(
SpeechRecognitionResult result,
) {
setState(() {
_recognizedText = result.recognizedWords;
});
}
Полученный текст можно вывести виджетом Text, передав туда _recognizedText.
Вариантов для использования данных технологий огромное количество, например, для отслеживания лица — это аутентификация по биометрии, различные маски для фото/видео, для распознавания текста — это перевод текста на другой язык, преобразование написанных от руки текстов в печатный текст, а для распознавания звука — так же перевод с одного языка на другой, создание заметок, ввод текст голосом и др.
С помощью Flutter можно создать мощные и интуитивно понятные мобильные приложения с функциональностью распознавания, удовлетворяющие требованиям пользователей.