Как читать несколько кодов qr с одного изображения с помощью библиотеки zxing

В настоящее время я разрабатываю сканер, который считывает несколько QR-кодов, найденных на одном изображении. Мне удается читать QR-коды на изображении, но это дает мне непоследовательные результаты. Предполагая, что на изображении есть 4 QR-кода, иногда я могу читать 2, а иногда 3 или просто 1. В отличие от оригинального сканера (ZXing Scanner) он быстро декодирует. Хотя в моем случае я должен убедиться, что есть достаточно света, и изображение не размывается, чтобы декодировать его.

Я использую QRCodeMultiReader для декодирования изображения. В настоящее время с помощью библиотеки ZXing для создания приложения.

Ниже приведен фрагмент моего кода:

public void onPictureTaken(byte[] data, Camera camera) {
   BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inMutable = true;
   Bitmap bitmap = BitmapFactory
            .decodeByteArray(data, 0, data.length, opt);
   Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
   hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
   LuminanceSource source = new RGBLuminanceSource(bitmap);

   QRCodeMultiReader multiReader = new QRCodeMultiReader();
   Result[] results = multiReader.decodeMultiple(new BinaryBitmap(
   new HybridBinarizer(source)), hints);
}

Ответ 1

Я создал одно приложение для камеры, которое я использовал intent, поскольку приложение по умолчанию для камеры присутствует с каждой ОС Andriod, и, как правило, они оптимизированы для этого устройства, чем создание общего приложения для камеры, которое будет оптимизировано только для вашего телефона... поэтому для камеры лучше использовать intent.

Для извлечения нескольких QR из одного изображения я попробовал код ниже.
Но результаты не согласуются некоторое время, когда я получаю 1 или 2 или 3 из 4 в течение некоторого времени... это не идеальное решение

if(photo == null) 
        return;
    Bitmap ScaledQr = null;
    ScaledQr = Bitmap.createScaledBitmap(photo, 640,480, false);
    BinaryBitmap Qr = BitMap2BinayBitmap(ScaledQr);
    Result [] kpResultMulti = null;
    Result kpResultSingle = null;
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
    hints.put(DecodeHintType.TRY_HARDER, true);
    //hints.put(DecodeHintType.PURE_BARCODE, true);

    try {
        kpResultMulti = kpReaderArr.decodeMultiple(Qr,hints);
    } catch (NotFoundException e) {
        // TODO Auto-generated catch block
        msbox("Exception","NotFoundException");
        e.printStackTrace();
    }

    if(kpResultMulti != null){
        msbox("Total Result" ,kpResultMulti.length +"");// + photo.getWidth() +     "Height=" + photo.getHeight());
        for(Result kp : kpResultMulti)
        {

            msbox("Results",kp.getText());
        }
    }

Ответ 2

Привет, пожалуйста, проверьте приложение сканера штрих-кода Zxing, у него есть опция в "Настройки сканирования объемных штрих-кодов", поэтому включите его и проверьте, что вы можете читать несколько QR-кодов за один раз от одного или нескольких изображений, а также проверить исходный код Zxing библиотека Известная подробная информация.

https://code.google.com/p/zxing/