Die Arbeit mit FileEntity scheint der eleganteste Weg zur Lösung des Problems zu sein. Es gab eine kleine Änderung an ctrashs Code: Da der Konstruktor FileEntity(File, String)
veraltet ist, muss der Konstruktor FileEntity(File, ContentType)
verwendet werden. In diesem Fall muss der Inhaltstyp des Headers und der Image-Datei "application/octet-stream" sein. Ich habe es mit diesem Code zu arbeiten:
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.io.File;
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class PostTest
{
public static void main(String[] args)
{
CloseableHttpClient httpclient = HttpClients.createDefault();
try
{
URIBuilder uriBuilder = new URIBuilder("https://westus.api.cognitive.microsoft.com/face/v1.0/detect");
uriBuilder.setParameter("returnFaceId", "true");
uriBuilder.setParameter("returnFaceLandmarks", "false");
uriBuilder.setParameter("returnFaceAttributes", "age");
URI uri = uriBuilder.build();
HttpPost request = new HttpPost(uri);
// Request headers. Replace the example key below with your valid subscription key.
request.setHeader("Content-Type", "application/octet-stream");
request.setHeader("Ocp-Apim-Subscription-Key", "YOUR_SUBSCRIPTION_KEY");
// Request body
File file = new File("YOUR_IMAGE_FILE");
FileEntity reqEntity = new FileEntity(file, ContentType.APPLICATION_OCTET_STREAM);
request.setEntity(reqEntity);
HttpResponse response = httpclient.execute(request);
HttpEntity entity = response.getEntity();
System.out.println(response.getStatusLine());
if (entity != null)
{
System.out.println(EntityUtils.toString(entity));
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Nach der korrekten Ausführung zeigt das Terminal das JSON-Objekt die Face API zurückgibt.
Danke, cthrash, denn dies ist der einzige Ort im Internet, wo ich gelernt habe, wie man das macht!
Nicht sicher, welchen Teil von "ihrer Website" Sie betrachten. Von "Microsoft Cognitive Services - Dokumentation", https://www.microsoft.com/cognitive-services/en-us/face-api/documentation/get-started-with-face-api/gettingstartedwithfaceapiinjavaforandroid, sieht es aus wie te ' detect'-Methode verwendet ein 'InputSteam', das ein Bild im JPEG-Format enthält. – david