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

<doc>

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

   <body>

      <p>

      Dlib is a general purpose cross-platform C++ library designed using contract programming
      and modern C++ techniques.  

      It is open source software and licensed
      under the <a href="license.html">Boost Software License</a>.

      The <a href="intro.html">introduction</a> contains everything you need to know to get
      started using the library.  However, if you have any questions, comments, or complaints feel free to 
      <a href='mailto:davis@dlib.net'>email me</a><web> or post in the 
      sourceforge <a href='http://sourceforge.net/forum/?group_id=130373'>Forums</a></web>.
      
      
      </p>

      <chm>
         <p>
            For updates to this project see <a href="http://dlib.net">dlib.net</a>.
         </p>
      </chm>

      <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>Portable Code</b>
               <ul>
                  <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>
                  <li>Big/little endian agnostic</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>Good unit test coverage.  The ratio of unit test lines of code to library lines of
                     code is about 1 to 5.</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>
               </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#thread_specific_data">Thread specific data</a></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 <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>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>Machine Learning Algorithms</b>
               <ul>
                  <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>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>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>
                  and <a href="imaging.html#hog_image">HOG</a> feature extraction algorithms.</li>
                  <li>Tools for <a href="imaging.html#object_detector">detecting objects</a> in images.</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>
               </ul>
            </li>
         </ul>

      </p>

   
   </body>

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

</doc>
