• Stars
    star
    186
  • Rank 200,056 (Top 5 %)
  • Language
    C++
  • License
    Other
  • Created over 9 years ago
  • Updated 15 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Pulls Together Computer Vision Algorithms into Highly-Modular Run-Time Configurable Systems

KWIVER

master release version docker

Kitware Image and Video Exploitation and Retrieval

The KWIVER toolkit is a collection of software tools designed to tackle challenging image and video analysis problems and other related challenges. Recently started by Kitware’s Computer Vision and Scientific Visualization teams, KWIVER is an ongoing effort to transition technology developed over multiple years to the open source domain to further research, collaboration, and product development. KWIVER is a collection of C++ libraries with C and Python bindings and uses an permissive BSD License.

One of the primary design goals of KWIVER is to make it easier to pull together algorithms from a wide variety of third-party, open source image and video processing projects and integrate them into highly modular, run-time configurable systems.

For more information on how KWIVER achieves this goal, and how to use KWIVER visit our documentation site.

Directory Structure and Provided Functionality

Below is a summary of the key directories in KWIVER and a brief summary of the content they contain.

CMake CMake helper scripts
arrows The algorithm plugin modules
doc Documentation, manuals, release notes
examples Examples for running KWIVER (currently out of date)
extras Extra utilities (e.g. instrumentation)
sprokit Stream processing toolkit
tests Testing related support code
vital Core libraries source and headers

KWIVER Docker Image

Kitware maintains a Docker image with KWIVER prebuilt. The Dockerfile used to build the image can be found here.

Pull the image from Dockerhub:

"docker pull kitware/kwiver:latest" (latest master)

"docker pull kitware/kwiver:release" (latest release)

"docker pull kitware/kwiver:1.6.0" (static release)

