Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

java - Unable to read a barcode using apache camel

Hi i have tried to read a barcode from image using below code but i am unable to read the file as it contains multiple barcodes. Is there any work around for this?

@GetMapping(value = "OCR/Apachecamel")
    @ApiOperation(value = "Get result from Barcode Apachecamel library")
    public BarcodeInfo GetApachecamelResult() throws Exception {
        try {
            InputStream barCodeInputStream = new FileInputStream("images/multiple.png");
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
                    new BufferedImageLuminanceSource(ImageIO.read(barCodeInputStream))));
            if (bitmap.getWidth() < bitmap.getHeight()) {
                if (bitmap.isRotateSupported()) {
                    bitmap = bitmap.rotateCounterClockwise();
                }
            }
            return decode(bitmap);
        } catch (IOException e) {
            throw new BarcodeDecodingException(e);
        }
    }

    private BarcodeInfo decode(BinaryBitmap bitmap) throws BarcodeDecodingException {
        Reader reader = new MultiFormatReader();
        try {
            Result result = reader.decode(bitmap);
            return new BarcodeInfo(result.getText(), result.getBarcodeFormat().toString());
        } catch (Exception e) {
            throw new BarcodeDecodingException(e);
        }
    }

    public static class BarcodeInfo {

        private final String text;

        private final String format;

        public String getText() {
            return text;
        }

        public String getFormat() {
            return format;
        }

        BarcodeInfo(String text, String format) {
            this.text = text;
            this.format = format;
        }
    }

    public static class BarcodeDecodingException extends Exception {
        BarcodeDecodingException(Throwable cause) {
            super(cause);
        }
    }

pom.xml

<!-- https://mvnrepository.com/artifact/org.apache.camel/camel-barcode -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-barcode</artifactId>
            <version>2.21.1</version>
        </dependency>

Error enter image description here

Image enclosed enter image description here

Could some one let me know is there any workaround for this? Thanks in advance

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I think you should learn fundamentals-of-algorithms and Java first then just TRY_HARDER and use GenericMultipleBarcodeReader :)

public class MbcPoc {

    public static void main(String... args) throws NotFoundException, IOException {
        List<BarcodeInfo> list = decodeImageWithMBC("fREyt.png");
        list.forEach(BarcodeInfo::println);
    }

    private static List<BarcodeInfo> decodeImageWithMBC(String imgPath) throws NotFoundException, IOException {
        BufferedImage img = ImageIO.read(new File(imgPath));
        BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(img)));
        MultipleBarcodeReader mbReader = new GenericMultipleBarcodeReader(new MultiFormatReader());
        Hashtable<DecodeHintType, Object> hints = new Hashtable<>();
        hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
        List<BarcodeInfo> list = new ArrayList<>();
        for (Result result : mbReader.decodeMultiple(bb, hints)) {
            list.add(new BarcodeInfo(result.getText(), result.getBarcodeFormat().name()));
        }
        return list;
    }

    public static class BarcodeInfo {
        private final String text;
        private final String format;

        BarcodeInfo(String text, String format) {
            this.text = text;
            this.format = format;
        }

        public static void println(BarcodeInfo bci) {
            System.out.println(bci.text + "/" + bci.format);
        }
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...