Sample applications

César Souza edited this page Sep 26, 2016 · 27 revisions
  1. Accord.NET Framework
  2. Getting started
  3. Published books
  4. How to use
  5. Sample applications

Help improve this wiki! Those pages can be edited by anyone that would like to contribute examples and documentation to the framework.

Have you found this software useful? Consider donating only U$10 so it can get even better! This software is completely free and will always stay free. Enjoy!

Donate

Clone this wiki locally

This page enlists the sample applications that come with the framework, including their download links and source code locations.

Table of Contents

Audio

Audio beat detector

A simple beat detector that listens to an input device and tries to detect peaks in the audio signal. It is a statistics-based beat detector in the sense it searches local energy peaks which may contain a beat.

Audio beat detector and metronome sample application
Audio beat detector and metronome.

Spectrum analyzer (Fourier)

The Fourier sample application shows how to capture sounds from a capture device (such as a microphone jack) using the Accord.NET Framework. The signal can be analyzed, processed and transformed using the framework's Fourier and Hilbert transform functions.

Fourier spectrum analyzer sample application
Fourier spectrum analyzer sample application

Wave Recorder

The Wave Recorder sample application demonstrates how to use the IAudioOutput and IAudioSource interfaces to capture and output sound. This is just a sample application, however. The intent of the framework is not to allow building of audio players, but to support the use of audio signals in machine learning and statistics experiments.

Wave recorder sample application
Wave recorder sample application.

Imaging

Classification (Bag-of-Words and SVM)

Shows how to perform image classification using the Bag-of-Visual-Words (BoW) model with SURF features and the Binary Split algorithm.

The BoW model is used to transform the many SURF feature points in a image in a single, fixed-length feature vector. The feature vector is then used to train Support Vector Machines (SVMs) using a variety of kernels.

Image classification sample application
Image classification sample application.

SURF features extracted from one of the images
SURF features extracted from one of the images.

Corners detection (FAST)

