-
구글 STT 타임스탬프(Timestamp) 예제 (Speech to text API) 로컬 파일 사용, 1분 미만 짧은 오디오 파일JAVA/컨셉 , 예제 2020. 1. 25. 18:00
구글 STT 사용 예제. 짧은 음원 파일에서 텍스트 및 해당 텍스트 나온 시간까지 캐치할 수 있다
JAVA 1.8, 윈도우 환경에서 진행했고, 동영상 파일에서 음원 추출한 파일을 파라미터로 사용했다.
STT 사용하기 위해 구글 클라우드 플랫폼 등록해야 하는데 그 과정은 구글링하면 많이 나와 생략. 간단하게 순서만 말하자면
1. 구글 계정 생성
2. 구글 클라우드 플랫폼 결제방식 등록 (카드 번호)
> 체험판 사용 가능하지만 나중에 비용 발생
3. 프로젝트 생성 및 활성화
4. IAM 설정 및 인증서 발급 (JSON 파일)
5. GOOGLE CREDENTIAL 환경 설정 ( 4번에서 IAM 설정시 발급받은 JSON 파일)
> 사용 권한 및 비용 산정 위해
https://cloud.google.com/docs/authentication/getting-started?hl=ko
6. GOOGLE CLOUD SDK 파일 설치 및 환경 설정
https://cloud.google.com/speech-to-text/docs/quickstart-gcloud?hl=ko
https://cloud.google.com/sdk/docs/?hl=ko
com.google.cloud google-cloud-speech 1.22.0
메이븐 디펜던시 추가.
> google.cloud.speech 패키지 사용 가능
예제 코드 그대로 사용하면 되는데, RecognitionConfig 객체만 내 조건에 맞게 변경하면 된다.
인코딩 언어(setLanguegeCode), 타임스탬프 (setEnableTimeOffsets) 를 달리 했다.
인코딩 언어는 다음 페이지에서 확인 가능
https://cloud.google.com/speech-to-text/docs/languages?hl=ko
import com.google.cloud.speech.v1.RecognitionAudio; import com.google.cloud.speech.v1.RecognitionConfig; import com.google.cloud.speech.v1.RecognitionConfig.AudioEncoding; import com.google.cloud.speech.v1.RecognizeResponse; import com.google.cloud.speech.v1.SpeechClient; import com.google.cloud.speech.v1.SpeechRecognitionAlternative; import com.google.cloud.speech.v1.SpeechRecognitionResult; import com.google.protobuf.ByteString; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public void transcription() throws Exception { whoAmi = Thread.currentThread().getStackTrace()[1].toString(); JSONObject obj = new JSONObject(); String res = ""; // 음원파일 경로 String filePath = File.separator + "var" + File.separator + "stt" + File.separator "example.flac"; try (SpeechClient speech = SpeechClient.create()) { Path path = Paths.get(filePath); byte[] data = Files.readAllBytes(path); ByteString audioBytes = ByteString.copyFrom(data); // Configure request with local raw PCM audio RecognitionConfig config = RecognitionConfig.newBuilder() .setEncoding(AudioEncoding.FLAC) .setLanguageCode("ko-KR") .setSampleRateHertz(16000) .setEnableWordTimeOffsets(true) .build(); RecognitionAudio audio = RecognitionAudio.newBuilder().setContent(audioBytes).build(); // Use blocking call to get audio transcript RecognizeResponse response = speech.recognize(config, audio); List results = response.getResultsList(); for (SpeechRecognitionResult result : results) { // There can be several alternative transcripts for a given chunk of speech. Just use the // first (most likely) one here. SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0); System.out.printf("Transcription: %s%n", alternative.getTranscript()); for (WordInfo wordInfo : alternative.getWordsList()) { System.out.println(wordInfo.getWord()); System.out.printf( "\t%s.%s sec - %s.%s sec\n", wordInfo.getStartTime().getSeconds(), wordInfo.getStartTime().getNanos() / 100000000, wordInfo.getEndTime().getSeconds(), wordInfo.getEndTime().getNanos() / 100000000); } } } catch (Exception e) { } }
메소드 수행하면 한글로 읽어온다. jtbc 뉴스 파일 15초 내외였는데, 정확도가 나름 괜찮은 것 같다.
'JAVA > 컨셉 , 예제' 카테고리의 다른 글
자바(JAVA) mp4 파일 video control 속성 적용 (0) 2020.02.19 Jave 예제 (동영상파일에서 음원 추출) (1) 2020.01.25 (JAVA) 자바 인터페이스(Interface) (0) 2018.08.24 (JAVA) 자바 추상 클래스(abstract class) (0) 2018.08.24 (JAVA) 자바 상속 & 오버라이딩(Over riding) (0) 2018.08.24