double pass qr with wide and cropped image
@@ -102,7 +102,7 @@ public class WebcamService extends ScheduledService<Image> {
updateValue(image);
if(System.currentTimeMillis() > (lastQrSampleTime + QR_SAMPLE_PERIOD_MILLIS)) {
- readQR(croppedImage);
+ readQR(bimg, croppedImage);
lastQrSampleTime = System.currentTimeMillis();
}
@@ -129,15 +129,26 @@ public class WebcamService extends ScheduledService<Image> {
return super.cancel();
}
- private void readQR(BufferedImage bufferedImage) {
+ private void readQR(BufferedImage wideImage, BufferedImage croppedImage) {
+ Result result = readQR(wideImage);
+ if(result == null) {
+ result = readQR(croppedImage);
+ }
+
+ if(result != null) {
+ resultProperty.set(result);
+ }
+ }
+
+ private Result readQR(BufferedImage bufferedImage) {
LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
- Result result = qrReader.decode(bitmap, Map.of(DecodeHintType.TRY_HARDER, Boolean.TRUE));
- resultProperty.set(result);
+ return qrReader.decode(bitmap, Map.of(DecodeHintType.TRY_HARDER, Boolean.TRUE));
} catch(ReaderException e) {
// fall thru, it means there is no QR code in image
+ return null;
}
}
