기계 학습을 통해 오디오 파일을 텍스트로 변환하는 방법
7000 단어 machinelearning
소개
오디오를 텍스트로 변환하는 작업에는 비디오 자막 생성, 회의록 작성, 인터뷰 대본 작성 등 다양한 응용 분야가 있습니다. 기계 학습은 오디오 파일을 정확한 구두점과 함께 세심하게 정확한 텍스트로 변환하여 그 어느 때보다 쉽게 작업을 수행합니다!
실제 효과
오디오 파일 트랜스크립션이 통합된 앱을 빌드하고 실행합니다. 그런 다음 로컬 오디오 파일을 선택하고 텍스트로 변환합니다.
개발 준비
Huawei Maven 리포지토리 구성 및 오디오 파일 전사 SDK 통합에 대한 자세한 내용은 HUAWEI Developers의 Development Guide of ML Kit을 참조하십시오.
AndroidManifest.xml 파일에서 권한 선언
기본 폴더에서 AndroidManifest.xml을 엽니다.
이러한 권한은 동적으로 적용해야 합니다. 그렇지 않으면 권한 거부가 보고됩니다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
개발 절차
오디오 파일 전사 엔진 생성 및 초기화
MainActivity에서 onCreate를 재정의하여 오디오 전사 엔진을 만듭니다.
private MLRemoteAftEngine mAnalyzer;
mAnalyzer = MLRemoteAftEngine.getInstance();
mAnalyzer.init(getApplicationContext());
mAnalyzer.setAftListener(mAsrListener);
MLRemoteAftSetting을 사용하여 엔진을 구성합니다. 이 서비스는 현재 중국어와 영어를 지원합니다. 즉, mLanguage 옵션은 zh 및 en입니다.
MLRemoteAftSetting setting = new MLRemoteAftSetting.Factory()
.setLanguageCode(mLanguage)
.enablePunctuation(true)
.enableWordTimeOffset(true)
.enableSentenceTimeOffset(true)
.create();
enablePunctuation은 변환된 텍스트에 자동으로 구두점을 표시할지 여부를 나타내며 기본값은 false입니다.
이 매개변수를 true로 설정하면 변환된 텍스트에 자동으로 구두점이 표시됩니다. 그렇지 않으면 거짓.
enableWordTimeOffset은 해당 오프셋을 사용하여 각 오디오 세그먼트의 텍스트 전사 결과를 생성할지 여부를 나타냅니다. 기본값은 false입니다. 오디오 지속 시간이 1분 미만인 경우에만 이 매개변수를 설정해야 합니다.
이 매개변수가 true로 설정되면 오프셋 정보가 텍스트 전사 결과와 함께 반환됩니다. 이것은 1분 이하의 짧은 오디오 파일의 트랜스크립션에 적용됩니다. 이 매개변수를 false로 설정하면 오디오 파일의 텍스트 전사 결과만 반환됩니다.
enableSentenceTimeOffset은 오디오 파일에서 각 문장의 오프셋을 출력할지 여부를 나타냅니다. 기본값은 false입니다.
이 매개변수가 true로 설정되면 오프셋 정보가 텍스트 전사 결과와 함께 반환됩니다. 이 매개변수를 false로 설정하면 오디오 파일의 텍스트 전사 결과만 반환됩니다.
전사 결과를 처리하기 위한 리스너 콜백 생성
private MLRemoteAftListener mAsrListener = new MLRemoteAftListener()
리스너가 초기화된 후 AftListener에서 startTask를 호출하여 트랜스크립션을 시작합니다.
@Override
public void onInitComplete(String taskId, Object ext) {
Log.i(TAG, "MLRemoteAftListener onInitComplete" + taskId);
mAnalyzer.startTask(taskId);
MLRemoteAftListener에서 onUploadProgress, onEvent 및 onResult를 재정의합니다.
@Override
public void onUploadProgress(String taskId, double progress, Object ext) {
Log.i(TAG, " MLRemoteAftListener onUploadProgress is " + taskId + " " + progress);
}
@Override
public void onEvent(String taskId, int eventId, Object ext) {
Log.e(TAG, "MLAsrCallBack onEvent" + eventId);
if (MLAftEvents.UPLOADED_EVENT == eventId) { // The file is uploaded successfully.
showConvertingDialog();
startQueryResult(); // Obtain the transcription result.
}
}
@Override
public void onResult(String taskId, MLRemoteAftResult result, Object ext) {
Log.i(TAG, "onResult get " + taskId);
if (result != null) {
Log.i(TAG, "onResult isComplete " + result.isComplete());
if (!result.isComplete()) {
return;
}
if (null != mTimerTask) {
mTimerTask.cancel();
}
if (result.getText() != null) {
Log.e(TAG, result.getText());
dismissTransferringDialog();
showCovertResult(result.getText());
}
List<MLRemoteAftResult.Segment> segmentList = result.getSegments();
if (segmentList != null && segmentList.size() != 0) {
for (MLRemoteAftResult.Segment segment : segmentList) {
Log.e(TAG, "MLAsrCallBack segment text is : " + segment.getText() + ", startTime is : " + segment.getStartTime() + ". endTime is : " + segment.getEndTime());
}
}
List<MLRemoteAftResult.Segment> words = result.getWords();
if (words != null && words.size() != 0) {
for (MLRemoteAftResult.Segment word : words) {
Log.e(TAG, "MLAsrCallBack word text is : " + word.getText() + ", startTime is : " + word.getStartTime() + ". endTime is : " + word.getEndTime());
}
}
List<MLRemoteAftResult.Segment> sentences = result.getSentences();
if (sentences != null && sentences.size() != 0) {
for (MLRemoteAftResult.Segment sentence : sentences) {
Log.e(TAG, "MLAsrCallBack sentence text is : " + sentence.getText() + ", startTime is : " + sentence.getStartTime() + ". endTime is : " + sentence.getEndTime());
}
}
}
}
폴링 모드에서 전사 결과 처리
전사가 완료된 후 getLongAftResult를 호출하여 전사 결과를 얻습니다. 10초마다 얻은 결과를 처리합니다.
private void startQueryResult() {
Timer mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
getResult();
}
};
mTimer.schedule(mTimerTask, 5000, 10000); // Process the obtained long speech transcription result every 10s.
}
private void getResult() {
Log.e(TAG, "getResult");
mAnalyzer.setAftListener(mAsrListener);
mAnalyzer.getLongAftResult(mLongTaskId);
}
참고문헌
자세한 내용은 다음으로 이동하십시오.
ML 키트official website
ML 키트Development Documentation page, 필요한 문서 찾기
Reddit 개발자 토론에 참여
GitHub ML Kit 샘플 코드 다운로드
Stack Overflow 통합 문제를 해결하기 위해
Reference
이 문제에 관하여(기계 학습을 통해 오디오 파일을 텍스트로 변환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hmscore/how-to-convert-audio-file-into-text-with-machine-learning-fd4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)