{ "info": { "author": "Xavier Barbosa", "author_email": "clint.northwood@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "libpuzzle\n=========\n\n\nImplements libpuzzle_ for python.\n\nIt is designed to quickly find visually similar images (GIF, PNG, JPG), even\nif they have been resized, recompressed, recolored or slightly modified.\n\nSample applications:\n\n* finding duplicate images in photo libraries\n* image classification\n* image search services\n* moderation (pictures sent by users on forums, wikis, blogs, etc). Pictures\n similar to other pictures that were previously banned can be signaled to\n moderators.\n\nThe library relies on the GD Library in order to load bitmap pictures.\n\nOn a debian server, installation would be::\n\n $ apt -y install libpuzzle-dev libgd2-xpm-dev\n $ pip install libpuzzle\n\n\nUsage::\n\n from libpuzzle import Puzzle, SIMILARITY_THRESHOLD\n\n puzzle = Puzzle()\n sign1 = puzzle.from_filename('img1.jpg')\n sign2 = puzzle.from_filename('img2.png')\n distance = sign1.distance(sign2)\n if distance <= SIMILARITY_THRESHOLD:\n print('images are propably the same')\n\n\nAPI::\n\n SIMILARITY_THRESHOLD\n SIMILARITY_HIGH_THRESHOLD\n SIMILARITY_LOW_THRESHOLD\n SIMILARITY_LOWER_THRESHOLD\n\n class Puzzle:\n\n max_width #\n\n max_height #\n\n lambdas #\n\n noise_cutoff #\n\n p_ratio #\n\n contrast_barrier_for_cropping #\n\n max_cropping_ratio #\n\n autocrop #\n\n from_filename(filename) -> Signature\n # hydrate Signature from filename\n\n from_signature(sign) -> Signature\n # hydrate Signature from value\n\n from_compressed_signature(sign) -> Signature\n # hydrate Signature from compressed value\n\n\n class Signature:\n # Implements signature\n\n value # the value\n compressed # the compressed value\n\n distance(signature) -> float\n # distance between 2 signatures\n\n\n exception PuzzleError:\n # Raise when something went wrong\n\n.. _libpuzzle: https://www.pureftpd.org/project/libpuzzle\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://lab.errorist.xyz/py/libpuzzle", "keywords": "image", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "libpuzzle", "package_url": "https://pypi.org/project/libpuzzle/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/libpuzzle/", "project_urls": { "Homepage": "https://lab.errorist.xyz/py/libpuzzle" }, "release_url": "https://pypi.org/project/libpuzzle/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Quickly find visually similar images", "version": "1.0.0" }, "last_serial": 1935680, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "3954c7e8de701a8bfcaabbc68fc5fd32", "sha256": "1b9d4a2eabc979a53c57be40c8ffc5fa6e5f0054316297dddd542cc47d36d1f3" }, "downloads": -1, "filename": "libpuzzle-1.0.0.tar.gz", "has_sig": false, "md5_digest": "3954c7e8de701a8bfcaabbc68fc5fd32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44445, "upload_time": "2016-02-02T14:37:03", "url": "https://files.pythonhosted.org/packages/61/69/856926a3f7b9e146e19b36325f056d051b4cecd2f9305ae832dcaf9c83b5/libpuzzle-1.0.0.tar.gz" } ], "1.0.0rc1": [ { "comment_text": "", "digests": { "md5": "43dc084d0259248c65b6c3349186ff54", "sha256": "2b2bc8bc7afb0268fe62b0e013db491a22d870d69ec32edda92967e928f1c54b" }, "downloads": -1, "filename": "libpuzzle-1.0.0rc1.tar.gz", "has_sig": false, "md5_digest": "43dc084d0259248c65b6c3349186ff54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42801, "upload_time": "2016-01-25T14:42:26", "url": "https://files.pythonhosted.org/packages/5d/21/5b9935f0d010e06f19feb7229ccca633c31ebd3decf903e2d65d25468b18/libpuzzle-1.0.0rc1.tar.gz" } ], "1.0.0rc2": [ { "comment_text": "", "digests": { "md5": "f4be2c225182b29d8aeaf7d84cbce7da", "sha256": "e5118a88dd5b4e7ff5bd2b69ff45ca23322b9ba12fb9ffe0498f2b5849d97aaa" }, "downloads": -1, "filename": "libpuzzle-1.0.0rc2.tar.gz", "has_sig": false, "md5_digest": "f4be2c225182b29d8aeaf7d84cbce7da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42892, "upload_time": "2016-01-25T16:15:15", "url": "https://files.pythonhosted.org/packages/fd/09/f4bafb1b83219f4c35ad7ce72015134a5db953f3c23d3660f64815d3f15a/libpuzzle-1.0.0rc2.tar.gz" } ], "1.0.0rc3": [ { "comment_text": "", "digests": { "md5": "bbf1dac625844134d4fd2c8eab805a7a", "sha256": "86ca02e696e9d24ff73cae4ed34b3dd3fb8e8eab5c6cfdd6eaa1ab1725004718" }, "downloads": -1, "filename": "libpuzzle-1.0.0rc3.tar.gz", "has_sig": false, "md5_digest": "bbf1dac625844134d4fd2c8eab805a7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44037, "upload_time": "2016-01-25T16:21:34", "url": "https://files.pythonhosted.org/packages/81/32/ecfdd2f8acd477c6dc9323c091703cc1ff2bd3b307420defff047a266d54/libpuzzle-1.0.0rc3.tar.gz" } ], "1.0.0rc4": [ { "comment_text": "", "digests": { "md5": "d6a86ede71942025b0dc07136034aa3e", "sha256": "016be380b91d9655ccf8620791ac204fc1caab7343e0be6157a3bc042f44f6af" }, "downloads": -1, "filename": "libpuzzle-1.0.0rc4.tar.gz", "has_sig": false, "md5_digest": "d6a86ede71942025b0dc07136034aa3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44058, "upload_time": "2016-01-25T16:32:22", "url": "https://files.pythonhosted.org/packages/3f/d8/b32082fa9dbaf26d923817b1a148af1a67ab96c638014225641a6d0ddbe7/libpuzzle-1.0.0rc4.tar.gz" } ], "1.0.0rc5": [ { "comment_text": "", "digests": { "md5": "65bb629d0384ecd16783a7fc2bb4c263", "sha256": "caa2bbc3c0bebaa33165e96089248e967105b5dbc1d2d374d5b729b76d1d16e3" }, "downloads": -1, "filename": "libpuzzle-1.0.0rc5.tar.gz", "has_sig": false, "md5_digest": "65bb629d0384ecd16783a7fc2bb4c263", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44000, "upload_time": "2016-01-26T01:13:08", "url": "https://files.pythonhosted.org/packages/9e/2c/b981dd664628997de188007df5de1a9cd3ecc230e15a4900f686d9bf1c0e/libpuzzle-1.0.0rc5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3954c7e8de701a8bfcaabbc68fc5fd32", "sha256": "1b9d4a2eabc979a53c57be40c8ffc5fa6e5f0054316297dddd542cc47d36d1f3" }, "downloads": -1, "filename": "libpuzzle-1.0.0.tar.gz", "has_sig": false, "md5_digest": "3954c7e8de701a8bfcaabbc68fc5fd32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44445, "upload_time": "2016-02-02T14:37:03", "url": "https://files.pythonhosted.org/packages/61/69/856926a3f7b9e146e19b36325f056d051b4cecd2f9305ae832dcaf9c83b5/libpuzzle-1.0.0.tar.gz" } ] }