我正在尝试找到最轻量级的方法来检测图像中的“足够”变化。我意识到这是一个可怕的限制,因此为了解决这个问题,我将其分为两个不同的限定词:实质性变化,或 80% 像素发生变化,以及运动变化,或 10% 像素发生变化。这些图像是通过timelapse
树莓派相机上的模式捕获的,但出于问题的目的,这些文件可以来自任何基本静态的观点。
我发现我可以使用文件大小来观察大量的变化:
user@host-bb:/tmp$ ls -la investigating/
total 134604
drwxr-xr-x 2 user group 4096 Oct 20 00:05 .
drwxr-xr-x 5 user group 4096 Oct 20 00:04 ..
-rw-r--r-- 1 user group 4580181 Oct 20 00:05 image1018223300.jpg
-rw-r--r-- 1 user group 4573449 Oct 20 00:05 image1018223301.jpg
-rw-r--r-- 1 user group 4573024 Oct 20 00:05 image1018223304.jpg
...snip...
-rw-r--r-- 1 user group 4455867 Oct 20 00:05 image1018223320.jpg
-rw-r--r-- 1 user group 4447607 Oct 20 00:05 image1018223321.jpg
-rw-r--r-- 1 user group 4434839 Oct 20 00:05 image1018223323.jpg
-rw-r--r-- 1 user group 4416942 Oct 20 00:05 image1018223324.jpg
-rw-r--r-- 1 user group 1769008 Oct 20 00:05 image1018223325.jpg
-rw-r--r-- 1 user group 1702851 Oct 20 00:05 image1018223326.jpg
-rw-r--r-- 1 user group 1639306 Oct 20 00:05 image1018223327.jpg
-rw-r--r-- 1 user group 1788435 Oct 20 00:05 image1018223328.jpg
-rw-r--r-- 1 user group 1908061 Oct 20 00:05 image1018223329.jpg
-rw-r--r-- 1 user group 1981029 Oct 20 00:05 image1018223330.jpg
-rw-r--r-- 1 user group 2102390 Oct 20 00:05 image1018223331.jpg
-rw-r--r-- 1 user group 2167734 Oct 20 00:05 image1018223333.jpg
-rw-r--r-- 1 user group 2243082 Oct 20 00:05 image1018223334.jpg
...snip...
-rw-r--r-- 1 user group 2640732 Oct 20 00:05 image1018223342.jpg
-rw-r--r-- 1 user group 2730206 Oct 20 00:05 image1018223343.jpg
-rw-r--r-- 1 user group 2751966 Oct 20 00:05 image1018223344.jpg
-rw-r--r-- 1 user group 315875 Oct 20 00:05 image1018223345.jpg
-rw-r--r-- 1 user group 302476 Oct 20 00:05 image1018223352.jpg
...snip...
-rw-r--r-- 1 user group 285965 Oct 20 00:05 image1018223358.jpg
-rw-r--r-- 1 user group 289271 Oct 20 00:05 image1018223359.jpg
user@host-bb:/tmp$
即使照明的一些非重大变化(例如图像*28.jpg
和之间发生的变化*29.jpg
)也可能会产生文件大小的差异。
我意识到这基本上是分箱,这可能是我正在寻找的解决方案。
这会处理“实质性变化”(80% 的像素发生变化)。
但问题仍然存在:缺少 Imagemagick、Python 脚本或其他图像处理软件,是否有一种轻量级方法可以检测图像中接近 10% 像素变化的变化?如果没有非图像处理软件选项,最轻量级的选项是什么?用低级语言编写我自己的处理? Python 脚本?我来自Python背景,正在尝试在树莓派零w上进行简单的更改检测,如果有更改,则可以触发事件(文件上传)。带宽太小,无法发送所有图像,而且 pi 零 w 在处理能力方面并不是一个重要因素。
答案1
1)非常非常基本(但非常轻量级):使用 cmp 并逐字节比较文件(“二进制差异”)。给出不同字节的数量。我刚刚尝试了零,有效。
cmp -l 1.jpg 2.jpg 2>/dev/null | wc -l
但是,它与文件相关而不是与图像相关......
因此,如果您可以在您的计算机上访问 Python(抱歉,我的 rpi 零上没有相同的发行版,所以我无法测试...):
2)SSIM-PIL Python包,基于结构相似性。 (https://pypi.org/project/SSIM-PIL/)。是面向图像的,因此与解决方案一相比,它应该给出更少的“错误差异”,这意味着结果将更接近人眼看到的结果。https://fr.wikipedia.org/wiki/Structural_Similarity