Преобразование речи в текст с помощью Flutter не работает на Android

#flutter #dart #flutter-layout #flutter-dependencies #flutter-test

#flutter #dart #flutter-layout #flutter-зависимости #flutter-тест

Вопрос:

После запуска исходного кода, похоже, ошибок в распознавании речи нет, но он выдает предупреждения о проблемах устаревания. Может ли кто-нибудь, у кого есть какие-либо идеи по этому вопросу, помочь мне? Я понятия не имею, как это решить. Я ломал голову, думая об этом решении, и продолжаю менять плагин, чтобы опробовать все возможные решения. Заранее благодарю вас.

Ниже приведена консоль отладки:

 Launching libmain.dart on AOSP on IA Emulator in debug mode...
libmain.dart:1
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01

√  Built buildappoutputsflutter-apkapp-debug.apk.
W/FlutterActivityAndFragmentDelegate(23764): A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
Connecting to VM Service at ws://127.0.0.1:54086/5SFyrXlWPbo=/ws
D/EGL_emulation(23764): eglMakeCurrent: 0xe1005b40: ver 2 0 (tinfo 0xc63ef010)
I/OpenGLRenderer(23764): Davey! duration=7183ms; Flags=1, IntendedVsync=120809744677502, Vsync=120814844677298, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=120814867298760, AnimationStart=120814884416860, PerformTraversalsStart=120814981718460, DrawStart=120816317099660, SyncQueued=120816631755960, SyncStart=120816958353760, IssueDrawCommandsStart=120816979574560, SwapBuffers=120817095741560, FrameCompleted=120817254727060, DequeueBufferDuration=105300000, QueueBufferDuration=5063000,
D/eglCodecCommon(23764): setVertexArrayObject: set vao to 0 (0) 1 0
I/OpenGLRenderer(23764): Davey! duration=935ms; Flags=0, IntendedVsync=120840030058709, Vsync=120840346725363, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=120840356603560, AnimationStart=120840368806860, PerformTraversalsStart=120840729392360, DrawStart=120840794494960, SyncQueued=120840818237460, SyncStart=120840822394960, IssueDrawCommandsStart=120840828390560, SwapBuffers=120840893817960, FrameCompleted=120840970046060, DequeueBufferDuration=12527000, QueueBufferDuration=45393000,
 

Я использую этот плагин: https://pub.flutter-io.cn/packages/speech_to_text /

Мой код для Android:

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  SpeechToText _speechToText = SpeechToText();
  bool _speechEnabled = false;
  String _lastWords = '';

  @override
  void initState() {
    super.initState();
    _initSpeech();
  }

  /// This has to happen only once per app
  void _initSpeech() async {
    _speechEnabled = await _speechToText.initialize();
    setState(() {});
  }

  /// Each time to start a speech recognition session
  void _startListening() async {
    await _speechToText.listen(onResult: _onSpeechResult);
    setState(() {});
  }

  /// Manually stop the active speech recognition session
  /// Note that there are also timeouts that each platform enforces
  /// and the SpeechToText plugin supports setting timeouts on the
  /// listen method.
  void _stopListening() async {
    await _speechToText.stop();
    setState(() {});
  }

  /// This is the callback that the SpeechToText plugin calls when
  /// the platform returns recognized words.
  void _onSpeechResult(SpeechRecognitionResult result) {
    setState(() {
      _lastWords = result.recognizedWords;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Speech Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              padding: EdgeInsets.all(16),
              child: Text(
                'Recognized words:',
                style: TextStyle(fontSize: 20.0),
              ),
            ),
            Expanded(
              child: Container(
                padding: EdgeInsets.all(16),
                child: Text(
                  // If listening is active show the recognized words
                  _speechToText.isListening
                      ? '$_lastWords'
                      // If listening isn't active but could be tell the user
                      // how to start it, otherwise indicate that speech
                      // recognition is not yet ready or not supported on
                      // the target device
                      : _speechEnabled
                          ? 'Tap the microphone to start listening...'
                          : 'Speech not available',
                ),
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed:
            // If not yet listening for speech start, otherwise stop
            _speechToText.isNotListening ? _startListening : _stopListening,
        tooltip: 'Listen',
        child: Icon(_speechToText.isNotListening ? Icons.mic_off : Icons.mic),
      ),
    );
  }
}
 

Он подает звуковой сигнал, но когда после этого он не показывает никаких выходных данных. Также в AndroidManifest.xml в папке main и debug у меня есть:

 <uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/>
<queries>
    <intent>
        <action android:name="android.speech.RecognitionService" />
    </intent>
</queries>
 

Комментарии:

1. Я думаю, может быть, проблема в моем ноутбуке bcs, после того, как я подключил свой телефон к flutter vscode, проблем не возникло.