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
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로 구성해준다.
댓글