>source

안녕하세요, 아래 코드를 사용하여 이미지에서 바코드를 읽으려고했지만 여러 바코드가 포함되어 있으므로 파일을 읽을 수 없습니다. 이에 대한 해결 방법이 있습니까?

@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>

오류

동봉 된 이미지

누군가가 이것에 대한 해결 방법이 있음을 알려줄 수 있습니까? 미리 감사드립니다


  • 답변 # 1

    알고리즘의 기본과 자바를 먼저 배워야한다고 생각합니다. TRY_HARDER 그리고 사용 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);
            }
        }
    }
    
    

관련 자료

  • 이전 r - 데이터 프레임에서 패턴 일치 열을 반복하고 ggplot을 생성하는 For 루프
  • 다음 c++ - 동일한 TU 내에서 동일한 명시 적 전문화의 중복 된 정의에 대한 ODR 위반을 진단하기 위해 구현이 필요합니까?