0

Ich habe eine Amazon EC2 mit Linux-Instanz eingerichtet und ausgeführt für meine Java-Webanwendung, um REST-Anforderungen zu konsumieren. Das Problem ist, dass ich versuche, Google Cloud Vision in dieser Anwendung zu verwenden, um Gewalt/Nacktheit in Benutzerbildern zu erkennen.Google Application-Anmeldeinformationen festgelegt und nicht gefunden

die EC2 in meinem Terminal Zugriff, stellte ich die GOOGLE_APPLICATION_CREDENTIALS durch den folgenden Befehl ein, die ich in der Dokumentation:

export GOOGLE_APPLICATION_CREDENTIALS=<my_json_path.json> 

kommt mein erstes Problem: Wenn ich meinen Server neu zu starten, und lief ‚echo $ GOOGLE_APPLICATION_CREDENTIALS 'die Variable ist weg. Ok, ich habe es auf bash_profile und bashrc gesetzt und jetzt ist es ok.

Aber, wenn ich meine Bewerbung lief, den obigen Code raubend, den Erwachsenen und Gewalt Status meiner Bild zu bekommen, bekam ich folgende Fehlermeldung:

java.io.IOException: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information. 

Mein Code ist folgende:

-Controller:

 if(SafeSearchDetection.isSafe(user.getId())) { 
      if(UserDB.updateUserProfile(user)==false){ 
       throw new SQLException("Failed to Update"); 
      } 
     } else { 
      throw new IOException("Explicit Content"); 
     } 

SafeSearchDetection.isSafe (int idUser):

String path = IMAGES_PATH + idUser + ".jpg"; 

    try { 
     mAdultMedicalViolence = detectSafeSearch(path); 
     if(mAdultMedicalViolence.get(0) > 3) 
      return false; 
     else if(mAdultMedicalViolence.get(1) > 3) 
      return false; 
     else if(mAdultMedicalViolence.get(2) > 3) 
      return false; 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return true; 

detectSafeSearch (String path):

List<AnnotateImageRequest> requests = new ArrayList<AnnotateImageRequest>(); 
    ArrayList<Integer> adultMedicalViolence = new ArrayList<Integer>(); 

    ByteString imgBytes = ByteString.readFrom(new FileInputStream(path)); 

    Image img = Image.newBuilder().setContent(imgBytes).build(); 
    Feature feat = Feature.newBuilder().setType(Type.SAFE_SEARCH_DETECTION).build(); 
    AnnotateImageRequest request = AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); 
    requests.add(request); 

    ImageAnnotatorClient client = ImageAnnotatorClient.create(); 

    BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); 
    List<AnnotateImageResponse> responses = response.getResponsesList(); 

    for (AnnotateImageResponse res : responses) { 
     if (res.hasError()) { 
      System.out.println("Error: "+res.getError().getMessage()+"\n"); 
      return null; 
     } 

     SafeSearchAnnotation annotation = res.getSafeSearchAnnotation(); 
     adultMedicalViolence.add(annotation.getAdultValue()); 
     adultMedicalViolence.add(annotation.getMedicalValue()); 
     adultMedicalViolence.add(annotation.getViolenceValue()); 

    } 
    for(int content : adultMedicalViolence) 
     System.out.println(content + "\n"); 

    return adultMedicalViolence; 

Antwort

0

Meine REST-Anwendung wurde über einem Tomcat8 gebaut. Nach nicht erfolgreichem Ausführen des Befehls:

Ich merke, dass mein Problem in den Umgebungsvariablen zu Tomcat Installation war. Um dies zu korrigieren, habe ich nur eine neue Datei setenv.sh in meinem/sind mit dem Inhalt:

GOOGLE_APPLICATION_CREDENTIALS=<my_json_path.json> 

Und es hat funktioniert!

Verwandte Themen