【发布时间】:2019-03-08 12:40:12
【问题描述】:
在我的应用程序中,我正在上传图片以从 Google Cloud Vision API 获取情绪响应。但是在将捕获的图像发送到云端时,我收到了错误
错误
401-1982/com.emotionrecognition W/System.err: java.io.FileNotFoundException: https://vision.googleapis.com/v1/images:annotate?key=AIzaSyAbr--TMSjNERLbwHB4p6a0EnYvVaFlqus
03-08 16:30:41.588 1401-1982/com.emotionrecognition W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255)
03-08 16:30:41.588 1401-1982/com.emotionrecognition W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
03-08 16:30:41.588 1401-1982/com.emotionrecognition W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(Unknown Source:0)
03-08 16:30:41.588 1401-1982/com.emotionrecognition W/System.err: at com.emotionrecognition.CloudVision.send(CloudVision.java:81)
03-08 16:30:41.589 1401-1982/com.emotionrecognition W/System.err: at com.emotionrecognition.DetectedEmotionAnalysis$DetectEmotion.doInBackground(DetectedEmotionAnalysis.java:177)
03-08 16:30:41.589 1401-1982/com.emotionrecognition W/System.err: at com.emotionrecognition.DetectedEmotionAnalysis$DetectEmotion.doInBackground(DetectedEmotionAnalysis.java:172)
03-08 16:30:41.589 1401-1982/com.emotionrecognition W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:333)
03-08 16:30:41.589 1401-1982/com.emotionrecognition W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
03-08 16:30:41.589 1401-1982/com.emotionrecognition W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
03-08 16:30:41.590 1401-1982/com.emotionrecognition W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
03-08 16:30:41.590 1401-1982/com.emotionrecognition W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
03-08 16:30:41.590 1401-1982/com.emotionrecognition W/System.err: at java.lang.Thread.run(Thread.java:764)
03-08 16:30:41.590 1401-1982/com.emotionrecognition D/GCV Error: java.io.FileNotFoundException: https://vision.googleapis.com/v1/images:annotate?key=AIzaSyAbr--TMSjNERLbwHB4p6a0EnYvVaFlqus
03-08 16:30:55.951 1401-1401/com.emotionrecognition V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@8a9b4a4 nm : com.emotionrecognition ic=null
03-08 16:30:55.952 1401-1401/com.emotionrecognition I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
这是我编写的用于将图像发送到 URL 的代码,我没有收到来自 Google Cloud Vision API 的响应,当我将该 URL 粘贴到网络浏览器中时,我收到错误,因为找不到 404 文件
Bitmap bmp = BitmapFactory.decodeFile(imagePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] imageByteArray = stream.toByteArray();
String encodedImageString = Base64.encodeToString(imageByteArray, Base64.DEFAULT);
URL url = new URL(Config.CLOUD_VISION_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
// Features JSON
JSONObject featuresJson = new JSONObject();
featuresJson.put("type", "FACE_DETECTION");
featuresJson.put("maxResults", 1);
JSONArray featuresJSONArray = new JSONArray();
featuresJSONArray.put(featuresJson);
// Image JSON
JSONObject imageJson = new JSONObject();
imageJson.put("content", encodedImageString);
// Requests JSON
JSONObject requestsJson = new JSONObject();
requestsJson.put("image", imageJson);
requestsJson.put("features", featuresJSONArray);
JSONArray requestsJSONArray = new JSONArray();
requestsJSONArray.put(requestsJson);
JSONObject wholeRequest = new JSONObject();
wholeRequest.put("requests", requestsJSONArray);
OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
out.write(wholeRequest.toString());
out.flush();
out.close();
int response_code = con.getResponseCode();
Log.d("GCV Response Code", ""+response_code);
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder sb = new StringBuilder("");
String temp;
while((temp = br.readLine()) != null)
sb.append(temp);
String response = sb.toString();
JSONObject responseJSONObject = new JSONObject(response);
if (response_code == 200) {
Log.d("GCV", "Successful response");
}
JSONArray responsesArray = responseJSONObject.getJSONArray("responses");
JSONObject faceAnnotationsJson = responsesArray.getJSONObject(0);
JSONObject annotedEmotionsJson = faceAnnotationsJson.getJSONArray("faceAnnotations").getJSONObject(0);
return annotedEmotionsJson;
【问题讨论】:
-
说找不到你上传的图片
-
图片上传成功,但是当我在 chrome 中打印 cloud vision url 时出现 404 错误
-
您能否向我们展示您正在处理的问题中的一些代码以进一步检查此问题?
标签: java android filenotfoundexception google-cloud-vision