2015-02-26 4 views
0

Работа с OpenIMAJ Я бы хотел сохранить списки функций для последующего использования, но я получаю исключение java.util.NoSuchElementException: No line found (см. Ниже) при повторном чтении файла функции, который я только что сохранил. Я проверил, что текстовый файл существует, хотя я не совсем уверен, является ли полное содержимое тем, что должно быть (оно очень длинное).OpenIMAJ - список функций чтения ошибок, сохраненный как ascii

Любые идеи, что не так?

Заранее благодарен!

(Мой пробный код вставлен ниже).

java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Unknown Source) 
    at org.openimaj.image.feature.local.keypoints.Keypoint.readASCII(Keypoint.java:296) 
    at org.openimaj.feature.local.list.LocalFeatureListUtils.readASCII(LocalFeatureListUtils.java:170) 
    at org.openimaj.feature.local.list.LocalFeatureListUtils.readASCII(LocalFeatureListUtils.java:136) 
    at org.openimaj.feature.local.list.MemoryLocalFeatureList.read(MemoryLocalFeatureList.java:134) 
    ... 

Мой пробный код выглядит следующим образом:

Video<MBFImage> originalVideo = getVideo(); 
MBFImage frame = originalVideo.getCurrentFrame().clone(); 

DoGSIFTEngine engine = new DoGSIFTEngine(); 
LocalFeatureList<Keypoint> originalFeatureList = engine.findFeatures(frame.flatten()); 

try { 
    originalFeatureList.writeASCII(new PrintWriter(new File("featureList.txt"))); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

System.out.println("Saved feature list with "+originalFeatureList.size()+" keypoints."); 

MemoryLocalFeatureList<Keypoint> loadedFeatureList = null; 
try { 
    loadedFeatureList = MemoryLocalFeatureList.read(new File("featureList.txt"), Keypoint.class); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

System.out.println("Loaded feature list with "+loadedFeatureList.size()+" keypoints."); 

ответ

2

Я думаю, что проблема в том, что вы не закрывая PrintWriter используется для сохранения функции, и что у него не было времени на на самом деле написать содержимое. Однако вы не должны использовать метод LocalFeatureList.writeASCII напрямую, так как он не будет писать информацию заголовка; скорее используйте IOUtils.writeASCII. Заменить:

originalFeatureList.writeASCII(new PrintWriter(new File("featureList.txt"))); 

с

IOUtils.writeASCII(new File("featureList.txt"), originalFeatureList); 

, а затем он должен работать. Это также касается закрытия файла после его написания.

+0

Спасибо @Jon! Измененная линия, как вы рекомендовали, работает как шарм! –