Skip to content
Corne Versloot edited this page Apr 20, 2015 · 29 revisions

StormCV

StormCV enables the use of Storm for video processing by adding computer vision (CV) specific operations and data model. This page gives a brief introduction about the platform and describes how to get started. A number of other pages cover the platform in more detail:

  • Getting Started: describes the first small steps to get started with StormCV
  • Examples: contains a number of example StormCV topologies
  • StormCV's components: description of StormCV's data model and basic interfaces (Operation, Batcher, Fetcher)
  • Deploying: describes how StormCV topologies can be packaged and deployed on Storm clusters, for example on Amazon
  • Advanced: describes how you can make your own Operations, extend the model, implement groupings etc.
  • Javadoc: StormCV's java documentation
  • Maven: how to use Maven to get StormCV dependencies and package jar files which can be deployed
  • DRPC: option to build DRPC topologies (currently build on deprecated api's, not on Trident!)

Prerequisites

In order to work with StormCV you need three things:

  • java SDK 1.7 or higher

  • 'installed' storm 0.9.2 binaries which are needed to deploy Storm topologies on a cluster (the examples can be executed without these binaries)

  • Eclipse with Java perspective and Maven integration (M2E)

  • a statically build OpenCV 2.4.8 library for your development platform. StormCV is shipped with a number of OpenCV builds (see list below). You have to build the library yourself if its not yet supported (see this guide):

    • 32 and 64 bit Windows dll's (win32_opencv_java248.dll, win64_opencv_java248.dll)
    • 64 bit MacOS (mac64_opencv_java248.dylib)
    • 64 bit Ubuntu (linux64_opencv_java248.so, build on Ubuntu 12.04 LTS, also runs on 14.04 LTS)

Note: it is possible to run StormCV without OpenCV lib present if no OpenCV operations are used like scaling and grayscale (see example 1). However most interesting functions use OpenCV and hence need the library.

Introduction

StormCV is an extension of Apache Storm specifically designed to support the development of distributed computer-vision pipelines. Storm enables the development and deployment of fault tolerant processing pipelines called topologies which can process streams of data. The topologies are made up out of spouts (responsible for pushing data into the topology) and bolts (responsible for processing of data) which work on data packages called tuples. Developers can specify how many of each spout and bolt should be deployed on the cluster which makes the platform highly scalable. A simple topology such as [streamreader → face detector → database storer] can be deployed on 3 cores to handle only 1 stream or on 300 cores to support 100 streams. The StormCV platform has been successfully used on a 160 core cluster to detect faces, extract SIFT points and calculate color histograms for video frames.

StormCV enables the use of Storm for video processing by adding computer vision (CV) specific operations and data model. The model includes Frame and Feature objects and StormCV is shipped with common CV operations such as face detection, feature extraction (SIFT, SURF), color histograms and more. The platform uses OpenCV for most of its CV operations and it is relatively easy to use this library for other functions. Although designed to work on video streams the platform also supports the analysis of video files and images. In the end both video streams and files are simply sequences of images…

Figures below show topologies that can be created using StormCV. The one directly below simply reads a stream, detects faces which are drawn into an outgoing mpjeg stream.

The second topology reads video files and extracts SIFT and (dense) Optical Flow features which are stored in some database. Extraction of features is done in parallel by two different bolts.

Once you are ready to build and deploy topologies on a cluster it is advisable to use Maven which makes the packaging of the jar file easier. It is also a good idea to create a Storm cluster of your own so you get a better understanding this platform and its components. This can simply be a single node cluster on your own machine which you use to get the hang of things. The actual set-up of a single- or multi-node cluster is described here.

Getting started

The best way to get started is to read the getting started page (duh...) which describes how example1 can be executed. Once this is done you can continue with other examples or familiarise yourself with StormCV's basics.

#License Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Also see the OpenCV License. Please note that the OpenCV build also contains the non-free modules!

Clone this wiki locally