我使用 openHAB,想用旧手机作为日夜指示器。我安装了一个网络摄像头应用程序,它正在拍摄天空。我可以通过 获取最新的镜头http://[ip]/shot.jpg
。
我可以获得这样的“亮度值”吗:curl http://[ip]/shot.jpg | some-command --get-brightness
?
答案1
问题得到解答软件推荐 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
外置工具
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