일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- @Transactional
- 양방향 매핑
- Expo
- Spring Boot
- JPA
- 2021 제9회 문화공공데이터 활용경진대회
- skt fellowship 3기
- STT
- 코드업
- yolo
- html
- C++
- javascript
- Loss Function
- 커스텀 데이터 학습
- react native
- google login
- 졸프
- YOLOv5
- AWS
- 순환참조
- OG tag
- google 로그인
- pandas
- Spring
- matplotlib
- google cloud
- idToken
- oauth
- marksense.ai
- Today
- Total
민팽로그
과제02-Google Cloud : Speech-to-Text API(3) 본문
비동기식 음성 인식
1분 이상의 긴 음성 파일을 텍스트로 변환하는 비동기식 인식을 하는 김에 time stamp 기능을 함께 사용해보았다.
time stamp는 단어와 단어 사이의 간격을 인식하여 문장 내에서 단어를 분리하고, 각 단어가 몇초에 시작하여 몇초에 끝나는지 시간 정보를 도장찍듯 출력할 수 있는 기능이다.
이번에는 그냥 gcs에 있는 파일을 사용하였고 구글 stt 문서에서 제공하는 예제코드를 거의 수정없이 사용하였다.
import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.speech.v1.LongRunningRecognizeMetadata;
import com.google.cloud.speech.v1.LongRunningRecognizeResponse;
import com.google.cloud.speech.v1.RecognitionAudio;
import com.google.cloud.speech.v1.RecognitionConfig;
import com.google.cloud.speech.v1.SpeechClient;
import com.google.cloud.speech.v1.SpeechRecognitionAlternative;
import com.google.cloud.speech.v1.SpeechRecognitionResult;
import com.google.cloud.speech.v1.WordInfo;
import com.google.cloud.speech.v1.RecognitionConfig.AudioEncoding;
import java.util.List;
public class TimeStampTest {
public static void main(String[] args) throws Exception {
try (SpeechClient speech = SpeechClient.create()) {
RecognitionConfig config =
RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setLanguageCode("ko-KR")
.setSampleRateHertz(48000)
.setEnableWordTimeOffsets(true) //타임스템프 사용 설정
.setAudioChannelCount(2)
.build();
RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(원격 저장소 주소).build();
// 비동기 방식 사용
OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> response =
speech.longRunningRecognizeAsync(config, audio);
while (!response.isDone()) {
System.out.println("Waiting for response...");
Thread.sleep(10000);
}
List<SpeechRecognitionResult> results = response.get().getResultsList();
for (SpeechRecognitionResult result : results) {
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) {
System.out.println("Failed: " + e);
}
}
}
- 결과(캡쳐사진이 자꾸 깨져서 콘솔창 긁어옴) -
Waiting for response...
Waiting for response...
Waiting for response...
Waiting for response...
Transcription: 앞서 전화 드린 것처럼 지금부터는 이른바 청와대 비서실 새로 지목된 최순실 씨 관련 소식을 집중보도 하겠습니다 지난주 JTBC는 최순실 씨의 끈이라고 않은 고영태 씨를 주제한 내용을 단독으로 보내드렸습니다 최순실 씨가 유일하게 잘하는 것이 대통령 연설문 수정하는 것이다라는 내용이었는데요이 내용을 보도 청와대 이원종 비서실장은 정상적인 사람이면 믿을 수 있겠느냐 봉건시대에 더 있을 수 없는 얘기 다 이렇게 얘기 한 바 있습니다 JTBC가 5cm 아들 보도한 배경에는 사실 믿기 어려운 상황이 있기 때문에 왔습니다 JTBC 취재팀은 최순실 씨의 컴퓨터 입수해서 분석을 했습니다 표시가 대통령 연설문을 받아봤다 사실을 확인할 수 있었습니다 그런데 3시가 연설문 44개를 파일 형태로 받은 시점은 모두 대통령이 연설하기 이전하였습니다 먼저 김길중 기자의 단독
Transcription: 돌보시고 계속해서 이어가겠습니다
Transcription: 최순실 씨 사무실에 있던 pc에 저장된 파일 드립니다 각종 문서도 가득합니다 파일은 모두 200여개의 일입니다 그런데 제가 보관 중인 파일에 대부분이 청와대 와 관련된 내용이었습니다 시스템은 특히 첼시가 대통령 연설문에 수정했다는 최씨의 측근 고령택시 진수 관련해 주목했습니다 최씨가 갖고 있던 연설문 또는 공식 빠른한테 파일은 모드 44 개였습니다 대선후보 시절에 박 대통령의 비롯해 대통령 취임 후 들어 있었습니다 그런데 7시가 이문건 에바다 여러분 시점은 대통령이 실제 발언했던 것보다 길게는 다은이 나왔었습니다 상당수 대통령 연세 문이 사전에 청와대 내부에서도 공유 되지 않는다는 점을 감안하면 연설문이 사전에 청와대 아무거나 첼시에게 전달됐다는 사실은 이른바 비선실세 놀란 거 관련해서 큰 파장을 낳을 것으로 보입니다
Transcription: 김필 주입니다
그....
음성파일 내용이........ 좀.... 정치적이긴 한대.. 별 의도 없다..ㅎ머슥 구글링해서 찾은 2분짜리 음성파일 사용해봤어요..........
아무튼 1분이 훌쩍 넘어가는 음성파일일 때 동기식으로는 변환 불가능하지만 비동기 방식으로는 변환이 가능하다. 아무래도 ai는 사람이 아니기때문에 판단력이 완전히 정확하지는 않다.
또한 타임스템프 기능을 활용하면 저렇게 단어를 분리할 수 있고 몇초에 시작해서 몇초에 끝나는지 알 수 있다!
멘토님이 말씀하신 단어와 단어의 사이의 간격을 측정하여 유창성을 판단할 수 있다는 것이 저 기능과 관련이 있을 것 같다.
마지막 스트리밍 방식이 남았는데 조금 귀찮..
'프로젝트 > 소리마당(2022 프로보노)' 카테고리의 다른 글
공모전 참여 후기: 2021 제9회 문화공공데이터 활용경진대회 (0) | 2021.08.24 |
---|---|
2021.08.22 회의 느낀점 (0) | 2021.08.23 |
과제02-Google Cloud : Speech-to-Text API(4) (0) | 2021.08.20 |
과제02-Google Cloud : Speech-to-Text API(2) (0) | 2021.08.20 |
과제02-Google Cloud : Speech-to-Text API(1) (0) | 2021.08.20 |