본문 바로가기
Android/확장기능

[Android] OkHttp로 Whisper api의 STT(Speech-to-text) 구현하기

by 백호루이 2023. 10. 21.
반응형

OpenAi사의 whisper api를 사용하는 android sample app을 만들고 있는데 http 통신으로 요청을 하고 응답을 받아야 한다. 기존에 android에서 HTTP client를 구현할 때 HttpURLConnection이나 Apache HTTP Client를 사용했다. 다만 이 방법들은 AsyncTask나 background thread 안에 많은 복잡한 정해진 코드들을 구성해야 하는 단점이 있었다. 그런데 이번에 OkHttp를 사용해서 구현을 해보니 훨씬 간편하게 구현을 할 수가 있었다.

 

공식 사이트 : square.github.io/okhttp

깃허브 : github.com/square/okhttp

 

OkHttp 구현

먼저 android의 build gradle의 dependencies를 설정한다.

dependencies {
    ...
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
    implementation 'io.grpc:grpc-okhttp:1.55.1'
    ...
}

 

먼저 OpenAI의 STT(Speech-to-text)를 구현하기 위해 Doc를 확인해 보면 예제에 android가 보이지 않는다.

오직 'python'과 'curl'만 있을 뿐... curl 예제를 보고 OkHttp를 이용해서 구성을 하면 된다.

https://platform.openai.com/docs/guides/speech-to-text?lang=curl

 

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

POST sample codes
추가 form sample

STT가 음성을 텍스트로 바꿔주는 것이기 때문에 음성을 녹음한 파일(mp3, wav 등)을 whisper api를 통해 OpenAI 서버로 전송하면 response로 텍스트를 받는 형식이다.

 

  public Request mRequest;
  private RequestBody mRequestBody;
  private MediaType MEDIA_TYPE = MediaType.parse("audio/wav");
  private String url = "https://api.openai.com/v1/audio/transcriptions";
  private String API_KEY = "OpenAI 회원가입 후 발급";
  
  mRequestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("file", audioFile.getName(), RequestBody.create(MEDIA_TYPE, audioFile))
                .addFormDataPart("model", "whisper-1")
                .build();

  mRequest = new Request.Builder()
            .url(url)
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "multipart/form-data")
            .post(mRequestBody)
            .build();

추가 curl의 --header 부분은 Request의 heaer()로 동일하게 구성을 하고, --form 부분은 RequestBody에 Builder로 구성해준다.

반응형

댓글