Android: определить яркость (количество света) в окружении телефона с помощью камеры?

Следующее относится к операционной системе Android.

Я пытаюсь оценить, насколько темный (или легкий) он находится в комнате, где находится телефон, используя камеру.

Идея заключается в том, что камера может вернуть определенный уровень яркости, который я могу использовать для определения количества света в окружении телефона.

Мой вопрос прост: как использовать камеру (либо переднюю камеру заднего вида), чтобы получить это количество яркости («количество света»)?

Заранее спасибо.

    Вот как вы регистрируете прослушиватель на датчике освещенности:

    private final SensorManager mSensorManager; private final Sensor mLightSensor; private float mLightQuantity; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Obtain references to the SensorManager and the Light Sensor mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // Implement a listener to receive updates SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { mLightQuantity = event.values[0]; } } // Register the listener with the light sensor -- choosing // one of the SensorManager.SENSOR_DELAY_* constants. mSensorManager.registerListener( listener, lightSensor, SensorManager.SENSOR_DELAY_UI); } 

    EDIT: Благодаря @AntiMatter для предлагаемых обновлений.

    Документы: SensorEventListener SensorManager SensorEvent Sensor

    Если вы хотите использовать камеру, например, если другие датчики недоступны, я бы

    1. Установите автоматическую экспозицию камеры и установите компенсацию экспозиции на 0
    2. Установите захват на минимальное качество / размер (зачем беспокоиться больше)
    3. Сделайте окно предварительного просмотра как можно меньшим (возможно, вы даже можете установить его на невидимое и все равно получить кадр для анализа, не уверен)
    4. Получите рамку предварительного просмотра изображения, но они находятся в формате yuv, поэтому для 2.1 и более ранних версий понадобится переводчик.

    Затем я бы вычислил гистограмму для яркости изображений и работал правильно (самый яркий) влево (dimmest), пока не найду первое значащее значение выше N, которое определит яркость вашей сцены.

    Сказав все это, я бы этого не сделал, так как вам нужно было бы проверить множество ситуаций с выбросами.

    Конечно, не уверен, что вы используете, так это если вы используете его, чтобы настроить «яркость» в автомобиле, тогда передняя камера должна быть выполнена фарами и т. Д.

    В любом случае интересная проблема, но, похоже, большая работа для такого небольшого выигрыша, особенно с большинством достойных аппаратных средств, имеющих эти датчики

    Мой ответ может быть слишком неполным для ответа, но мне нравится форматирование здесь.

    Кроме того, мой ответ не огромен, поэтому не прекращайте чтение сразу.

    Конечно, сначала вам нужно сделать снимок. Тогда вам нужно будет определить «яркость». У меня нет алгоритма для этого, но я предполагаю, что что-то подобное уже сделано. Может быть, что-то вроде:

    Определите, какие значения пикселей яркие, которые темные и которые находятся между ними (и каждый из них может иметь переменное количество яркости). Затем вы должны применить этот алгоритм к своей фотографии, чтобы получить значение яркости.

    Да, это очень короткий (35 000 футов) взгляд на проблему, но он должен дать вам несколько идей о том, с чего начать.

    [редактировать]
    Здесь есть место для запуска (документация по Android для датчиков)
    [/редактировать]

    Использование камеры бессмысленно, поскольку камера отрегулирует время экспозиции и диафрагму на окружающем свете, так что записанные изображения будут иметь очень похожую общую яркость, не зависящую от фактического доступного света (по крайней мере, в идеальном мире).

    API Android предлагает функциональность в SensorManager для доступа к аппаратным датчикам (вас интересует датчик типа TYPE_LIGHT). Я не уверен, однако, если вы можете полагаться на доступ к этим датчикам через API, хотя они могут (или не могут) присутствовать.

    Большим преимуществом в стремлении приглушить яркость – это выяснить, как HTC делает это в своей камере. Потому что приложение Android Camera довольно ужасно для передержки, особенно для DINC.

    Давайте будем гением компьютера.