3

ZXing 2.1 ライブラリで成功を収めようとしています。Mac OS X 10.7.5 で Java 1.6 を使用しています。テキストをエンコードできますが、画像をデコードできません。むしろ、私が得るのは の 1 行のスタック トレースだけですcom.google.zxing.NotFoundException

これは簡単に思えますが、何が間違っているのかわかりません。再現するための簡単なテストを次に示します。いくつかのバーコードを画像にエンコードし、メモリから画像をデコードします。

public class App {

    public static void main(String[] args) {

        // Try UPC-A.
        try {
            testEncodeDecode(BarcodeFormat.UPC_A, "012345678905");  // Valid UPC-A.
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Try EAN-13.
        try {
            testEncodeDecode(BarcodeFormat.EAN_13, "9310779300005");  // Valid EAN-13.
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void testEncodeDecode(BarcodeFormat barcodeFormat, String text)
        throws WriterException, NotFoundException, ChecksumException, FormatException, IOException {

        // Size of buffered image.
        int width = 200;
        int height = 100;

        // Encode to buffered image.
        Writer writer = new MultiFormatWriter();
        BitMatrix bitMatrix = writer.encode(text, barcodeFormat, width, height);
        BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);

        // Write to disk for debugging.
        String formatName = "png";
        File outputFile = new File(text + "." + formatName);    
        ImageIO.write(bufferedImage, formatName, outputFile);

        // Decode from buffered image.
        LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Reader reader = new MultiFormatReader();
        Result result = reader.decode(bitmap);

        // Never gets this far!
        System.out.println("result=" + result.getText());
    }
}

出力は単に

com.google.zxing.NotFoundException
com.google.zxing.NotFoundException

私は困惑しています!ご協力いただきありがとうございます。参考までに出力画像を添付します。

UPC-A abc EAN-13デフォルト

4

2 に答える 2

1

最初は同様の問題に直面していましたが、ヒントを渡すことで解決しました。TRY_HARDER最初にパスを試すことができます。それはうまくいくはずです。そうでない場合は、POSSIBLE_FORMATS既にフォーマットを知っているので、ヒントを渡してみてください。両方のヒントが機能するかどうかを確認してください。

于 2013-08-02T05:22:10.873 に答える
0

これを簡単に見てみると、問題は両側に十分なクワイエット ゾーンがないことだと思います。仕様であるIIRCでは左右9モジュール必要で、これは約2モジュール。

検出器はかなり寛大ですが、誤検知を避けるためにそれほどではありません。通常、画像の外側の領域は大きな白い平面のように扱われるため (実際、これらはこのページのような白い背景で問題なくスキャンされます)、スキャンされます。この形式の場合、誤検知を避けるためにこれが特に無効になっているというメモがコードに表示されます。

これを無効にするか、より広いコードを生成してテストすることができます。テスト セットで偽陽性を増加させず、このパスを通過する変更を見つけた場合、おそらくコミットする価値があります。

于 2012-11-18T20:28:20.477 に答える