0

clarifai图像上调用 API 时,它会返回 ClarifaiOutput 概念列表。但是在访问概念时,只能访问值。访问概念的名称会导致NullPointerException.

concept.name() 导致异常,而 concept.value() 工作正常

可以使用 try catch 块处理异常,但我想知道预测的概念名称。

请让我知道可以做些什么来解决这个问题。

下面是相同的代码:

public void run() {
                List<String> ResultList = null;
                String ResultString = "";
                final List<ClarifaiOutput<Concept>> predictionResults = client.getDefaultModels().generalModel().predict().
                        withInputs(ClarifaiInput.forImage(new File(pictureFile.getAbsolutePath())))
                        .executeSync()
                        .get();
                if(predictionResults!=null && predictionResults.size()>0){
                    ListIterator<ClarifaiOutput<Concept>> itr= predictionResults.listIterator();
                    while(itr.hasNext()){
                        ClarifaiOutput<Concept> output = itr.next();
                        List<Concept> concepts = output.data();
                        if(concepts != null && concepts.size() > 0){
                            for (int j = 0; j < concepts.size(); j++) {
                                Concept concept = concepts.get(j);
                                float cval=0;
                                cval = concept.value();
                                if(cval > 0){
                                    ResultList.add(concept.name());
                                    ResultString += concept.name();
                                }
                            }
                        }
                    }
                }
            }
4

1 回答 1

0

NullPointerException 不是由于 concept.name() 而是由于 ResultList.add() 方法。

ResultList 需要初始化以避免异常

List<String> ResultList = new ArrayList<String>();

这将解决问题

于 2018-03-06T07:10:09.433 回答