3

我正在尝试使用 zxing 库(GenericMultipleBarcodeReader)读取二维数据矩阵条码。我在一个图像上有多个条形码。

问题是zing阅读器的效率非常低,它从图像1.png中识别1个条形码,而从具有48个条形码的图像2.png中识别不出条形码。有没有办法获得 100% 的效率或任何其他产生 100% 的库

我读取条形码的代码是:

public static void main(String[] args) throws Exception {
        BufferedImage image = ImageIO.read(new File("1.png"));
        if (image != null) {
            LuminanceSource source = new BufferedImageLuminanceSource(image);
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

            DataMatrixReader dataMatrixReader = new DataMatrixReader();

            Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
            hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);

            GenericMultipleBarcodeReader reader = new GenericMultipleBarcodeReader(
                    dataMatrixReader);
            Result[] results = reader.decodeMultiple(bitmap, hints);

            for (Result result : results) {
                System.out.println(result.toString());
            }
        }
    }

我使用的图像是:

1.png 2.jpg

请帮助解决此问题。

谢谢

4

2 回答 2

5

这种方式不太适用。它不会读取网格中的条形码,因为它假设它可以以某种与网格不兼容的方式切割图像。您必须编写自己的方法将图像切割成可扫描区域。

数据矩阵解码器也假设图像的中心在条形码内部。这是您需要将图像预先切割成圆柱体周围的正方形然后扫描的另一个原因。那时它应该工作得很好。

于 2012-10-04T07:08:19.000 回答
2

另一种解决方案是考虑一个条形码引擎,它可以检测一个文档上不同方向的多个条形码。如果您在 Windows 上运行,ClearImage Barcode SDK有一个 Java API,应该能够在不进行预处理的情况下处理您的需求。您可以使用他们的Online Barcode Reader测试他们的引擎是否可以读取您的图像。

一些示例代码:

public static void testDataMatrix () {
  try { 
       String filename  = "1.png ";
       CiServer objCi = new CiServer();
       Ci = objCi.getICiServer();

       ICiDataMatrix reader = Ci.CreateDataMatrix(); // read DataMatrix Barcode
       reader.getImage().Open(filename, 1);
       int n = reader.Find(0); // find all the barcodes in the doc
       for (i = 1; i <= n; i++) {
          ICiBarcode Bc = reader.getBarcodes().getItem(i); // getItem is 1-based
          System.out.println("Barcode " + i + " has Text: " + Bc.getText());
       }
   } catch (Exception ex) {System.out.println(ex.getMessage());}
 }

免责声明:我过去曾为 Inlite 做过一些工作。

于 2014-08-21T22:55:23.833 回答