Search in sources :

Example 21 with HybridBinarizer

use of com.google.zxing.common.HybridBinarizer in project zxing by zxing.

the class PDF417BlackBox4TestCase method testPDF417BlackBoxCountingResults.

private void testPDF417BlackBoxCountingResults(boolean assertOnFailure) throws IOException {
    assertFalse(testResults.isEmpty());
    Map<String, List<Path>> imageFiles = getImageFileLists();
    int testCount = testResults.size();
    int[] passedCounts = new int[testCount];
    int[] tryHarderCounts = new int[testCount];
    Path testBase = getTestBase();
    for (Entry<String, List<Path>> testImageGroup : imageFiles.entrySet()) {
        log.fine(String.format("Starting Image Group %s", testImageGroup.getKey()));
        String fileBaseName = testImageGroup.getKey();
        String expectedText;
        Path expectedTextFile = testBase.resolve(fileBaseName + ".txt");
        if (Files.exists(expectedTextFile)) {
            expectedText = readFileAsString(expectedTextFile, StandardCharsets.UTF_8);
        } else {
            expectedTextFile = testBase.resolve(fileBaseName + ".bin");
            assertTrue(Files.exists(expectedTextFile));
            expectedText = readFileAsString(expectedTextFile, StandardCharsets.ISO_8859_1);
        }
        for (int x = 0; x < testCount; x++) {
            List<Result> results = new ArrayList<>();
            for (Path imageFile : testImageGroup.getValue()) {
                BufferedImage image = ImageIO.read(imageFile.toFile());
                float rotation = testResults.get(x).getRotation();
                BufferedImage rotatedImage = rotateImage(image, rotation);
                LuminanceSource source = new BufferedImageLuminanceSource(rotatedImage);
                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
                try {
                    results.addAll(Arrays.asList(decode(bitmap, false)));
                } catch (ReaderException ignored) {
                // ignore
                }
            }
            Collections.sort(results, new Comparator<Result>() {

                @Override
                public int compare(Result arg0, Result arg1) {
                    PDF417ResultMetadata resultMetadata = getMeta(arg0);
                    PDF417ResultMetadata otherResultMetadata = getMeta(arg1);
                    return resultMetadata.getSegmentIndex() - otherResultMetadata.getSegmentIndex();
                }
            });
            StringBuilder resultText = new StringBuilder();
            String fileId = null;
            for (Result result : results) {
                PDF417ResultMetadata resultMetadata = getMeta(result);
                assertNotNull("resultMetadata", resultMetadata);
                if (fileId == null) {
                    fileId = resultMetadata.getFileId();
                }
                assertEquals("FileId", fileId, resultMetadata.getFileId());
                resultText.append(result.getText());
            }
            assertEquals("ExpectedText", expectedText, resultText.toString());
            passedCounts[x]++;
            tryHarderCounts[x]++;
        }
    }
    // Print the results of all tests first
    int totalFound = 0;
    int totalMustPass = 0;
    int numberOfTests = imageFiles.keySet().size();
    for (int x = 0; x < testResults.size(); x++) {
        TestResult testResult = testResults.get(x);
        log.info(String.format("Rotation %d degrees:", (int) testResult.getRotation()));
        log.info(String.format(" %d of %d images passed (%d required)", passedCounts[x], numberOfTests, testResult.getMustPassCount()));
        log.info(String.format(" %d of %d images passed with try harder (%d required)", tryHarderCounts[x], numberOfTests, testResult.getTryHarderCount()));
        totalFound += passedCounts[x] + tryHarderCounts[x];
        totalMustPass += testResult.getMustPassCount() + testResult.getTryHarderCount();
    }
    int totalTests = numberOfTests * testCount * 2;
    log.info(String.format("Decoded %d images out of %d (%d%%, %d required)", totalFound, totalTests, totalFound * 100 / totalTests, totalMustPass));
    if (totalFound > totalMustPass) {
        log.warning(String.format("+++ Test too lax by %d images", totalFound - totalMustPass));
    } else if (totalFound < totalMustPass) {
        log.warning(String.format("--- Test failed by %d images", totalMustPass - totalFound));
    }
    // Then run through again and assert if any failed
    if (assertOnFailure) {
        for (int x = 0; x < testCount; x++) {
            TestResult testResult = testResults.get(x);
            String label = "Rotation " + testResult.getRotation() + " degrees: Too many images failed";
            assertTrue(label, passedCounts[x] >= testResult.getMustPassCount());
            assertTrue("Try harder, " + label, tryHarderCounts[x] >= testResult.getTryHarderCount());
        }
    }
}
Also used : Path(java.nio.file.Path) ArrayList(java.util.ArrayList) TestResult(com.google.zxing.common.TestResult) HybridBinarizer(com.google.zxing.common.HybridBinarizer) BufferedImage(java.awt.image.BufferedImage) Result(com.google.zxing.Result) TestResult(com.google.zxing.common.TestResult) ReaderException(com.google.zxing.ReaderException) LuminanceSource(com.google.zxing.LuminanceSource) BufferedImageLuminanceSource(com.google.zxing.BufferedImageLuminanceSource) BufferedImageLuminanceSource(com.google.zxing.BufferedImageLuminanceSource) ArrayList(java.util.ArrayList) List(java.util.List) BinaryBitmap(com.google.zxing.BinaryBitmap)

