Произошла ошибка при использовании Google Cloud Vision Face Detection API - PullRequest
0 голосов
/ 08 марта 2019

В моем приложении я загружаю изображение, чтобы получить эмоциональный ответ от API Google Cloud Vision.Но при отправке захваченного изображения в облако я получаю сообщение об ошибке:

Ошибка

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-адрес. Я не получаю ответ от GoogleCloud 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;

1 Ответ

0 голосов
/ 09 марта 2019

Насколько я знаю, вы не можете распечатать URL-адрес облачного видения в Chrome, поскольку для доступа к нему нужны ваши учетные данные.

Вы можете получить доступ к URL-адресу облачного видения с помощью учетной записи api_key или службы OATH2.0

В любом случае, вы должны предоставить эти учетные данные в своих почтовых запросах.

Другое дело, что вам нужно убедиться, что URL вашего изображения доступен через Vision API.

Либо ваше изображениеURL-адрес является общедоступным URL-адресом http или URL-адрес GCS, с которым общедоступен или может быть получен с помощью ваших учетных данных.

Или вы можете отправлять байты изображения напрямую.

Мне кажется, чтовы используете API_KEY вместо учетных данных OATH2.0

401-1982 / com.emotionrecognition W / System.err: java.io.FileNotFoundException: https://vision.googleapis.com/v1/images:annotate?key=AIzaSyAbr--TMSjNERLbwHB4p6a0EnYvVaFlqus

Загружаете ли вы изображение в свойчастное ведро GCS?Если это так, я предлагаю вам пометить ваше изображение как общедоступное и повторить попытку.

Насколько я знаю, api_key нельзя использовать для доступа к частному сегменту GCS.

И это не рекомендуетсявставьте свой api_key напрямую, вы можете удалить тот ключ, который используете.

...