2015-02-18 2 views
-1

У меня этот метод (упрощенный) для обнаружения лица (COUNT) на изображениях (URL):openIMAJ обнаружение лица - неперехваченное IOException

private int processImage(String urlString) { 
    InputStream is = null; 
    URLConnection resource; 
    int facesCount = 0; 
    try { 
     resource = new URL(urlString).openConnection(); 
     resource.setConnectTimeout(200); 
     resource.setReadTimeout(1000); 
     resource.setRequestProperty("User-Agent", "Mozilla/5.0"); 

     String type = resource.getHeaderField("Content-Type"); 
     if (!type.startsWith("image/")) { 
      throw new IOException("Not an image (Content-Type:" + type + ")"); 
     } 
     is = resource.getInputStream(); 
     MBFImage mbfimage = ImageUtilities.readMBF(is); 
     facesCount = faceDetector.detectFaces(Transforms.calculateIntensity(mbfimage)).size(); 
     is.close(); 
    } catch (IOException e) { 
     System.out.println("oops"); 
    } 
    return facesCount; 
} 

Он хорошо работает, но если изображение несколько поврежден (например, this test image), я получаю эту ошибку:

Error: Cannot decode the image for the type : Occurs in: com.sun.media.jai.opimage.CodecRIFUtil java.io.IOException: Source stream does not support seeking backwards. at com.sun.media.jai.codecimpl.CodecUtils.toIOException(CodecUtils.java:76) at com.sun.media.jai.codecimpl.FPXImageDecoder.decodeAsRenderedImage(FPXImageDecoder.java:40) at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:88) at com.sun.media.jai.opimage.FPXRIF.create(FPXRIF.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at javax.media.jai.FactoryCache.invoke(FactoryCache.java:122) at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1674) at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:473) at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:332) at com.sun.media.jai.opimage.StreamRIF.create(StreamRIF.java:102) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at javax.media.jai.FactoryCache.invoke(FactoryCache.java:122) at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1674) at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:473) at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:332) at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:819) at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:867) at javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2242) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2498) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546) at org.openimaj.image.ExtendedImageIO.read(ExtendedImageIO.java:162) at org.openimaj.image.ImageUtilities.readMBF(ImageUtilities.java:273) at image.ImageThread.processImage(ImageThread.java:233) at image.ImageThread.main(ImageThread.java:255) Caused by: java.lang.IllegalArgumentException: Source stream does not support seeking backwards. at com.sun.media.jai.codec.SegmentedSeekableStream.(SegmentedSeekableStream.java:200) at com.sun.media.jai.codec.SegmentedSeekableStream.(SegmentedSeekableStream.java:262) at com.sun.media.jai.codecimpl.fpx.StructuredStorage.getFat(StructuredStorage.java:238) at com.sun.media.jai.codecimpl.fpx.StructuredStorage.(StructuredStorage.java:131) at com.sun.media.jai.codecimpl.fpx.FPXImage.(FPXImage.java:110) at com.sun.media.jai.codecimpl.FPXImageDecoder.decodeAsRenderedImage(FPXImageDecoder.java:38) ... 28 more

и программа зависает. Я хочу поймать это исключение, зарегистрировать его и продолжить.

Не могли бы Вы помочь мне?

+0

Печатает ли «упс»? – immibis

+0

@immibis нет, это не так ... – GuirNab

+1

Тогда вы, возможно, обнаружили ошибку в OpenIMAJ. – immibis

ответ

0

Хорошо, я нашел решение. Я использовал старую версию openIMAJ (1.1.3). Последняя версия 1.3.1 работает хорошо. Я не заметил, потому что я забыл номера версий.