Dear Bobbers,
I am proud to announce the new version of Bob to be published today.
For the functionality of Bob, not much has been changed. All the functions that were available in Bob v1 are also available in Bob v2.
The main modifications are as follows:
1. No global installation anymoreMost importantly, there is no global monolithic installation of Bob any more. Instead, the source code was split into several concise and self-contained packages, which are separately downloadable from PyPI or GitHub.
These packages contain the pure C++ code including pure C++ libraries, against which other C++ code can be linked, as well as Python bindings and pure Python code that can be used for rapid prototyping.
If you want to use the C++ packages (which is nearly always the case), you should install the C++ dependencies which are listed under
https://github.com/idiap/bob/wiki/Dependencies.
An introduction on how to use some or all packages of Bob v2 in a Python package is given under
https://github.com/idiap/bob/wiki/Installation, and how to generate a pure Python or a mixed C++/Python extension is explained under
https://pythonhosted.org/bob.extension/guide.html.
The complete list of packages can be found under
https://github.com/idiap/bob/wiki/Packages, a short overview and tutorial of the packages is given under
https://github.com/idiap/bob/wiki/Tutorials.
To port your existing code that uses Bob v1 to Bob v2 should be mostly straightforward.
In most cases, the only thing to change is the
import statement.
Instead of having a single import bob in the beginning of the script, you need to import all required packages that you actually use, e.g., import bob.io.base or import bob.learn.linear.
Sometimes, functions and classes are now in different sub-modules. E.g., instead of
bob.io.HDF5File, we now have bob.io.base.HDF5File.
2. The same name for all packagesFormerly, we had satellite packages of bob, which we called
xbob.... These packages were mainly database packages (e.g.
xbob.db.mobio), but also example packages as xbob.example.faceverify.
These packages have now been adopted into the global bob namespace, i.e., the two packages above are now called bob.db.mobio and bob.example.faceverify.
3. Better Python bindings
The second major improvement are the new python bindings, which now rely on the pure Python C-API:
https://docs.python.org/2/extending/index.html#extending-indexThis allows both a faster loading time of Bob modules, as well as smaller libraries for the bindings.
For most relevant packages, we have added an API that allows to use the C-Python objects from the packages in other bindings. For some of the (high-level) packages, we are still working on that, though.
4. Improved documentationAlso, we (started to) standardize the style of the documentation, both in the developers guides of the packages, and in the Python API documentations.
In our C++ extensions, we use specialized classes (
http://pythonhosted.org/bob.extension/extension.html#documenting-your-c-c-python-extension) to assure that the documentation for the functions are generated in a concise way. For the documentation of the Python functions, we might still need to improve a bit here and there.
The documentation of all packages is now online and can be reached from the PyPI pages of the single packages, or globally from the
https://github.com/idiap/bob/wiki/Packages list.
5. Machines and Trainers As part of the encapsulation, we have decided to repeal the former structure of machines and trainers, which were living in two different namespaces
bob.machine and bob.trainer.
Now, they are located in the same package under the same namespace. E.g., the former bob.machine.LinearMachine and its according bob.trainer.FisherLDATrainer are now both part of the bob.learn.linear package, as bob.learn.liner.Machine and bob.learn.linear.FisherLDATrainer.
6. Redesigned Gabor wavelet functionalityThe Gabor wavelet transform classes were subjected to a complete make-over. The functionality, which was formerly split over
bob.ip and bob.machine can now be found in the
bob.ip.gabor namespace/package.7. Uniform interface for verification database packagesFor verification databases, we have implemented a basic interface (see
http://pythonhosted.org/bob.db.verification.utils/guide.html). This interface allows to rapidly change the database of your (face or speaker) verification experiments, an example of which can be found in
bob.example.faceverify.@The Bob Developers: Probably I have missed some important notes about Bob v2. Feel free to add information or correct me.
Please note that the packages are open source and -- as such -- free of any warranty. Particularly, random or reproducible failures (an exception, if you are lucky, a Segmentation Fault, in the rare cases that you are not lucky) can occur. In such cases, please send an email to this mailing list, or open a new issue in the issue tracker on the GitHub page of the according Bob v2 package (which are linked in the
https://github.com/idiap/bob/wiki/Packages).
Enjoy Research!
Manuel (on behalf of the Bob developers, mainly at the Biometrics group of Idiap
http://www.idiap.ch)