{
"info": {
"author": "Robin H.",
"author_email": "twizzle@gmx.net",
"bugtrack_url": null,
"classifiers": [],
"description": "# Twizzl - A Multi-Purpose Benchmarking Tool\n\nTwizzl was originally developed to offer an easy to use and flexible benchmarking framework for perceptual image hashing algorithms having different approaches of generating, saving and comparing hashes. But Twizzle is more than that. You can use it to evaluate every algorithm used for the task of content identification like facial recognition, video hashing and many more.\n\n## Basic Idea\n\nThe underlying idea of Twizzle is the usecase of content identification. You have original objects like images, videos, audio files etc. and you compare them to manipulated versions of them. What you wanna know is how good a specific algorithm with different settings or many different algorithms perform at this task.\n\n### Example: Perceptual Image Hashing for Print-Scan usage\n\nThink about the following task: You try to find a perceptual image hashing algorithm that works best for matching images to its printed and scanned selfs. In a later setup you would like to generate a hash for every image that should be identified and save the hash together with metadata like the name or contextual information in a database. Given a printed and scanned image you would generate a hash using the same algorithm and settings and search the database for hashes being close to this one. For binary hashes one would normally use the normalized hamming distance and call it a match if some threshold falls below a certain limit.\n\n
\n\nFacing that every algorithm has its own way of hash representation we realized that we have to abstract the task to the following Question: Are two objects (in this case images) the same or not?\n\n
\n \n#### Challenges and Tests\nTwizzl distinguishes between **challenges** and **tests**.\n\nA **challenge** is a set of original objects, a set of comparative objects (both images in our case) and a set of correct decisions that a algorithm under test should make if it works correctly. Additionally it can be enriched with arbitrary metadata like in our example the printer used to create the images or the printer settings used.\n\n
| Original | \nComparative | \nTarget Decision | \nMetadata | \n
|---|---|---|---|
![]() | \n ![]() | \n True | \n\n{\n \"printer\": \"DC785\",\n \"toner_settings\": \"toner saving mode\",\n \"printer_dpi\": 300\n}\n | \n
![]() | \n ![]() | \n False | \n|
![]() | \n ![]() | \n True | \n