Merge branch 'develop' into 2.0

This commit is contained in:
Cédric Verstraeten
2016-09-02 21:22:03 +02:00
35 changed files with 480 additions and 151 deletions

View File

@@ -4,6 +4,7 @@
* [What is Kerberos.io](#what-is-kerberos-io)
* [How does it work](#how-does-it-work)
* [Features](#features)
* [Installation](#installation)
<a name="why-kerberos-io"></a>
## Why Kerberos.io?
@@ -15,7 +16,7 @@ Nowadays we have a myriad of **expensive** camera's, recorders and software solu
<a name="what-is-kerberos-io"></a>
## What's Kerberos.io?
Kerberos.io is a **low-budget** video surveillance solution, that uses computer vision algorithms to detect changes, and that can trigger other devices. Kerberos.io is open source so everyone can customize the source code to its needs and share it with the community. When deployed on the Raspberry Pi, it has a **green footprint** and it's **easy to install**; you only need to transfer the [**Kerberos.io OS (KIOS)**](installation/KiOS) to your SD card and that's it.
Kerberos.io is a **low-budget** video surveillance solution, that uses computer vision algorithms to detect changes, and that can trigger other devices. Kerberos.io is open source so everyone can customize the source code to its needs and share it with the community. When deployed on the Raspberry Pi, it has a **green footprint** and it's **easy to install**; you only need to transfer the [**Kerberos.io OS (KIOS)**](/installation/KiOS) to your SD card and that's it.
<iframe src="https://player.vimeo.com/video/163975947?autoplay=0&color=943633" style="width:100%; height: 400px;" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
@@ -28,9 +29,9 @@ The machinery is responsible for the processing. It's **an image processing fram
The web is responsible for the visualization. It's a **GUI** which helps the user to find activity at a specific period, configure the machinery, view a live stream, see system information and much more. It's important to note that the machinery can work without the web, however we don't recommend this.
The cloud is an extra service, which is available by default but is not required. The main goal of this service is **to view your activity from everywhere** in the world. By [**subscribing to a plan**](https://cloud.kerberos.io), you can **sync your events** to the cloud application; you can sync **multiple instances** with only one subscription.
The cloud is an extra service, which is available by default but is not required. The main goal of this service is **to view your activity from everywhere** in the world. By [**subscribing to a plan**](https://cloud.kerberos.io), you can **sync your images** to the cloud application; you can sync **multiple instances** with **only one subscription**.
To have a more detailed explanation go to the [**machinery**](machinery/introduction) and [**web**](web/introduction) pages.
To have a more detailed explanation go to the [**machinery**](/machinery/introduction) and [**web**](/web/introduction) pages.
![How does it work](1_how_does_it_work.png)
@@ -39,7 +40,7 @@ To have a more detailed explanation go to the [**machinery**](machinery/introduc
Kerberos.io comes with **a bunch of features**, below you can find a short list of the most important ones.
* Full range camera support (USB-, Raspberry Pi-, and IP-camera (RTSP or MJPEG)).
* Full range camera support (USB-, Raspberry Pi v1.3 and v2.1-, and IP-cameras which support a RTSP or MJPEG stream).
* Constraints to make detection more intelligent (time interval, regions, etc).
* Post-processes which are executed after a valid activity (GPIO pin, webhook, etc).
* Live streaming (MJPEG) on the web or with another program like VLC or IP camera viewer.
@@ -52,4 +53,15 @@ Kerberos.io comes with **a bunch of features**, below you can find a short list
Features **NOT** included:
* Video recording (only snapshots are taken); third-party solutions are available (IP camera viewer).
* Multiple camera support; not supported out-of-the-box, but it's possible with some technical skills.
* Multiple camera support; not supported out-of-the-box, but it's possible with some technical skills.
<a name="installation"></a>
## Installation
Installing <b>Kerberos.io</b> to your IoT device, has never been so easy. By using our <b>cross-platform</b> installer, you can run a <b>fully configured</b> video surveillance system within <b>3 minutes</b>. Indeed, we also think that's awesome!
[![Installation kios](images/kios-install.gif)](/installation/KiOS)
By using the KiOS installer, you'll get <b>an easy to use GUI</b> which allows you to configure and **flash KiOS to your SD card**. Just download the installer, select a version, specify your network configurations, select your SD card and press the flash button; **it can't be easier**.
If you **don't want to reflash you SD card**, you can run also run Kerberos.io on your [**Raspbian**](installation/Raspbian) installation, or even run it as a [**docker container**](installation/Docker).

View File

@@ -6,10 +6,12 @@ Kerberos.io runs on every machine but its main goal is to run on a **Raspberry P
### Raspberry Pi
As said, you can run Kerberos.io **on every machine**, however we recommend to run Kerberos.io on a **Raspberry Pi**, as it is a low-budget microcontroller which can you buy in almost every electronic shop. Besides that Kerberos.io comes with a custom OS called **KIOS** (Kerberos.io Operating System), which you can deploy to your Raspberry Pi in just a few minutes. Kerberos.io supports **all Raspberry Pi versions** (1, 2 and 3).
As said, you can run Kerberos.io **on every Linux based machine**, however we recommend to run Kerberos.io on a **Raspberry Pi**, as it is a low-budget microcontroller which can you buy in almost every (online) electronic shop. Therefore Kerberos.io comes with a custom ARM OS called [**KIOS**](installation/KiOS) (Kerberos.io Operating System), which you can deploy to your Raspberry Pi in just a few minutes. Kerberos.io supports **all Raspberry Pi versions** (1, 2, 3 and Zero).
![Raspberry Pi Model A](2_raspberry-pi-a.png)
For the moment of writing (2016), we do **not support other boards**.
### SD card
If you want to use your Raspberry Pi, you will need to have a SD card, on which an OS will be installed. Therefore you will need a **2GB or bigger SD card**.
@@ -24,7 +26,7 @@ You will need to have a **micro USB 5V** charger, to give the Raspberry Pi some
### Camera
Kerberos.io works with the full range of camera's. You can use an **USB-**, **IP-** or the **Raspberry Pi camera**.
Kerberos.io works with the full range of camera's. You can use an **USB-**, **IP-** or the **Raspberry Pi camera (v1.3 and v2.1)**.
![Raspberry Pi Camera Module](2_raspberry-camera-module.png)

View File

@@ -1,5 +1,6 @@
# Release notes
* [2.1.0](#2-1-0)
* [2.0.0](#2-0-0)
* [1.1.0](#1-1-0)
* [1.0.3](#1-0-3)
@@ -7,6 +8,39 @@
* [1.0.1](#1-0-1)
* [1.0.0](#1-0-0)
<a name="2-1-0"></a>
## 2.1.0
#### Web
* Added PhotoSwipe for image overview (easier to browse through images). [#24](https://github.com/kerberos-io/web/issues/24)
* Added reboot and shutdown commands. [#23](https://github.com/kerberos-io/web/issues/23)
* Added logging view to system page. [#20](https://github.com/kerberos-io/web/issues/20)
* Added labels to check if machinery is running. [#19](https://github.com/kerberos-io/web/issues/19)
* Added error handling if web interface isnt working properly. [#2](https://github.com/kerberos-io/web/issues/2)
* Fixed Heatmap.js fail to load by ad-blocker. [#16](https://github.com/kerberos-io/web/issues/16)
* Show additional information on the dashboard (streaming is opening or not) there is no data available. [#16](https://github.com/kerberos-io/web/issues/16)
* Settings page is now visible on mobile (+ changed icon). [#16](https://github.com/kerberos-io/web/issues/16)
* Fixed sorting of news articles. [#16](https://github.com/kerberos-io/web/issues/16)
* Removed links to assets in the cloud (.css files). [#16](https://github.com/kerberos-io/web/issues/16)
* Design: improved layout of login page, async loading of image view.
#### Machinery
* Added configurable streaming port and quality. [#21](https://github.com/kerberos-io/machinery/issues/21)
* Added new algorithm: Background subtraction. [#35](https://github.com/kerberos-io/machinery/issues/35)
* Added new heuristic: Counter (for object/people counting). [#28](https://github.com/kerberos-io/machinery/issues/28)
* Added video capture, which can be used for debugging purposes (replay a video fragment).. [#26](https://github.com/kerberos-io/machinery/issues/26)
* Its now possible to mark the images with a timestamp. [#24](https://github.com/kerberos-io/machinery/issues/24)
* Fixed blocking streaming socket. [#22](https://github.com/kerberos-io/machinery/issues/22)
#### Kios
* Fix removal images if disk is almost full (wrong path was defined). [#1](https://github.com/kerberos-io/kios/issues/1)
* Support for the Raspberry Pi Camera module v2.1. [#3](https://github.com/kerberos-io/kios/issues/3)
* Support for the Raspberry Pi Zero; updated kernel to latest Raspbian. [#3](https://github.com/kerberos-io/kios/issues/3)
* KiOS GUI installer.
<a name="2-0-0"></a>
## 2.0.0

View File

@@ -1,10 +1,10 @@
#First things first
The reason why you're on this page is because you want to know how to install Kerberos.io on your Raspberry Pi, local working station, server or whatever machine you prefer. The good news is that we have **different approaches** from basic to advanced; it depends on how you want to install it.
The reason why you're on this page is because you want to know how to install Kerberos.io on your Raspberry Pi, local working station, server or whatever Linux machine you prefer. The good news is that we have **different approaches** from basic to advanced; it depends on how you want to install it.
## Raspberry Pi (ARM)
When deploying on the Raspberry Pi there are two possible solutions. You can use our custom OS, **KiOS** (Kerberos.io Operating System), which is production-ready or install it on an existing OS, **Raspbian**.
When deploying on the Raspberry Pi there are two possible solutions. You can use our custom OS, [**KiOS**](installation/KiOS) (Kerberos.io Operating System), which is production-ready or install it on an existing OS, [**Raspbian**](installation/Raspbian).
###KiOS

View File

@@ -1,116 +1,204 @@
#KiOS
* [Download the .img](#download)
* [Flash the .img to a SD card](#flash)
* [Network configuration](#network)
* [Easy Installation](#installer)
* [Advanced Installation](#advanced)
* [Download the .img](#download)
* [Flash the .img to a SD card](#flash)
* [Network configuration](#network)
* [Power on the Raspberry Pi](#poweron)
* [Access the Raspberry Pi with SSH](#access)
## Introduction
[KiOS](https://github.com/kerberos-io/kios) (Kerberos.io Operating System) is a custom linux OS created for the Raspberry Pi by buildroot, which runs Kerberos.io out-of-the-box. KiOS is **installed like every other OS** for the Raspberry Pi, you need to flash the OS (.img) to a SD card and update your network configration; no manual compilation or horrible configurations. If you want to get Kerberos.io up and running at a short time frame, this is the **most simple** and **basic** installation procedure; it takes about 15-30 min to download, install and configure.
[KiOS](https://github.com/kerberos-io/kios) (Kerberos.io Operating System) is our own **custom linux OS**, which runs Kerberos.io out-of-the-box. KiOS is **installed like every other OS** for the Raspberry Pi, you need to flash the OS (.img) to a SD card. If you want to get Kerberos.io up and running at a short time frame, this is the **most simple** and **basic** installation procedure.
<iframe src="https://player.vimeo.com/video/164054497?autoplay=0&color=943633" style="width:100%; height: 400px;" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
You can install KiOS by using our **own installer**, which gives you a nice GUI that will handle the flashing for you, or you can do the flashing **yourself** by using your terminal or another GUI.
<a name="download"></a>
## 1. Download the .img
<button id="installer-btn" class="btn" style="width: 49%; height: 50px; background-color: #943633; font-size: 16px; color: #fff; outline: 0;">Easy installation</button>
<button id="advanced-btn" class="btn" style="width: 49%; height: 50px; background-color: #ddd; font-size: 16px; color: #fff; outline: 0;">Advanced installation</button>
All releases are stored on the KiOS [**Github repository**](https://github.com/kerberos-io/kios), each release contains several images (for every Raspberry Pi version a different image is created). It's important to download the correct image; installing an image for another Raspberry Pi version will not work. After downloading, make sure to unzip the release.
<div id="installer">
<h2>Easy Installation</h2>
<p>
Installing <b>Kerberos.io</b> to your IoT device, has never been so easy. By using our <b>cross-platform</b> installer, you can run a <b>fully configured</b> video surveillance system within <b>3 minutes</b>. Indeed, we also think that's awesome!
</p>
[![Download KiOS](2_kerberos-image.png)](https://github.com/kerberos-io/kios/releases)
<img src="/images/kios-install.gif" style="border-radius: 0; margin: 0; width: 100%;"/>
<a name="flash"></a>
## 2. Flash the .img to a SD card
<div id="bottom-download" class="btn-group" style="margin: 20px 0; width: 100%">
<a class="current-version btn btn-success btn-lg" style="color: #fff; margin-bottom: 5px;font-size: 18px; width: 90%;" data-track-id="jumbotron button" role="button"></a>
<button type="button" class="btn btn-success btn-lg dropdown-toggle" style="font-size: 18px; width: 10%;" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu" style="width:100%; margin: 0; padding:0"></ul>
</div>
Ensure that you have inserted the SD card, that you wish to clone, into the SD card reader. If you dont have an internal SD card reader, you will need to plug in an external SD card reader via a USB socket.
<p>By using the KiOS installer, you'll get <b>an easy to use GUI</b> which allows you to configure and flash KiOS to your SD card. Just download the installer, select a version, specify your network configurations, select your SD card and press the flash button; it can't be easier.</p>
<script type="text/javascript">
require([_jsBase + 'main.js'], function(common)
{
require(["jquery", "//kerberos.io/etcher-versions.js", "//kerberos.io/sniffer.min.js"], function($)
{
$(function()
{
$("#advanced-btn").click(function(){
$("#installer-btn").css({"background-color":"#ddd"});
$("#advanced-btn").css({"background-color":"#943633"});
$("#installer").hide();
$("#advanced").show();
})
### OSX
$("#installer-btn").click(function(){
$("#installer-btn").css({"background-color":"#943633"});
$("#advanced-btn").css({"background-color":"#ddd"});
$("#advanced").hide();
$("#installer").show();
})
* Download and install [RPi-sd card builder v1.2](https://mega.co.nz/#!PZc2HTTQ!eD9dtFpoKnbZqP1hkvrv43_Pvc9xadMVxRP2K-M8n88).
* Run the app.
* Select the kios-x-y.img.
* Select your SD card.
* Insert your password, as the program will need administrator privileges.
* The system will start transferring the image to your SD card.
* A confirmation is shown that the transferred is completed and SD card unmounted.
// Specify current version
var platform = window.Sniff.os.name;
if(platform === "win")
{
platform += "64";
}
else if (platform !== "osx")
{
platform = "linux64";
}
### Windows
var currentVersion = $.grep(versions, function(el){
return el.os == platform;
});
* Download and install [Win32DiskImager](http://sourceforge.net/projects/win32diskimager/files/latest/download).
* Select the KiOS image and the drive letter of the SD card.
if(currentVersion.length > 0)
$(".current-version").html(currentVersion[0].long_name);
$(".current-version").attr('href', currentVersion[0].href);
### Linux
// Fill dropdowns
var dropdown = $(".dropdown-menu");
for(var i = 0; i < versions.length; i++)
{
dropdown.append('<li><a href="' + versions[i].href + '">' + versions[i].name + '</a></li>');
}
});
});
});
</script>
</div>
<div id="advanced" style="display: none;">
<h2>Advanced Installation</h2>
#### Format SD card
If you prefer **the hard way**, you can also flash **Kerberos.io** to your SD card manually. So it's not a problem if you don't want to use the KiOS installer. It goes as follows: download the KiOS .img yourself, flash it to your SD card with your terminal and edit some configuration files in the boot directory.<br/><br/>
Select SD card and delete all partitions with gparted
<iframe src="https://player.vimeo.com/video/164054497?autoplay=0&color=943633" style="width:100%; height: 400px;" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
gparted
<a name="download"></a>
<h2>1. Download the .img</h2>
To format the SD card, enter the following command:
All releases are stored on the KiOS <a href="https://github.com/kerberos-io/kios"><b>Github repository</b></a>, each release contains several images (for every Raspberry Pi version a different image is created). It's important to download the correct image; installing an image for another Raspberry Pi version will not work. After downloading, make sure to unzip the release.
sudo mkdosfs -F 16 -v /dev/sdb -I
<a href="https://github.com/kerberos-io/kios/releases"><img alt="Download KiOS" src="2_kerberos-image.png"/></a>
#### Transfer image to your SD card
<a name="flash"></a>
<h2>2. Flash the .img to a SD card</h2>
In Terminal, enter the following command ensuring that you identify the correct destination disc.
Ensure that you have inserted the SD card, that you wish to clone, into the SD card reader. If you dont have an internal SD card reader, you will need to plug in an external SD card reader via a USB socket.
sudo dd if="kios-x-y.img" of=/dev/sdb bs=2M
<h3>OSX</h3>
<a name="network"></a>
## 3. Network configuration
<ul>
<li>Download and install <a href="https://mega.co.nz/#!PZc2HTTQ!eD9dtFpoKnbZqP1hkvrv43_Pvc9xadMVxRP2K-M8n88">RPi-sd card builder v1.2</a>.</li>
<li>Run the app.</li>
<li>Select the kios-x-y.img.</li>
<li>Select your SD card.</li>
<li>Insert your password, as the program will need administrator privileges.</li>
<li>The system will start transferring the image to your SD card.</li>
<li>A confirmation is shown that the transferred is completed and SD card unmounted.</li>
</ul>
After the image has been transferred, you can plug the SD card in to your Raspberry Pi and everything will work magically. By default the KiOS image will require an ethernet connection and use DHCP to give you a dynamic IP-address. However if you want to have a **static IP-address** or/and use a **wireless connection**, you'll need to do a small configuration. Insert the SD card into your working station and open the SD card, you'll see two files **static_ip.conf** and **wireless.conf**.
<h3>Windows</h3>
### Static IP-address
<ul>
<li>Download and install <a href="http://sourceforge.net/projects/win32diskimager/files/latest/download">Win32DiskImager</a>.</li>
<li>Select the KiOS image and the drive letter of the SD card.</li>
</ul>
Open and edit the file **static_ip.conf**.
<h3>Linux</h3>
#####################################################################
# Enter the IP-address you want to have, followed by the subnet mask
# e.g. 192.168.0.10/24
<h4>Format SD card</h4>
static_ip=""
Select SD card and delete all partitions with gparted
#####################################################################
# Enter the Gateway and DNS, this will be your router in most cases
# e.g. 192.168.0.1
<pre><code>gparted</code></pre>
static_gw=""
static_dns=""
### Wireless connection
To format the SD card, enter the following command:
Open and edit the file **wireless.conf**. Fill-in your WIFI credentials: **SSID** the name of your wireles network, and **PSK** the password of your wireless network.
<pre><code>sudo mkdosfs -F 16 -v /dev/sdb -I</code></pre>
update_config=1
ctrl_interface=/var/run/wpa_supplicant
<h4>Transfer image to your SD card</h4>
network={
scan_ssid=1
ssid=""
psk=""
}
In Terminal, enter the following command ensuring that you identify the correct destination disc.
<pre><code>sudo dd if="kios-x-y.img" of=/dev/sdb bs=2M</code></pre>
<a name="network"></a>
<h2>3. Network configuration</h2>
After the image has been transferred, you can plug the SD card in to your Raspberry Pi and everything will work magically. By default the KiOS image will require an ethernet connection and use DHCP to give you a dynamic IP-address. However if you want to have a <b>static IP-address</b> or/and use a <b>wireless connection</b>, you'll need to do a small configuration. Insert the SD card into your working station and open the SD card, you'll see two files <b>static_ip.conf</b> and <b>wireless.conf</b>.
<h3>Static IP-address</h3>
Open and edit the file <b>static_ip.conf</b>.
<pre><code>#####################################################################
# Enter the IP-address you want to have, followed by the subnet mask
# e.g. 192.168.0.10/24
static_ip=""
#####################################################################
# Enter the Gateway and DNS, this will be your router in most cases
# e.g. 192.168.0.1
static_gw=""
static_dns=""</code></pre>
<h3>Wireless connection</h3>
Open and edit the file <b>wireless.conf</b>. Fill-in your WIFI credentials: <b>SSID</b> the name of your wireles network, and <b>PSK</b> the password of your wireless network.
<pre><code>update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid=""
psk=""
}</code></pre>
</div>
<a name="poweron"></a>
## 4. Power on the Raspberry Pi
<h2>Power on the Raspberry Pi</h2>
When the installation is completed, you can **plug the SD card** into your Raspberry Pi. From this point KiOS will boot the kernel and re-partition your SD-card; Please note that the first time you boot KiOS it can take about 2 mins before the system is operational. When KiOS is ready you can **open your favorite browser** and type in the IP address of your Raspberry Pi. This will open the Kerberos.io login page, which you can **access** with the username: **root** and password: **root**.
When the installation is completed, you can <b>plug the SD card</b> into your Raspberry Pi. From this point KiOS will boot the kernel and re-partition your SD-card; Please note that the first time you boot KiOS it can take about 2 mins before the system is operational. When KiOS is ready you can <b>open your favorite browser</b> and type in the IP address of your Raspberry Pi. This will open the Kerberos.io login page, which you can <b>access</b> with the username: <b>root</b> and password: <b>root</b>.
![Login page kerberos.io webinterface](1_how-to-access.png)
<a name="access"></a>
## 5. Access the Raspberry Pi with SSH
<h2>Access the Raspberry Pi with SSH</h2>
To use Kerberos.io you only need access to the webinterface, however you can also **access the system with SSH**.
To use Kerberos.io you only need access to the webinterface, however you can also <b>access the system with SSH</b>.
Cedrics-Mac-mini:build cedricverst$ ssh root@192.168.0.12
Welcome to kios-79e30bbb!
[root@kios-79e30bbb ~]#
<pre><code>Cedrics-Mac-mini:build cedricverst$ ssh root@192.168.0.12
Welcome to kios-79e30bbb!
[root@kios-79e30bbb ~]# </code></pre>
Note that by default no root password is set, you can define a password in the **/data/etc/kios.conf** file.
Note that by default no root password is set, you can define a password in the <b>/data/etc/kios.conf</b> file.
[root@kios-79e30bbb ~]# nano /data/etc/kios.conf
[root@kios-79e30bbb ~]# reboot
Add your password, save the file and reboot the system.
<pre><code>[root@kios-79e30bbb ~]# nano /data/etc/kios.conf
[root@kios-79e30bbb ~]# reboot</code></pre>
Add your password, save the file and reboot the system.

View File

@@ -26,13 +26,13 @@ Update system and install dependency avcodec
sudo apt-get update && sudo apt-get install libav-tools
Download the debian file from [the machinery repository](https://github.com/cedricve/version-test/releases/v2.1.0); Please download the correct version for your Raspberry Pi, **replace X by the version**.
Download the debian file from [the machinery repository](https://github.com/cedricve/version-test/releases/v%machineryversion%); Please download the correct version for your Raspberry Pi, **replace X by the version**.
sudo wget https://github.com/kerberos-io/machinery/releases/download/v2.0.0/rpiX-machinery-kerberosio-armhf-2.0.0.deb
sudo wget https://github.com/kerberos-io/machinery/releases/download/v%machineryversion%/rpiX-machinery-kerberosio-armhf-%machineryversion%.deb
Unpackage the file
sudo dpkg -i rpiX-machinery-kerberosio-armhf-2.0.0.deb
sudo dpkg -i rpiX-machinery-kerberosio-armhf-%machineryversion%.deb
Enable Raspberry Pi camera (if needed)
@@ -113,7 +113,7 @@ Create a www location.
Get the source code from Github.
sudo wget https://github.com/kerberos-io/web/releases/download/v2.0.0/web.tar.gz
sudo wget https://github.com/kerberos-io/web/releases/download/v%webversion%/web.tar.gz
Unpack

View File

@@ -13,7 +13,7 @@ The machinery is an **image processing framework** which is devided into four st
The steps belong to a four passway; illustrated on the image below. In each cycle a sequence of images is processed. Each step will process the sequence, and will return some result to the next step. For example: an algorithm will process the images and returns an array to the Expositor, which contains boolean values. The steps are **loosly coupled**, so they have **simple conventions**, just like the example before.
Thanks to the loosly coupling, each step can be developed indepently. So algorithms, expositors, heuristics and conditions can be switched on the fly. This makes it easier for other developers who want to contribute to kerberos. They can create a new algorithm without knowing how a specific expositor or heuristic works. They just need to be aware of the convention an algorithm should meet.
Thanks to the loosly coupling, each step can be developed indepently. So algorithms, expositors, heuristics and conditions can be switched on the fly. This makes it easier for other developers who want to contribute to Kerberos.io. They can create a new algorithm without knowing how a specific expositor or heuristic works. They just need to be aware of the convention an algorithm should meet.
![Lifecycle](1_project_structure.png)
@@ -40,7 +40,7 @@ After the algorithm is executed, the expositor will determine, a region, where t
<a name="heuristic"></a>
### Heuristic
When the expositor detected a region where activity was detection, a **heuristic** will evaluate, the current and previous detections. The heuristic is basically some kind of memory which makes decision and tells the machinery if the detection was true or false.
When the expositor detected a region where activity was detection, a **heuristic** will evaluate, the current and previous detections. The heuristic is basically some kind of memory which makes a decision and tells the machinery if the detection was true or false.
<a name="io"></a>
### IO

View File

@@ -2,7 +2,7 @@
* [USB camera](#usb-camera)
* [IP camera](#ip-camera)
* [Raspberry Pi Camera Module](#raspberry-pi-camera-module)
* [Raspberry Pi camera](#raspberry-pi-camera)
The capture device is responsible to take images. The images are used in the four pass way.
@@ -16,7 +16,7 @@ Kerberos supports a whole range of USB cameras. You will find a complete list [h
Kerberos can be used with any IP camera, that provides a streaming URL. Make sure that you know the correct URL of your IP camera, you can find [a list here](http://www.ispyconnect.com/sources.aspx). Make sure you have updated the web interface, to make Kerberos aware you will be using an IP camera.
<a name="raspberry-pi-camera-module"></a>
## Raspberry Pi Camera Module
<a name="raspberry-pi-camera"></a>
## Raspberry Pi camera
You can use the Raspberry Pi Camera Module with Kerberos, you just need to attach the camera module and you are ready to go. The Raspberry Pi Camera Module is enabled by default in the web interface. Please note that if you didn't installed Kerberos with the image, you will need to enable the camera module yourself.
You can use the Raspberry Pi camera (v1.3 and v2.1) with Kerberos.io, you just need to attach the camera and you are ready to go. The Raspberry Pi Camera Module is enabled by default in the web interface. Please note that if you didn't installed Kerberos with the image, you will need to enable the camera module yourself.

View File

@@ -2,10 +2,6 @@
Kerberos.io supports a whole range of USB-cameras. You will find a complete list [**here**](https://web.archive.org/web/20120815172655/http://opencv.willowgarage.com/wiki/Welcome/OS/). Make sure you have updated the web interface, to make Kerberos.io aware you will be using an USB camera. [**Be careful**](http://raspberrypi.stackexchange.com/questions/340/how-much-power-can-be-provided-through-usb) that you don't attach USB-devices that require more than 100mA.
## Web
![USB camera](1_usb-camera.png)
## Parameters
The parameters of the USB-camera can be found in the **config/capture.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.
@@ -15,6 +11,7 @@ The parameters of the USB-camera can be found in the **config/capture.xml** file
<USBCamera>
<frameWidth type="number">1280</frameWidth>
<frameHeight type="number">720</frameHeight>
<deviceNumber type="number">0</deviceNumber>
<delay type="number">0</delay>
<angle type="number">0</angle>
</USBCamera>
@@ -25,6 +22,10 @@ The parameters of the USB-camera can be found in the **config/capture.xml** file
You can set the resolution of the capture device, make sure the resolution you've defined is valid with your camera. Please check the specs of the USB camera you're using.
### Device number
If more than one device is connected, you can specify the index of the USB-camera. The index is an integer (1-5).
### Delay
You can provide a delay/interval (milliseconds) between two captures.

View File

@@ -2,10 +2,6 @@
Kerberos.io can be used with any IP-camera, that provides a RTSP (or MJPEG) stream. Make sure that you know the correct URL of your IP camera, you can find [a list here](http://www.ispyconnect.com/sources.aspx). Make sure you have updated the web, to make Kerberos.io aware you will be using an IP-camera.
## Web
![IP camera](2_ip-camera.png)
## Parameters
The parameters of the IP capture device can be found in the **config/capture.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

View File

@@ -2,10 +2,6 @@
You can use the Raspberry Pi Camera Module with Kerberos.io. You just need [**to attach the camera module**](https://www.raspberrypi.org/help/camera-module-setup/) and you're ready to go. The Raspberry Pi Camera Module is enabled by default in the web.
## Web
![Raspberry PI Camera Module](3_raspi-camera.png)
## Parameters
The parameters of the Raspberry Pi Camera Module can be found in the **config/capture.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

View File

@@ -2,10 +2,6 @@
It can be helpful to **enable or disable Kerberos.io at specific times**. Therefore the time condition makes it possible to select a time range for each day of the week. When the current time is within the time range, Kerberos.io will be enabled.
## Web
![Time condition](1_time-condition.png)
## Parameters
The parameters of the Time condition can be found in the **config/condition.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

View File

@@ -2,10 +2,6 @@
This condition makes it possible to **disable/enable Kerberos.io**, with a simple true/false parameter. This is helpful when you're expecting a lot of activity, and you don't want Kerberos.io to trigger all those events.
## Web
![Enabled condition](2_enabled-condition.png)
## Parameters
The parameters of the Time condition can be found in the **config/condition.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.
@@ -19,8 +15,6 @@ The parameters of the Time condition can be found in the **config/condition.xml*
</conditions>
### Active
The active field is boolean value (true/false). When the active field is true, Kerberos.io is enabled, if not it's disabled.

View File

@@ -14,13 +14,9 @@ The main idea of the Colins et al. method, is that it will erase "ghosting". In
A more detailed explanation can be found [here](http://blog.cedric.ws/opencv-simple-motion-detection).
## Web
![Differential algoritmh](1_differential-images.png)
## Parameters
The parameters of the Differential image algorithm can be found in the *config/algorithm.xml* file, but you can also use the web to modify the parameters. Below you see a default configuration file.
The parameters of the Differential images algorithm can be found in the *config/algorithm.xml* file, but you can also use the web to modify the parameters. Below you see a default configuration file.
<algorithms>

View File

@@ -0,0 +1,53 @@
# Background subtraction
This Background subtraction algorithm is **a more advanced** method in comparison to the **Differential images** method. The key difference is that it uses and calculates a background image. Images taken from the capture device are then subtracted from the background image, resulting in a more robust segmentation of the foreground. As this method is more accurate, it also **consumes a lot more CPU power and memory**; the background model is adapted by every iteration.
The algorithm is described in [**following paper**](http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf).
## Parameters
The parameters of the Background images algorithm can be found in the *config/algorithm.xml* file, but you can also use the web to modify the parameters. Below you see a default configuration file.
<algorithms>
<BackgroundSubtraction>
<shadows type="text">true</shadows>
<history type="number">50</history>
<nmixtures type="number">5</nmixtures>
<ratio type="number">1</ratio>
<erode type="number">5</erode>
<dilate type="number">7</dilate>
<threshold type="number">20</threshold>
</BackgroundSubtraction>
</algorithms>
### Shadows
The shadows parameter is a true or false. By using this parameter you can make the Background subtraction a little bit more intelligent; to **neglect shadows in the foreground model**.
### History
This is an integer which tells the system, **the amount of images the system should take into account (history)**, to calculate the background model. The higher the history integer, the more images it will use to calculate the background model. By **increasing the history** you get **a more stable background** model, but a **less flexibl**e. As more images from the past are taken into account, the slower the background model will adapt to a new scenario. E.g. when a car drives into your street, and stands still for 5 minutes.
Finding the ideal history parameters, depends heavily in the application you want to use it. In practice this **is achieved by trial and error**.
### NMixtures
Sets the number of gaussian components in the background model.
### Ratio
If a foreground pixel keeps semi-constant value for about backgroundRatio*history frames, its considered background and added to the model as a center of a new component.
### Erode
Find a more detailed explanation at the [**Differential images section**](algorithms/Differential_images).
### Dilate
Dilate is exactly the same as the erode parameter, except that it has the reverse behaviour; instead of removing isolated pixels it will connect them. The dilate function is mainly used in segmentation techniques, to create **a more complete segment**; it fills gaps. The higher the number of the erode parameter, the more aggressive the dilating will be.
### Threshold
Find a more detailed explanation at the [**Differential images section**](algorithms/Differential_images).

View File

@@ -2,10 +2,6 @@
This rectangle is a trivial expositor. A rectangle region can be defined to constrain the locations of pixels of interest; for example if you only want to have detection at your front door. The rectangle repositor will return the bounding rectangle of the pixels of interest.
## Web
![Rectangle expositor](1_rectangle-expositor.png)
## Parameters
The parameters of the rectangle expositor can be found in the **config/expositor.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 KiB

After

Width:  |  Height:  |  Size: 659 KiB

View File

@@ -2,8 +2,6 @@
This hull is a more complex expositor than the rectangle. A hull can be selected with the web, you can select one or more coordinates to create a flexible region. The coordinates can be adjusted afterwards and be removed by double clicking on the coordinate. You can expand the hull by removing the start coordinate, which is marked by the white bullet.
## Web
![Hull expositor](2_hull-expositor.png)
## Parameters

View File

@@ -2,10 +2,6 @@
This is a trivial heuristic. The sequence heuristic will store a single integer in memory, that will count the numbers of valid detections. When the heuristic will detect a false detection, it will decrease the count. The sequence heuristic will return true, if a threshold is reached; for example when something was detected three times in a row.
## Web
![Sequence heuristic](1_sequence-heuristic.png)
## Parameters
The parameters of the Sequence heuristic can be found in the **config/heuristic.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 KiB

View File

@@ -0,0 +1,88 @@
# Counter
**Counting objects/people** forms the basis for a range of high-tech solutions, including retail analytics, queue management, building management and security applications. By using the counter heuristic **you can count incoming and outgoing objects** (e.g. people). By defining two lines, the counter heuristics can count the incoming (green line) and outgoing (red line) objects.
![Counter heuristic](2_counter-heuristic.png)
The quality of the Counter heuristic depends heavily on the accurancy of the chosen algorithm (Differential, Background subtraction, etc). Therefore **we recommend** to use the **Background Subtraction algorithm** as this is the most accurate one; the algorithm is used for segmentation and it will distinguish background and foreground.
After the algorithm did its magic, the segmented image is used by the Counter heuristic to calculate some features: the **center of mass** is calculated for each foreground segment, and is stored in memory together with the height and width of the segment. By using the coordinates of the center of mass a trajectory is calculated.
$$ \texttt{mu} \_{ji}= \sum \_{x,y} \left ( \texttt{array} (x,y) \cdot (x - \bar{x} )^j \cdot (y - \bar{y} )^i \right ) $$
$$ \bar{x} = \frac{\texttt{m}\_{10}}{\texttt{m}\_{00}} , \; \bar{y} = \frac{\texttt{m}\_{01}}{\texttt{m}\_{00}} $$
![Center of mass](2_counter-heuristic-center-of-mass.png)
While the capture device is taking images, the counter heuristic will calculate the features (as mentioned before) for every subsequent frame. When calculated **the heuristic will search for the best match**: the closest, in terms of distance, center of mass is searched from the previous calculation. When the best match is found the center of mass (with its features) is added to the feature list of the best match; or if not found, a new feature list is created.
The idea of the feature list is that it contains the trajectory of an object which is moving from one point to another (a person walking by). A feature list exists for every moving object in the viewport of the camera and each feature list contains the sequence of center of masses (the x- and y-coordinates of the object).
After the center of masses are calculated, existing feature lists are expanded or new feature lists are created (the start of a new object). By using the feature lists, **the direction of the moving objects** can be calculated, as it contains the initial center of mass and the last found center of mass.
![Trajectory](2_counter-heuristic-trajectory.png)
As we know the trajectory of an object (and thus its direction), the intersection is calculated with the incoming (green line) and outgoing (red line). If the trajectory intersects both incoming and outgoing lines, the direction of the trajectory is used to determine which line was interesected first (and this is an incoming or outgoing object).
## Parameters
The parameters of the Counter heuristic can be found in the **config/heuristic.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.
<heuristics>
<Counter>
<appearance type="number">5</appearance>
<maxDistance type="number">90</maxDistance>
<minArea type="number">1400</minArea>
<onlyTrueWhenCounted type="bool">true</onlyTrueWhenCounted>
<minimumChanges type="number">20</minimumChanges>
<noMotionDelayTime type="number">1000</noMotionDelayTime>
<markers type="twolines">100,100|100,200|200,100|200,200</markers>
</Counter>
</heuristics>
### Appearance
The appearance parameters works as a time-out value. If a feature lists hasn't been updated for x (appearance) times in a row, it's removed. The idea is that when an object has moved outside the viewport of the camera, it can't be tracked anymore.
### Max Distance
While calculating the center of masses, the best match is searched for each one. As the best match is calculated in function of the distance, a maximum distance is used to limit the matching process.
### Min Area
The center of mass is calculated for each segment which has an area which is larger than the minimum area.
e
### Only true when counted
By default the heuristic will only return true when one or more objects are marked as incoming or outgoing. However by unchecking this option you can make the heuristic return true when something changed (same behaviour as the sequence heuristic). The idea is that one wants to track the incoming and outgoing objects, but also want to have images for every change.
### Minimum changes
The heuristic will only procede true if enough changes have been detected.
### No motion delay time
When the heuristic is not valid, the heuristic will idle for some time.
### Markers
The start- and en-coordinates of both the incoming and outgoing lines (delimited by the pipe symbol).
## Output
The whole point of the counter heuristic is counting objects. Therefore when one or more incoming or outgoing objects are detected the results are added to the JSON object which is passed along the four passway. The JSON object can be retrieved by using the [**Webhook IO device**](/machinery/Outputs/webhook).
[
'regionCoordinates' : [618, 317, 703, 493],
'numberOfChanges' : 5446,
'incoming' : 0,
'outgoing' : 1,
'timestamp' : '1465894497',
'microseconds' : '5-97451',
'token' : 695,
'pathToImage' : '1465894497_5-97451_frontdoor_618-317-703-493_5446_695.jpg',
'instanceName' : 'frontdoor',
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

View File

@@ -2,20 +2,18 @@
An image can be saved to disk.
## Web
![Disk io](1_disk-io.png)
## Parameters
The parameters of the Disk output device can be found in the **config/io**.xml file, but you can also use the web to modify the parameters. Below you see a default configuration file.
<ios>
<Disk>
<Disk>
<fileFormat type="text">timestamp_microseconds_instanceName_regionCoordinates_numberOfChanges_token.jpg</fileFormat>
<directory type="directory">/etc/opt/kerberosio/capture</directory>
</Disk>
<directory type="text">/etc/opt/kerberosio/capture/</directory>
<markWithTimestamp type="bool">false</markWithTimestamp>
<timestampColor type="text">white</timestampColor>
</Disk>
</ios>
@@ -26,3 +24,13 @@ The format that will be used for the name of the image. One or more variables ca
### Directory
The directory where the image will be saved to. By default images are saved to the **/etc/opt/kerberosio/capture** directory.
### Mark with timestamp
When true images are marked with a timestamp.
![Disk timestamp](1_disk-io-timestamp.png)
### Timestamp color
A color can be defined for timestamp: white, black, red, green and blue.

View File

@@ -2,10 +2,6 @@
The TCP/IP client will send a TCP packet to a server.
## Web
![TCP socket io](2_tcp-io.png)
## Parameters
The parameters of the TCP/IP client can be found in the **config/io.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

View File

@@ -2,10 +2,6 @@
A GPIO pin can be set as output device.
## Web
![GPIO io](3_gpio-io.png)
## Parameters
The parameters of the GPIO pin can be found in the **config/io.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.

View File

@@ -3,11 +3,6 @@
Detailed information (a JSON object) is send as a POST request to a webhook. The JSON object contains the number of changes, the region, the URL of the image, etc.
**Make sure that the Webhook comes after the Disk device, otherwise the URL of the image is not included.**
## Web
![Webhook io](4_webhook.png)
## Parameters
The parameters of the webhook can be found in the **config/io.xml** file, but you can also use the web to modify the parameters. Below you see a default configuration file.
@@ -22,4 +17,4 @@ The parameters of the webhook can be found in the **config/io.xml** file, but yo
### Url
This is the URL, to which Kerberos will send a JSON object (as a POST request).
This is the URL, to which Kerberos.io will send a JSON object (as a POST request).

View File

@@ -1,13 +1,16 @@
# Heuristic
* [Sequence](#sequence)
* [Counter](#counter)
When the expositor detected one or more regions, a heuristic will evaluate, the current and previous evaluations. This step is less loosly coupled as the connection between algorithms and expositors, because it can require specific parameters from the expositor or algorithm.
However, the main convention is that an expositor would always modify a JSON object with minimal information; as explained above, one or more regions and the number of pixels of interest. For flexibility, one can choose to add additional parameters or remove (required) parameters. Therefore it is possible that some expositors can't be used with some heuristics; we strongly disrecommend this feature.
To keep things simple: a heuristic is some kind of memory which makes decision and tells Kerberos if the evaluation was true or false.
The heuristic is the last step in the four passway which will decide if the detection is valid or not. It will do this by using information from the previous steps (the expositor and the algorithm); e.g. number of changed pixels.
<a name="sequence"></a>
## Sequence
This is a trivial heuristic. The sequence heuristic returns true if the recognition was positive for x times in a row.
In most cases motion contains a sequence of events; for example someone who walks by or a car which is parking on the street. The sequence heuristic will measure this by returning true if the recognition was positive for x times in a row. By using this heuristic most of the false-positives (invalid detections) are removed.
<a name="counter"></a>
## Counter
Counting objects forms the basis for a range of high-tech solutions, including retail analytics, queue management, building management and security applications. By using this counter heuristic you can count incoming and outgoing objects (e.g. people).
![Counter heuristic](83_heuristics/2_counter-heuristic.png)

View File

@@ -0,0 +1,30 @@
# Streaming
The machinery has the ability to stream your capture device as a MJPG stream.
## Parameters
The parameters for the supported streaming protocols can be found in the *config/stream.xml* file, but you can also use the web to modify the parameters. Below you see a default configuration file; at the moment of writing only a MJPG stream is supported.
<streams>
<Mjpg>
<enabled type="bool">true</enabled>
<streamPort type="number">8889</streamPort>
<quality type="number">75</quality>
</Mjpg>
</streams>
### Enabled
A boolean which turns ON/OFF the stream. This is interesting when working with IP cameras, where you already have an RTSP/MJPG stream from the camera itself.
### Stream Port
The port on which the stream is available.
### Quality
The quality is a value between [0-100]. The lower the quality, the more the image will be compressed.

View File

@@ -0,0 +1,55 @@
# People Counting
Kerberos.io can be used as a people counter by selecting the [**Counter heuristic**](/machinery/heuristics/counter). The idea is that two lines are drawn: the incoming and the outgoing line. Those two lines are necessary to know if the object is incoming or outgoing.
![People counting](4_people_counting.png)
If one ore more objects crossed both lines, the number of the incoming and outgoing objects are written to a JSON object (for more information see the [**Counter heuristic**](/machinery/heuristics/counter)). By using the [**Webhook IO device**](/machinery/Outputs/webhook) it's possible to fetch the JSON object and visualize it in your browser.
![GUI for people counting](4_people_counting_gui.png)
In this tutorial we'll show you how to configure **Kerberos.io**, so that it can be **used as a People counter**, and build a real-time counter which shows the number of incoming and outgoing objects (see screenshot above).
## Let's get started
To get started, make sure you have properly [**installed Kerberos.io**](/installation/KiOS) on your device. After the installation go to the settings page and change the settings to following configuration:
* Algorithm: Background Subtraction,
* Heuristic: Counter and
* Io: Disk and Webhook.
### Specific the incoming and outgoing lines
When opening the counter heuristic, you'll see two lines (a green and red one) which you can move to the position you prefer. Important to note is that the green line is used for counting incoming objects and the red line for outgoing objects. E.g. if we want to count the people which are entering your home, you should arrange the lines as follows.
![Lines for people counting](4_people_counting_lines.png)
### Specify the webhook url
The **Webhook Io device** is used to send the number of incoming and outgoing objects to your own application; therefore we need to specify an endpoint to which the webhook will post the JSON object (e.g. your own API). We will demonstrate how this works with a traditional NodeJS application, which we will create in next paragraph. The application will run on our local machine, and listen on port 25000, therefore we need to change the url of the webhook to:
http://localhost:250000
### GUI
We will create a simple **nodejs** application using **socket.io** which will listen on port 250000 for **POST** events. When the application receives a **POST** event, it will dynamically increase the incoming and/or outgoing counters. To get started we will clone following repository:
git clone https://github.com/cedricve/kerberosio-people-counter
cd kerberosio-people-counter
After the repository is cloned succesfully we will download the necessary packages using **npm**.
npm install
Run the app with following command
node server.js
Following output will be generated:
info - socket.io started
Server running on port 25000
Open your browser and browse to **http://localhost:25000**
![Hostname for people counting](4_people_counting_hostname.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB