inflearn logo
강의

講義

知識共有

[Python初心者] Flutterで作成するChatGPT音声翻訳アプリ

음성 인식 후 마이크 색깔이 변하지 않아요.

解決済みの質問

319

meniac000763

投稿した質問数 1

1

안녕하세요.

강의를 보면서 쭈욱 진행하고 있는데, 에뮬레이터에서 음성인식을 테스트하면 음성인식이 완료되었음에도 마이크 색깔이 검정색으로 변하지 않습니다. 강의 내용대로 코드를 쳤는데 확인 부탁드립니다. (혹시 소스코드가 깃헙에는 없나요?..)

import 'package:dash_chat_2/dash_chat_2.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:speech_to_text/speech_to_text.dart';
import 'package:speech_to_text/speech_recognition_result.dart';


class BasicScreen extends StatefulWidget {
  @override
  _BasicState createState() => _BasicState();
}

class _BasicState extends State<BasicScreen> {

  bool isListening = false;
  SpeechToText _speechToText = SpeechToText();
  bool _speechEnabled = false;
  String _lastWords = '';

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

  ChatUser user1 = ChatUser(
    id: '1',
    firstName: 'me',
    lastName: 'me',
  );

  ChatUser user2 = ChatUser(
    id: '2',
    firstName: 'chatGPT',
    lastName: 'openAI',
    profileImage: "assets/img/gpt_icon.png"
  );

  late List<ChatMessage> messages = <ChatMessage>[
    ChatMessage(
      text: '반갑습니다. 어서오세요. 무엇을 도와드릴까요?',
      user: user2,
      createdAt: DateTime.now(),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Basic example'),
      ),
      body: DashChat(
        currentUser: user1,
        onSend: (ChatMessage m) {
          setState(() {
            messages.insert(0, m);
          });
          Future<String> data = sendMessageToServer(m.text);
          data.then((value){
            setState(() {
              messages.insert(0, ChatMessage(
                text: value,
                user: user2, 
                createdAt: DateTime.now(),
                ));
            });
          });
        },
        messages: messages,
        inputOptions: InputOptions(
          leading: [
            IconButton(
              icon: Icon(Icons.mic, color: isListening? Colors.red: Colors.black),
              onPressed: (){
                setState(() {
                  isListening = !isListening;
                  if (isListening == true){
                    print('음성인식 시작');
                    _startListening();
                  }else{
                    print('음성인식 끝');
                    _stopListening();
                  }
                });
              },
            )
          ]
          ) ,
      ),
    );
  }

  Future<String> sendMessageToServer(String message) async{

    var headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer sk-proj-b2yCBjZ7jwkR7nmWl4NLT3BlbkFJmm0iaZMBGPJHHy3b3I4J',
    };
    var request = http.Request('POST', Uri.parse('https://api.openai.com/v1/chat/completions'));
    request.body = json.encode({
      "model": "gpt-3.5-turbo",
      "messages": [
        {
          "role": "user",
          "content": message,
        }
      ]
    });
    request.headers.addAll(headers);

    http.StreamedResponse response = await request.send();

    if (response.statusCode == 200) {
      String responseString = await response.stream.bytesToString();
      Map<String, dynamic> jsonResponse = json.decode(responseString);
      String result = jsonResponse['choices'] != null? jsonResponse['choices'][0]['message']['content']: "No result found";
      print(responseString);
      return result;
    }
    else {
      print(response.reasonPhrase);
      return "ERROR";
    }
  }
  /// This has to happen only once per app
  void _initSpeech() async {
    print("음성인식 기능을 시작합니다.");
    _speechEnabled = await _speechToText.initialize();
    // setState(() {});
  }

  /// Each time to start a speech recognition session
  void _startListening() async {
    print("음성인식을 시작합니다.");
    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 {
    print("음성인식을 종료합니다.");
    await _speechToText.stop();
    // setState(() {});
  }

  /// This is the callback that the SpeechToText plugin calls when
  /// the platform returns recognized words.
  void _onSpeechResult(SpeechRecognitionResult result) {
    _lastWords = "";
    if(result.finalResult){
      _lastWords = result.recognizedWords;
      print("최종 인식된 문장: $_lastWords");
      setState(() {
        messages.insert(0, ChatMessage(
          text: _lastWords,
          user: user1, 
          createdAt: DateTime.now(),
        ));
      });

      Future<String> data = sendMessageToServer(_lastWords);
      data.then((value){
        setState(() {
          messages.insert(0, ChatMessage(
            text: value,
            user: user2, 
            createdAt: DateTime.now(),
            ));
        });
      });
    }    
  }
}

python flutter 챗봇 chatgpt openai-api

回答 1

1

davi

안녕하세요?

 

우선 불편을 드려 죄송합니다.

코드는 섹션4 Flutter 환경세팅 소개 [링크] 오른쪽 상단 '수업자료'에 있으니 참고하시기 바랍니다.

 

제가 강의에서 구현한 기능은

버튼이 기본값이 false였다가, 한번 누르면 true로 바뀌고, 음성인식이 시작되고, 빨간색으로 바뀝니다.

다시 한번 누르면 값이 다시 false로 바뀌고, 음성인식이 종료되고, 검정색으로 바뀝니다.

 

올려주신 코드로 테스트했을 때, 정상적으로 버튼이 빨간색과 검정색으로 바뀌는 것을 확인했는데요. 만약 마이크 버튼을 2번째로 눌러서 음성인식을 종료시켜도 계속 빨간색으로 남아있는 상황이라면 번거로우시더라도 다시 한 번 상황을 알려주시면 감사하겠습니다.(예:flutter run 이 후 터미널에 출력된 메시지)

 

감사합니다.

 

1

meniac000763

아, 저는 발화를 하고 자동으로 발화가 종료됨을 인식(End point detecting)하기 때문에 버튼을 누르지 않아도 색이 바뀔것을 기대했었습니다. 설명 감사합니다.

매수 실행 시점 관련

0

6

0

영상 다운로드는 안되나요?

0

11

0

수강자료 다운로드 관련 문의

0

21

2

Opus/Sonnet 버전 관련 문의

1

21

2

영상이 안나옵니다. 그냥 빈공간이에요

1

17

3

"run_nvidia_gpu.bat" 실행후

0

14

1

섹션2 질문이요

1

21

2

섹션 2

0

17

1

슬라이드 오타

0

23

0

섹션1.9 질문입니다!

1

31

3

웹서비스 방법

0

31

2

MCP 정의가 잘못되어 있음 (Chapter2)

0

28

1

이북 다운로드 위치 문의

0

25

1

수강 연장 문의드립니다.

0

32

2

13. (App 2) 기본기 훈련 에서

0

34

1

채점 프로그램 미작동

0

27

2

유튜브는 4일전에도 영상 올라왔던데, 이 강의는 언제쯤 ㅜㅜ

1

28

1

챌린지 시작일 문의

0

39

0

음성인식 번역

0

385

2

음성인식 하는 마이크 시간이 짧은거 같아요

1

601

2

음성 통신 테스트 안됨

0

281

3

chatgpt api 연결안되는거 같아요

0

974

2

pip install 오류가 해결이 안되네요...

0

5016

2

휴대폰에서 동영상이 재생이 안됩니다 ㅠㅠ

0

565

2