The FAST sample application demonstrates how to perform corners detection using the [http://accord-framework-net/docs/html/T_Accord_Imaging_FastCornersDetector.htm FAST corners detector]. As the name implies, the FAST detector is one of the fastest corners detectors available.

Corner point detection with the FAST algorithm
Corner point detection with the FAST algorithm.

The current code is based on the excellent Edward Rosten's implementation, and is dual licensed under the permissive BSD license.

Corners detection (Harris)

The Harris sample application demonstrates how to perform corners detection using the Harris algorithm.

Corner point detection with the Harris algorithm
Corner point detection with the Harris algorithm.

The current implementation supports both Harris and Nobel corner measures. Harris can be enabled by checking the checkbox next to the ''k'' parameter, which is only needed for Harris. The Nobel measure does not require setting any parameters.

A suitable choice for the threshold parameter when using Harris measure may range around 10,000 to 30,000, while when using Nobel it may range around 20 to 100. Best sigma values are usually higher than 0.3 and lesser than 5.0.

Corners detection (SURF)

The SURF sample application shows how to use the Speeded-Up Robust Features (SURF) Detector.

Interest point detection with the SURF algorithm
Interest point detection and description with the SURF algorithm.

The current implementation is based on the excellent OpenSURF library by Christopher Evans. The framework version, however, comes with further performance optimizations.

Image stitching (FREAK)

Demonstrates how to perform automatic image stitching by interest point matching. The actual stitching uses many parts of the framework, such as the FREAK feature detector, RANSAC, k-nearest neighbor matching, homography estimation and linear gradient image blending.

Image stitching using the FREAK feature detection and extraction algorithm.
Image stitching using the FREAK feature detection and extraction algorithm.

Image stitching (Harris)

Demonstrates how to perform automatic image stitching by interest point matching. The actual stitching uses many parts of the framework, such as the Harris corners detector, RANSAC, correlation window matching, homography estimation and linear gradient image blending.

Image stitching using Harris corners detection and correlation matching.
Image stitching using Harris corners detection and correlation matching.

For more details about the method, please be sure to read the accompanying article on how to perform automatic image stitching by interest point matching in C#.

Image stitching (SURF)

Demonstrates how to perform automatic image stitching by interest point matching. The actual stitching uses many parts of the framework, such as the SURF feature detector, RANSAC, k-nearest neighbor matching, homography estimation and linear gradient image blending.

Image stitching using SURF features and k-nearest neighbor matching.
Image stitching using SURF features and k-nearest neighbor matching.

Wavelets

The Wavelet sample application shows how to use the Wavelet transform filter to process images using wavelet transforms such as the Haar and CDF9/7.

Wavelets sample application.
Wavelets sample application.

Machine Learning

RANdom SAmple Consensus (RANSAC)

This sample application shows how to use the Random Sample Consensus (RANSAC) algorithm to fit linear regression models. The algorithm works with any model or function, producing a robust version of the model which is less sensitive to outliers. Here is a detailed explanation on how RANSAC works.

Robust linear estimation with RANSAC
Robust linear estimation with RANSAC.

Handwriting (Multi-class SVM)

This sample application shows how to teach Multi-class Support Vector Machines using Sequential Minimal Optimization to recognize handwritten digits from the UCI's Optdigits dataset.

Handwritten digits recognition with SVMs
Handwritten digits recognition with SVMs.

Classification (Kernel SVMs)

This sample application shows how to use Kernel Support Vector Machines (kSVMs) to solve a classification problem. The sample application comes with default sample data with can be loaded in the File -> Open menu.

Data classification with SVMs
Sample nonlinear problem.

After a sample data has been loaded, one can configure the settings and create a learning machine in the second tab. The picture below shows the decision surface for the Ying-Yang classification data generated by a heuristically initialized Gaussian-kernel SVM after it has been trained using Sequential Minimal Optimization (SMO). The framework offers an extensive list of kernel functions to choose from.

Data classification with SVMs
Decision surface generated by a Gaussian SVM.

Sparse support vectors.
Sparse support vectors.

SVM Classification results
SVM Classification results.

Classification (Naive Bayes)

This application shows how to use Naive Bayes for binary classification tasks.

Data classification with Naive Bayes
Data classification with Naive Bayes.

Classification (Decision Trees)

The Decision Trees sample application demonstrates how to create and use Decision Trees in C#. Decision trees are simple predictive models which map input attributes to a target value using simple conditional rules. Trees are commonly used in problems whose solutions must be readily understandable or explainable by humans, such as in computer-aided diagnostics and credit analysis.

Here is a detailed explanation on Decision Trees.

Data classification with decision trees
Data classification with Decision Trees.

Regression (Kernel SVM)

Function regression using (Kernel) Support Vector Machines.

Function regression with SVMs
Function regression with SVMs.

Clustering (K-Means and MeanShift)

This sample application shows how to use the K-Means clustering algorithm and the mean shift clustering algorithm to perform color clustering, reducing the number of distinct colors in a given image.

Color clustering with K-Means and MeanShift
Color clustering with K-Means and MeanShift.

Clustering (Gaussian Mixture Models)

This sample application shows how to use Gaussian Mixture Models to perform clustering and classification using soft-decision margins.

Clustering data with GMMs
Clustering data with GMMs.

Liblinear (Linear SVMs)

This sample application shows how to recreate the liblinear.exe command line application using the SVM algorithms provided by the framework. The framework can perform almost all liblinear algorithms in C#, except for one. Those include:

  0 — L2-regularized logistic regression (primal)
  1 – L2-regularized L2-loss support vector classification (dual) 
  2 — L2-regularized L2-loss support vector classification (primal) 
  3 — L2-regularized L1-loss support vector classification (dual) 
  4 –
  5 — L1-regularized L2-loss support vector classification
  6 — L1-regularized logistic regression 
  7 — L2-regularized logistic regression (dual) for regression 
  11 — L2-regularized L2-loss support vector regression (primal)
  12 — L2-regularized L2-loss support vector regression (dual)
  13 — L2-regularized L1-loss support vector regression (dual)

The framework can perform also load to and from files stored in LibSVM's sparse format. This means it should be straightforward to create or learn your models using one tool and run it on the other, if that would be necessary. For example, given that Accord.NET can run on mobile applications, it is possible to create and learn your models in a computing grid using liblinear and then integrate it in your Windows Phone application by loading it in Accord.NET.

Liblinear in C#
Pure C# liblinear application.

Feature Selection (L1-regularized Logistic SVMs)

Feature selection using sparse L1-regularized logistic support vector machines. This sample application shows how to create special linear SVMs with logistic functions to perform feature selection.

A problem that can be perfectly separated using only X.
A problem that can be perfectly separated using only X.

The machine accurately says that X is the most important feature.
The machine accurately says that X is the most important feature.

Mathematics

Quadratic Programming (QP) Solver

Quadratic Programming (QP) problem solving using the dual method of Goldfarb and Idnani. Translated from the original Fortran code by Berwin A. Turlach.

Quadratic Programming Solver
Quadratic Programming Solver.

Denavit-Hartenberg Kinematics

Demonstrates how to use Denavit-Hartenberg parameters and equations to model kinematic chains.

Denavit-Hartenberg forward kinematics sample application.
Denavit-Hartenberg forward kinematics sample application.

Neuro

Classification (Levenberg-Marquardt)

This sample application shows how to use the Levenberg-Marquardt learning algorithm together with Bayesian regularization to teach a feed-forward neural network.

Levenberg-Marquardt neural network learning
Data classification with Neural Networks using the Levenberg-Marquardt algorithm with and without Bayesian regularization.

Deep Belief Networks and Boltzmann Machines

This sample application shows how to learn Deep Neural Networks using Restricted Boltzmann Machines and the Contrastive-Divergence algorithm.

Deep neural network learning
Deep neural network learning.

Levenberg-Marquardt

An adaptation of the original AForge.NET Neuro sample applications to work with Levenberg-Marquardt instead of Backpropagation. Includes solutions for approximation, time-series prediction and the exclusive-or (XOR) problem using neural networks trained by Levenberg-Marquardt. For more information regarding the method of Levenberg-Marquardt, please take a look on Neural Network Learning by the Leveberg-Marquardt Algorithm with Bayesian Regularization.

Levenberg-Marquardt algorithm for Approximation, Time Series, and the XOR problems
Levenberg-Marquardt algorithm for Approximation, Time Series, and the XOR problems.

Resilient Backpropagation (RProp)

An adaptation of the original AForge.NET Neuro sample applications to work with Resilient Backpropagation instead of Backpropagation. Includes solutions for approximation, time-series prediction and the exclusive-or (XOR) problem using neural networks trained by Levenberg-Marquardt.

RProp algorithm for Approximation, Time Series, and the XOR problems
RProp algorithm for Approximation, Time Series, and the XOR problems.

Statistics

Handwriting recognition (KDA)

This sample application shows how to perform handwritten digit recognition using Kernel Discriminant Analysis and Linear Discriminant Analysis.

Recognition of handwritten digits with KDA

Handwritten digits with KDA sample application

Hidden Markov Models

Demonstrates how to use Hidden Markov Models (HMMs) and Accord.NET Markov Sequence Classifiers to recognize sequences of discrete observations.

Hidden Markov Model sample application

Hidden Markov Model sample application

Kernel Discriminant Analysis (KDA)

Sample application demonstrating how to use Kernel Discriminant Analysis (also known as KDA, or Non-linear (Multiple) Discriminant Analysis using Kernels) to perform non-linear transformation and classification. The sample datasets which can be used in the application are available under the Resources folder in the main directory of the application.

Kernel discriminant analysis

Kernel discriminant analysis

Kernel Principal Component Analysis (KPCA)

Sample application demonstrating how to use Kernel Principal Component Analysis (KPCA) to perform non-linear transformations and dimensionality reduction. The sample datasets which can be used in the application are available under the Resources folder in the main directory of the application.

Kernel principal component analysis

Kernel principal component analysis

Linear Discriminant Analysis (LDA)

Sample application demonstrating how to use Linear Discriminant Analysis (also known as LDA, or Fisher's (Multiple) Linear Discriminant Analysis) to perform linear transformations and classification. The sample datasets which can be used in the application are available under the Resources folder in the main directory of the application

Linear discriminant analysis

Linear discriminant analysis

Principal Component Analysis (PCA)

Sample application demonstrating how to use Principal Component Analysis (PCA) to perform linear transformations and dimensionality reduction. The sample datasets which can be used in the application are available under the Resources folder in the main directory of the application

Principal component analysis

Principal component analysis

Independent Component Analysis (ICA)

Sample application demonstrating how to use Independent Component Analysis (ICA) to perform blind source separation of audio signals. The audio is processed using the Accord.Audio modules of the framework.

Independent component analysis for blind source separation

Independent component analysis for blind source separation

Partial Least Squares (PLS)

Demonstrates how to use Partial Least Squares to fit a (multiple and multivariate) linear regression model from high-dimensionality data.

Partial Least Squares

Partial least squares analysis

Linear and Logistic Regression Analysis

Sample application for creating and fitting Logistic Regression models. Also fits a multiple linear regression model for comparison purposes, and performs chi-square tests and computes Wald's statistics for the logistic regression coefficients.

Linear and logistic regression

Multinomial Logistic Regression Analysis

Sample application demonstrating how to classify objects into different classes using Multinomial Logistic Regression Analsysis. Performs chi-square tests and computes Wald's statistics for the logistic regression coefficients.

Multinomial Logistic Regression Analysis

Eigenfaces (PCA)

Sample application demonstrating how to use Principal Component Analysis (PCA) to perform image classification. The application implements the Eigenfaces technique to distinguish between depth images of human hands in different shapes.

Eigenfaces

Principal component analysis

Receiver Operating Characteristic (ROC) Curves

Sample application demonstrating how to create and visualize Receiver-Operating Characteristic Curves from a given set of results from a test or a classification process.

ROC curve

Cox's Proportional Hazards

How to perform survival analysis using Cox's Proportional Hazards model for both regression and prediction of time-censured data.

Cox Proportional Hazards

Mouse Gesture Recognition

Learning and recognition of mouse gestures using hidden Markov model-based classifiers and Hidden Conditional Random Fields. Showcased in a series of CodeProject articles under the name Sequence Classifiers in C#.

Mouse gesture recognition with hidden Markov models

Mouse gesture recognition with hidden Markov models.

Vision

Face Detection (Haar object detector)

Face detection using the Face detection based in Haar-like rectangular features method often known as the Viola-Jones method

Haar cascade face detection

Haar cascade face detection.

Face Tracking (Camshift)

Face (or object) tracking using Viola-Jones for face detection and Camshift as the object tracker. Can be used in RGB and HSL color spaces (may require some tuning for HSL)

Face tracking with the Camshift algorithm

Face tracking with the Camshift algorithm.

Head-based Controller

Sample application demonstrating how to use the Accord.Vision.Controls.Controller component to provide joystick-like controls for a Windows Form application. Its component design makes adding support for head-based controlling as easy as dragging and dropping a component into a Form.

Controlling a computer interface using computer vision

Controlling a computer interface using computer vision.

Color glove segmentation and tracking

How to segment and track color objects using a simple and inexpensive HSL-based color tracker.

Color-based video tracking

Color-based video tracking.

Video

Screencast Capture Lite

Screencast Capture Lite is a tool for recording the desktop screen and saving it to a video file, preserving quality as much as possible. It is a real application, and also a demonstration of the use of the AForge.NET and Accord.NET Frameworks to build multimedia applications, capturing video and audio streams from different sources.

Screencast capture lite
Screencast Capture Lite.