понедельник, 5 ноября 2012 г.

Интерфейс интернет камеры с управлением trendnet tv-ip400 для пользователей

Месяц назад я задумал сделать камеру, которая показывает панораму города в реальном времени. Взял обычную камеру интернет камеру и собрал поворотное устройство на базе ардуино. Но сразу выползли косяки. Камера питается от 5В, ардуино с сервоприводами нужно 12В. 5В не хватает сервам и они трещат, кряхтят и все дергается. Конструкция тоже оказалась не очень гармоничной. Разместить это все в прозрачной колбе получалось с трудом.

Так оказалось, что одна из первых моих интернет камер оказалась без дела. Матрица старого образца шумит. Разрешение не ахти - 640 х 480, однако даже при таком она картинку кажет не очень, по сравнению с существующими ныне камерами такого же разрешения. Так вот она и отошла от дела. А тут на днях она мне попадает в руки. Решено, что надо ее использовать.

Просто прокинуть порт на нее не интересно. Да и тяжеловат он. Плюс там много лишнего и "секретного" для пользователя из вне. Надо сделать свой интерфейс. Но не просто показывать снапшот, а дать на время управление камерой. Повертеть же головой всем интересно .

Решил посерфить базу интернета на наличие api. Естественно ничего не существует. И тут попалась поделка нашего немецкого друга. Ее я и взял за основу.

if ($control) {
  // Generate the request header
  # Configuration
  $Host="хх.хх.хх.хх.";
  $Port="хх";
  #PanTiltSingleMove:
  # 0 1 2
  # 3 4 5
  # 6 7 8
  //echo "<pre>";
  //var_dump($_POST);
  if ($d>0){
          $dir1=$d;
          $pan=$x;
          $tilt=$y;
          if ($d2>0)
                    $kuda='инициализация...';
          else
                    $kuda='поворот';
  } else {
    $pan=0;
    $tilt=0;
    $dir1=4;
    $kuda='';
    if ($here_x>200) {
            $dir1=5;
            $pan=3;
            $kuda='вправо';
    } elseif ($here_x<100) {
            $dir1=3;
            $pan=3;
            $kuda='влево';
    }
    if ($here_y>160) {
       if ($dir1!=4) {
         $dir1=$dir1+3;
         $kuda=$kuda.' и ';
       } else {
         $dir1=7;
       }
            $kuda=$kuda.'вниз';
            $tilt=4;
    } elseif ($here_y<80) {
       if ($dir1!=4) {
         $dir1=$dir1-3;
         $kuda=$kuda.' и ';
       } else {
         $dir1=1;
       }
            $kuda=$kuda.'вверх';
            $tilt=4;
    }
  }
  if ($dir1==4) {
    $kuda='центровка';
    header("Refresh: 0; URL=?control=1&d=8&x=10&y=3&d2=5&x2=10&y2=0");
  } else {
    if ($d2>0) {
        header("Refresh: 0; URL=?control=1&d=$d2&x=$x2&y=$y2");
    } else {
        header("Refresh: 0; URL=?1=1"); //делайте как хотите этот рефреш
    }
  }
  //начинается секретное API
  $ReqBody = "PanSingleMoveDegree=$pan&TiltSingleMoveDegree=$tilt&PanTiltSingleMove=$dir1";
  $URI="/PANTILTCONTROL.CGI";
  $ReqHeader =
  "POST $URI HTTP/1.1\n".
  "Authorization: Basic ".base64_encode("guest")."\n".
  "Host: $Host:$Port\n".
  "Content-Type: application/x-www-form-urlencoded\n".
  "Content-Length: ".strlen($ReqBody)."\n\n";
  $Zapros=$ReqHeader."$ReqBody\n";
  // Open the connection to the host
  $socket = fsockopen($Host, $Port, &$errno, &$errstr);
  if (!$socket)
  {
    echo "error";
  } else {
    fputs($socket, $Zapros);
    $idx = 0;
    while (!feof($socket)) {$Result1[$idx++] = fgets($socket, 128);}
  }
  //конец серкретного АПИ
  echo '<BODY STYLE="MARGIN: 0; PADDING: 0; BACKGROUND-COLOR: #000000">';
  echo "<table width=100% height=100% cellpadding=0 cellspacing=0><tr><td valign=middle align=center bgcolor=black><font color=white>
  <b>$kuda";//<br>pan=$pan tilt=$tilt dir1=$dir1<br>";
  //var_dump($Result1);
  echo "</td></tr></table>";
  exit;
}
  header("Refresh: 15; URL=?1=1"); //рефреш в себя
?>
<BODY STYLE="MARGIN: 0; PADDING: 0; BACKGROUND-COLOR: #000000"><form action=?1=1 method=post><input type=image src=http://HOST:PORT/IMAGE.JPG name=here><input type=hidden name=control value=1></form>

Это только начало. Надеюсь не заброшу :)

Комментариев нет:

Отправить комментарий