diff --git a/doc/help.rst b/doc/help.rst index ea045c0d6ab0f8d2e3cf454a829144170bca6acc..80f34faad881b41a8bea3c3f01f2acaf142d2c4d 100644 --- a/doc/help.rst +++ b/doc/help.rst @@ -32,7 +32,7 @@ There are several ways to get help if you are facing a problem. First, you should search for possible existing answers in: * https://stackoverflow.com/questions/tagged/python-bob -* https://www.idiap.ch/software/bob/discuss +* https://www.idiap.ch/software/bob/discuss (read only mailing list) * https://www.idiap.ch/software/bob/wiki or you may just want to search on the Internet for possible answers. @@ -48,11 +48,7 @@ How to contribute ================= Bob is open source and we welcome contributions. -If you find a bug, please let use know through our mailing list: -https://www.idiap.ch/software/bob/discuss. -If you want to contribute, please also get in touch with us through our mailing list -first. -We maintain a mirror of Bob packages on https://github.com/bioidiap/ which should allow -you to open pull requests on Bob packages. +We maintain a mirror of Bob packages on https://github.com/bioidiap/. +Feel free to open issues and/or pull requests on this mirror. .. include:: links.rst diff --git a/doc/index.rst b/doc/index.rst index ccc7dfc028f27ff5c25379b017785322b6fe493b..d24cdb6b97bf92ff40ea3aef216dfa15336b5e4c 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -10,11 +10,11 @@ Bob_ is a free signal-processing and machine learning toolbox originally develop the Biometrics Security and Privacy Group, the Biosignal Processing Group, and the Research and Development Engineers at `Idiap`_ Research Institute, Switzerland. -The toolbox is written in a mix of `Python`_ and `C++`_ and is designed to be both -efficient and reduce development time. It is composed of a reasonably large number of -:ref:`independent packages <bob.packages>` that implement tools for image, audio & -video processing, machine learning & pattern recognition, and a lot more task specific -packages. +The newest version of the toolbox is written in pure `Python`_ and is designed +to be both efficient and reduce development time. It is composed of seveal +:ref:`independent packages <bob.packages>` that implement tools for image, audio +& video processing, machine learning & pattern recognition, and a lot more task +specific packages. .. toctree:: @@ -23,6 +23,7 @@ packages. install help packages + tutorial Index of all packages @@ -37,6 +38,7 @@ Index of all packages bob.bio.spear <bob/bob.bio.spear/doc/index.rst> bob.bio.vein <bob/bob.bio.vein/doc/index.rst> bob.bio.video <bob/bob.bio.video/doc/index.rst> + bob.devtools <bob/bob.devtools/doc/index.rst> bob.extension <bob/bob.extension/doc/index.rst> bob.fusion.base <bob/bob.fusion.base/doc/index.rst> bob.io.base <bob/bob.io.base/doc/index.rst> diff --git a/doc/install.rst b/doc/install.rst index 8a20820b441692f964c9ea362588ee93d04b4534..7ae0d8f02bd8875e5259a2b16aeb5c47abce0ff7 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -8,32 +8,35 @@ By now you should know that Bob is made of several :ref:`bob.packages`. There is no single package that installs all Bob packages because that would just take too much space. Follow the instruction below to install any Bob package. -We offer pre-compiled binary installations of Bob using `conda`_ for Linux and -MacOS 64-bit operating systems. Follow the guide below to learn to install any -Bob package. Bob does not work on Windows. +We offer conda_ and pip_ installations of Bob for Linux and MacOS 64-bit +operating systems (Most packages support arm 64-bit on MacOS too). Follow the +guide below to learn to install any Bob package. *Bob does not work on +Windows*. -#. Install `mamba`_ (`mambaforge`_ is preferred) or `conda`_ (`miniforge`_ is +#. Install `mamba`_ (`mambaforge`_ is preferred) or conda_ (`miniforge`_ is preferred) and get familiar with it. The instructions below use ``mamba`` because it's faster than ``conda``, but you may replace it by ``conda``. -#. Make sure you have an up-to-date `conda`_ installation (conda 4.4 and above +#. Make sure you have an up-to-date conda_ installation (conda 4.4 and above is needed) with the **correct configuration** by running the commands below: .. code:: sh # install mamba if you don't yet have it installed. + # mamba must be installed in your base environment. $ conda install -n base -c conda-forge mamba $ mamba update -n base -c conda-forge conda mamba $ conda config --set show_channel_urls True #. Create an environment with the specific Bob packages that you need. For - example if you want to install ``bob.io.base`` and ``bob.bio.face``: + example if you want to install ``bob.io.base``, ``bob.bio.face``, and ``pytorch``: .. code:: sh $ mamba create --name bob_env1 --override-channels \ - -c https://www.idiap.ch/software/bob/conda -c conda-forge \ - python=3 bob.io.base bob.bio.face + -c https://www.idiap.ch/software/bob/conda \ + -c conda-forge \ + python=3 bob.io.base bob.bio.face pytorch #. Then activate the environment and configure its channels to make sure the channel list is correct in the future as well: @@ -51,6 +54,13 @@ Bob package. Bob does not work on Windows. $ conda activate bob_env1 $ mamba install bob.bio.video ... +#. Alternatively, you can use pip_ to install the packages but we don't test our pip packages: + + .. code:: sh + + $ conda activate bob_env1 + $ pip install bob.bio.face ... + For a comprehensive list of packages that are either part of |project| or use |project|, please visit :ref:`bob.packages`. diff --git a/doc/links.rst b/doc/links.rst index 4bd0cb30e20e48a72caa3382950be409af3ffdf1..343cffac49dbf5a0b4b874a1a735a7cc44be6253 100644 --- a/doc/links.rst +++ b/doc/links.rst @@ -9,15 +9,19 @@ .. _c++: https://isocpp.org/ .. _CMake: http://www.cmake.org .. _conda: https://conda.io/ +.. _dask: https://dask.org .. _Dvipng: http://savannah.nongnu.org/projects/dvipng/ .. _FFMpeg: http://ffmpeg.org .. _fftw: http://www.fftw.org/ .. _giflib: http://giflib.sourceforge.net/ .. _GPL-2.0: http://www.opensource.org/licenses/GPL-2.0 .. _GPL-3.0: http://www.opensource.org/licenses/GPL-3.0 +.. _h5py: http://www.h5py.org/ .. _HDF5 License: ftp://ftp.hdfgroup.org/HDF5/current/src/unpacked/COPYING .. _HDF5: http://www.hdfgroup.org/HDF5 .. _idiap: http://www.idiap.ch +.. _imageio-ffmpeg: https://github.com/imageio/imageio-ffmpeg +.. _imageio: https://imageio.readthedocs.io .. _install: https://www.idiap.ch/software/bob/install .. _IPython: http://ipython.scipy.org .. _Lapack: http://www.netlib.org/lapack @@ -41,6 +45,7 @@ .. _NumPy: http://www.numpy.org .. _packages: https://www.idiap.ch/software/bob/packages .. _Pillow: http://python-pillow.github.io/ +.. _pip: https://pip.pypa.io/en/stable/ .. _pkg-config: http://www.freedesktop.org/wiki/Software/pkg-config/ .. _Python-2.0: http://www.opensource.org/licenses/Python-2.0 .. _python: http://www.python.org diff --git a/doc/packages.rst b/doc/packages.rst index fc834614461211c2af7d2e48d78312b1afebe31e..ee0396de5ac9335ed930f7f5f60f5ca94bc81d7d 100644 --- a/doc/packages.rst +++ b/doc/packages.rst @@ -21,12 +21,6 @@ Machine Learning * :ref:`bob.learn.em` * :ref:`bob.pipelines` -Modules for Developers ----------------------- - -* :ref:`bob.devtools` -* :ref:`bob.extension` - Biometric Recognition --------------------- @@ -47,9 +41,8 @@ Presentation Attack Detection (anti-spoofing) * :ref:`bob.fusion.base` -Database Interfaces -------------------- +Modules for Developers +---------------------- -* :ref:`bob.pipelines` -* :ref:`bob.bio.base` -* :ref:`bob.pad.base` +* :ref:`bob.devtools` +* :ref:`bob.extension` diff --git a/doc/readme_index.rst b/doc/readme_index.rst index 7aa21c97fa3b40fb94b188812485162617c6ffd2..fe051273c259e235fe1f505b7cd831e950b24cd8 100644 --- a/doc/readme_index.rst +++ b/doc/readme_index.rst @@ -12,6 +12,7 @@ README of all Packages bob.bio.spear <bob/bob.bio.spear/README.rst> bob.bio.vein <bob/bob.bio.vein/README.rst> bob.bio.video <bob/bob.bio.video/README.rst> + bob.devtools <bob/bob.devtools/README.rst> bob.extension <bob/bob.extension/README.rst> bob.fusion.base <bob/bob.fusion.base/README.rst> bob.io.base <bob/bob.io.base/README.rst> diff --git a/doc/tutorial.rst b/doc/tutorial.rst new file mode 100644 index 0000000000000000000000000000000000000000..f89b0c7235d3b5f8998fbf566e1b427098edb94c --- /dev/null +++ b/doc/tutorial.rst @@ -0,0 +1,160 @@ +.. _bob.tutorial: + +******************************** + Getting started with |project| +******************************** + +The following tutorial constitutes a suitable starting point to get to +know how to use |project|'s packages and to learn its fundamental concepts. + + +Multi-dimensional Arrays +======================== + +The fundamental data structure of |project| is a multi-dimensional array. In +signal processing and machine learning, arrays are a suitable representation +for many different types of digital signals such as images, audio data and +extracted features. For multi-dimensional arrays, we rely on `NumPy`_. +For an introduction and tutorials about NumPy ndarrays, just visit the `NumPy +Reference`_ website. + + +Digital signals as multi-dimensional arrays +=========================================== + +For |project|, we have decided to represent digital signals directly as +:any:`numpy.ndarray` rather than having dedicated classes for each type of +signals. This implies that some convention has been defined. + +Vectors and matrices +-------------------- + +A vector is represented as a 1D NumPy array, whereas a matrix is +represented by a 2D array whose first dimension corresponds to the rows, +and second dimension to the columns. + +.. code:: python + + >>> import numpy + >>> A = numpy.array([[1, 2, 3], [4, 5, 6]], dtype='uint8') # A is a matrix 2x3 + >>> print(A) + [[1 2 3] + [4 5 6]] + >>> b = numpy.array([1, 2, 3], dtype='uint8') # b is a vector of length 3 + >>> print(b) + [1 2 3] + +Images +------ + +**Grayscale** images are represented as 2D arrays, the first dimension +being the height (number of rows) and the second dimension being the +width (number of columns). For instance: + +.. code:: python + + >>> img = numpy.ndarray((480,640), dtype='uint8') + +``img`` which is a 2D array can be seen as a gray-scale image of +dimension 640 (width) by 480 (height). In addition, ``img`` can be seen +as a matrix with 480 rows and 640 columns. This is the reason why we +have decided that for images, the first dimension is the height and the +second one the width, such that it matches the matrix convention as +well. + +**Color** images are represented as 3D arrays, the first dimension being +the number of color planes, the second dimension the height and the +third the width. As an image is an array, this is the responsibility of +the user to know in which color space the content is stored. +:any:`bob.io.image` provides functions to convert Bob format images into +Matplotlib_ and other formats and back: + +.. code:: python + + >>> import bob.io.image + >>> colored_bob_format = numpy.ndarray((3,480,640), dtype='uint8') + >>> colored_matplotlib_format = bob.io.image.to_matplotlib(colored_bob_format) + >>> print(colored_matplotlib_format.shape) + [480 640 3] + >>> colored_bob_format = bob.io.image.to_bob(colored_matplotlib_format) + >>> print(colored_bob_format.shape) + [3 480 640] + >>> pillow_img = bob.io.image.bob_to_pillow(colored_bob_format) + >>> opencv_bgr = bob.io.image.bob_to_opencv(colored_bob_format) + +.. note:: + + In :ref:`bob.bio.face`, the images are assumed to be in range ``[0,255]`` + irrespective of their data type. + +Videos +------ + +A video can be seen as a sequence of images over time. By convention, the first +dimension is for the frame indices (time index), whereas the remaining ones are +related to the corresponding image frame. The videos have the shape of +``(N,C,H,W)``, where ``N`` is the number of frames, ``H`` the height, ``W`` the +width and ``C`` the number of color planes. + + +Input and output +================ + +:ref:`bob.io.base` provides two generic functions :any:`bob.io.base.load` and +:any:`bob.io.base.save` to load and save data of various types, based on the +filename extension. For example, to load a ``.jpg`` image, simply call: + +.. code:: python + + >>> import bob.io.base + >>> img = bob.io.base.load("myimg.jpg") + +`HDF5`_ format, through h5py_, and images, through imageio_, are supported. +For loading videos, use imageio-ffmpeg_ directly. + + +Machine learning +================ + +:ref:`bob.learn.em` provides implementation of the following methods: + + - K-Means clustering + - Gaussian Mixture Modeling (GMM) + - Joint Factor Analysis (JFA) + - Inter-Session Variability (ISV) + - Total Variability (TV, also known as i-vector) + - Probabilistic Linear Discriminant Analysis (PLDA, also known as i-vector) + +All implementations use dask_ to parallelize the training computation. + +Database interfaces +=================== + +Bob provides an API on top of CSV files to easily query databases. +A generic implementation is provided in :ref:`bob.pipelines` but packages +such as :ref:`bob.bio.base` and :ref:`bob.pad.base` provide their own implementations. + +Performance evaluation +====================== + +Methods in the :ref:`bob.measure` module can be used evaluate error for +multi-class or binary classification problems. Several evaluation +techniques such as: + + - Root Mean Squared Error (RMSE) + - F-score + - Precision and Recall + - False Positive Rate (FPR) + - False Negative Rate (FNR) + - Equal Error Rates (EER) + +can be computed. Moreover, functionality for plotting + + - ROC + - DET + - CMC + - EPC + +curves are described in more detail in the :ref:`bob.measure`. + +.. include:: links.rst