画像(URL)で顔(カウント)を検出するためのこの方法(簡略化)があります:
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;
}
うまく動作しますが、イメージが多少破損している場合 (たとえば、このテスト イメージ)、次のエラーが発生します。
エラー: 次のタイプのイメージをデコードできません: 発生場所: com.sun.media.jai.opimage.CodecRIFUtil java.io.IOException: ソース ストリームは後方シークをサポートしていません。com.sun.media.jai.codecimpl.CodecUtils.toIOException(CodecUtils.java:76) com.sun.media.jai.codecimpl.FPXImageDecoder.decodeAsRenderedImage(FPXImageDecoder.java:40) com.sun.media.jai .opimage.CodecRIFUtil.create(CodecRIFUtil.java:88) com.sun.media.jai.opimage.FPXRIF.create(FPXRIF.java:46) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) で sun.reflect javax.media.jai. FactoryCache.invoke(FactoryCache.java:
プログラムがハングします。その例外をキャッチし、ログに記録して続行したいと思います。
手伝っていただけませんか?