From f245cea36a1acd07c2c843939f9eb100816e2ba0 Mon Sep 17 00:00:00 2001
From: Manuel Guenther <manuel.guenther@idiap.ch>
Date: Thu, 26 Apr 2012 18:14:05 +0200
Subject: [PATCH] Created some examples how to use Bob and its bob.db module to
 execute face verification experiments on the AT&T image database.

---
 LICENSE.txt               | 674 ++++++++++++++++++++++++++++++++++++++
 MANIFEST.in               |   1 +
 README.md                 |   2 -
 README.rst                |  43 +++
 bootstrap.py              | 262 +++++++++++++++
 buildout.cfg              |  30 ++
 doc/Makefile              | 130 ++++++++
 doc/conf.py               | 216 ++++++++++++
 doc/dct_ubm.png           | Bin 0 -> 36560 bytes
 doc/eigenface.png         | Bin 0 -> 39303 bytes
 doc/examples.rst          | 147 +++++++++
 doc/gabor_phase.png       | Bin 0 -> 41292 bytes
 doc/index.rst             |  23 ++
 doc/installation.rst      |  71 ++++
 faceverify/__init__.py    |   0
 faceverify/dct_ubm.py     | 225 +++++++++++++
 faceverify/eigenface.py   | 148 +++++++++
 faceverify/gabor_phase.py | 135 ++++++++
 localbob.cfg              |  48 +++
 setup.py                  |  78 +++++
 20 files changed, 2231 insertions(+), 2 deletions(-)
 create mode 100644 LICENSE.txt
 create mode 100644 MANIFEST.in
 delete mode 100644 README.md
 create mode 100644 README.rst
 create mode 100644 bootstrap.py
 create mode 100644 buildout.cfg
 create mode 100644 doc/Makefile
 create mode 100644 doc/conf.py
 create mode 100644 doc/dct_ubm.png
 create mode 100644 doc/eigenface.png
 create mode 100644 doc/examples.rst
 create mode 100644 doc/gabor_phase.png
 create mode 100644 doc/index.rst
 create mode 100644 doc/installation.rst
 create mode 100644 faceverify/__init__.py
 create mode 100644 faceverify/dct_ubm.py
 create mode 100644 faceverify/eigenface.py
 create mode 100644 faceverify/gabor_phase.py
 create mode 100644 localbob.cfg
 create mode 100644 setup.py

diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..466879f
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+recursive-include doc *.rst
diff --git a/README.md b/README.md
deleted file mode 100644
index a9bfe50..0000000
--- a/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-bob.example.faceverify
-======================
\ No newline at end of file
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..a7402fb
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,43 @@
+Face verification using Bob
+===========================
+
+This example demonstrates how to use Bob to build different face verification 
+systems. It includes examples with three different complexities:
+
+* A simple eigenface based example
+* An example using Gabor jets and a Gabor-phase based similarity function
+* An example building an UBM/GMM model on top of DCT blocks.
+
+To use this example, you will require Bob and the AT&T database. If you do not
+have a Bob version yet, you can get it from::
+
+  http://idiap.github.com/bob/
+  
+The AT&T image database is quite small, but sufficient to show how the face
+verification methods work. Still, the results may not be meaningful. One good
+thing about the AT&T database is that it is freely available. You can download
+it from::
+
+  http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html
+
+
+Finally, to download this package, please open a shell, go to a directory of
+your choice and call:
+
+.. code-block:: sh
+
+  $ git clone https://github.com/bioidiap/bob.example.faceverify.git
+  $ cd bob.example.faceverify
+  
+
+To generate the Documentation, please further go into the "doc" directory and 
+call:
+
+.. code-block:: sh
+
+  make html
+  firefox _build/html/index.html
+
+(or use any other browser of your choice). After you did this, please read the
+documentation and try to execute the examples.
+
diff --git a/bootstrap.py b/bootstrap.py
new file mode 100644
index 0000000..7647cbb
--- /dev/null
+++ b/bootstrap.py
@@ -0,0 +1,262 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+"""
+
+import os, shutil, sys, tempfile, urllib, urllib2, subprocess
+from optparse import OptionParser
+
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c  # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    quote = str
+
+# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments.
+stdout, stderr = subprocess.Popen(
+    [sys.executable, '-Sc',
+     'try:\n'
+     '    import ConfigParser\n'
+     'except ImportError:\n'
+     '    print 1\n'
+     'else:\n'
+     '    print 0\n'],
+    stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
+has_broken_dash_S = bool(int(stdout.strip()))
+
+# In order to be more robust in the face of system Pythons, we want to
+# run without site-packages loaded.  This is somewhat tricky, in
+# particular because Python 2.6's distutils imports site, so starting
+# with the -S flag is not sufficient.  However, we'll start with that:
+if not has_broken_dash_S and 'site' in sys.modules:
+    # We will restart with python -S.
+    args = sys.argv[:]
+    args[0:0] = [sys.executable, '-S']
+    args = map(quote, args)
+    os.execv(sys.executable, args)
+# Now we are running with -S.  We'll get the clean sys.path, import site
+# because distutils will do it later, and then reset the path and clean
+# out any namespace packages from site-packages that might have been
+# loaded by .pth files.
+clean_path = sys.path[:]
+import site  # imported because of its side effects
+sys.path[:] = clean_path
+for k, v in sys.modules.items():
+    if k in ('setuptools', 'pkg_resources') or (
+        hasattr(v, '__path__') and
+        len(v.__path__) == 1 and
+        not os.path.exists(os.path.join(v.__path__[0], '__init__.py'))):
+        # This is a namespace package.  Remove it.
+        sys.modules.pop(k)
+
+is_jython = sys.platform.startswith('java')
+
+setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py'
+distribute_source = 'http://python-distribute.org/distribute_setup.py'
+
+
+# parsing arguments
+def normalize_to_url(option, opt_str, value, parser):
+    if value:
+        if '://' not in value:  # It doesn't smell like a URL.
+            value = 'file://%s' % (
+                urllib.pathname2url(
+                    os.path.abspath(os.path.expanduser(value))),)
+        if opt_str == '--download-base' and not value.endswith('/'):
+            # Download base needs a trailing slash to make the world happy.
+            value += '/'
+    else:
+        value = None
+    name = opt_str[2:].replace('-', '_')
+    setattr(parser.values, name, value)
+
+usage = '''\
+[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
+
+Bootstraps a buildout-based project.
+
+Simply run this script in a directory containing a buildout.cfg, using the
+Python that you want bin/buildout to use.
+
+Note that by using --setup-source and --download-base to point to
+local resources, you can keep this script from going over the network.
+'''
+
+parser = OptionParser(usage=usage)
+parser.add_option("-v", "--version", dest="version",
+                          help="use a specific zc.buildout version")
+parser.add_option("-d", "--distribute",
+                   action="store_true", dest="use_distribute", default=False,
+                   help="Use Distribute rather than Setuptools.")
+parser.add_option("--setup-source", action="callback", dest="setup_source",
+                  callback=normalize_to_url, nargs=1, type="string",
+                  help=("Specify a URL or file location for the setup file. "
+                        "If you use Setuptools, this will default to " +
+                        setuptools_source + "; if you use Distribute, this "
+                        "will default to " + distribute_source + "."))
+parser.add_option("--download-base", action="callback", dest="download_base",
+                  callback=normalize_to_url, nargs=1, type="string",
+                  help=("Specify a URL or directory for downloading "
+                        "zc.buildout and either Setuptools or Distribute. "
+                        "Defaults to PyPI."))
+parser.add_option("--eggs",
+                  help=("Specify a directory for storing eggs.  Defaults to "
+                        "a temporary directory that is deleted when the "
+                        "bootstrap script completes."))
+parser.add_option("-t", "--accept-buildout-test-releases",
+                  dest='accept_buildout_test_releases',
+                  action="store_true", default=False,
+                  help=("Normally, if you do not specify a --version, the "
+                        "bootstrap script and buildout gets the newest "
+                        "*final* versions of zc.buildout and its recipes and "
+                        "extensions for you.  If you use this flag, "
+                        "bootstrap and buildout will get the newest releases "
+                        "even if they are alphas or betas."))
+parser.add_option("-c", None, action="store", dest="config_file",
+                   help=("Specify the path to the buildout configuration "
+                         "file to be used."))
+
+options, args = parser.parse_args()
+
+# if -c was provided, we push it back into args for buildout's main function
+if options.config_file is not None:
+    args += ['-c', options.config_file]
+
+if options.eggs:
+    eggs_dir = os.path.abspath(os.path.expanduser(options.eggs))
+else:
+    eggs_dir = tempfile.mkdtemp()
+
+if options.setup_source is None:
+    if options.use_distribute:
+        options.setup_source = distribute_source
+    else:
+        options.setup_source = setuptools_source
+
+if options.accept_buildout_test_releases:
+    args.append('buildout:accept-buildout-test-releases=true')
+args.append('bootstrap')
+
+try:
+    import pkg_resources
+    import setuptools  # A flag.  Sometimes pkg_resources is installed alone.
+    if not hasattr(pkg_resources, '_distribute'):
+        raise ImportError
+except ImportError:
+    ez_code = urllib2.urlopen(
+        options.setup_source).read().replace('\r\n', '\n')
+    ez = {}
+    exec ez_code in ez
+    setup_args = dict(to_dir=eggs_dir, download_delay=0)
+    if options.download_base:
+        setup_args['download_base'] = options.download_base
+    if options.use_distribute:
+        setup_args['no_fake'] = True
+    ez['use_setuptools'](**setup_args)
+    if 'pkg_resources' in sys.modules:
+        reload(sys.modules['pkg_resources'])
+    import pkg_resources
+    # This does not (always?) update the default working set.  We will
+    # do it.
+    for path in sys.path:
+        if path not in pkg_resources.working_set.entries:
+            pkg_resources.working_set.add_entry(path)
+
+cmd = [quote(sys.executable),
+       '-c',
+       quote('from setuptools.command.easy_install import main; main()'),
+       '-mqNxd',
+       quote(eggs_dir)]
+
+if not has_broken_dash_S:
+    cmd.insert(1, '-S')
+
+find_links = options.download_base
+if not find_links:
+    find_links = os.environ.get('bootstrap-testing-find-links')
+if find_links:
+    cmd.extend(['-f', quote(find_links)])
+
+if options.use_distribute:
+    setup_requirement = 'distribute'
+else:
+    setup_requirement = 'setuptools'
+ws = pkg_resources.working_set
+setup_requirement_path = ws.find(
+    pkg_resources.Requirement.parse(setup_requirement)).location
+env = dict(
+    os.environ,
+    PYTHONPATH=setup_requirement_path)
+
+requirement = 'zc.buildout'
+version = options.version
+if version is None and not options.accept_buildout_test_releases:
+    # Figure out the most recent final version of zc.buildout.
+    import setuptools.package_index
+    _final_parts = '*final-', '*final'
+
+    def _final_version(parsed_version):
+        for part in parsed_version:
+            if (part[:1] == '*') and (part not in _final_parts):
+                return False
+        return True
+    index = setuptools.package_index.PackageIndex(
+        search_path=[setup_requirement_path])
+    if find_links:
+        index.add_find_links((find_links,))
+    req = pkg_resources.Requirement.parse(requirement)
+    if index.obtain(req) is not None:
+        best = []
+        bestv = None
+        for dist in index[req.project_name]:
+            distv = dist.parsed_version
+            if _final_version(distv):
+                if bestv is None or distv > bestv:
+                    best = [dist]
+                    bestv = distv
+                elif distv == bestv:
+                    best.append(dist)
+        if best:
+            best.sort()
+            version = best[-1].version
+if version:
+    requirement = '=='.join((requirement, version))
+cmd.append(requirement)
+
+if is_jython:
+    import subprocess
+    exitcode = subprocess.Popen(cmd, env=env).wait()
+else:  # Windows prefers this, apparently; otherwise we would prefer subprocess
+    exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env]))
+if exitcode != 0:
+    sys.stdout.flush()
+    sys.stderr.flush()
+    print ("An error occurred when trying to install zc.buildout. "
+           "Look above this message for any errors that "
+           "were output by easy_install.")
+    sys.exit(exitcode)
+
+ws.add_entry(eggs_dir)
+ws.require(requirement)
+import zc.buildout.buildout
+zc.buildout.buildout.main(args)
+if not options.eggs:  # clean up temporary egg directory
+    shutil.rmtree(eggs_dir)
diff --git a/buildout.cfg b/buildout.cfg
new file mode 100644
index 0000000..f2fe8ec
--- /dev/null
+++ b/buildout.cfg
@@ -0,0 +1,30 @@
+; vim: set fileencoding=utf-8 :
+; Andre Anjos <andre.anjos@idiap.ch>
+; Mon 16 Apr 08:29:18 2012 CEST
+
+; This is the configuration file for buildout. It is a windows-init style file
+; divided into sections. This is probably the most minimalistic example you can
+; have.
+;
+; The first section of this file defines to which other sections buildout will
+; look at for information. We only have 1 other section (or part) to look at,
+; the 'python' section.
+
+[buildout]
+parts = python
+
+; We will be 'developing' the current package, so we should put '.' here
+develop = .
+
+; Names of other packages that we need installed locally, including this one.
+; You can use this instruction here to 'augment' the portfolio of packages that
+; will be available at this local installation. This happens besides what has
+; already been described at your package's setup.py. So, don't repeat those 
+; requirements here unless you would like to define specific version numbers
+; for testing purposes.
+eggs = bob.example.faceverify
+
+[python]
+recipe = zc.recipe.egg
+interpreter = python
+eggs = ${buildout:eggs}
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000..234f658
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,130 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FaceRecLib.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FaceRecLib.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/FaceRecLib"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FaceRecLib"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	make -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/doc/conf.py b/doc/conf.py
new file mode 100644
index 0000000..c971fc5
--- /dev/null
+++ b/doc/conf.py
@@ -0,0 +1,216 @@
+# -*- coding: utf-8 -*-
+#
+# FaceRecLib documentation build configuration file, created by
+# sphinx-quickstart on Wed Jan 25 17:23:57 2012.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'bob.example.faceverify'
+copyright = u'2012, Manuel Guenther'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '0.1'
+# The full version, including alpha/beta/rc tags.
+release = '0.1'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+#html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'bob.example.faceverify.doc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+#latex_documents = [
+#  ('index', 'FaceRecLib.tex', u'FaceRecLib Documentation',
+#   u'Laurent El Shafey', 'manual'),
+#]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'bob.example.faceverify', u'Documentation for the examples how to use Bob for face verification',
+     [u'Manuel Guenther'], 1)
+]
diff --git a/doc/dct_ubm.png b/doc/dct_ubm.png
new file mode 100644
index 0000000000000000000000000000000000000000..324e358372b2e3ca19e664bb7e6cda25d2e9d62c
GIT binary patch
literal 36560
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
E05<_3G5`Po

literal 0
HcmV?d00001

diff --git a/doc/eigenface.png b/doc/eigenface.png
new file mode 100644
index 0000000000000000000000000000000000000000..4249388f8c2adfc2e37d37071568ff862dd11b51
GIT binary patch
literal 39303
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

literal 0
HcmV?d00001

diff --git a/doc/examples.rst b/doc/examples.rst
new file mode 100644
index 0000000..e9bef5b
--- /dev/null
+++ b/doc/examples.rst
@@ -0,0 +1,147 @@
+=====================
+ Running the examples
+=====================
+
+To run the examples, just call the scripts from within the ``bin`` directory, 
+e.g.:
+
+.. code-block:: sh
+
+  $ bin/eigenface.py
+  
+If you installed the image database in another folder than ``Database``, please
+give this directrory as parameter to the script, e.g.:
+
+.. code-block:: sh
+
+  $ bin/eigenface.py <AT&T_DATABASE_DIR>
+
+
+There are three example scripts:
+
+.. code-block:: sh
+
+  $ bin/eigenface.py
+  $ bin/gabor_phase.py
+  $ bin/dct_ubm.py
+
+that perform more or less complicated face verification experiments. Each 
+experiment creates an ROC curve that contains the final verification result of
+the test. The generated files will be ``eigenface.png``, ``gabor_phase.png``, 
+and ``dct_ubm.png``.
+
+Since the complexity of the algorithms increase the expected execution time of 
+them differ a lot. While the eigenface example should be finished in a couple of
+seconds, the Gabor phase example could take some minutes, and the UBM/GMM model
+needs in the order of half an hour to compute.
+
+
+The eigenface example
+~~~~~~~~~~~~~~~~~~~~~
+The eigenface example follows the work-flow that is presented in the original
+paper *Eigenfaces for Recognition* [TP91]_ by Turk and Pentland. First, it 
+creates an object to query the database:
+
+.. code-block:: python
+
+  >>> atnt_db = bob.db.atnt.Database()
+  
+For training the projection matrix, the training images need to be read:
+
+.. code-block:: python
+
+  >>> training_image_files = atnt_db.files(groups = 'train', ...)
+  >>> for filename in training_image_files.values():
+  ...   training_image = bob.io.load(filename)
+  
+Since the images are already aligned to the eye positions, they can simply be
+linearized (converted into one long vector) and put into an ``bob.io.ArraySet``:
+
+.. code-block:: python
+
+  >>> training_set = bob.io.Arrayset()
+  >>> for image in training_images.values():
+  ...  training_set.append(image.flatten())
+
+which is used to train a ``bob.machine.LinearMachine``:
+
+.. code-block:: python
+
+  >>> pca_trainer = bob.trainer.SVDPCATrainer()
+  >>> pca_machine, eigen_values = pca_trainer.train(training_set)
+
+For some distance functions, the eigenvalues are needed, but in our example we
+just ignore them.
+
+After training, the model and probe images are loaded, linearized, and projected
+into the eigenspace using the trained ``pca_machine``:
+
+.. code-block:: python
+
+  >>> model_image_files = atnt_db.files(groups = 'test', purpose = 'enrol', ...)
+  >>> for filename in model_image_files.values():
+  ...   model_image = bob.io.load(filename)
+  ...   model_feature = pca_machine(model_image.flatten())
+
+  >>> probe_image_files = atnt_db.files(groups = 'test', purpose = 'probe', ...)
+  >>> for filename in probe_image_files.values():
+  ...   probe_image = bob.io.load(filename)
+  ...   probe_feature = pca_machine(probe_image.flatten())
+
+To compute the verification result, each model feature is compared to each probe
+feature by computing the Euclidean distance:
+
+.. code-block:: python
+
+  >>> for model_feature in model_features:
+  ...  for probe_feature in probe_features:
+  ...    score = bob.math.euclidean_distance(model_feature, probe_feature)
+
+The results are divided into a list of positive scores (model and probe are from
+the same identity) and a a list of negative scores (identities of model and
+probe differ). Using these lists, the ROC curve is plotted:
+
+.. code-block:: python
+
+  >>> bob.measure.plot.roc(negatives, positives)
+  
+.. image:: eigenface.png
+  :scale: 70 %
+
+and the performance is computed:
+
+.. code-block:: python
+
+  >>> threshold = bob.measure.eer_threshold(negatives, positives)
+  >>> FAR, FRR = bob.measure.farfrr(negatives, positives, threshold)
+
+The expected result is: FAR 83.6% and FRR 83.6% at distance threshold 2048.9
+
+.. note::
+
+  Computing eigenfaces with such a low amount of training data is usually not an 
+  excellent idea. Hence, the performance in this example is extremely poor.
+
+
+Gabor jet comparisons
+~~~~~~~~~~~~~~~~~~~~~
+Description of algorithm will follow. The expected output is:
+
+.. image:: gabor_phase.png
+  :scale: 70 %
+
+The expected result is: FAR 22% and FRR 22% at distance threshold 0.1799
+
+
+The UBM/GMM modeling of DCT Blocks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Description of algorithm will follow. The expected output is:
+
+.. image:: dct_ubm.png
+  :scale: 70 %
+
+The expected result is: FAR 5% and FRR 5% at distance threshold 7640.9
+
+
+.. [TP91] Matthew Turk and Alex Pentland. Eigenfaces for recognition. Journal of Cognitive Neuroscience, 3(1):71-86, 1991. 
+
diff --git a/doc/gabor_phase.png b/doc/gabor_phase.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccf4a324dbb07e536a6497d04f6af283671e1377
GIT binary patch
literal 41292
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
A*8l(j

literal 0
HcmV?d00001

diff --git a/doc/index.rst b/doc/index.rst
new file mode 100644
index 0000000..5a81959
--- /dev/null
+++ b/doc/index.rst
@@ -0,0 +1,23 @@
+.. FaceRecLib documentation master file, created by
+   sphinx-quickstart on Wed Jan 25 17:23:57 2012.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to the documentation of the face verification examples!
+===============================================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   installation
+   examples
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/doc/installation.rst b/doc/installation.rst
new file mode 100644
index 0000000..9f3eb8a
--- /dev/null
+++ b/doc/installation.rst
@@ -0,0 +1,71 @@
+=============
+ Installation
+=============
+
+.. note::
+
+  To follow these instructions locally you will need a local copy of this
+  package. Start by cloning this project with something like::
+
+    $ git clone https://github.com/bioidiap/bob.example.faceverify.git
+    $ cd bob.example.faceverify
+
+
+Installation of the toolkit uses the `buildout <http://www.buildout.org/>`_
+build environment. You don't need to understand its inner workings to use this
+package. Here is a recipe to get you started (shell commands are marked with a
+``$`` signal):
+
+.. code-block:: sh
+  
+  $ python bootstrap.py
+  $ ./bin/buildout
+
+These 2 commands should download and install all non-installed dependencies and
+get you a fully operational test and development environment.
+
+.. note::
+
+  The python shell used in the first line of the previous command set
+  determines the python interpreter that will be used for all scripts developed
+  inside this package. Because this package makes use of `Bob
+  <http://idiap.github.com/bob>`_, you must make sure that the ``bootstrap.py``
+  script is called with the **same** interpreter used to build Bob, or
+  unexpected problems might occur.
+
+  If Bob is installed by the administrator of your system, it is safe to
+  consider it uses the default python interpreter. In this case, the above 3
+  command lines should work as expected.
+  
+
+Use this example with Bob not installed globally
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If your Bob version is not installed globally, this package provides a 
+configuration file *localbob.cfg* that has to be modified. Please search for the
+``bob.install.directory`` region and set the value according to your local Bob
+install directory. If you are at Idiap, you can simply choose one the existing
+directories.
+
+
+Use Bob at Idiap
+~~~~~~~~~~~~~~~~
+To get the example running nicely at Idiap, as noted above, ``bootstrap.py`` has
+to be executed with the correct python version. For Idiap, this is (currently):
+
+.. code-block:: sh
+  
+  $ /idiap/group/torch5spro/nightlies/externals/v2/linux-x86_64/bin/python2.6 bootstrap.py
+  $ ./bin/buildout -c localbob.cfg
+
+
+Downloading the test database
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The images that are required to run the test are not included in this package,
+but they are freely downloadable from the internet:
+
+http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html
+
+Unpack the database in a directory that fits you. The easiest solution is to
+create a subdirectory ``Database`` in this package. If you decide to put the
+data somewhere else, please remember the image directory.
+
diff --git a/faceverify/__init__.py b/faceverify/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/faceverify/dct_ubm.py b/faceverify/dct_ubm.py
new file mode 100644
index 0000000..17e86d9
--- /dev/null
+++ b/faceverify/dct_ubm.py
@@ -0,0 +1,225 @@
+import bob
+import os, sys
+import numpy
+from matplotlib import pyplot
+
+# This is the base directory where by default the AT&T images are found. You can
+# overwrite this  directory on the command line
+global ATNT_IMAGE_DIRECTORY
+ATNT_IMAGE_DIRECTORY = "Database"
+
+# The default file name extension of the AT&T images
+ATNT_IMAGE_EXTENSION = ".pgm"
+
+
+def load_images(db, group = None, purpose = None, client_id = None):
+  """Reads the images for the given group and the given client id from the given database"""
+  # get the file names from the database
+  file_names = db.files(groups = group, purposes = purpose, client_ids = client_id, directory = ATNT_IMAGE_DIRECTORY, extension = ATNT_IMAGE_EXTENSION)
+  # iterate through the list of file names
+  images = {}
+  for key, image_name in file_names.iteritems():
+    # load image and linearize it into a vector
+    images[key] = bob.io.load(image_name).astype(numpy.float64)
+  return images
+
+
+# Parameters of the DCT extraction
+DCT_BLOCK_SIZE = 12
+DCT_BLOCK_OVERLAP = 11
+NUMBER_OF_DCT_COMPONENTS = 45
+
+# create a DCT block extractor model
+dct_extractor = bob.ip.DCTFeatures(DCT_BLOCK_SIZE, DCT_BLOCK_SIZE, DCT_BLOCK_OVERLAP, DCT_BLOCK_OVERLAP, NUMBER_OF_DCT_COMPONENTS)
+
+def extract_feature(image):
+  """Extracts the DCT features for the given image"""
+
+  # compute shape of the image blocks
+  block_shape = bob.ip.get_block_3d_output_shape(image, DCT_BLOCK_SIZE, DCT_BLOCK_SIZE, DCT_BLOCK_OVERLAP, DCT_BLOCK_OVERLAP)
+  image_blocks = numpy.ndarray(block_shape, 'float64')
+  
+  # fill image blocks
+  bob.ip.block(image, image_blocks, DCT_BLOCK_SIZE, DCT_BLOCK_SIZE, DCT_BLOCK_OVERLAP, DCT_BLOCK_OVERLAP)
+
+  # perform DCT on image blocks
+  dct_blocks = dct_extractor(image_blocks)
+  
+  return dct_blocks
+  
+
+
+# Parameters of the UBM/GMM module training
+NUMBER_OF_GAUSSIANS = 100
+
+def train(training_features):
+  """Trains the UBM/GMM module with the given set of training DCT features"""
+
+  # create array set used for training
+  training_set = bob.io.Arrayset()
+  # iterate through the training examples
+  for feature in training_features.values():
+    # stack the examples to generate training matrix
+    training_set.extend(feature)
+
+  input_size = training_set.shape[0]
+  # create the KMeans and UBM machine
+  kmeans = bob.machine.KMeansMachine(NUMBER_OF_GAUSSIANS, input_size)
+  ubm = bob.machine.GMMMachine(NUMBER_OF_GAUSSIANS, input_size)
+
+  # create the KMeansTrainer
+  kmeans_trainer = bob.trainer.KMeansTrainer()
+
+  # train using the KMeansTrainer
+  kmeans_trainer.train(kmeans, training_set)
+  
+  [variances, weights] = kmeans.get_variances_and_weights_for_each_cluster(training_set)
+  means = kmeans.means
+
+  # initialize the GMM
+  ubm.means = means
+  ubm.variances = variances
+  ubm.weights = weights
+
+  # train the GMM
+  trainer = bob.trainer.ML_GMMTrainer()
+  trainer.train(ubm, training_set)
+
+  return ubm
+
+
+def enrol(model_features, ubm, gmm_trainer):
+  """Enrolls the GMM model for the given model features (which should stem from the same identity)"""
+  # create array set used for training
+  training_set = bob.io.Arrayset()
+  for feature in model_features.values():
+    training_set.extend(feature)
+  # create a GMM from the UBM
+  gmm = bob.machine.GMMMachine(ubm)
+
+  # train the GMM
+  gmm_trainer.train(gmm, training_set)
+
+  # return the resulting gmm    
+  return gmm
+
+
+def stats(feature, ubm):
+  """Computes the UBM Statistics for the given feature vector"""
+  # compute the UBM stats for the given feature
+  feature = bob.io.Arrayset(feature)
+  
+  # Accumulate statistics
+  gmm_stats = bob.machine.GMMStats(ubm.dim_c, ubm.dim_d)
+  gmm_stats.init()
+  ubm.acc_statistics(feature, gmm_stats)
+  
+  return gmm_stats
+  
+
+def main():
+  """This function will perform an a DCT block extraction and a UBM/GMM modeling test on the AT&T database"""
+  
+  # use the bob.db interface to retrieve information about the Database
+  atnt_db = bob.db.atnt.Database()
+  
+  # check if the AT&T database directory is overwritten by the command line
+  global ATNT_IMAGE_DIRECTORY
+  if len(sys.argv) > 1:
+    ATNT_IMAGE_DIRECTORY = sys.argv[1]
+
+  # check if the database directory exists
+  if not os.path.isdir(ATNT_IMAGE_DIRECTORY):
+    print "The database directory '" + ATNT_IMAGE_DIRECTORY + "' does not exists!"
+    return
+  
+  #####################################################################
+  ### UBM Training 
+  # load all training images
+  training_images = load_images(atnt_db, group = 'train')
+  
+  print "Extracting training features"
+  training_features = {}
+  for key, image in training_images.iteritems():
+    training_features[key] = extract_feature(image)
+
+  print "Training UBM model"
+  ubm = train(training_features)
+  
+  #####################################################################
+  ### GMM model enrollment
+  print "Enrolling GMM models"
+  gmm_trainer = bob.trainer.MAP_GMMTrainer()
+  gmm_trainer.max_iterations = 1
+  gmm_trainer.set_prior_gmm(ubm)
+  
+  # create a GMM model for each model identity
+  model_ids = atnt_db.client_ids(groups = 'test')
+  models = {}
+  for model_id in model_ids:
+    # load images for the current model id
+    model_images = load_images(atnt_db, group = 'test', purpose = 'enrol', client_id = model_id)
+    models_for_current_id = {}
+    # extract model features
+    for key, image in model_images.iteritems():
+      models_for_current_id[key] = extract_feature(image)
+    # enroll model for the current identity from these features
+    model = enrol(models_for_current_id, ubm, gmm_trainer)
+    models[model_id] = model
+    
+  #####################################################################
+  ### probe stats
+  
+  print "Computing probe statistics"
+  probe_images = load_images(atnt_db, group = 'test', purpose = 'probe')
+  probes = {}
+  for key, image in probe_images.iteritems():
+    # extract probe features
+    probe_feature = extract_feature(image)
+    # compute GMM statistics
+    probes[key] = stats(probe_feature, ubm)
+
+  #####################################################################
+  ### compute scores, we here choose a simple Euclidean distance measure
+  positive_scores = []
+  negative_scores = []
+  
+  print "Computing scores"
+  distance_function = bob.machine.linear_scoring
+
+  # iterate through models and probes and compute scores
+  for model_id, model_gmm in models.iteritems():
+    for probe_key, probe_stats in probes.iteritems():
+      # compute score
+      score = distance_function([model_gmm], ubm, [probe_stats])[0,0]
+      
+      # check if this is a positive score
+      if model_id == atnt_db.get_client_id_from_file_id(probe_key):
+        positive_scores.append(score)
+      else:
+        negative_scores.append(score)
+        
+  print "Evaluation"
+  # convert list of scores to numpy arrays
+  positives = numpy.array(positive_scores)
+  negatives = numpy.array(negative_scores)
+  
+  # compute equal error rate
+  threshold = bob.measure.eer_threshold(negatives, positives)
+  FAR, FRR = bob.measure.farfrr(negatives, positives, threshold)
+  
+  print "Result: FAR", FAR, "and FRR", FRR, "at threshold", threshold
+  
+  # plot ROC curve
+  bob.measure.plot.roc(negatives, positives)
+  pyplot.xlabel("False Rejection Rate (%)")
+  pyplot.ylabel("False Acceptance Rate (%)")
+  pyplot.title("ROC Curve for UBM/GMM based AT&T Verification Experiment")
+  pyplot.grid()
+  pyplot.axis([0, 100, 0, 100]) #xmin, xmax, ymin, ymax
+  
+  # save plot to file
+  pyplot.savefig("dct_ubm.png")
+  # show ROC curve
+  pyplot.show()  
+ 
diff --git a/faceverify/eigenface.py b/faceverify/eigenface.py
new file mode 100644
index 0000000..753b93b
--- /dev/null
+++ b/faceverify/eigenface.py
@@ -0,0 +1,148 @@
+import bob
+import os, sys
+import numpy
+from matplotlib import pyplot
+
+# This is the base directory where by default the AT&T images are found. You can
+# overwrite this  directory on the command line
+global ATNT_IMAGE_DIRECTORY
+ATNT_IMAGE_DIRECTORY = "Database"
+
+# The default file name extension of the AT&T images
+ATNT_IMAGE_EXTENSION = ".pgm"
+
+
+def load_images(db, group = None, purpose = None):
+  """Reads the images for the given group and the given purpose from the given database"""
+  # get the file names from the database
+  file_names = db.files(groups = group, purposes = purpose, directory = ATNT_IMAGE_DIRECTORY, extension = ATNT_IMAGE_EXTENSION)
+  # iterate through the list of file names
+  images = {}
+  for key, image_name in file_names.iteritems():
+    # load image and linearize it into a vector
+    images[key] = bob.io.load(image_name).astype(numpy.float64)
+  return images
+  
+
+# The number of eigenfaces that should be kept
+KEPT_EIGENFACES = 5
+
+def train(training_images):
+  """Trains the PCA module with the given list of training images"""
+  # perform training using a SVD PCA trainer
+  pca_trainer = bob.trainer.SVDPCATrainer()
+  
+  # create array set used for training
+  training_set = bob.io.Arrayset()
+  
+  # iterate through the training examples and linearize the images
+  for image in training_images.values():
+    training_set.append(image.flatten())
+
+  # training the SVD PCA returns a machine that can be used for projection
+  pca_machine, eigen_values = pca_trainer.train(training_set)
+  
+  # limit the number of kept eigenfaces
+  pca_machine.resize(pca_machine.shape[0], KEPT_EIGENFACES)
+  
+  return pca_machine
+  
+
+def extract_feature(image, pca_machine):
+  """Projects the given list of images to the PCA subspace and returns the results"""
+  # create projection result in the desired size
+  projected_feature = numpy.ndarray((KEPT_EIGENFACES,), dtype = numpy.float64)
+  
+  # project the data after linearizing them
+  pca_machine(image.flatten(), projected_feature)
+  
+  # return the projected data
+  return projected_feature
+
+
+def main():
+  """This function will perform an eigenface test on the AT&T database"""
+  
+  # use the bob.db interface to retrieve information about the Database
+  atnt_db = bob.db.atnt.Database()
+  
+  # check if the AT&T database directory is overwritten by the command line
+  global ATNT_IMAGE_DIRECTORY
+  if len(sys.argv) > 1:
+    ATNT_IMAGE_DIRECTORY = sys.argv[1]
+
+  # check if the database directory exists
+  if not os.path.isdir(ATNT_IMAGE_DIRECTORY):
+    print "The database directory '" + ATNT_IMAGE_DIRECTORY + "' does not exists!"
+    return
+  
+  #####################################################################
+  ### Training
+  
+  # load all training images
+  training_images = load_images(atnt_db, group = 'train')
+  
+  print "Training PCA machine"
+  pca_machine = train(training_images)
+  
+  #####################################################################
+  ### extract eigenface features of model and probe images
+
+  # load model and probe images
+  model_images = load_images(atnt_db, group = 'test', purpose = 'enrol')
+  probe_images = load_images(atnt_db, group = 'test', purpose = 'probe')
+  
+  print "Extracting models"
+  model_features = {}
+  for key, image in model_images.iteritems():
+    model_features[key] = extract_feature(image, pca_machine)
+  print "Extracting probes"
+  probe_features = {}
+  for key, image in probe_images.iteritems():
+    probe_features[key] = extract_feature(image, pca_machine)
+  
+
+  #####################################################################
+  ### compute scores, we here choose a simple Euclidean distance measure
+  positive_scores = []
+  negative_scores = []
+  
+  print "Computing scores"
+  distance_function = bob.math.euclidean_distance
+
+  # iterate through models and probes and compute scores
+  for model_key, model_feature in model_features.iteritems():
+    for probe_key, probe_feature in probe_features.iteritems():
+      # compute score
+      score = distance_function(model_feature, probe_feature)
+      
+      # check if this is a positive score
+      if atnt_db.get_client_id_from_file_id(model_key) == atnt_db.get_client_id_from_file_id(probe_key):
+        positive_scores.append(score)
+      else:
+        negative_scores.append(score)
+        
+  print "Evaluation"
+  # convert list of scores to numpy arrays
+  positives = numpy.array(positive_scores)
+  negatives = numpy.array(negative_scores)
+  
+  # compute equal error rate
+  threshold = bob.measure.eer_threshold(negatives, positives)
+  FAR, FRR = bob.measure.farfrr(negatives, positives, threshold)
+  
+  print "Result: FAR", FAR, "and FRR", FRR, "at threshold", threshold
+  
+  # plot ROC curve
+  bob.measure.plot.roc(negatives, positives)
+  pyplot.xlabel("False Rejection Rate (%)")
+  pyplot.ylabel("False Acceptance Rate (%)")
+  pyplot.title("ROC Curve for Eigenface based AT&T Verification Experiment")
+  pyplot.grid()
+  pyplot.axis([0, 100, 0, 100]) #xmin, xmax, ymin, ymax
+
+  # save plot to file     
+  pyplot.savefig("eigenface.png")
+  # show ROC curve
+  pyplot.show()  
+ 
diff --git a/faceverify/gabor_phase.py b/faceverify/gabor_phase.py
new file mode 100644
index 0000000..e8c1ed5
--- /dev/null
+++ b/faceverify/gabor_phase.py
@@ -0,0 +1,135 @@
+import bob
+import os, sys
+import numpy
+from matplotlib import pyplot
+
+# This is the base directory where by default the AT&T images are found. You can
+# overwrite this  directory on the command line
+global ATNT_IMAGE_DIRECTORY
+ATNT_IMAGE_DIRECTORY = "Database"
+
+# The default file name extension of the AT&T images
+ATNT_IMAGE_EXTENSION = ".pgm"
+
+
+def load_images(db, group = None, purpose = None):
+  """Reads the images for the given group and the given purpose from the given database"""
+  # get the file names from the database
+  file_names = db.files(groups = group, purposes = purpose, directory = ATNT_IMAGE_DIRECTORY, extension = ATNT_IMAGE_EXTENSION)
+  # iterate through the list of file names
+  images = {}
+  for key, image_name in file_names.iteritems():
+    # load image and linearize it into a vector
+    images[key] = bob.io.load(image_name).astype(numpy.float64)
+  return images
+  
+
+# define Gabor wavelet transform class globally since it is reused for all images
+gabor_wavelet_transform = bob.ip.GaborWaveletTransform()
+# create empty Gabor jet image including Gabor phases in the required size
+jet_image = gabor_wavelet_transform.empty_jet_image(numpy.ndarray((112,92)), True)
+
+def extract_feature(image, graph_machine):
+  """Extracts the Gabor graphs from the given image"""
+
+  # create extraction result in the desired size
+  shape = [graph_machine.number_of_nodes]
+  # add the shape of one Gabor jet
+  shape.extend(jet_image[0,0].shape)
+  gabor_graph = numpy.ndarray(shape, dtype = numpy.float64)
+  
+  # perform Gabor wavelet transform on the image
+  gabor_wavelet_transform.compute_jets(image, jet_image)
+  
+  # extract the Gabor graphs from the feature image
+  graph_machine(jet_image, gabor_graph)
+  
+  # return the extracted graph
+  return gabor_graph
+
+
+def main():
+  """This function will perform Gabor graph comparison test on the AT&T database"""
+  
+  # use the bob.db interface to retrieve information about the Database
+  atnt_db = bob.db.atnt.Database()
+
+  # check if the AT&T database directory is overwritten by the command line
+  global ATNT_IMAGE_DIRECTORY
+  if len(sys.argv) > 1:
+    ATNT_IMAGE_DIRECTORY = sys.argv[1]
+
+  # check if the database directory exists
+  if not os.path.isdir(ATNT_IMAGE_DIRECTORY):
+    print "The database directory '" + ATNT_IMAGE_DIRECTORY + "' does not exists!"
+    return
+  
+  #####################################################################
+  ### Training
+  
+  # for Gabor graphs, no training is required. 
+  
+  print "Creating Gabor graph machine"
+  # create a machine that will produce tight Gabor graphs with inter-node distance (1,1)
+  graph_machine = bob.machine.GaborGraphMachine((0,0), (111,91), (1,1))
+    
+  #####################################################################
+  ### extract Gabor graph features for all model and probe images
+  # load all model and probe images
+  model_images = load_images(atnt_db, group = 'test', purpose = 'enrol')
+  probe_images = load_images(atnt_db, group = 'test', purpose = 'probe')
+  
+  print "Extracting models"
+  model_features = {}
+  for key, image in model_images.iteritems():
+    model_features[key] = extract_feature(image, graph_machine)
+  print "Extracting probes"
+  probe_features = {}
+  for key, image in probe_images.iteritems():
+    probe_features[key] = extract_feature(image, graph_machine)
+  
+
+  #####################################################################
+  ### compute scores, we here choose a simple Euclidean distance measure
+  positive_scores = []
+  negative_scores = []
+  
+  print "Computing scores"
+  # define a certain Gabor jet similarity function that should be used
+  similarity_function = bob.machine.DisparityCorrectedPhaseDifference()
+  
+  # iterate through models and probes and compute scores
+  for model_key, model_feature in model_features.iteritems():
+    for probe_key, probe_feature in probe_features.iteritems():
+      # compute score using the desired Gabor jet similarity function
+      score = graph_machine.similarity(model_feature, probe_feature, similarity_function)
+
+      # check if this is a positive score
+      if atnt_db.get_client_id_from_file_id(model_key) == atnt_db.get_client_id_from_file_id(probe_key):
+        positive_scores.append(score)
+      else:
+        negative_scores.append(score)
+        
+  print "Evaluation"
+  # convert list of scores to numpy arrays
+  positives = numpy.array(positive_scores)
+  negatives = numpy.array(negative_scores)
+  
+  # compute equal error rate
+  threshold = bob.measure.eer_threshold(negatives, positives)
+  FAR, FRR = bob.measure.farfrr(negatives, positives, threshold)
+  
+  print "Result: FAR", FAR, "and FRR", FRR, "at threshold", threshold
+
+  # plot ROC curve
+  bob.measure.plot.roc(negatives, positives)
+  pyplot.xlabel("False Rejection Rate (%)")
+  pyplot.ylabel("False Acceptance Rate (%)")
+  pyplot.title("ROC Curve for Gabor phase based AT&T Verification Experiment")
+  pyplot.grid()
+  pyplot.axis([0, 100, 0, 100]) #xmin, xmax, ymin, ymax
+
+  # save plot to file     
+  pyplot.savefig("gabor_phase.png")
+  # show ROC curve
+  pyplot.show()
diff --git a/localbob.cfg b/localbob.cfg
new file mode 100644
index 0000000..f51b78b
--- /dev/null
+++ b/localbob.cfg
@@ -0,0 +1,48 @@
+; vim: set fileencoding=utf-8 :
+; Andre Anjos <andre.anjos@idiap.ch>
+; Mon 16 Apr 08:29:18 2012 CEST
+
+; Example buildout recipe using a local (off-root) Bob installation
+
+[buildout]
+parts = bob python
+develop = .
+
+; The 'mr.developer' extension is available publicly at PyPI (the python
+; package index). You don't need to worry about it as buildout will download
+; install it for you.
+extensions = mr.developer
+auto-checkout = *
+
+; Note: You will notice 'bob' is listed as an egg here. If you have a version
+; of Bob installed by the administrator, centrally, but want to use your
+; locally compiled version, that is required to assure the include path order
+; in generated scripts.
+eggs = bob.example.faceverify
+       bob
+
+[sources]
+; You will need this package so that buildout includes the path to Bob's build
+; or installation directory using this configuration file as reference.
+local.bob.recipe = git git@github.com:idiap/local.bob.recipe.git
+
+[bob]
+recipe = local.bob.recipe:config
+
+; Choose here your bob installation - **re-run buildout if you change it**
+; the path here can be relative or absolute to either the build directory of
+; Bob or to an installation directory. Both should work w/o problems.
+;
+; If you go for a relative path, remember this path is relative to the path
+; you are calling buildout from. This is normally the path that contains the
+; file 'setup.py' for your own package.
+install-directory = ../bob/build
+
+; Some examples for Idiap:
+;install-directory = /idiap/group/torch5spro/releases/bob-1.0.2/install/linux-x86_64-release
+;install-directory = /idiap/group/torch5spro/nightlies/last/install/linux-x86_64-release
+
+[python]
+recipe = zc.recipe.egg
+interpreter = python
+eggs = ${buildout:eggs}
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..de3bdb8
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+# Manuel Guenther <Manuel.Guenther@idiap.ch>
+# Tue Apr 24 18:55:40 CEST 2012
+
+# This file contains the python (distutils/setuptools) instructions so your
+# package can be installed on **any** host system. It defines some basic
+# information like the package name for instance, or its homepage.
+#
+# It also defines which other packages this python package depends on and that
+# are required for this package's operation. The python subsystem will make
+# sure all dependent packages are installed or will install them for you upon
+# the installation of this package.
+#
+# The 'buildout' system we use here will go further and wrap this package in
+# such a way to create an isolated python working environment. Buildout will
+# make sure that dependencies which are not yet installed do get installed, but
+# **without** requiring adminstrative privileges on the host system. This
+# allows you to test your package with new python dependencies w/o requiring
+# administrative interventions.
+
+from setuptools import setup, find_packages
+
+# The only thing we do in this file is to call the setup() function with all
+# parameters that define our package.
+setup(
+
+    # This is the basic information about your project. Modify all this
+    # information before releasing code publicly.
+    name='bob.example.faceverify',
+    version='0.1',
+    description='Example for using Bob to create face verification systems',
+    url='http://github.com/idiap/bob.example.faceverify',
+    license='LICENSE.txt',
+    author_email='Manuel Guenther <Manuel.Guenther@idiap.ch>',
+
+    # If you have a better, long description of your package, place it on the
+    # 'doc' directory and then hook it here
+    #long_description=open('doc/long-description.rst').read(),
+
+    # This line is required for any distutils based packaging.
+    packages=find_packages(),
+
+    # This line defines which packages should be installed when you "install"
+    # this package. All packages that are mentioned here, but are not installed
+    # on the current system will be installed locally and only visible to the
+    # scripts of this package. Don't worry - You won't need adminstrative
+    # privileges when using buildout.
+    install_requires=[
+        "bob",      # base signal proc./machine learning library
+
+        # here are some more examples you could include:
+        #"argparse", # better option parsing
+    ],
+
+    # This entry defines which scripts you will have inside the 'bin' directory
+    # once you install the package (or run 'bin/buildout'). The order of each
+    # entry under 'console_scripts' is like this:
+    #   script-name-at-bin-directory = module.at.your.library:function
+    #
+    # The module.at.your.library is the python file within your library, using
+    # the python syntax for directories (i.e., a '.' instead of '/' or '\').
+    # This syntax also omits the '.py' extension of the filename. So, a file
+    # installed under 'example/foo.py' that contains a function which
+    # implements the 'main()' function of particular script you want to have
+    # should be referred as 'example.foo:main'.
+    #
+    # In this simple example we will create a single program that will print
+    # the version of bob.
+    entry_points={
+      'console_scripts': [
+        'eigenface.py = faceverify.eigenface:main',
+        'gabor_phase.py = faceverify.gabor_phase:main',
+        'dct_ubm.py = faceverify.dct_ubm:main'
+        ],
+      },
+
+)
-- 
GitLab