Задачи распознавания изображений и звука имеют широкий спектр применений в различных приложениях. Используя 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/
Добавить комментарий