Я использую openHAB и хочу использовать старый мобильный телефон в качестве индикатора день/ночь. Я установил приложение веб-камеры, и оно снимает небо. Я могу получить последний снимок через http://[ip]/shot.jpg
.
Могу ли я получить «значение яркости» следующим образом: curl http://[ip]/shot.jpg | some-command --get-brightness
?
решение1
На вопрос дан ответздесь, на сайте Software Recommendations Stack ExchangeкСтив Барнс.
Две возможности:
Использование imagemagick для проверки яркости изображения будет работать, если камера телефона не имеет автоэкспозиции или она выключена, в противном случае она будет работать только для экстремальных значений (темный/светлый), например
convert <image> -colorspace Gray -format "%[fx:quantumrange*image.mean]" info:
exiftool может проанализировать EXIF-информацию из файла и извлечь «значение освещенности», которое должно дать вам достаточно согласованные показания (при условии, что камера на вашем конкретном телефоне включает этот тег).
Оба инструмента бесплатны, распространяются бесплатно, имеют открытый исходный код и доступны для большинства платформ.
решение2
В качестве альтернативы exiftool вы можете использоватьexiv2, который, как я обнаружил, работает намного быстрее, чем exiftool и imagemagick.
Сравнение (на Raspberry Pi Zero)
Тестирование проводилось с использованием одного и того же изображения размером 4056 x 3040.
Imagemagick конвертировать
pi@rpicamhq:/mnt/ramdisk $ time convert image.jpg -colorspace Gray -format "%[fx:quantumrange*image.mean]" info:
1039.34
real 0m1,989s
user 0m1,753s
sys 0m0,193s
Формат идентификации Imagemagick
pi@rpicamhq:/mnt/ramdisk $ time identify -format "%[mean]\n" image.jpg
1128.99
real 0m3,357s
user 0m3,133s
sys 0m0,199s
pi@rpicamhq:/mnt/ramdisk $ time identify -format "%[fx:mean]\n" image.jpg
0.0172272
real 0m3,435s
user 0m3,274s
sys 0m0,130s
pi@rpicamhq:/mnt/ramdisk $ time identify -format "%[fx:quantumrange*mean]\n" image.jpg
1128.99
real 0m3,387s
user 0m3,218s
sys 0m0,139s
Imagemagick идентифицирует exif
pi@rpicamhq:/mnt/ramdisk $ time identify -format '%[EXIF:BrightnessValue]'
real 0m0,275s
user 0m0,071s
sys 0m0,040s
exiftool
pi@rpicamhq:/mnt/ramdisk $ time exiftool -a -u -g1 image.jpg | grep 'Brightness'
Brightness Value : 0.01
real 0m2,647s
user 0m2,429s
sys 0m0,191s
exiv2
pi@rpicamhq:/mnt/ramdisk $ time exiv2 -PElt image.jpg | grep 'Brightness'
Brightness 0.01
real 0m0,097s
user 0m0,042s
sys 0m0,050s
exiv2, без grep
pi@rpicamhq:/mnt/ramdisk $ time exiv2 -PElt -g Brightness image.jpg
Brightness 0.01
real 0m0,070s
user 0m0,024s
sys 0m0,039s