ZXing Автофокус проблема - PullRequest
       20

ZXing Автофокус проблема

3 голосов
/ 03 января 2012

Я пишу приложение для планшета Motorola Xoom с Android 3.1 для моей магистерской работы, которая может сканировать несколько QR-кодов в режиме реального времени с помощью камеры и отображать дополнительную информацию на дисплее поверх распознанных QR-кодов.

Распознавание выполняется с помощью приложения ZXing для Android (http://code.google.com/p/zxing/),. Я просто изменил код приложения ZXing, чтобы оно могло распознавать несколько QR-кодов одновременно и могло выполнять это сканирование непрерывно, не останавливая после успешного сканирования, как это делает оригинальное приложение. Поэтому мое приложение в основном представляет собой приложение ZXing с непрерывным сканированием нескольких QR-кодов.

Но я столкнулся с проблемой:

  1. Приложение ZXing делает своего рода непрерывный автофокус. Начинается автофокус, и когда он закончится, он автоматически запускает снова автофокус. Но этот метод как-то делает яркость камеры настройки слишком яркие, так что камера не может распознать QR Коды, потому что изображение почти полностью белое. Отключение автофокуса решает проблему, но мне нужен автофокус, потому что в противном случае распознавание QR-кодов возможно только на определенном расстоянии.

    • Как изменить настройки яркости камеры?
    • Кто-нибудь знает другую возможность автофокуса?

Ответы [ 3 ]

5 голосов
/ 21 сентября 2016

У меня была такая же проблема на Samsung Galaxy Grand 2 (Android 4), и я нашел одно решение.Я отключаю функцию автофокуса перед запуском камеры.Через 1-2 секунды я включаю его.Я попробовал несколько подходов и решил периодически переключать функцию автофокуса.Для реализации этого я создал класс утилит - FocusHandler.

public class FocusHandler implements Runnable{

    private final int FOCUS_OFF_TIME = 2000;
    private final int FOCUS_ON_TIME = 20000;
    private boolean flag = false;
    private boolean state = false;
    private Handler handler;
    private WeakReference<ZXingScannerView> scannerView;

    public FocusHandler(Handler handler, ZXingScannerView scannerView){
        this.handler = handler;
        this.flag = false;
        this.scannerView = new WeakReference<>(scannerView);
    }

    public void start(){
        state = true;
        this.handler.post(this);
    }

    public void stop(){
        state = false;
        scannerView.clear();
    }

    @Override
    public void run() {
        if (!state || this.scannerView.get() == null){
            return;
        }

        int time;
        if (!flag){
            this.scannerView.get().setAutoFocus(flag);
            time = FOCUS_OFF_TIME;
        }
        else{
            this.scannerView.get().setAutoFocus(flag);
            time = FOCUS_ON_TIME;
        }

        flag = !flag;
        handler.postDelayed(this, time);
    }
}

/ *************** активность ****************** /

    private ZXingScannerView scannerView;
    private FocusHandler focusHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scanner);
        scannerView = new ZXingScannerView(this);
        focusHandler = new FocusHandler(new Handler(), scannerView);
        frameLayout.addView(scannerView);
    }

    @Override
    protected void onResume() {
        super.onResume();
        scannerView.setResultHandler(this);
        scannerView.setAutoFocus(false);
        scannerView.startCamera();
        focusHandler.start();
    }

    @Override
    public void onPause() {
        super.onPause();
        scannerView.stopCamera();
        focusHandler.stop();
    }
3 голосов
/ 03 января 2012

Я уже ответил на это в списке рассылки.

Приложение не может изменить «качество» предварительного просмотра камеры: вы имеете в виду разрешение?разрешение не является ограничивающим фактором.Возможно, ваше приложение выбирает особенно низкое разрешение;в какой-то момент это не помогает.Но сканирования 800x600 должно быть более чем достаточно для QR-кодов.

Автофокус не связан с яркостью.Сам драйвер камеры всегда автоматически регулирует экспозицию.Приложение не контролирует это и не может;лучшее, что вы можете сделать, это изменить настройку экспозиции в более поздних версиях Android API.

0 голосов
/ 16 мая 2012

Кажется, на некоторых устройствах (для меня это также произошло на устройстве Android 3.0: Samsung Galaxy Tab 10.1), после успешного вызова автофокуса автоэкспозиция остается заблокированной.Если еще раз сфокусироваться на другой области яркости, автоэкспозиция снова включится, но останется заблокированной после завершения фокусировки.пока не уверен, как это исправить.

...