Как читать несколько кодов 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/