Уточнение: этот вызов API не был успешным

#java #image #clarifai

#java #изображение #clarifai

Вопрос:

Я пробовал некоторые концепции с Clarifai локально, используя java, из некоторых изображений, которые у меня есть на моем компьютере. Идея состояла в том, чтобы получить 30 концепций для каждого из изображений, которые затем будут сохранены в виде тегов в приложении, которое я разрабатываю. Изначально код работал, и я распечатал результат для каждого из изображений в папке, из которой я читаю, но чуть более часа назад я оставил следующую ошибку: введите описание изображения здесь

Ниже я оставляю код Java, который я использовал для получения концепций моих изображений:

 protected static String getConcepts(String path, String API_KEY) {

    /*Vou obter 30 conceitos para uma determinada imagem*/
    
    String result = "";
    ClarifaiClient client = new ClarifaiBuilder(API_KEY).client(new OkHttpClient()).buildSync();

    final List<ClarifaiOutput<Concept>> predictionResults = client.getDefaultModels().generalModel().predict().
    withInputs(ClarifaiInput.forImage(new File(path))).withMaxConcepts(5).executeSync().get();

    Iterator<ClarifaiOutput<Concept>> resultTags = predictionResults.iterator();
    TreeMap<String, Float> tags = new TreeMap<>();
    int numberOfTags;

    if (resultTags.hasNext()) {
        ClarifaiOutput<Concept> next = resultTags.next();
        numberOfTags = next.data().size();

        for (int j = 0; j < numberOfTags; j  ) {
            Concept concept = next.data().get(j);
            String name = concept.name();
            tags.put(concept.name(), concept.value());
        }
    }

    for (Map.Entry<String, Float> entry : tags.entrySet()) {
        result  = entry.getKey()   ","   entry.getValue()   ",";
    }

    System.out.println( result);
    return resu<


    
 

}

 public static void main(String[] args) throws IOException {

     /*ClarifaiClient client = new ClarifaiBuilder("b5bc3cb6b7ba4a8cbd6d950c811c18b3").buildSync();

     final List<ClarifaiOutput<Concept>> response =
         // You can also do client.getModelByID("id") to get your custom model
         client.getDefaultModels().generalModel()
                 .predict()
                 .withInputs(ClarifaiInput.forImage("https://samples.clarifai.com/metro-north.jpg"))
                 .executeSync()
                 .get();
     
     System.out.println(response);*/
    //String src = "/home/claudia/Desktop/EmotionROI/images/anger/selected_images/";
    //String img = "12.jpg";
    //String dest = src "teste" img;
    
    //Lista de ficheiros do diretório - obtenção dos ficheiros
    String pathDir = "/home/claudia/Desktop/EmotionROI/images/anger/selected_images/";
    File imageFile = new File(pathDir);
    File[] listFiles = imageFile.listFiles();
    //System.out.println("Os meus ficheiros são: ");
    
    String resultF = "";
    List<String> listTagImg = new ArrayList<>();
    //ciclo que vai permitir aceder ao nome dos ficheiros
    for (int i = 0; i < listFiles.length; i  ) {
        String nameFiles = listFiles[i].getName();
        //System.out.println(nameFiles);
        
        //criação de um pah novo com o nome de cada um dos ficheiros
        String pahtFiles = pathDir nameFiles;
        listTagImg.add(pahtFiles);
    }
    List<String> listTags = new ArrayList<>();
    String line="";
    for (int j = 0; j < listFiles.length; j  ) {
        //System.out.println("lista" listTagImg.get(j));
        line  = getConcepts(listTagImg.get(j), "b5bc3cb6b7ba4a8cbd6d950c811c18b3");
        
    }
    //getConcepts(listTagImg.get(), "241b3315671f4baeaec399186c435022");
    
    System.out.println(line);
 

Что я делаю roung?

Комментарии:

1. Я бы посмотрел на часть «Подробности об ошибке» частично обрезанного изображения сообщения об ошибке.

Ответ №1:

Это (предупреждение о недопустимом отражающем доступе) может произойти в более старых версиях protobuf. Какую версию вы используете? Вы можете обновить?

API должен использовать 3.12.0, но я видел случаи, когда неожиданно использовалась более старая установленная версия.

Только что увидел, что сообщение об ошибке, которое вы получаете, на самом деле является NoSuchElementException, поэтому ошибка сети Clarifai, вероятно, не связана с отключением или проблемами с сетью, как я изначально подозревал.

Было бы полезно узнать, какая строка 134 находится в вашей getConcepts функции, чтобы увидеть, передает ли она что-то странное в Clarifai API, который может быть заблокирован.