<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html xmlns:gcse="googleCustomSearch"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="shortcut icon" href="dlib-icon.ico"><meta name="verify-v1" content="02MiiaFNVzS5/u0eQhsy3/knioFHsia1X3DXRpHkE6I="><meta name="google-site-verification" content="DGSSJMKDomaDaDTIRJ8jDkv0YMx9Cz7OESbXHjjr6Jw"><title>dlib C++ Library</title><script type="text/javascript" src="dlib.js"></script><link rel="stylesheet" type="text/css" href="dlib.css"></head><body><a name="top"></a><div id="page_header"><a href="http://dlib.net"><img src="dlib-logo.png"></a></div><div id="top_content"><div id="main_menu" class="menu"><div class="menu_top"><b>The Library</b><ul class="tree"><li><a href="algorithms.html" class="menu">Algorithms</a></li><li><a href="api.html" class="menu">API Wrappers</a></li><li><a href="bayes.html" class="menu">Bayesian Nets</a></li><li><a href="compression.html" class="menu">Compression</a></li><li><a href="containers.html" class="menu">Containers</a></li><li><a href="graph_tools.html" class="menu">Graph Tools</a></li><li><a href="imaging.html" class="menu">Image Processing</a></li><li><a href="linear_algebra.html" class="menu">Linear Algebra</a></li><li><a href="ml.html" class="menu">Machine Learning</a></li><li><a href="metaprogramming.html" class="menu">Metaprogramming</a></li><li><a href="other.html" class="menu">Miscellaneous</a></li><li><a href="network.html" class="menu">Networking</a></li><li><a href="optimization.html" class="menu">Optimization</a></li><li><a href="parsing.html" class="menu">Parsing</a></li></ul><br><b>Help/Info</b><ul class="tree"><li><a href="http://blog.dlib.net" class="menu">Dlib Blog</a></li><li><a onclick="Toggle(this)" class="sub menu"><img src="plus.gif">Examples: C++</a><ul style="display:none;"><li><a href="3d_point_cloud_ex.cpp.html" class="menu">3D Point Cloud</a></li><li><a href="assignment_learning_ex.cpp.html" class="menu">Assignment Learning</a></li><li><a href="file_to_code_ex.cpp.html" class="menu">Base64 Encoder</a></li><li><a href="bayes_net_from_disk_ex.cpp.html" class="menu">Bayesian Network From Disk</a></li><li><a href="bayes_net_gui_ex.cpp.html" class="menu">Bayesian Network GUI</a></li><li><a href="bayes_net_ex.cpp.html" class="menu">Bayesian Network</a></li><li><a href="bridge_ex.cpp.html" class="menu">Bridge</a></li><li><a href="bsp_ex.cpp.html" class="menu">BSP</a></li><li><a href="svm_c_ex.cpp.html" class="menu">C-Support Vector Machine</a></li><li><a href="compress_stream_ex.cpp.html#_top" class="menu">Cmd Line Parser</a></li><li><a href="compress_stream_ex.cpp.html" class="menu">Compress Stream</a></li><li><a href="config_reader_ex.cpp.html" class="menu">Config File Reader</a></li><li><a href="custom_trainer_ex.cpp.html" class="menu">Custom Trainers</a></li><li><a href="dnn_face_recognition_ex.cpp.html" class="menu">Deep Face Recognition</a></li><li><a href="dnn_dcgan_train_ex.cpp.html" class="menu">Deep Learning DCGAN</a></li><li><a href="dnn_mmod_dog_hipsterizer.cpp.html" class="menu">Deep Learning Dog Hipsterizer</a></li><li><a href="dnn_mmod_face_detection_ex.cpp.html" class="menu">Deep Learning Face Detection</a></li><li><a href="dnn_imagenet_ex.cpp.html" class="menu">Deep Learning Imagenet Classifier</a></li><li><a href="dnn_imagenet_train_ex.cpp.html" class="menu">Deep Learning Imagenet Trainer </a></li><li><a href="dnn_inception_ex.cpp.html" class="menu">Deep Learning Inception</a></li><li><a href="dnn_instance_segmentation_train_ex.cpp.html" class="menu">Deep Learning Instance Segmentation Trainer</a></li><li><a href="dnn_instance_segmentation_ex.cpp.html" class="menu">Deep Learning Instance Segmentation</a></li><li><a href="dnn_introduction_ex.cpp.html" class="menu">Deep Learning Introduction Part 1</a></li><li><a href="dnn_introduction2_ex.cpp.html" class="menu">Deep Learning Introduction Part 2</a></li><li><a href="dnn_introduction3_ex.cpp.html" class="menu">Deep Learning Introduction Part 3</a></li><li><a href="dnn_mmod_ex.cpp.html" class="menu">Deep Learning Max-Margin Object Detection</a></li><li><a href="dnn_mmod_find_cars2_ex.cpp.html" class="menu">Deep Learning Multi-Class Vehicle Detection</a></li><li><a href="dnn_semantic_segmentation_train_ex.cpp.html" class="menu">Deep Learning Semantic Segmentation Trainer</a></li><li><a href="dnn_semantic_segmentation_ex.cpp.html" class="menu">Deep Learning Semantic Segmentation</a></li><li><a href="dnn_mmod_train_find_cars_ex.cpp.html" class="menu">Deep Learning Vehicle Detection Trainer</a></li><li><a href="dnn_mmod_find_cars_ex.cpp.html" class="menu">Deep Learning Vehicle Detection</a></li><li><a href="dnn_metric_learning_ex.cpp.html" class="menu">Deep Metric Learning Introduction</a></li><li><a href="dnn_metric_learning_on_images_ex.cpp.html" class="menu">Deep Metric Learning on Images</a></li><li><a href="dir_nav_ex.cpp.html" class="menu">Directory Navigation</a></li><li><a href="empirical_kernel_map_ex.cpp.html" class="menu">Empirical Kernel Map</a></li><li><a href="face_detection_ex.cpp.html" class="menu">Face Detection</a></li><li><a href="face_landmark_detection_ex.cpp.html" class="menu">Face Landmark Detection</a></li><li><a href="fhog_ex.cpp.html" class="menu">FHOG Feature Extraction</a></li><li><a href="fhog_object_detector_ex.cpp.html" class="menu">FHOG Object Detection</a></li><li><a href="graph_labeling_ex.cpp.html" class="menu">Graph Labeling</a></li><li><a href="gui_api_ex.cpp.html" class="menu">GUI</a></li><li><a href="hough_transform_ex.cpp.html" class="menu">Hough Transform</a></li><li><a href="server_http_ex.cpp.html" class="menu">HTTP Server</a></li><li><a href="image_ex.cpp.html" class="menu">Image</a></li><li><a href="iosockstream_ex.cpp.html" class="menu">IO Socket Streams</a></li><li><a href="server_iostream_ex.cpp.html" class="menu">IO Streams Server</a></li><li><a href="kcentroid_ex.cpp.html" class="menu">Kernel Centroid</a></li><li><a href="kkmeans_ex.cpp.html" class="menu">Kernel K-Means Clustering</a></li><li><a href="krr_regression_ex.cpp.html" class="menu">Kernel Ridge Regression</a></li><li><a href="krls_filter_ex.cpp.html" class="menu">Kernel RLS Filtering</a></li><li><a href="krls_ex.cpp.html" class="menu">Kernel RLS Regression</a></li><li><a href="krr_classification_ex.cpp.html" class="menu">KRR Classification</a></li><li><a href="learning_to_track_ex.cpp.html" class="menu">Learning to Track</a></li><li><a href="max_cost_assignment_ex.cpp.html" class="menu">Linear Assignment Problems</a></li><li><a href="linear_manifold_regularizer_ex.cpp.html" class="menu">Linear Manifold Regularizer</a></li><li><a href="mpc_ex.cpp.html" class="menu">Linear Model Predictive Control</a></li><li><a href="logger_ex_2.cpp.html" class="menu">Logger Advanced</a></li><li><a href="logger_custom_output_ex.cpp.html" class="menu">Logger Custom Output</a></li><li><a href="logger_ex.cpp.html" class="menu">Logger</a></li><li><a href="matrix_expressions_ex.cpp.html" class="menu">Matrix Expressions</a></li><li><a href="matrix_ex.cpp.html" class="menu">Matrix</a></li><li><a href="member_function_pointer_ex.cpp.html" class="menu">Member Function Pointer</a></li><li><a href="model_selection_ex.cpp.html" class="menu">Model Selection</a></li><li><a href="multiclass_classification_ex.cpp.html" class="menu">Multiclass Classification</a></li><li><a href="multithreaded_object_ex.cpp.html" class="menu">Multithreaded Object</a></li><li><a href="mlp_ex.cpp.html" class="menu">Neural Network</a></li><li><a href="least_squares_ex.cpp.html" class="menu">Non-Linear Least Squares</a></li><li><a href="svm_ex.cpp.html" class="menu">Nu-Support Vector Machine</a></li><li><a href="integrate_function_adapt_simp_ex.cpp.html" class="menu">Numerical Integration</a></li><li><a href="object_detector_advanced_ex.cpp.html" class="menu">Object Detector Advanced</a></li><li><a href="object_detector_ex.cpp.html" class="menu">Object Detector</a></li><li><a href="one_class_classifiers_ex.cpp.html" class="menu">One Class Classifiers</a></li><li><a href="svm_pegasos_ex.cpp.html" class="menu">Online SVM</a></li><li><a href="optimization_ex.cpp.html" class="menu">Optimization</a></li><li><a href="parallel_for_ex.cpp.html" class="menu">Parallel For Loops</a></li><li><a href="pipe_ex_2.cpp.html" class="menu">Pipe 2</a></li><li><a href="pipe_ex.cpp.html" class="menu">Pipe</a></li><li><a href="quantum_computing_ex.cpp.html" class="menu">Quantum Computing</a></li><li><a href="queue_ex.cpp.html" class="menu">Queue</a></li><li><a href="random_cropper_ex.cpp.html" class="menu">Random Cropper</a></li><li><a href="rank_features_ex.cpp.html" class="menu">Rank Features</a></li><li><a href="rvm_ex.cpp.html" class="menu">Relevance Vector Classification</a></li><li><a href="rvm_regression_ex.cpp.html" class="menu">Relevance Vector Regression</a></li><li><a href="running_stats_ex.cpp.html" class="menu">Running Stats</a></li><li><a href="sequence_labeler_ex.cpp.html" class="menu">Sequence Labeling</a></li><li><a href="sequence_segmenter_ex.cpp.html" class="menu">Sequence Segmentation</a></li><li><a href="sockets_ex.cpp.html" class="menu">Sockets</a></li><li><a href="sockstreambuf_ex.cpp.html" class="menu">Sockstreambuf</a></li><li><a href="svm_sparse_ex.cpp.html" class="menu">Sparse Vectors</a></li><li><a href="sqlite_ex.cpp.html" class="menu">SQLite</a></li><li><a href="std_allocator_ex.cpp.html" class="menu">Std C++ Allocator</a></li><li><a href="svm_struct_ex.cpp.html" class="menu">Structural Support Vector Machines</a></li><li><a href="svr_ex.cpp.html" class="menu">Support Vector Regression</a></li><li><a href="surf_ex.cpp.html" class="menu">SURF</a></li><li><a href="svm_rank_ex.cpp.html" class="menu">SVM-Rank</a></li><li><a href="thread_function_ex.cpp.html" class="menu">Thread Function</a></li><li><a href="thread_pool_ex.cpp.html" class="menu">Thread Pool</a></li><li><a href="threaded_object_ex.cpp.html" class="menu">Threaded Object</a></li><li><a href="threads_ex.cpp.html" class="menu">Threads</a></li><li><a href="timer_ex.cpp.html" class="menu">Timer</a></li><li><a href="train_object_detector.cpp.html" class="menu">Train Object Detector</a></li><li><a href="train_shape_predictor_ex.cpp.html" class="menu">Train Shape Predictor</a></li><li><a href="using_custom_kernels_ex.cpp.html" class="menu">Using Custom Kernels</a></li><li><a href="video_tracking_ex.cpp.html" class="menu">Video Object Tracking</a></li><li><a href="webcam_face_pose_ex.cpp.html" class="menu">Webcam Face Pose Estimation</a></li><li><a href="xml_parser_ex.cpp.html" class="menu">XML Parser</a></li></ul></li><li><a onclick="Toggle(this)" class="sub menu"><img src="plus.gif">Examples: Python</a><ul style="display:none;"><li><a href="svm_binary_classifier.py.html" class="menu">Binary Classification</a></li><li><a href="cnn_face_detector.py.html" class="menu">CNN Face Detector</a></li><li><a href="face_alignment.py.html" class="menu">Face Alignment</a></li><li><a href="face_clustering.py.html" class="menu">Face Clustering</a></li><li><a href="face_detector.py.html" class="menu">Face Detector</a></li><li><a href="face_jitter.py.html" class="menu">Face Jittering/Augmentation</a></li><li><a href="face_landmark_detection.py.html" class="menu">Face Landmark Detection</a></li><li><a href="face_recognition.py.html" class="menu">Face Recognition</a></li><li><a href="find_candidate_object_locations.py.html" class="menu">Find Candidate Object Locations</a></li><li><a href="global_optimization.py.html" class="menu">Global Optimization</a></li><li><a href="max_cost_assignment.py.html" class="menu">Linear Assignment Problems</a></li><li><a href="sequence_segmenter.py.html" class="menu">Sequence Segmenter</a></li><li><a href="svm_struct.py.html" class="menu">Structural Support Vector Machines</a></li><li><a href="svm_rank.py.html" class="menu">SVM-Rank</a></li><li><a href="train_object_detector.py.html" class="menu">Train Object Detector</a></li><li><a href="train_shape_predictor.py.html" class="menu">Train Shape Predictor</a></li><li><a href="correlation_tracker.py.html" class="menu">Video Object Tracking</a></li></ul></li><li><a href="faq.html" class="menu">FAQ</a></li><li><a href="index.html" class="menu">Home</a></li><li><a href="compile.html" class="menu">How to compile</a></li><li><a href="howto_contribute.html" class="menu">How to contribute</a></li><li><a href="term_index.html" class="menu">Index</a></li><li><a href="intro.html" class="menu">Introduction</a></li><li><a href="license.html" class="menu">License</a></li><li><a href="python/index.html" class="menu">Python API</a></li><li><a href="books.html" class="menu">Suggested Books</a></li><li><a href="http://sourceforge.net/p/dclib/wiki/Known_users/" class="menu">Who uses dlib?</a></li></ul><br><b>Current Release</b><ul class="tree"><li><a href="change_log.html" class="menu">Change Log</a></li><li><a href="release_notes.html" class="menu">Release Notes</a></li><li>Version: 19.22</li></ul><br></div><div class="menu_footer">
      Last Modified:<br>Mar 28, 2021</div></div><div id="main_text"><div id="main_text_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 in both industry and academia in a wide range of domains 
      including robotics, embedded devices, mobile phones, and large high
      performance computing environments. Dlib's <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><p>
         To quickly get started using dlib, <a href="compile.html">follow these instructions to build dlib</a>.
      </p><br><p><a name="Major%20Features"></a><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 as well as more powerful (but slower) <a href="ml.html#loss_mmod_">deep learning tools for object detection</a>. </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><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></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><li>High quality <a href="dnn_face_recognition_ex.cpp.html">face recognition</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></div></div></div><div id="bottom_content"></div></body></html>