KamCheck

Security cameras are often tampered with and no one notices for hours, days or months. Video streams can be degraded by streams going black, the image freezing or by the sun shining directly into the lens causing over-exposure.

KamCheck can help you find cameras which have been moved, obscured, or degraded in quality. KamCheck ignores effects of environmental changes to reduce false alarms. KamCheck works with outdoor and indoor cameras in any physical orientation and almost any field of view.

KamCheck will detect blur (focus tampering), camera movement (pointing tampering), masking (camera obscuration tampering), over or under exposure (either due to ambient conditions or tampering), frozen video feed and black images (but camera still connected). KamCheck can check cameras at any frequency with no manual effort.

Using KamCheck

To use KamCheck you need to supply a reference image and a short video clip (can be the current live stream or a recorded one). The reference image must represent a time when the camera was in normal operation and there should be a minimal amount of humans/vehicles in it. KamCheck will process and output a probability of camera tampering or degraded video stream quality between 0% (camera/stream is ok) and 100% (camera/stream is not ok).

You might need different reference images for different times of the day. Update your reference image when KamCheck returns a probability of 0 for this time of day.

You can launch KamCheck tasks at the frequency you want.

  • The reference image and video must be of the same resolution.
  • The video needs to be no more than 25 frames.

Request a KamCheck

Request a KamCheck on the supplied video and reference image.

POST /kamcheck
POST /kamcheck HTTP/1.1
Host: api.videoainet.com
Authorization: Basic XXXXX

Example request:

$ curl -L -H "Authorization: Basic XXXX" -F video=@parking.avi -F image=@parkingRef.png http://api.videoai.net/kamcheck

Example response:

Below are example responses...

  • when a KamCheck task is in progress:
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 326
Server: Werkzeug/0.10.4 Python/2.7.6
Date: Thu, 10 Sep 2015 14:46:04 GMT
{
  "status": "success",
  "task": {
        "analytic": "kamcheck",
        "complete": false,
        "job_id": "s2h7ZWRcUj44RxKpX2WrT8",
        "message": "In progress",
        "start_time": "Thu, 10 Sep 2015 14:46:04 GMT"
  }
}
  • when a KamCheck task is complete:
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 326
Server: Werkzeug/0.10.4 Python/2.7.6
Date: Thu, 10 Sep 2015 14:46:04 GMT
{
  "status": "success",
  "task": {
        "analytic": "kamcheck",
        "complete": true,
        "finish_time": "Thu, 10 Sep 2015 14:46:04 GMT",
        "job_id": "s2h7ZWRcUj44RxKpX2WrT8",
        "message": "Probability of tampering on 0%",
        "probability": 0,
        "start_time": "Thu, 10 Sep 2015 14:46:04 GMT",
        "success": true
  }
}

Check Job Status

Get the status of a particular KamCheck task.

GET /kamcheck/(string: job_id)
GET /kamcheck/(string:job_id) HTTP/1.1
Host: api.videoai.net
Authorization: Basic XXXXX

Example request:

$ curl -L -H "Authorization: Basic XXXX" http://api.videoai.net/kamcheck/s2h7ZWRcUj44RxKpX2WrT8

Example response:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 326
Server: Werkzeug/0.10.4 Python/2.7.6
Date: Thu, 10 Sep 2015 14:46:04 GMT
{
  "status": "success",
  "task": {
        "analytic": "kamcheck",
        "complete": true,
        "finish_time": "Thu, 10 Sep 2015 14:46:04 GMT",
        "job_id": "s2h7ZWRcUj44RxKpX2WrT8",
        "message": "Probability of tampering on 0%",
        "probability": 0,
        "start_time": "Thu, 10 Sep 2015 14:46:04 GMT",
        "success": true
  }
}

Job History

Get the status of the last 50 KamCheck tasks submitted.

GET /kamcheck
GET /kamcheck HTTP/1.1
Host: api.videoai.net
Authorization: Basic XXXXX

Example request:

$ curl -L -H "Authorization: Basic XXXX" http://api.videoai.net/kamcheck

Example response:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 3184
Server: Werkzeug/0.10.4 Python/2.7.6
Date: Thu, 10 Sep 2015 14:49:52 GMT
{
  "status": "success",
  "tasks": [
        {
          "analytic": "kamcheck",
          "complete": true,
          "finish_time": "Thu, 10 Sep 2015 14:46:04 GMT",
          "job_id": "s2h7ZWRcUj44RxKpX2WrT8",
          "message": "Probability of tampering on 0%",
          "probability": 0,
          "start_time": "Thu, 10 Sep 2015 14:46:04 GMT",
          "success": true
        },
        {
          "analytic": "kamcheck",
          "complete": true,
          "finish_time": "Thu, 10 Sep 2015 14:45:31 GMT",
          "job_id": "nJEHfUAP463YCZQ9oxrXkP",
          "message": "Probability of tampering on 0%",
          "probability": 0,
          "start_time": "Thu, 10 Sep 2015 14:45:31 GMT",
          "success": true
        }, ...
  ]
}