(https://hub.docker.com/r/kitware/kwiver)

or build the KWIVER image using the dockerfile:

"docker build -t kwiver:tagname ."

Building KWIVER

Fletch

KWIVER, especially Arrows, has a number of dependencies on 3rd party open source libraries. Most of these dependencies are optional but useful in practice, and the number of dependencies is expected to grow as we expand Arrows.

Vital has minimal required dependencies (only Eigen). Sprokit additionally relies on Boost. C++ tests additionally rely on Google Test. Arrows and Sprokit processes are structured so that the code that depends on an external package is in a directory with the major dependency name (e.g. vxl, ocv). The dependencies can be turned ON or OFF through CMake variables.

To make it easier to build KWIVER, especially on systems like Microsoft Windows that do not have package manager, Fletch was developed to gather, configure and build dependent packages for use with KWIVER. Fletch is a CMake_ based "super-build" that takes care of most of the build details for you.

For building Fletch, refer to the README file in that repository.

Running CMake

You may run CMake directly from a shell or cmd window. On unix systems, the ccmake tool allows for interactive selection of CMake options. Available for all platforms, the CMake GUI can set the source and build directories, options, "Configure" and "Generate" the build files all with the click of a few buttons.

We recommend building KWIVER out of the source directory to prevent mixing source files with compiled products. Create a build directory in parallel with the KWIVER source directory for each desired configuration. For example:

\kwiver\src

contains the code from the git repository

\kwiver\build\release

contains the built files for the release configuration

\kwiver\build\debug

contains the built files for the debug configuration

The following are the most important CMake configuration options for KWIVER:

CMAKE_BUILD_TYPE The compiler mode, usually Debug or Release
CMAKE_INSTALL_PREFIX The path to where you want the kwiver build products to install
KWIVER_ENABLE_ARROWS Enable algorithm implementation plugins
KWIVER_ENABLE_C_BINDINGS Whether to build the Vital C bindings
KWIVER_ENABLE_DOCS Turn on building the Doxygen documentation
KWIVER_ENABLE_LOG4CPLUS Enable log4cplus logger back end
KWIVER_ENABLE_PYTHON Enable the Vital Python bindings (requires KWIVER_ENABLE_C_BINDINGS)
KWIVER_ENABLE_SPROKIT Enable the Stream Processing Toolkit
KWIVER_ENABLE_TESTS Build the unit tests (requires Google Test)
KWIVER_ENABLE_TOOLS Build the command line tools (e.g. plugin_explorer)
fletch_DIR Install directory of a Fletch build.

There are many more options. Specifically, there are numerous options for third-party projects prefixed with KWIVER_ENABLE_ that enable building the Arrows plugins that depend on those projects. When building with the support of Fletch (set fletch_DIR) the enable options for packages built by Fletch should be turned on by default. The fletch_DIR is the fletch build directory root, which contains the fletchConfig.cmake file.

The following sections will walk you through the basic options for a minimal KWIVER build.

Basic CMake generation via command line

Note, This assumes your fletch was built with python support (Turn OFF if not).

You will also need to replace the fletch path with your own:

$ cmake </path/to/kwiver/source> -DCMAKE_BUILD_TYPE=Release \
        -Dfletch_DIR:PATH=<path/to/fletch/build/dir> \
        -DKWIVER_ENABLE_ARROWS:BOOL=ON -DKWIVER_ENABLE_C_BINDINGS:BOOL=ON \
        -DKWIVER_ENABLE_EXTRAS:BOOL=ON -DKWIVER_ENABLE_LOG4CPLUS:BOOL=ON \
        -DKWIVER_ENABLE_PROCESSES:BOOL=ON -DKWIVER_ENABLE_PYTHON:BOOL=ON \
        -DKWIVER_ENABLE_SPROKIT:BOOL=ON -DKWIVER_ENABLE_TOOLS:BOOL=ON \
        -DKWIVER_ENABLE_EXAMPLES:BOOL=ON -DKWIVER_USE_BUILD_TREE:BOOL=ON

Basic CMake generation using ccmake

When first configuring a KWIVER build with ccmake it is preferable to set the build configuration and fletch_DIR on the command line like this:

$ ccmake /path/to/kwiver/source -DCMAKE_BUILD_TYPE=Release -Dfletch_DIR=/path/to/fletch/install

Other CMake options can also be passed on the command line in this way if desired. Follow the recommended options setup using the CMake GUI.

Basic CMake generation using the CMake GUI

When running the cmake gui, we recommend selecting the 'Grouped' and 'Advanced' options to better organize the options available. Note, after clicking the configuration button, new options will be highlighted in the red sections.

  1. Once the source code and build directories are set, press the 'Configuration' button and select your compiler
    1. Configuration will fail, but now we can set option values
  2. Set the fletch_DIR, the CMAKE_BUILD_TYPE, and these KWIVER options, and press the 'Configuration' button
    1. Note, if compiling with MSVC, you will not have a CMAKE_BUILD_TYPE option

KWIVER CMake Configuration Step 2

  1. Select these new options, and click 'Generate'
    1. This assumes your fletch was built with python support. If not, do not check this option

KWIVER CMake Configuration Step 3

Compiling

Once your CMake generation has completed and created the build files, compile in the standard way for your build environment. On Linux this is typically running make.

There is also a build target, INSTALL. This target will build all code, then create an install directory inside the build directory. This install folder will be populated with all binaries, libraries, headers, and other files you will need to develop your application with KWIVER. MSVC users, note that this install directory is for a single build configuration; there will not be configuration named directories in this directory structure (i.e. no /bin/release, only /bin).

Note

If you are on Windows and enable tests (KWIVER_ENABLE_TESTS=ON), and are building shared libraries (BUILD_SHARED_LIBS=ON), you will need to add the path to gtest.dll to the PATH in your environment in order to build and run the tests.

The easiest way to achieve this is to use the setup_KWIVER.bat script (described in the next session), and to run builds and/or launch Visual Studio from a command prompt which has been so configured.

Running KWIVER

Once you've built KWIVER, you'll want to test that it's working on your system. Change your terminal/command prompt to the KWIVER CMake build directory. From a command prompt execute the following command:

# via a bash shell
$ cd <path/to/kwiver/build>
$ source setup_KWIVER.sh
#
# via a windows cmd prompt
> cd <path/to/kwiver/build>
> setup_KWIVER.bat

This will set up your PATH, PYTHONPATH and other environment variables to allow KWIVER to work conveniently within in the shell/cmd window.

You can run this simple pipeline to ensure your system is configured properly:

# via a bash shell
$ cd bin
$ kwiver runner ../examples/pipelines/number_flow.pipe
#
# on windows, you will need to also be in the configuration folder
> cd bin\release
> kwiver runner ..\..\examples\pipelines\number_flow.pipe

This will generate a 'numbers.txt' file in the </path/to/kwiver/build>/examples/pipelines/output directory.

More examples can be found in our tutorials.

KWIVER Users

Here are some applications using KWIVER that serve as an example of how to leverage KWIVER for a specific application:

MAP-Tk

A collection of tools for structure-from-motion and dense 3D reconstruction from imagery with an emphasis on aerial video. The primary component is a GUI application named TeleSculptor.

VIAME

A computer vision library designed to integrate several image and video processing algorithms together in a common distributed processing framework, majorly targeting marine species analytics.

Testing

Continuous integration testing is provided by CDash. Our KWIVER dashboard hosts nightly build and test results across multiple platforms including Windows, Mac, and Linux.

Anyone can contribute a build to this dashboard using the dashboard script provided. Follow the instructions in the comments.

Contributing

For details on how to contribute to KWIVER, including code style and branch naming conventions, please read CONTRIBUTING.rst.

Getting Help

Please join the kwiver-users mailing list to discuss KWIVER or to ask for help with using KWIVER. For less frequent announcements about KWIVER and projects built on KWIVER, please join the kwiver-announce mailing list.

Acknowledgements

The authors would like to thank AFRL/Sensors Directorate for their support of this work via SBIR Contract FA8650-14-C-1820. The portions of this work funded by the above contract are approved for public release via case number 88ABW-2017-2725.

The authors would like to thank IARPA for their support of this work via the DIVA program.

The authors would like to thank NOAA for their support of this work via the NOAA Fisheries Strategic Initiative on Automated Image Analysis.

More Repositories

1

CMake

Mirror of CMake upstream repository
C
5,967
star
2

VTK

Mirror of Visualization Toolkit repository
C++
2,250
star
3

vtk-js

Visualization Toolkit for the Web
JavaScript
1,151
star
4

ParaView

VTK-based Data Analysis and Visualization Application
C++
1,051
star
5

TeleSculptor

TeleSculptor: Aerial Photogrammetry Application powered by KWIVER
C++
584
star
6

VeloView

VeloView performs real-time visualization and easy processing of live captured 3D LiDAR data from Velodyne sensors (Alpha Primeβ„’, Puckβ„’, Ultra Puckβ„’, Puck Hi-Resβ„’, Alpha Puckβ„’, Puck LITEβ„’, HDL-32, HDL-64E). Runs on Windows, Linux and MacOS. This repository is a mirror of https://gitlab.kitware.com/LidarView/VeloView-Velodyne.
C++
304
star
7

pyLiDAR-SLAM

Python
284
star
8

trame

Trame lets you weave various components and technologies into a Web Application solely written in Python.
Python
275
star
9

LidarView

LidarView performs real-time reception, recording, visualization and processing of 3D LiDAR data. This repository is a mirror of https://gitlab.kitware.com/LidarView/lidarview.
C++
248
star
10

glance

Kitware Glance is an open-source web application developed at Kitware for visualizing volumetric images, molecular structures, geometric objects, and point clouds. It is part of the ParaView platform and can serve as a foundation for building custom web-based visualization applications involving ITK.js and VTK.js.
JavaScript
244
star
11

CDash

An open source, web-based software testing server
PHP
206
star
12

itk-vtk-viewer

2D / 3D web image, mesh, and point set viewer using itk-wasm and vtk.js
JavaScript
197
star
13

vtk-examples

This is the gh-pages branch of the VTK Examples Web Site and is set up to host web pages. ⚠️ DO NOT SUBMIT MERGE REQUESTS HERE. ⚠️ Merge requests must be submitted here: https://gitlab.kitware.com/vtk/vtk-examples
HTML
197
star
14

tangelo

A simple, quick, powerful web framework
JavaScript
185
star
15

paraviewweb

Web framework for building interactive visualization relying on VTK or ParaView to produce visualization data
JavaScript
157
star
16

VolView

Kitware VolView: an all-in-one radiological viewer!
TypeScript
154
star
17

Danesfield

Kitware's system for 3D building reconstruction for the IARPA CORE3D program
Python
148
star
18

candela

Visualization components for the web
JavaScript
116
star
19

visualizer

The ParaViewWeb Visualizer application which can be used standalone or as a component within another web context.
JavaScript
106
star
20

ipyvtklink

πŸ”— minimalist ipywidget to interface with any Python vtkRenderWindow
Python
86
star
21

dive

Media annotation and analysis tools for web and desktop. Get started at https://viame.kitware.com
Vue
76
star
22

wslink

Python/JavaScript library for communicating over WebSocket
Python
75
star
23

SMQTK

Python toolkit for pluggable algorithms and data structures for multimedia-based machine learning.
Terra
74
star
24

fletch

Computer Vision Software Development Environment
C++
59
star
25

react-vtk-js

Declarative library exposing vtk.js visualization pipeline as React components
TypeScript
57
star
26

KWStyle

Kitware Style Checker
C++
52
star
27

SlicerSALT

An open-source, free comprehensive software that will allow biomedical scientists to precisely locate shape changes in their imaging studies. This software called Slicer Shape AnaLysis Toolbox (SlicerSALT), will enhance the intuitiveness and ease of use for such studies, as well as allow researchers to find shape changes with higher statistical power. Altogether this constitutes a crucial resource for the imaging field that will enable many and important new findings in biomedical imaging studies.
Python
51
star
28

HPCCloud

A Cloud/Web-Based Simulation Environment
JavaScript
49
star
29

COAT

Official Code for CVPR 2022 paper Cascade Transformers for End-to-End Person Search
Python
47
star
30

SMTK

Simulation Modeling Tool Kit
C++
44
star
31

minerva

Minerva: client/server/services for analysis and visualization
Python
36
star
32

vue-vtk-js

Vue.js based components for vtk.js
JavaScript
32
star
33

arctic-viewer

Standalone application useful to load and explore cool data products.
JavaScript
31
star
34

Danesfield-App

Web application for the Danesfield System
Python
30
star
35

MetaIO

MetaImage is the text-based tagged file format for medical images that resulted. We have now extended that file format to support a variety of objects that occur in medicine such a tubes (for vessels, needles, etc.), blobs (for arbitrary shaped objects), cubes, spheres, etc. The complete library is known at MetaIO.
C
30
star
36

ParaViewTangoRecorder

An app for the Project Tango development kit to enable recording data for ParaView
Java
28
star
37

cumulus

A REST API for creating and using cloud clusters
Python
27
star
38

MEVID

Official Code for WACV 2023 paper MEVID: Multi-view Extended Videos with Identities for Video Person Re-Identification
Python
26
star
39

paraview-lite

Lite Client to a ParaView server which rely on Web technologies
JavaScript
26
star
40

VTK-m

Mirror of https://gitlab.kitware.com/vtk/vtk-m
C++
25
star
41

DaxToolkit

Data Analysis at Extreme
C++
24
star
42

qtextensions

An open source collection of utility classes and tools for Qt.
C++
24
star
43

web-project-templates

This repository try to gather various web project templates based on vue, vtk.js, paraviewweb...
JavaScript
23
star
44

iMSTK

Mirror of https://gitlab.kitware.com/iMSTK/iMSTK
C++
22
star
45

py-web-vue

Build a 3D Web application using VTK or ParaView while only writing a Python script. This project aims to streamline the existing ParaViewWeb infrastructure into something that is simpler to use by lowering the entry point complexity.
JavaScript
22
star
46

paraview-visualizer

Web frontend to ParaView based on trame
Python
21
star
47

flow

Full data science workflows on the web
Python
20
star
48

kwcoco

Python
20
star
49

seaborn_altair

Seaborn-compatible API for interactive Vega-Lite plots via Altair
Jupyter Notebook
20
star
50

ParaViewCatalystExampleCode-MOVED-

Example problems and snippets of code to demonstrate ParaView's Catalyst.
C++
20
star
51

light-viz

Scientific Visualization application for tailored post-processing relying on a ParaViewWeb backend.
JavaScript
20
star
52

DIVA

DIVA project repository
C++
18
star
53

sprokit

Stream Processing ToolKit
C++
18
star
54

vtk-js-datasets

Sample dataset for vtk.js examples
HTML
18
star
55

HPCCloud-deploy

VM Deploy for HPC-Cloud
Python
17
star
56

simput

Input generator for simulation which can be used as a standalone application or as a component within another web context.
JavaScript
17
star
57

VisCL

Computer Vision GPU acceleration with OpenCL
C++
16
star
58

cdash-docker

Shell
15
star
59

vivia

C++
14
star
60

PCLPlugin

A plugin to enable PCL functionality in ParaView
C++
14
star
61

LookingGlassVTKModule

C++
14
star
62

Visomics

Visomics is an open-source tool for the exploration of biological omics data with a focus on genomics, proteomics, transcriptomics, and metabolomics.
C++
12
star
63

trame-vtk

VTK/ParaView widgets for trame
Python
12
star
64

keypointgui

Provides a wxPython GUI to select image-point correspondences between images and fits a homography.
Python
12
star
65

kwant

KWANT is an open source C++ toolkit for computing scores and other metrics for object tracking systems.
C++
11
star
66

cinema

ParaView Cinema
JavaScript
11
star
67

paraviewweb-demo

Website and launcher for ParaViewWeb container demo
HTML
10
star
68

IGSTK

Image Guided Surgery Software Toolkit
C++
10
star
69

vtk-book

Markdown version of the Visualization Toolkit Book - An object Oriented Approach to 3D Graphics
Python
10
star
70

openview

C++
10
star
71

clique

Graph editor library/application
JavaScript
10
star
72

romanesco

Romanesco is now named Girder Worker
10
star
73

Remus

Remus is a remote mesh/model service framework.
C++
9
star
74

resonantgeo

Geospatial Vue components for Resonant
JavaScript
9
star
75

QtTesting

This is a mirror of the Gitlab repository. Please use Gitlab for PRs and Issues.
C++
9
star
76

peacock

Trame based UI for INL peacock project.
Python
9
star
77

covid-19-vis

A visualization of some COVID-19 data
JavaScript
9
star
78

divvy

Divide your data analysis across tools and visualization for a better data insight
Python
9
star
79

BoneTextureExtension

Slicer extensions for computing feature maps of N-Dimensional images using well-known texture analysis methods.
Python
9
star
80

torch_liberator

Python
8
star
81

vaui

Python
8
star
82

pan3d

Python
8
star
83

VERACore

Python
8
star
84

super3d

C++
8
star
85

burn-out

A computer vision toolkit designed to generate pixel-level object classifications, and additionally perform other types of video filtering. Originally created to remove on-screen displays from video.
C++
8
star
86

vibrant

C++
7
star
87

resonantlab

Choose your own visualization adventure
JavaScript
7
star
88

SlideAtlas-Server

JavaScript
7
star
89

UPennContrast

UPenn ?
Vue
7
star
90

resonanthpc

HPC-Enabled Pre- and Post-Processing with Jupyter
Python
6
star
91

vtkWasmBenchmarks

A collection of VTK web-based benchmark applications
C++
6
star
92

paraview-docs

ParaView documentation
JavaScript
6
star
93

paraviewweb-examples

JavaScript
6
star
94

trame-cookiecutter

Cookie Cutter template for creating trame application/module
Python
6
star
95

SMQTK-Core

Provide the basic underpinnings for developing interfaces that have built-in implementation discovery and factory construction from configuration.
Python
6
star
96

ipyvtk

6
star
97

generated-image-detection

Python
6
star
98

max-lens-radius

Source code to accompany the paper: "On the Maximum Radius of Polynomial Lens Distortion", WACV 2022
Jupyter Notebook
6
star
99

kw-web-suite

Set of tools to build and test Web applications gathered inside a single dependency
JavaScript
6
star
100

trame-client

Internal client side implementation of trame
Python
5
star