2016-10-09 12 views
4

저는 Cognitive-SpeakerRecognition을 가지고 놀고 있었고 새로운 사용자를 등록하려고했습니다. 이를 위해 Microsoft API Reference의 예제를 따랐습니다. 슬프게도 나는 오류 응답을 얻을 :Microsoft Cognitive-SpeakerRecognition Java를 사용하는 BadRequst

{ 
    "error": { 
    "code": "BadRequest", 
    "message": "Invalid Audio Format: Not a WAVE file - no RIFF header" 
    } 
} 

나는 문제를 googleing 많은 시간을 소비하고 githubStackOverflow에 관련된 무언가를 발견했다. 불행히도 github의 답변을 적용 할 수 없었습니다 (긴 오디오 예제로 문제를 해결했지만 시도했지만 오류 응답이 계속 나타남). 그래서 누군가 내가 잘못하고있는 것을 알아낼 수 있습니까? 읽어 주셔서 감사합니다 :) 여기 내 코드입니다 :

public static void main(String[] args) { 
     HttpClient httpclient = HttpClients.createDefault(); 

     try { 
      URIBuilder builder = new URIBuilder("https://api.projectoxford.ai/spid/v1.0/identificationProfiles/{PROFIL}/enroll"); 

      URI uri = builder.build(); 
      HttpPost request = new HttpPost(uri); 
      request.setHeader("Content-Type", "multipart/form-data"); 
      request.setHeader("Ocp-Apim-Subscription-Key", "API_KEY"); 

      FileInputStream someStream = new FileInputStream(new File("test.wav")); 
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
      int bytesRead; 
      byte[] bytes = new byte[1024]; 
      while ((bytesRead = someStream.read(bytes)) > 0) { 
       byteArrayOutputStream.write(bytes, 0, bytesRead); 
      } 
      byte[] data = byteArrayOutputStream.toByteArray(); 

      MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); 
      entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
      entityBuilder.setStrictMode(); 
      entityBuilder.addBinaryBody("enrollmentData", data, ContentType.MULTIPART_FORM_DATA, "test.wav"); 
      request.setEntity(entityBuilder.build()); 

      HttpResponse response = httpclient.execute(request); 
      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       System.out.println(EntityUtils.toString(entity)); 
      } 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 

편집 : 다음은이 서비스에 의해 다중 폼 데이터 처리 비표준입니다

+0

공유 파일 test.wav –

+0

I : 업데이트 된 엔드 포인트를 반영, 전체 Java 추가

request.setEntity( new FileEntity(new File("test.wav"), ContentType.APPLICATION_OCTET_STREAM)); 

: 당신은 단지 하나의 페이로드 유형이 있기 때문에 어느 쪽이든, 당신은 다음을 수행 불과합니다 질문이 끝날 때 추가했습니다. –

+0

오디오가 꽤 짧습니다. 오디오를 길게 시도 했습니까? –

답변

2

test.wav 내가 생각하는 파일을 다운로드 할 수있는 틀림없이 버그.

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.utils.URIBuilder; 
import org.apache.http.entity.ContentType; 
import org.apache.http.entity.FileEntity; 
import org.apache.http.impl.client.HttpClients; 
import java.io.File; 
import java.net.URI; 

public class EnrollSpeaker { 
    static String API_KEY = "YOUR-KEY"; 
    static String PROFILE_ID = "YOUR-PROFILE-ID"; 
    static String LOCATION = "westus"; // Check, might be different in the future 

    public static void main(String[] args) { 
     HttpClient httpclient = HttpClients.createDefault(); 

     try { 
      URIBuilder builder = new URIBuilder(
       String.format("https://%s.api.cognitive.microsoft.com/spid/v1.0/identificationProfiles/%s/enroll", LOCATION, PROFILE_ID)); 
      URI uri = builder.build(); 
      HttpPost request = new HttpPost(uri); 
      request.setHeader("Ocp-Apim-Subscription-Key", API_KEY); 
      request.setEntity(new FileEntity(new File("test.wav"), ContentType.APPLICATION_OCTET_STREAM)); 

      HttpResponse response = httpclient.execute(request); 
      HttpEntity entity = response.getEntity(); 

      // Response is empty on success; the following will contain the URI where you can check the status 
      System.out.println(response.getHeaders("Operation-Location")[0].getValue()); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 
+0

안녕하세요, 조언 해 주셔서 감사합니다. –

+0

불행히도 오류 응답은 동일합니다. 다른 생각, 문제는 무엇이있을 수 있니? –

+1

MultipartEntityBuilder를 사용하는 예제 코드를 삭제 했습니까? 'request.setHeader ("Content-Type"...)'행을 삭제해야합니다. 나는 당신의 참조 된 test.wav와 함께 노력했고 그것은 나를 위해 일했습니다. – cthrash