Я использую библиотеку Android Zxing для декодирования QR-кода, который необходимо извлечь в режиме реального времени из кадра предварительного просмотра камеры. Проблема в том, что я должен использовать OpenCV для обнаружения QR-кода, не прося пользователя захватить изображение. Подскажите пожалуйста: Как использовать кадры с камеры? Как использовать OpenCV для обнаружения QR-кода в этих кадрах без захвата изображения? Какой алгоритм использовать для обнаружения QR-кода? Кроме того, я был бы признателен, если бы кто-нибудь мог сказать мне, какие функции, библиотеки использовать, а также некоторые примеры кодов, которые могут мне помочь.
Обновление: это то, что я делаю сейчас: использую кадр предварительного просмотра, декодирую его в массив байтов, а затем передаю его в RGBLuminance
public void surfaceCreated(SurfaceHolderholder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
boolean shouldCall = (System.currentTimeMillis() - lastTime) > 1000;
if (shouldCall) {
lastTime = System.currentTimeMillis();
//slow work
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
Bitmap bMap1 = BitmapFactory.decodeByteArray(data, 0, data.length);
TextView textv = (TextView) findViewById(R.id.mytext);
LuminanceSource source = new RGBLuminanceSource(bMap1);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Reader reader = new MultiFormatReader();
try {
Result result = reader.decode(bitmap);
text = result.getText();
byte[] rawBytes = result.getRawBytes();
if (rawBytes!= null)
camera.stopPreview();
BarcodeFormat format = result.getBarcodeFormat();
ResultPoint[] points = result.getResultPoints();
ParsedResult result2 = parseResult(result);
textv.setText(text);
} catch (NotFoundException e) {
camera.startPreview();
e.printStackTrace();
} catch (ChecksumException e) {
text = "Checksum Error";
camera.stopPreview();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FormatException e) {
text = "Format Error";
camera.stopPreview();
// TODO Auto-generated catch block
e.printStackTrace();
}
lastTime = System.currentTimeMillis();
}
}
});
} catch (IOException e) {
camera.startPreview();
}
}
Но это не работает. Может ли кто-нибудь сказать мне, что я делаю неправильно? Кроме того, я использую тот же экземпляр декодирования в другом фрагменте кода, где я просто делаю снимок и декодирую его. Но каждый раз, когда картинка не содержит QR, приложение вылетает с принудительным закрытием. Что мне с этим делать? Кто-нибудь, пожалуйста, помогите