Example 22 with HybridBinarizer

use of com.google.zxing.common.HybridBinarizer in project zxing by zxing.

the class MultiQRCodeTestCase method testMultiQRCodes.

@Test
public void testMultiQRCodes() throws Exception {
    // Very basic test for now
    Path testBase = AbstractBlackBoxTestCase.buildTestBase("src/test/resources/blackbox/multi-qrcode-1");
    Path testImage = testBase.resolve("1.png");
    BufferedImage image = ImageIO.read(testImage.toFile());
    LuminanceSource source = new BufferedImageLuminanceSource(image);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    MultipleBarcodeReader reader = new QRCodeMultiReader();
    Result[] results = reader.decodeMultiple(bitmap);
    assertNotNull(results);
    assertEquals(4, results.length);
    Set<String> barcodeContents = new HashSet<>();
    for (Result result : results) {
        barcodeContents.add(result.getText());
        assertEquals(BarcodeFormat.QR_CODE, result.getBarcodeFormat());
        Map<ResultMetadataType, Object> metadata = result.getResultMetadata();
        assertNotNull(metadata);
    }
    Set<String> expectedContents = new HashSet<>();
    expectedContents.add("You earned the class a 5 MINUTE DANCE PARTY!!  Awesome!  Way to go!  Let's boogie!");
    expectedContents.add("You earned the class 5 EXTRA MINUTES OF RECESS!!  Fabulous!!  Way to go!!");
    expectedContents.add("You get to SIT AT MRS. SIGMON'S DESK FOR A DAY!!  Awesome!!  Way to go!! Guess I better clean up! :)");
    expectedContents.add("You get to CREATE OUR JOURNAL PROMPT FOR THE DAY!  Yay!  Way to go!  ");
    assertEquals(expectedContents, barcodeContents);
}
Also used : Path(java.nio.file.Path) MultipleBarcodeReader(com.google.zxing.multi.MultipleBarcodeReader) HybridBinarizer(com.google.zxing.common.HybridBinarizer) BufferedImage(java.awt.image.BufferedImage) Result(com.google.zxing.Result) LuminanceSource(com.google.zxing.LuminanceSource) BufferedImageLuminanceSource(com.google.zxing.BufferedImageLuminanceSource) BufferedImageLuminanceSource(com.google.zxing.BufferedImageLuminanceSource) ResultMetadataType(com.google.zxing.ResultMetadataType) BinaryBitmap(com.google.zxing.BinaryBitmap) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 23 with HybridBinarizer

use of com.google.zxing.common.HybridBinarizer in project QRCode by 5peak2me.

the class MipcaActivityCapture method scanningImage.

/**
	 * 扫描二维码图片的方法
	 * @param path
	 * @return
	 */
public Result scanningImage(String path) {
    if (TextUtils.isEmpty(path)) {
        return null;
    }
    Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();
    //设置二维码内容的编码
    hints.put(DecodeHintType.CHARACTER_SET, "UTF8");
    BitmapFactory.Options options = new BitmapFactory.Options();
    // 先获取原大小
    options.inJustDecodeBounds = true;
    scanBitmap = BitmapFactory.decodeFile(path, options);
    // 获取新的大小
    options.inJustDecodeBounds = false;
    int sampleSize = (int) (options.outHeight / (float) 200);
    if (sampleSize <= 0)
        sampleSize = 1;
    options.inSampleSize = sampleSize;
    scanBitmap = BitmapFactory.decodeFile(path, options);
    RGBLuminanceSource source = new RGBLuminanceSource(scanBitmap);
    BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
    QRCodeReader reader = new QRCodeReader();
    try {
        return reader.decode(bitmap1, hints);
    } catch (NotFoundException e) {
        e.printStackTrace();
    } catch (ChecksumException e) {
        e.printStackTrace();
    } catch (FormatException e) {
        e.printStackTrace();
    }
    return null;
}
Also used : QRCodeReader(com.google.zxing.qrcode.QRCodeReader) DecodeHintType(com.google.zxing.DecodeHintType) Hashtable(java.util.Hashtable) ChecksumException(com.google.zxing.ChecksumException) NotFoundException(com.google.zxing.NotFoundException) HybridBinarizer(com.google.zxing.common.HybridBinarizer) FormatException(com.google.zxing.FormatException) BitmapFactory(android.graphics.BitmapFactory) BinaryBitmap(com.google.zxing.BinaryBitmap) RGBLuminanceSource(com.google.zxing.zxing.image.RGBLuminanceSource)

Example 24 with HybridBinarizer

use of com.google.zxing.common.HybridBinarizer in project QRCode by 5peak2me.

the class DecodeHandler method decode.

