嗨,我尝试使用以下代码从图像中读取条形码,但由于包含多个条形码,因此无法读取文件。有什么解决办法吗?
@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>
的图片
有人可以让我知道对此有任何解决方法吗?预先感谢
答案 0 :(得分:1)
我认为您应该先学习fundamentals-of-algorithms和Java,然后再学习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);
}
}
}