TRENDnet Outdoor CAM TV-IP320PI

TV-IP320PI siehe http://www.trendnet.com

Die Outdoor CAM TRENDnet Outdoor CAM TV-IP320PI habe ich nun seit mehreren Wochen im Einsatz und sie zeichnet sich durch sehr gute Bildqualität aus. Die Bewegungserkennung am Tag arbeitet zufriedenstellend, jedoch werden in der Nacht leider sehr viele nicht vorhandene Bewegungen erkannt. Unter anderem auch durch Insekten ausgelöst.

Auch werden leider mit jeder Bewegungserkennung 6 Schnappschüsse archiviert. Um die Dateimenge auf dem FTP-Server zu verrignern, habe ich das folgende PHP Script erstellt. Dieses rufe ich im Zyklus von 10 Minuten auf, um aufzuräumen. Der zyklische Aufruf erfolgt über einen Dienst meines Webservers, auf dem die Bilder angezeigt werden.

Das nachfolgende Script löscht Snapshots und behält die letzten 3 Aufnahmen. Es prüft ob es sich um Nachtbilder mit hohem Grauanteil handelt und löscht dann auf einander folgende Bilder mit hoher Ähnlichkeit. Die unten gekennzeichneten Schwellwerte ggf. anpassen.

<html>
<head>
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; 
      charset=windows-1252">
<title>CAM</title>
</head>
<body>

<?php

function CmpN($a, $b)
{
 return ($a > $b) ? 1 : -1;
}

function CmpR($a, $b)
{
 return ($a > $b) ? -1 : 1;
}

// Aus Rot, Gelb, Blau Grauwert ermitteln
function getGreyValue ($r, $g, $b)
{
 return (0.299 * $r) + (0.587 * $g) + (0.114 * $b);
}

// prüfen auf Nachtbilder, d.h. Farblevel wird hier berechnet
function isnight($img) 
{
 $g=0;
 $w = imagesx($img);
 $h = imagesy($img);
 for ($ih=0;$ih<$h/2;$ih += 10) {
  $rgb = imagecolorat($img, $w/2, $ih);
  $r = ($rgb >> 16) & 0xFF;
  $g = ($rgb >> 8) & 0xFF;
  $b = $rgb & 0xFF;
  $g += ($b - $r)*($b - $r);
 }
 return $g;
}

// Grauwert-Delta berechnen
function compImg($img1,$img3)
{
 $g=0;
 $w = imagesx($img1);
 $h = imagesy($img1);
 for ($ih=0;$ih<$h;$ih += 25) {
  for ($iw=0;$iw<$w;$iw += 25) {
   $rgb = imagecolorat($img1, $iw, $ih);
   $r1 = ($rgb >> 16) & 0xFF;
   $g1 = ($rgb >> 8) & 0xFF;
   $b1 = $rgb & 0xFF;
   $g1 = getGreyValue($r1,$g1,$b1);
   $rgb = imagecolorat($img3, $iw, $ih);
   $r3 = ($rgb >> 16) & 0xFF;
   $g3 = ($rgb >> 8) & 0xFF;
   $b3 = $rgb & 0xFF;
   $g3 = getGreyValue($r3,$g3,$b3);
   $g += (int)(($g1-$g3)*($g1-$g3));
  }
 }
 return $g;
}

// löscht alte snapshots
function snapshot($p)
{
 print "del snapshot<br>\n";
 $fh = opendir($p); //Verzeichnis 
 $verzeichnisinhalt = array(); 
 while (true == ($file = readdir($fh))) 
 { 
  if (substr($file, -11)=="_TIMING.jpg") 
  //Abfrage nach gültigen Datenformat 
  { 
   $verzeichnisinhalt[] = $file; 
  } 
 }

 usort($verzeichnisinhalt, 'CmpR');
 $c = 0;
 for($i=0;$i<count($verzeichnisinhalt);$i++) 
 { 
   $f = $verzeichnisinhalt[$i];
   $c++;
   if ($c > 2)
   {
    unlink("$p/$f"); 
    print "del $f<br>\n";
   }
 }
}

function nightclean($p)
{
 print "nclean<br>\n";
 $fh = opendir($p); //Verzeichnis 
 $verzeichnisinhalt = array(); 
 while (true == ($file = readdir($fh))) 
 { 
  if (substr(strtolower($file), -3)=="jpg") 
  //Abfrage nach gültigen Datenformat 
  { 
   $verzeichnisinhalt[] = $file; 
  } 
 }
 usort($verzeichnisinhalt, 'CmpR');
 $img3=0;
 for($i=0;$i<count($verzeichnisinhalt);$i++) 
 { 
  $vi = $verzeichnisinhalt[$i];
  $img1 = @imagecreatefromjpeg("$p/$vi"); 
  if ($img1) {
   $g = isnight($img1);
   // level für Nachtbild auf 200 eingestellt, ggf. anpassen
   if ($g < 200)
   {
    if ($img3)
    {
     // vergleich zweier auf einander folgender Bilder
     $g = compImg($img1,$img3);
     print "$vi $g";
     // 100000 ist die Empflindlichkeit für Löschung gleicher Bilder
     // ggf. anpassen
     if ($g < 100000)
     {
      unlink("$p/$vi");
      print " del";
     }
     print "<br>\n";
    }
    $img3 = $img1;
   }
  }
 } 
}

snapshot(".");
nightclean(".");
?>

<br>ready
</body>
</html>
Dieser Beitrag wurde unter Allgemein abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Die Kommentarfunktion ist geschlossen.