-1

画像(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:

プログラムがハングします。その例外をキャッチし、ログに記録して続行したいと思います。

手伝っていただけませんか?

4

1 に答える 1

0

わかりました、私は解決策を見つけました。古いバージョンのopenIMAJ(1.1.3)を使用していました。最新バージョンは 1.3.1 で、問題なく動作します。バージョン番号を見落としていたので気がつきませんでした。

于 2015-02-18T23:53:48.700 に答える