/**
	 * Decode the data within the viewfinder rectangle, and time how long it
	 * took. For efficiency, reuse the same reader objects from one decode to
	 * the next.
	 * 
	 * @param data
	 *            The YUV preview frame.
	 * @param width
	 *            The width of the preview frame.
	 * @param height
	 *            The height of the preview frame.
	 */
private void decode(byte[] data, int width, int height) {
    long start = System.currentTimeMillis();
    Result rawResult = null;
    // modify here
    byte[] rotatedData = new byte[data.length];
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) rotatedData[x * height + height - y - 1] = data[x + y * width];
    }
    // Here we are swapping, that's the difference to #11
    int tmp = width;
    width = height;
    height = tmp;
    PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    try {
        rawResult = multiFormatReader.decodeWithState(bitmap);
    } catch (ReaderException re) {
    // continue
    } finally {
        multiFormatReader.reset();
    }
    if (rawResult != null) {
        long end = System.currentTimeMillis();
        Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString());
        Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, rawResult);
        Bundle bundle = new Bundle();
        bundle.putParcelable(DecodeThread.BARCODE_BITMAP, source.renderCroppedGreyscaleBitmap());
        message.setData(bundle);
        // Log.d(TAG, "Sending decode succeeded message...");
        message.sendToTarget();
    } else {
        Message message = Message.obtain(activity.getHandler(), R.id.decode_failed);
        message.sendToTarget();
    }
}
Also used : Message(android.os.Message) PlanarYUVLuminanceSource(com.google.zxing.zxing.camera.PlanarYUVLuminanceSource) Bundle(android.os.Bundle) BinaryBitmap(com.google.zxing.BinaryBitmap) HybridBinarizer(com.google.zxing.common.HybridBinarizer) Result(com.google.zxing.Result) ReaderException(com.google.zxing.ReaderException)

Example 25 with HybridBinarizer

use of com.google.zxing.common.HybridBinarizer in project QRCode by 5peak2me.

the class DecodeHandler method decode.

/**
   * Decode the data within the viewfinder rectangle, and time how long it took. For efficiency,
   * reuse the same reader objects from one decode to the next.
   *
   * @param data   The YUV preview frame.
   * @param width  The width of the preview frame.
   * @param height The height of the preview frame.
   */
private void decode(byte[] data, int width, int height) {
    long start = System.currentTimeMillis();
    Result rawResult = null;
    //modify here
    byte[] rotatedData = new byte[data.length];
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) rotatedData[x * height + height - y - 1] = data[x + y * width];
    }
    // Here we are swapping, that's the difference to #11
    int tmp = width;
    width = height;
    height = tmp;
    PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    try {
        rawResult = multiFormatReader.decodeWithState(bitmap);
    } catch (ReaderException re) {
    // continue
    } finally {
        multiFormatReader.reset();
    }
    if (rawResult != null) {
        long end = System.currentTimeMillis();
        Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString());
        Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, rawResult);
        Bundle bundle = new Bundle();
        bundle.putParcelable(DecodeThread.BARCODE_BITMAP, source.renderCroppedGreyscaleBitmap());
        message.setData(bundle);
        //Log.d(TAG, "Sending decode succeeded message...");
        message.sendToTarget();
    } else {
        Message message = Message.obtain(activity.getHandler(), R.id.decode_failed);
        message.sendToTarget();
    }
}
Also used : Message(android.os.Message) PlanarYUVLuminanceSource(com.google.zxing.camera.PlanarYUVLuminanceSource) Bundle(android.os.Bundle) BinaryBitmap(com.google.zxing.BinaryBitmap) HybridBinarizer(com.google.zxing.common.HybridBinarizer) Result(com.google.zxing.Result) ReaderException(com.google.zxing.ReaderException)

Aggregations

BinaryBitmap (com.google.zxing.BinaryBitmap)30 HybridBinarizer (com.google.zxing.common.HybridBinarizer)30 Result (com.google.zxing.Result)29 ReaderException (com.google.zxing.ReaderException)21 Bundle (android.os.Bundle)13 Message (android.os.Message)13 PlanarYUVLuminanceSource (com.google.zxing.PlanarYUVLuminanceSource)11 MultiFormatReader (com.google.zxing.MultiFormatReader)10 Handler (android.os.Handler)8 LuminanceSource (com.google.zxing.LuminanceSource)6 BufferedImage (java.awt.image.BufferedImage)5 Bitmap (android.graphics.Bitmap)3 BufferedImageLuminanceSource (com.google.zxing.BufferedImageLuminanceSource)3 ChecksumException (com.google.zxing.ChecksumException)3 FormatException (com.google.zxing.FormatException)3 NotFoundException (com.google.zxing.NotFoundException)3 RGBLuminanceSource (com.google.zxing.RGBLuminanceSource)3 BufferedImageLuminanceSource (com.google.zxing.client.j2se.BufferedImageLuminanceSource)3 MultipleBarcodeReader (com.google.zxing.multi.MultipleBarcodeReader)3 Path (java.nio.file.Path)3