Php обнаружение движения
Можно ли добиться обнаружения движения с помощью php?
Я не эксперт по библиотекам GD/Image, но разве нельзя иметь возможность определить, есть ли существенная разница между двумя изображениями и вызвать ли это предупреждение?
4 ответа
Конечно, вы можете использовать что-то вроде imagecolorat, чтобы получить цвета от пикселей на 2 разных изображениях.
Так что да, вы могли бы сделать это так же, как на любом другом языке, я думаю.
Я работал над этим типом проблемы в последнее время. Мне удалось сравнить два изображения вместе с любым разрешением определенного уровня и собрать информацию о том, где происходят изменения, если таковые имеются. Пример использования моего кода.
// setup two images to work with
$i1 = new SimpleImage("./img/0392.jpg");
$i2 = new SimpleImage("./img/0393.jpg");
$state = new State(15, 8, $i1);
$state = $state->difference(new State(15, 8, $i2), rgbColorDistance);
$state->abs()->denoiseStdDev()->scale(10)->round(0);
// $box will hold an array (x,y,w,h) that indicates location of change
$box = $state->getBoundingBox($i1->getWidth(), $i1->getHeight());
Примеры и объяснения на моем блоге
Посмотреть код и скачать с Github
Это все еще в зачаточном состоянии, но это начало моей большой цели - постоянно читать движения из потока изображений, обновляемых с веб-камеры.
Я думаю, что в теории вы можете сделать это, вы можете придумать базовое сравнение изображений. Однако делать это в PHP - не лучший вариант, если вы хотите делать быстрое покадровое сравнение, вам нужно заглянуть в скомпилированный язык.
В качестве основного метода обнаружения изображений вы можете сделать следующее,
Изображения в оттенках серого, сэмплируйте каждые x пикселей и сравните (используйте пороговое значение). Затем рассчитайте процент изменения, если он превышает 15%, вы можете принять движение.
Это грубый и простой метод, но, похоже, он будет работать для ваших нужд.
Нашел что-то: http://phpmotiondetect.sourceforge.net/
Но я не проверял это.