forked from patcullen/php-image-motion
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.php
74 lines (52 loc) · 1.99 KB
/
example.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?
include "Util.php";
include "SimpleImage.php";
include "State.php";
$example = $_REQUEST['example'];
// merge two images together
if ($example == "1") {
// get a list of images from a subdirectory
$imagePath = "./img/3/";
$files = listFilesInDirectory($imagePath);
// setup an image to work with
$baseImage = new SimpleImage($imagePath.$files[0]);
// setup an array of all other images
$images = array();
for ($i = 1; $i < count($files); $i++)
$images[] = new SimpleImage($imagePath.$files[$i]);
// merge the latter images into the first image.
$baseImage->merge($images);
// stream image to client
$baseImage->output();
}
// detect motion or change
if ($example == "2") {
// setup two images to work with
$i1 = new SimpleImage("./img/4/IMG_0392.JPG");
$i2 = new SimpleImage("./img/4/IMG_0393.JPG");
// setup the Fuzzy device that layers all the states into one array
$state = new State(15, 8, $i1);
$state = $state->difference(new State(15, 8, $i2), rgbColorDistance);
$state->abs()->denoiseStdDev()->scale(10)->round(0);
// for purposes of visual debugging, merge the two images together
$i1->merge($i2);
// using the merged image, layer on a visual of state differences
$result = $state->drawImageIndicator($i1);
// $box will hold an array (x,y,w,h) that indicates location of change
$box = $state->getBoundingBox($i1->getWidth(), $i1->getHeight());
$color = imagecolorallocate($result->getImage(), 10, 255, 10);
imagerectangle($result->getImage(), $box["x"]-1, $box["y"]-1,
$box["x"]+$box["w"]+1, $box["y"]+$box["h"],
$color);
// $cog will hold an array (x,y) indicating center of change
$cog = $state->getCenterOfGravity($i1->getWidth(), $i1->getHeight());
imagearc($result->getImage(),
$cog["x"], $cog["y"], 7, 7, 0, 360,
imagecolorallocate($result->getImage(), 255, 255, 0));
imagearc($result->getImage(),
$cog["x"], $cog["y"], 9, 9, 0, 360,
imagecolorallocate($result->getImage(), 255, 0, 0));
// stream image to client
$result->output();
}
?>