<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>

<doc>

   <!-- ************************************************************************* -->

   <body>

      <p>
      Dlib is a modern C++ toolkit containing machine learning algorithms and tools
      for creating complex software in C++ to solve real world problems.  It is used throughout industry and
      academia and its <a href="license.html">open source licensing</a> allows you to use
      it in any application, free of charge.
      </p>

      <p>
         To follow or participate in the development of dlib subscribe to <a href="https://github.com/davisking/dlib">dlib on github</a>.
         Also be sure to read the <a href="howto_contribute.html">how to contribute</a> page if you intend to 
         submit code to the project.
      </p>

      <br/>

      <p>
         <h2>Major Features</h2>
         <ul>
            <li><b>Documentation</b>
            <ul>
               <li>Unlike a lot of open source projects, this one provides complete and precise 
                  documentation for every class and function.   There are also debugging modes that check the 
                  documented preconditions for functions.  When this is enabled it will catch the vast majority of
                  bugs caused by calling functions incorrectly or using objects in an incorrect manner.  
               </li>
               <li>Lots of example programs are provided</li>
               <li><i>I consider the documentation to be the most important part of the library</i>.  So if you find anything 
                  that isn't documented, isn't clear, or has out of date documentation, tell me and I will fix it.
               </li>
            </ul>
            </li>

            <li><b>High Quality Portable Code</b>
               <ul>
                  <li>Good unit test coverage.  The ratio of unit test lines of code to library lines of
                     code is about 1 to 4.</li>
                  <li>The library is tested regularly on MS Windows, Linux, and Mac OS X systems.  However, it should 
                     work on any POSIX system and has been used on Solaris, HPUX, and the BSDs.</li>
                  <li>No other packages are required to use the library.  Only APIs that are
                     provided by an out of the box OS are needed. </li> 
                  <li>There is no installation or configure step needed before you can use the library.  See the
                     <a href="compile.html">How to compile</a> page for details.</li>
                  <li>All operating system specific code is isolated inside the OS abstraction layers which are 
                     kept as small as possible.   The rest of the library is either layered on top of the OS 
                     abstraction layers or is pure ISO standard C++.  </li>
               </ul>
            </li>
            <li><b>Machine Learning Algorithms</b>
               <ul>
                  <li><a href="ml.html#add_layer">Deep Learning</a></li>
                  <li>Conventional SMO based Support Vector Machines for <a href="ml.html#svm_nu_trainer">classification</a> 
                                                                    and  <a href="ml.html#svr_trainer">regression</a>  </li>
                  <li>Reduced-rank methods for large-scale <a href="ml.html#svm_c_ekm_trainer">classification</a>
                     and <a href="ml.html#krr_trainer">regression</a></li>
                  <li>Relevance vector machines for <a href="ml.html#rvm_trainer">classification</a> 
                      and <a href="ml.html#rvm_regression_trainer">regression</a> </li>
                  <li>General purpose <a href="ml.html#one_vs_one_trainer">multiclass classification</a> tools</li>
                  <li>A <a href="ml.html#svm_multiclass_linear_trainer">Multiclass SVM</a></li>
                  <li>A tool for solving the optimization problem associated with 
                     <a href="ml.html#structural_svm_problem">structural support vector machines</a>. </li> 
                  <li>Structural SVM tools for <a href="ml.html#structural_sequence_labeling_trainer">sequence labeling</a> </li>  
                  <li>Structural SVM tools for solving <a href="ml.html#structural_assignment_trainer">assignment problems</a> </li>  
                  <li>Structural SVM tools for <a href="ml.html#structural_object_detection_trainer">object detection</a> in images </li>  
                  <li>Structural SVM tools for <a href="ml.html#structural_graph_labeling_trainer">labeling nodes</a> in graphs </li>  
                  <li>A large-scale <a href="ml.html#svm_rank_trainer">SVM-Rank</a> implementation</li>
                  <li>An online <a href="ml.html#krls">kernel RLS regression</a> algorithm</li>
                  <li>An online <a href="ml.html#svm_pegasos">SVM classification</a> algorithm</li>
                  <li><a href="ml.html#vector_normalizer_frobmetric">Semidefinite Metric Learning</a></li>
                  <li>An online kernelized <a href="ml.html#kcentroid">centroid estimator</a>/novelty detector and
                     offline support vector <a href="ml.html#svm_one_class_trainer">one-class classification</a></li>
                  <li>Clustering algorithms: <a href="ml.html#find_clusters_using_kmeans">linear</a> 
                        or <a href="ml.html#kkmeans">kernel k-means</a>, 
                        <a href="ml.html#chinese_whispers">Chinese Whispers</a>, and 
                        <a href="ml.html#newman_cluster">Newman clustering</a>.  </li>
                  <li><a href="ml.html#rbf_network_trainer">Radial Basis Function Networks</a></li>
                  <li><a href="ml.html#mlp">Multi layer perceptrons</a> </li>  
               </ul>
            </li>

            <li><b>Numerical Algorithms</b>
               <ul>
                  <li>A fast <a href="linear_algebra.html#matrix">matrix</a> object implemented using the expression 
                     templates technique and capable of using BLAS and LAPACK libraries when available.</li>
                  <li>Numerous linear algebra and mathematical operations are defined for the matrix object such as the 
                     <a href="dlib/matrix/matrix_la_abstract.h.html#svd">singular value decomposition</a>, 
                     <a href="dlib/matrix/matrix_utilities_abstract.h.html#trans">transpose</a>, 
                     <a href="dlib/matrix/matrix_math_functions_abstract.h.html#sin">trig functions</a>, etc.</li>
                  <li>General purpose unconstrained non-linear optimization algorithms using the  
                      <a href="optimization.html#cg_search_strategy">conjugate gradient</a>, 
                      <a href="optimization.html#bfgs_search_strategy">BFGS</a>, and
                      <a href="optimization.html#lbfgs_search_strategy">L-BFGS</a>
                      techniques</li>
                  <li> <a href="optimization.html#solve_least_squares_lm">Levenberg-Marquardt</a> for solving non-linear
                      least squares problems </li>
                  <li>Box-constrained derivative-free optimization via the 
                      <a href="optimization.html#find_min_bobyqa">BOBYQA</a> algorithm</li> 
                  <li>An implementation of the <a href="optimization.html#oca">Optimized Cutting Plane Algorithm</a></li> 
                  <li><preserve_space><a href="optimization.html#solve_qp_using_smo">Several</a> 
                                      <a href="optimization.html#solve_qp2_using_smo">quadratic</a> 
                                      <a href="optimization.html#solve_qp3_using_smo">program</a>
                                      <a href="optimization.html#solve_qp4_using_smo">solvers</a></preserve_space> </li> 
                  <li>Combinatorial optimization tools for solving 
                     <a href="optimization.html#max_cost_assignment">optimal assignment</a> and
                     <a href="optimization.html#min_cut">min cut/max flow</a> problems as well as
                     the <a href="optimization.html#find_max_parse_cky">CKY algorithm</a> for finding the most probable parse tree</li>
                  <li>A <a href="algorithms.html#bigint">big integer</a> object</li>
                  <li>A <a href="algorithms.html#rand">random number</a> object</li>
               </ul>
            </li>

            <li><b>Graphical Model Inference Algorithms</b>
               <ul>
                  <li><a href="bayes.html#bayesian_network_join_tree">Join tree</a> algorithm for exact inference in 
                  a Bayesian network.</li> 
                  <li><a href="bayes.html#bayesian_network_gibbs_sampler">Gibbs sampler</a> markov chain monte 
                  carlo algorithm for approximate inference in a Bayesian network.</li>
                  <li>Routines for performing MAP inference in 
                     <a href="optimization.html#find_max_factor_graph_viterbi">chain-structured</a>,
                     <a href="optimization.html#find_max_factor_graph_potts">Potts</a>, or 
                     <a href="optimization.html#find_max_factor_graph_nmplp">general</a> factor graphs.</li>
               </ul>
            </li>

            <li><b>Image Processing</b>
               <ul>
                  <li>Routines for <a href="imaging.html#load_image">reading</a> and 
                  <a href="imaging.html#save_bmp">writing</a> common image formats.  </li>
                  <li>Automatic color space conversion between various pixel types</li>  
                  <li>Common image operations such as edge finding and morphological operations</li>
                  <li>Implementations of the <a href="imaging.html#get_surf_points">SURF</a>,
                   <a href="imaging.html#hog_image">HOG</a>, and <a href="imaging.html#extract_fhog_features">FHOG</a> 
                   feature extraction algorithms.</li>
                  <li>Tools for <a href="imaging.html#object_detector">detecting objects</a> in images including
                  <a href="imaging.html#get_frontal_face_detector">frontal face detection</a> and
                   <a href="imaging.html#shape_predictor">object pose estimation</a>.</li>
               </ul>
            </li>

            <li><b>Threading</b>
               <ul>
                  <li>The library provides a portable and simple <a href="api.html#threads">threading API</a></li>
                  <li>A message passing <a href="other.html#pipe">pipe</a> for inter-thread and <a href="network.html#bridge">inter-process</a> communication</li>
                  <li>A <a href="other.html#timer">timer</a> object capable of generating events that are regularly spaced in time</li>
                  <li><a href="api.html#threaded_object">Threaded objects</a></li>
                  <li><a href="api.html#thread_function">Threaded functions</a></li>
                  <li><a href="api.html#parallel_for">Parallel for loops</a></li>
                  <li>A <a href="api.html#thread_pool">thread_pool</a> with support for futures</li>
               </ul>
            </li>

            <li><b>Networking</b>
               <ul>
                  <li>The library provides a portable and simple <a href="api.html#sockets">TCP sockets API</a></li>
                  <li>An object to help you make TCP based <a href="network.html#server">servers</a></li>
                  <li><a href="network.html#iosockstream">iostream</a> and <a href="network.html#sockstreambuf">streambuf</a> 
                  objects that enables TCP sockets to interoperate with the C++ iostreams library </li>
                  <li>A simple <a href="network.html#server_http">HTTP server</a> object you can use to embed a 
                  web server into your applications</li> 
                  <li>A message passing <a href="other.html#pipe">pipe</a> for inter-thread and <a href="network.html#bridge">inter-process</a> communication</li>
                  <li>A tool used to implement algorithms using the 
                     <a href="network.html#bsp_context">Bulk Synchronous Parallel (BSP)</a> computing model</li>
               </ul>
            </li>

            <li><b>Graphical User Interfaces</b>
               <ul>
                  <li>The library provides a portable and simple core <a href="api.html#gui_core">GUI API</a></li>
                  <li>Implemented on top of the core GUI API are numerous <a href="api.html#gui_widgets">widgets</a></li>
                  <li>Unlike many other GUI toolkits, the entire dlib GUI toolkit is threadsafe</li>
               </ul>
            </li>


            <li><b>Data Compression and Integrity Algorithms</b>
               <ul>
                  <li>A <a href="algorithms.html#crc32">CRC 32</a> object</li>  
                  <li><a href="algorithms.html#md5">MD5</a> functions</li>
                  <li>Various abstracted objects representing parts of <a href="compression.html">data compression</a> 
                  algorithms.  Many forms of the PPM algorithm are included.  </li>
               </ul>
            </li>

            <li><b>Testing</b>
               <ul>
                  <li>A thread safe <a href="other.html#logger">logger</a> object styled after the popular Java logger log4j</li>
                  <li>A modular <a href="other.html#dlib_testing_suite">unit testing framework</a></li>
                  <li>Various <a href="metaprogramming.html">assert</a> macros useful for testing preconditions</li>
               </ul>
            </li>

            <li><b>General Utilities</b>
               <ul>
                  <li>A type-safe <a href="other.html#byte_orderer">object</a> to convert between big and little endian byte orderings</li>
                  <li>A <a href="parsing.html#cmd_line_parser">command line parser</a> with the ability to 
                  parse and validate command lines with various types of arguments and options</li>
                  <li>An <a href="parsing.html#xml_parser">XML parser</a></li>
                  <li>An object that can perform <a href="parsing.html#base64">base64</a> conversions</li>
                  <li>Many <a href="containers.html">container classes</a></li>
                  <li><a href="other.html#serialize">Serialization support</a></li>
                  <li>Many <a href="other.html#memory_manager">memory manager</a> objects that implement 
                  different memory pooling strategies</li>
                  <li>A tool that lets you easily <a href="other.html#MATLAB">call C++ from MATLAB</a></li>
               </ul>
            </li>
         </ul>

      </p>

   
   </body>

   <!-- ************************************************************************* -->

</doc>
