Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- curl
- soundpool
- 우분투
- UML
- 폼메일
- Mail Server
- php 시큐어코딩
- php 취약점
- android 효과음
- chart.js
- 안드로이드 푸쉬
- Android
- 안드로이드 푸시
- roundcube
- WebView
- 자바스크립트
- javascript
- 자동 생성
- FCM
- 설치
- mysql
- C#
- PHP
- html5
- C# IO
- not working
- 안드로이드
- dovecot
- xe
- 안드로이드 gcm
Archives
- Today
- Total
그러냐
안드로이드 스튜디오 음성인식 사용하기 구글 STT (Speech-to-Text) 본문
반응형
출처 : https://hanyeop.tistory.com/128
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
안드로이드에서는 android.speech를 통해 음성지원을 지원해준다.
사용방법
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
AndroidManifest 에 오디오,인터넷 권한을 추가해준다.
xml을 원하는 방식대로 만들어준다.
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button;
Intent intent;
SpeechRecognizer mRecognizer;
final int PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 안드로이드 6.0버전 이상인지 체크해서 퍼미션 체크
if(Build.VERSION.SDK_INT >= 23){
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.INTERNET,
Manifest.permission.RECORD_AUDIO},PERMISSION);
}
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
// RecognizerIntent 생성
intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,getPackageName()); // 여분의 키
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,"ko-KR"); // 언어 설정
// 버튼 클릭 시 객체에 Context와 listener를 할당
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRecognizer = SpeechRecognizer.createSpeechRecognizer(MainActivity.this); // 새 SpeechRecognizer 를 만드는 팩토리 메서드
mRecognizer.setRecognitionListener(listener); // 리스너 설정
mRecognizer.startListening(intent); // 듣기 시작
}
});
}
MainActivity의 onCreate에서 안드로이드 버전, 퍼미션 체크를 해주고
RecognizerIntent를 생성하고, SpeechRecognizer 객체에 리스너를 할당해준다.
private RecognitionListener listener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
// 말하기 시작할 준비가되면 호출
Toast.makeText(getApplicationContext(),"음성인식 시작",Toast.LENGTH_SHORT).show();
}
@Override
public void onBeginningOfSpeech() {
// 말하기 시작했을 때 호출
}
@Override
public void onRmsChanged(float rmsdB) {
// 입력받는 소리의 크기를 알려줌
}
@Override
public void onBufferReceived(byte[] buffer) {
// 말을 시작하고 인식이 된 단어를 buffer에 담음
}
@Override
public void onEndOfSpeech() {
// 말하기를 중지하면 호출
}
@Override
public void onError(int error) {
// 네트워크 또는 인식 오류가 발생했을 때 호출
String message;
switch (error) {
case SpeechRecognizer.ERROR_AUDIO:
message = "오디오 에러";
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "클라이언트 에러";
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "퍼미션 없음";
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "네트워크 에러";
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "네트웍 타임아웃";
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "찾을 수 없음";
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RECOGNIZER 가 바쁨";
break;
case SpeechRecognizer.ERROR_SERVER:
message = "서버가 이상함";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "말하는 시간초과";
break;
default:
message = "알 수 없는 오류임";
break;
}
Toast.makeText(getApplicationContext(), "에러 발생 : " + message,Toast.LENGTH_SHORT).show();
}
@Override
public void onResults(Bundle results) {
// 인식 결과가 준비되면 호출
// 말을 하면 ArrayList에 단어를 넣고 textView에 단어를 이어줌
ArrayList<String> matches =
results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for(int i = 0; i < matches.size() ; i++){
textView.setText(matches.get(i));
}
}
@Override
public void onPartialResults(Bundle partialResults) {
// 부분 인식 결과를 사용할 수 있을 때 호출
}
@Override
public void onEvent(int eventType, Bundle params) {
// 향후 이벤트를 추가하기 위해 예약
}
};
}
할당해줄 RecognitionListener를 작성한다.
전체코드
package org.techtown.stttest;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button;
Intent intent;
SpeechRecognizer mRecognizer;
final int PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 안드로이드 6.0버전 이상인지 체크해서 퍼미션 체크
if(Build.VERSION.SDK_INT >= 23){
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.INTERNET,
Manifest.permission.RECORD_AUDIO},PERMISSION);
}
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
// RecognizerIntent 생성
intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,getPackageName()); // 여분의 키
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,"ko-KR"); // 언어 설정
// 버튼 클릭 시 객체에 Context와 listener를 할당
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRecognizer = SpeechRecognizer.createSpeechRecognizer(MainActivity.this); // 새 SpeechRecognizer 를 만드는 팩토리 메서드
mRecognizer.setRecognitionListener(listener); // 리스너 설정
mRecognizer.startListening(intent); // 듣기 시작
}
});
}
private RecognitionListener listener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
// 말하기 시작할 준비가되면 호출
Toast.makeText(getApplicationContext(),"음성인식 시작",Toast.LENGTH_SHORT).show();
}
@Override
public void onBeginningOfSpeech() {
// 말하기 시작했을 때 호출
}
@Override
public void onRmsChanged(float rmsdB) {
// 입력받는 소리의 크기를 알려줌
}
@Override
public void onBufferReceived(byte[] buffer) {
// 말을 시작하고 인식이 된 단어를 buffer에 담음
}
@Override
public void onEndOfSpeech() {
// 말하기를 중지하면 호출
}
@Override
public void onError(int error) {
// 네트워크 또는 인식 오류가 발생했을 때 호출
String message;
switch (error) {
case SpeechRecognizer.ERROR_AUDIO:
message = "오디오 에러";
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "클라이언트 에러";
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "퍼미션 없음";
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "네트워크 에러";
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "네트웍 타임아웃";
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "찾을 수 없음";
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RECOGNIZER 가 바쁨";
break;
case SpeechRecognizer.ERROR_SERVER:
message = "서버가 이상함";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "말하는 시간초과";
break;
default:
message = "알 수 없는 오류임";
break;
}
Toast.makeText(getApplicationContext(), "에러 발생 : " + message,Toast.LENGTH_SHORT).show();
}
@Override
public void onResults(Bundle results) {
// 인식 결과가 준비되면 호출
// 말을 하면 ArrayList에 단어를 넣고 textView에 단어를 이어줌
ArrayList<String> matches =
results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for(int i = 0; i < matches.size() ; i++){
textView.setText(matches.get(i));
}
}
@Override
public void onPartialResults(Bundle partialResults) {
// 부분 인식 결과를 사용할 수 있을 때 호출
}
@Override
public void onEvent(int eventType, Bundle params) {
// 향후 이벤트를 추가하기 위해 예약
}
};
}
github.com/HanYeop/AndroidStudio-Practice/tree/master/STTtest
반응형
'android' 카테고리의 다른 글
[Firebase] Android Gradle 연동 문제 - build gradle plugin id com.google.gms:google-services (0) | 2023.04.26 |
---|---|
안드로이드 공백 제거 (0) | 2022.05.31 |
안드로이드 루팅 체크 (2) | 2022.05.30 |
[Android] 자동차 번호판 인식시키기 with OpenCV + Tesseract-OCR (0) | 2021.06.23 |
Android에서 Tesseract 사용하기 for OCR (0) | 2021.06.23 |