{ "info": { "author": "Dejun", "author_email": "dejun@visenze.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4" ], "description": "ViSearch Python SDK\n===================\n\n.. image:: https://travis-ci.org/visenze/visearch-sdk-python.svg\n :target: https://travis-ci.org/visenze/visearch-sdk-python\n\n.. image:: https://img.shields.io/pypi/v/visearch.svg\n :target: https://pypi.python.org/pypi/visearch\n\n.. contents::\n\n1. Overview\n-----------\n\nViSearch is an API that provides accurate, reliable and scalable image\nsearch. ViSearch API provides endpoints that let developers index their\nimages and perform image searches efficiently. ViSearch API can be\neasily integrated into your web and mobile applications. More details\nabout ViSearch API can be found in the\n`documentation `__.\n\nThe ViSearch Python SDK is an open source software for easy integration\nof ViSearch Search API with your application server. It provides three\nsearch methods based on the ViSearch Search API - pre-indexed search,\ncolor search and upload search. The ViSearch Python SDK also provides an\neasy integration of the ViSearch Data API which includes data inserting\nand data removing. For source code and references, visit the github\n`repository `__.\n\n* Supported on Python 2.7+ and 3.3+\n\n2. Setup\n--------\n\nTo install visearch, simply:\n\n::\n\n $ pip install visearch\n\n3. Initialization\n-----------------\n\nTo start using ViSearch API, initialize ViSearch client with your\nViSearch API credentials. Your credentials can be found in `ViSearch\nDashboard `__:\n\n.. code:: python\n\n\n from visearch import client\n\n access_key = 'your app access key'\n secret_key = 'your app secret key'\n\n api = client.ViSearchAPI(access_key, secret_key)\n\n4. Indexing Images\n------------------\n\n4.1 Indexing Your First Images\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBuilt for scalability, ViSearch API enables fast and accurate searches\non high volume of images. Before making your first image search, you\nneed to prepare a list of images and index them into ViSearch by calling\nthe /insert endpoint. Each image must have a unique identifier and a\npublicly downloadable URL. ViSearch will parallelly fetch your images\nfrom the given URLs, and index the downloaded for searching. After the\nimage indexes are built, you can start searching for `similar images\nusing the unique\nidentifier `__,\n`using a\ncolor `__,\nor `using another\nimage `__.\n\nTo index your images, prepare a list of images and call the /insert\nendpoint.\n\n.. code:: python\n\n # the list of images to be indexed\n # the unique identifier of the image 'im_name', the publicly downloadable url of the image 'im_url'\n images = [\n {'im_name': 'red_dress', 'im_url': 'http://mydomain.com/images/red_dress.jpg'},\n {'im_name': 'blue_dress', 'im_url': 'http://mydomain.com/images/blue_dress.jpg'}\n ]\n # calls the /insert endpoint to index the image\n response = api.insert(images)\n\nEach ``insert`` call to ViSearch accepts a maximum of 100 images. We recommend indexing your images in batches of 100 for optimized image indexing speed.\n\n4.2 Image with Metadata\n~~~~~~~~~~~~~~~~~~~~~~~\n\nImages usually come with descriptive text or numeric values as metadata,\nfor example: title, description, category, brand, and price of an online\nshop listing image caption, tags, geo-coordinates of a photo.\n\nViSearch combines the power of text search with image search. You can\nindex your images with metadata, and leverage text based query and\nfiltering for even more accurate image search results, for example:\nlimit results within a price range limit results to certain tags, and\nsome keywords in the captions For detailed reference for result\nfiltering, see `Advanced Search\nParameters `__.\n\nTo index your images with metadata, first you need to configure the\nmetadata schema in ViSearch Dashboard (link to). You can add and remove\nmetadata keys, and modify the metadata types to suit your needs.\n\nLet's assume you have the following metadata schema configured:\n\n+---------------+----------+--------------+\n| Name | Type | Searchable |\n+===============+==========+==============+\n| title | string | true |\n+---------------+----------+--------------+\n| description | text | true |\n+---------------+----------+--------------+\n| price | float | true |\n+---------------+----------+--------------+\n\nThen index your image with title, decription, and price:\n\n.. code:: python\n\n images = [{\n 'im_name': 'blue_dress',\n 'im_url': 'http://mydomain.com/images/blue_dress.jpg',\n 'title': 'Blue Dress',\n 'description': 'A blue dress',\n 'price': 100.0\n },\n ...\n ]\n # calls the /insert endpoint to index the image\n response = api.insert(images)\n\nMetadata keys are case-sensitive, and metadata without a matching key in\nthe schema will not be processed by ViSearch. Make sure to configure\nmetadata schema for all of your metadata keys.\n\n4.3 Updating Images\n~~~~~~~~~~~~~~~~~~~\n\nIf you need to update an image or its metadata, call the ``insert``\nendpoint with the same unique identifier of the image. ViSearch will\nfetch the image from the updated URL and index the new image, and\nreplace the metadata of the image if provided.\n\n.. code:: python\n\n images = [{\n 'im_name': 'blue_dress',\n 'im_url': 'http://mydomain.com/images/blue_dress.jpg',\n 'title': 'Blue Dress',\n 'description': 'A blue dress',\n 'price': 100.0\n },\n ...\n ]\n # calls the /update endpoint to index the image\n response = api.update(images)\n\n Each ``insert`` call to ViSearch accepts a maximum of 100 images. We\n recommend updating your images in batches of 100 for optimized image\n indexing speed.\n\n4.4 Removing Images\n~~~~~~~~~~~~~~~~~~~\n\nIn case you decide to remove some of the indexed images, you can call\nthe /remove endpoint with the list of unique identifier of the indexed\nimages. ViSearch will then remove the specified images from the index.\nYou will not be able to perform pre-indexed search on this image, and\nthe image will not be found in any search result.\n\n.. code:: python\n\n image_names = [\"red_dress\", \"blue_dress\"]\n response = api.remove(image_names)\n\nWe recommend calling ``remove`` in batches of 100 images for optimized image indexing speed.\n\n4.5 Check Indexing Status\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe fetching and indexing process take time, and you may only search for\nimages after their indexs are built. If you want to keep track of this\nprocess, you can call the ``insert_status`` endpoint with the image's\ntransaction identifier.\n\n\n.. code:: python\n\n import time\n import math\n\n # the list of images to be indexed\n # the unique identifier of the image 'im_name', the publicly downloadable url of the image 'im_url'\n images = [\n {'im_name': 'pic5', 'im_url': 'http://mydomain.com/images/vintage_wingtips.jpg'},\n ]\n\n response = api.insert(images)\n\n trans_id = response['trans_id']\n\n percent = 0\n while (percent < 100):\n time.sleep(1)\n\n status_response = api.insert_status(trans_id)\n if 'result' in status_response and len(status_response['result']) > 0:\n percent = status_response['result'][0]['processed_percent']\n print '{}% complete'.format(percent)\n\n page_index = 1\n error_per_page = 10\n fail_count = None\n status_response = api.insert_status(trans_id, page_index, error_per_page)\n if 'result' in status_response and len(status_response['result']) > 0:\n result_data = status_response['result'][0]\n print result_data\n fail_count = result_data['fail_count']\n print 'Start time: {}'.format(result_data['start_time'])\n print 'Update time: {}'.format(result_data['update_time'])\n print \"{} insertions with {} succeed and {} fail\".format(\n result_data['total'],\n result_data['success_count'],\n result_data['fail_count']\n )\n\n if fail_count > 0:\n result_data = status_response['result'][0]\n error_limit = result_data['error_limit']\n total_page_number = int(math.ceil(float(fail_count) / error_limit))\n for i in range(total_page_number):\n page_index = i + 1\n status_response = api.insert_status(trans_id, page_index, error_per_page)\n error_list = status_response['result'][0]['error_list']\n for error in error_list:\n print \"failure at page {} with error message {}\".format(\n page_index,\n error)\n\n5. Solutions\n-------------------\n\n5.1 Find Similar\n~~~~~~~~~~~~~~~~~~~~~~\n\n**Find similar** solution is to search for visually similar images in the\n image database giving an indexed image\u2019s unique identifier (im_name).\n\n.. code:: python\n\n response = api.search(\"blue_dress\")\n\n\n5.2 You May Also Like\n~~~~~~~~~~~~~~~~~~~~~~\n**You may also like** solution is to provide a list of recommended items from\nthe indexed image database based on customizable rules giving an indexed\nimage\u2019s unique identifier (im_name).\n\n\n5.3 Search by Image\n~~~~~~~~~~~~~~~~~\n\n**Search by image** solution is to search similar images by uploading an image\nor providing an image url.\n\n* Using an image from a local file path:\n\n.. code:: python\n\n image_path = 'blue_dress.jpg'\n response = api.uploadsearch(image_path=image_path)\n\n* Using image url:\n\n.. code:: python\n\n image_url = 'http://mydomain.com/images/red_dress.jpg'\n response = api.uploadsearch(image_url=image_url)\n\n5.3.1 Selection Box\n^^^^^^^^^^^^^^^^^^^\n\nIf the object you wish to search for takes up only a small portion of\nyour image, or other irrelevant objects exists in the same image,\nchances are the search result could become inaccurate. Use the Box\nparameter to refine the search area of the image to improve accuracy.\nNoted that the box coordinated is setted with respect to the original\nsize of the image passed, it will be automatically scaled to fit the\nresized image for uploading:\n\n.. code:: python\n\n image_url = 'http://mydomain.com/images/red_dress.jpg'\n box = (0,0,10,10)\n response = api.uploadsearch(image_url=image_url, box=box)\n\n5.3.2 Resizing Settings\n^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen performing upload search, you might experience increasing search\nlatency with increasing image file sizes. This is due to the increased\ntime transferring your images to the ViSearch server, and the increased\ntime for processing larger image files in ViSearch.\n\nTo reduce upload search latency, by default the ``uploadSearch`` method\nmakes a copy of your image file if both of the image dimensions exceed\n512 pixels, and resizes the copy to dimensions not exceeding 512x512\npixels. This is the optimized size to lower search latency while not\nsacrificing search accuracy for general use cases:\n\n.. code:: python\n\n # client.uploadSearch(params) is equivalent to using STANDARD resize settings, 512x512 and jpeg 75 quality\n image_path = 'blue_dress.jpg'\n response = api.uploadsearch(image_path=image_path, resize='STANDARD')\n\nIf your image contains fine details such as textile patterns and\ntextures, use the HIGH resize settings to get better search results:\n\n.. code:: python\n\n # for images with fine details, use HIGH resize settings 1024x1024 and jpeg 75 quality\n image_path = 'blue_dress.jpg'\n response = api.uploadsearch(image_path=image_path, resize='HIGH')\n\nOr provide customized resize settings:\n\n.. code:: python\n\n # using customized resize settings 800x800 and jpeg 80 quality\n image_path = 'blue_dress.jpg'\n response = api.uploadsearch(image_path=image_path, resize=(800, 800, 80))\n\n\n5.4 Search by Color\n~~~~~~~~~~~~~~~~\n\n**Search by color** solution is to search images with similar color by\nproviding a color code. The color code should be in Hexadecimal and passed\nto the colorsearch service.\n\n.. code:: python\n\n response = api.colorsearch(\"fa4d4d\")\n\n\n6. Search Results\n-----------------\n\nViSearch returns a maximum number of 1000 most relevant image search\nresults. You can provide pagination parameters to control the paging of\nthe image search results.\n\nPagination parameters:\n\n+---------+-----------+----------------------------------------------------------------------------------------------------+\n| Name | Type | Description |\n+=========+===========+====================================================================================================+\n| page | Integer | Optional parameter to specify the page of results. The first page of result is 1. Defaults to 1. |\n+---------+-----------+----------------------------------------------------------------------------------------------------+\n| limit | Integer | Optional parameter to specify the result per page limit. Defaults to 10. |\n+---------+-----------+----------------------------------------------------------------------------------------------------+\n\n.. code:: python\n\n page = 1\n limit = 25\n response = api.uploadsearch(image_url=image_url, page=page, limit=limit)\n\n7. Advanced Search Parameters\n-----------------------------\n\n7.1 Retrieving Metadata\n~~~~~~~~~~~~~~~~~~~~~~~\n\nTo retrieve metadata of your image results, provide the list (or tuple)\nof metadata keys for the metadata value to be returned in the ``fl``\n(field list) property:\n\n.. code:: python\n\n fl = [\"price\", \"brand\", \"title\", \"im_url\"] #, or fl = (\"price\", \"brand\", \"title\", \"im_url\")\n response = api.uploadsearch(image_url=image_url, fl=fl)\n\nOnly metadata of type string, int, and float can be retrieved from ViSearch. Metadata of type text is not available for retrieval.\n\n7.2 Filtering Results\n~~~~~~~~~~~~~~~~~~~~~\n\nTo filter search results based on metadata values, provide a dict of\nmetadata key to filter value in the ``fq`` (filter query) property:\n\n.. code:: python\n\n fq = {\"im_cate\": \"bags\", \"price\": \"10,199\"}\n response = api.uploadsearch(image_url=image_url, fq=fq)\n\nQuerying syntax for each metadata type is listed in the following table:\n\n======= ======\nType FQ\n======= ======\nstring Metadata value must be exactly matched with the query value, e.g. \"Vintage Wingtips\" would not match \"vintage wingtips\" or \"vintage\"\ntext Metadata value will be indexed using full-text-search engine and supports fuzzy text matching, e.g. \"A pair of high quality leather wingtips\" would match any word in the phrase\nint Metadata value can be either: (1) exactly matched with the query value; (2) matched with a ranged query minValue,maxValue, e.g. int value 1, 99, and 199 would match ranged query 0,199 but would not match ranged query 200,300\nfloat Metadata value can be either: (1) exactly matched with the query value; (2) matched with a ranged query minValue,maxValue, e.g. float value 1.0, 99.99, and 199.99 would match ranged query 0.0,199.99 but would not match ranged query 200.0,300.0\n======= ======\n\n\n7.3 Result Score\n~~~~~~~~~~~~~~~~\n\nViSearch image search results are ranked in descending order i.e. from\nthe highest scores to the lowest, ranging from 1.0 to 0.0. By default,\nthe score for each image result is not returned. You can turn on the\n**boolean** ``score`` property to retrieve the scores for each image\nresult:\n\n.. code:: python\n\n score = True\n response = api.uploadsearch(image_url=image_url, score=score)\n\nIf you need to restrict search results from a minimum score to a maximum\nscore, specify the ``score_min`` and/or ``score_max`` parameters:\n\n+--------------+---------+--------------------------------------------------------+\n| Name | Type | Description |\n+==============+=========+========================================================+\n| score\\_min | Float | Minimum score for the image results. Default is 0.0. |\n+--------------+---------+--------------------------------------------------------+\n| score\\_max | Float | Maximum score for the image results. Default is 1.0. |\n+--------------+---------+--------------------------------------------------------+\n\n.. code:: python\n\n score_min = 0.5\n score_max = 0.8\n response = api.uploadsearch(image_url=image_url, score_max=score_max, score_min=score_min)\n\n8. Declaration\n--------------\n\n- The image upload.jpg included in the SDK is downloaded from\n http://pixabay.com/en/boots-shoes-pants-folded-fashion-690502/\n\n\n\n\nRelease History\n---------------\n\n0.4.5 (2017-11-14)\n++++++++++++++++++\n\n**Features**\n\n- rename multi product search to discover search\n\n\n0.4.4 (2017-10-27)\n++++++++++++++++++\n\n**Features**\n\n- support multi product search\n\n0.4.3 (2016-11-08)\n++++++++++++++++++\n\n**Improvement**\n\n- add \"X-Requested-With\" in the request header when calling api\n\n0.4.1 (2016-09-28)\n++++++++++++++++++\n\n**Improvement**\n\n- fix the issue for recommendation endpoint and add a test cases\n\n0.4.0 (2016-09-20)\n++++++++++++++++++\n\n**Features**\n\n- add recommendation endpoint\n\n0.3.9 (2016-07-20)\n++++++++++++++++++\n\n**Improvement**\n\n- allow passing search endpoint as parameter\n\n0.3.8 (2016-04-20)\n++++++++++++++++++\n\n**Improvement**\n\n- exclude im_url from the required fields in update\n\n0.3.7 (2016-01-21)\n++++++++++++++++++\n\n**Improvement**\n\n- add missing info in multipart upload\n\n0.3.6 (2015-12-24)\n++++++++++++++++++\n\n**Improvement**\n\n- send raw image in uploadsearch to make consistent results as in dashboard\n\n0.3.5 (2015-12-24)\n++++++++++++++++++\n\n**Bug fix**\n\n- fix tests due to httpretty incompatibility for python 3\n\n0.3.4 (2015-12-24)\n++++++++++++++++++\n\n**Bug fix**\n\n- encode url parameter in uploadsearch\n\n0.3.3 (2015-12-04)\n++++++++++++++++++\n\n**Bug fix**\n\n- fix dict iteritem issue for python 3\n\n0.3.2 (2015-12-04)\n++++++++++++++++++\n\n**Improvement**\n\n- support arbitrary parameters in search\n\n0.3.0 (2015-11-13)\n++++++++++++++++++\n\n**Improvement**\n\n- Add get_all_fl field so that user can query for all metafields\n\n0.2.8 (2015-11-12)\n++++++++++++++++++\n\n**Improvement**\n\n- support arbitrary parameters in insert\n\n0.2.6 (2015-07-30)\n++++++++++++++++++\n\n**Bugfixes**\n\n- update insert_status with extra parameters\n\n0.2.4 (2015-06-08)\n++++++++++++++++++\n\n**Bugfixes**\n\n- Drop support for python 2.6\n\n0.2.2 (2015-06-08)\n++++++++++++++++++\n\n**Bugfixes**\n\n- Separate POST request data/parameters\n\n0.2.0 (2015-04-10)\n++++++++++++++++++\n\n**Bugfixes**\n\n- Close opened files in tearDown()\n\n**Features and Improvements**\n\n- Test compatibility on py26, py34\n\n0.1.0 (2015-04-06)\n---------------------\n\n* First release on PyPI.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/visenze/visearch-sdk-python", "keywords": "visearch", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "visearch", "package_url": "https://pypi.org/project/visearch/", "platform": "", "project_url": "https://pypi.org/project/visearch/", "project_urls": { "Homepage": "https://github.com/visenze/visearch-sdk-python" }, "release_url": "https://pypi.org/project/visearch/0.5.0/", "requires_dist": null, "requires_python": "", "summary": "ViSearch Python SDK", "version": "0.5.0" }, "last_serial": 5637530, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "b22e8f023f406923bcf60d1f714f240a", "sha256": "9ec0b5b30a92c0a93e57fc29c42f863f952be1eb5ffe0fcbe62016af73fe7442" }, "downloads": -1, "filename": "visearch-0.2.0.tar.gz", "has_sig": false, "md5_digest": "b22e8f023f406923bcf60d1f714f240a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 324289, "upload_time": "2015-04-10T09:37:51", "url": "https://files.pythonhosted.org/packages/8b/a9/71bb49a82ec4fe6cfac56a5710663c9b2743ae4ee1c11cd5b45f260477ef/visearch-0.2.0.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6129c58ae5a6ebd614552eb3e83ecde5", "sha256": "c7d69aacdad1cde244391d95f407342ba5ac6770e424ff3b29cd986bbd8f5ad4" }, "downloads": -1, "filename": "visearch-0.2.2.tar.gz", "has_sig": false, "md5_digest": "6129c58ae5a6ebd614552eb3e83ecde5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 136332, "upload_time": "2015-06-08T05:48:15", "url": "https://files.pythonhosted.org/packages/af/b9/c2d77e86baa95482a1a543558b3684b8bf839d2fa0efeabbdcb82bfbbc2c/visearch-0.2.2.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "34627fc77de965116bf24d5d143e47e1", "sha256": "cbe0fd7e1cd224af338e491149b6405a3aab0c162a43bbd11a5a74d2f159e16e" }, "downloads": -1, "filename": "visearch-0.2.4.tar.gz", "has_sig": false, "md5_digest": "34627fc77de965116bf24d5d143e47e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 136370, "upload_time": "2015-06-08T06:29:14", "url": "https://files.pythonhosted.org/packages/f5/44/d6ce389a2c400c06df594e6b624647f246814b83e588301bc3706a7b9795/visearch-0.2.4.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "0b8bec385d2b662aa200d1a376418876", "sha256": "1779db7d2671af6e73aa12ecce57bd117b6de96e1df05b9f737a8c5ca97ae60c" }, "downloads": -1, "filename": "visearch-0.2.6.tar.gz", "has_sig": false, "md5_digest": "0b8bec385d2b662aa200d1a376418876", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137945, "upload_time": "2015-07-30T10:50:22", "url": "https://files.pythonhosted.org/packages/d1/78/814a564bdfca0c476f34f84d4a06fa9109eb838a6a3b4102ac0c5dd21db2/visearch-0.2.6.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "c46dbb3ec37573cea8eae924a30a3036", "sha256": "23a4c06974e7d28e82e65ea1afd0c27975b4b4fd9fb6f4fb99a9c6c2bb809d76" }, "downloads": -1, "filename": "visearch-0.2.8.tar.gz", "has_sig": false, "md5_digest": "c46dbb3ec37573cea8eae924a30a3036", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138013, "upload_time": "2015-11-12T03:55:01", "url": "https://files.pythonhosted.org/packages/2a/96/449382396256c4aa025a4313f9afa8adc74b7628d4612ab5d22fb91cfe70/visearch-0.2.8.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0d53e8cda17f54741c091ac0b6e0fbd9", "sha256": "ba8fb8bd04394c609b1cc1cd9611b7b5f4355213b714d450aa54ae36dfea495b" }, "downloads": -1, "filename": "visearch-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0d53e8cda17f54741c091ac0b6e0fbd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138272, "upload_time": "2015-11-13T10:48:23", "url": "https://files.pythonhosted.org/packages/75/fc/09da56867f91df96cfd55ea1cfb9869447131638ea408130e1811ec898af/visearch-0.3.0.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "a5a88442d0ba8413b43b2602b2da35f9", "sha256": "644dceac509eec45c138f40471cfe52083be821b2a2c178470ffd01fd3b26858" }, "downloads": -1, "filename": "visearch-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a5a88442d0ba8413b43b2602b2da35f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138339, "upload_time": "2015-12-04T03:25:12", "url": "https://files.pythonhosted.org/packages/36/a9/61e5dd2df8c456fbb867cd998cb3fea48720a247d360de5a5e31c77c797e/visearch-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "174274168ac25c02f90628dd9a3a5ea9", "sha256": "311b0449f13c4761b43aad5080155784bd431d694277c2de69ab88d7cfe63e1d" }, "downloads": -1, "filename": "visearch-0.3.3.tar.gz", "has_sig": false, "md5_digest": "174274168ac25c02f90628dd9a3a5ea9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138420, "upload_time": "2015-12-04T03:54:43", "url": "https://files.pythonhosted.org/packages/31/58/1e795fcd1742ec5aabd88378f6c03877e5ed2fc7dc852aa3426543a25774/visearch-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "0fa2dc4656970045de3ddb50a5cfe93a", "sha256": "656c54641fc9825b83a4c7acb1b301fd7a6836a3c4fa990d0a4b70879fbfef42" }, "downloads": -1, "filename": "visearch-0.3.4.tar.gz", "has_sig": false, "md5_digest": "0fa2dc4656970045de3ddb50a5cfe93a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138475, "upload_time": "2015-12-24T02:00:11", "url": "https://files.pythonhosted.org/packages/bd/41/7425e851a9c4cc9eec29ebf1e5259f7d0326b02a86c317f1de7407984291/visearch-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "41d164467f691139b098886c4117c3a5", "sha256": "87a00faf873e4faf5fe9fea7bc29d76c3d9b8c040463afd93e5f0cd8cbc4f587" }, "downloads": -1, "filename": "visearch-0.3.5.tar.gz", "has_sig": false, "md5_digest": "41d164467f691139b098886c4117c3a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138646, "upload_time": "2015-12-24T03:27:55", "url": "https://files.pythonhosted.org/packages/13/8e/957641bb0fb58354fd3dd64ad509396e52a7ea264dbc597ee625cc9d77b8/visearch-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "db4ed97f8addba4b0d185b1e03f86cc0", "sha256": "ddc1c3c7c26c5be07d9620e17b8ec0342a131f7116c5a3fe18a516111b54f5a2" }, "downloads": -1, "filename": "visearch-0.3.6.tar.gz", "has_sig": false, "md5_digest": "db4ed97f8addba4b0d185b1e03f86cc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138743, "upload_time": "2015-12-24T04:59:42", "url": "https://files.pythonhosted.org/packages/6a/d0/2d637c8aee4616f8f08263d6696e9acb2f49e346effd9717c241154af2ac/visearch-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "cb2c82cf16c5b7689cb7f2a2dd38fe05", "sha256": "706b6b4ad596f67ec1186e22b3837589c79c8080fd783ff0063b3a181568bbd5" }, "downloads": -1, "filename": "visearch-0.3.7.tar.gz", "has_sig": false, "md5_digest": "cb2c82cf16c5b7689cb7f2a2dd38fe05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138877, "upload_time": "2016-01-21T10:29:08", "url": "https://files.pythonhosted.org/packages/d3/bc/09240399cd34889af40ecc863a04de31fee650aa6f8547c1f42ac6b73433/visearch-0.3.7.tar.gz" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "506deeef5ab864bcb85eb265985e04f3", "sha256": "4a6ea8bb4912843f2de857cf823803825157439efffd447895e8ce884fcd521c" }, "downloads": -1, "filename": "visearch-0.3.8.tar.gz", "has_sig": false, "md5_digest": "506deeef5ab864bcb85eb265985e04f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138949, "upload_time": "2016-04-20T03:37:35", "url": "https://files.pythonhosted.org/packages/3f/2b/25c3abc6abe58bb522e88b8b1f72a90b11784772b664af4f0780c6f86d49/visearch-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "fca5e98f5cee6afb34b5904accd030a8", "sha256": "d885b53f33ddaf6d5e5bb27fb4a093f2ce49609190cad02ab2f0adb62ed02405" }, "downloads": -1, "filename": "visearch-0.3.9.tar.gz", "has_sig": false, "md5_digest": "fca5e98f5cee6afb34b5904accd030a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 139037, "upload_time": "2016-07-20T09:16:11", "url": "https://files.pythonhosted.org/packages/83/27/069dbb6abd396b6193b0e77373721a578322ec4876ae256b2dd4702e6fec/visearch-0.3.9.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "b45b8093daa5b342971a912f196c38c1", "sha256": "4ea1a25ae9776911ce3019089d491e8ca5eb8175b12947d5fd1206f919af16ff" }, "downloads": -1, "filename": "visearch-0.4.0.tar.gz", "has_sig": false, "md5_digest": "b45b8093daa5b342971a912f196c38c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138886, "upload_time": "2016-09-20T06:09:23", "url": "https://files.pythonhosted.org/packages/4b/12/3640d14c64e7a16e885ab63435acca529a3b2b5b169286671d9810ef0a1b/visearch-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a54d0a79155ac10123ee637ffc4f63c4", "sha256": "c53ba0ed03747e30eecf4b634281474bc65a6655c53aec8c152266df98acf58b" }, "downloads": -1, "filename": "visearch-0.4.1.tar.gz", "has_sig": false, "md5_digest": "a54d0a79155ac10123ee637ffc4f63c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138975, "upload_time": "2016-09-28T07:25:19", "url": "https://files.pythonhosted.org/packages/e5/92/dcf058dd4c7e2b0c50c0d3186afedced50498bec0b0f8f55f3e8998090d8/visearch-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "d47dcdb81de3a96e791975237f679084", "sha256": "f00aa59ddf40e8dcff8998b909296dc01dabd3b081a33a832b2f57413b6475dc" }, "downloads": -1, "filename": "visearch-0.4.2.tar.gz", "has_sig": false, "md5_digest": "d47dcdb81de3a96e791975237f679084", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 139183, "upload_time": "2016-11-09T01:17:56", "url": "https://files.pythonhosted.org/packages/38/e5/51194012482602cbc0f47cf2676ba11060bf636f871718b93ea66aed9608/visearch-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "304a634f7f19d1917ee41691dce7dd59", "sha256": "b756077ae7dcee02331bc388aae58be28cc4a281f6816b9094cb567bbff560da" }, "downloads": -1, "filename": "visearch-0.4.3.tar.gz", "has_sig": false, "md5_digest": "304a634f7f19d1917ee41691dce7dd59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 139184, "upload_time": "2016-11-09T01:31:22", "url": "https://files.pythonhosted.org/packages/c2/32/551acd88ed4f32d8af13fcafb5ecae45cba75d0aa585f327d4560886267c/visearch-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "3da5a58bc7da48a6da4bc9ee1b091812", "sha256": "e5a5825f437396bc863cd845eae495128bb13cb986bb516162a9e141b06eb26b" }, "downloads": -1, "filename": "visearch-0.4.4.tar.gz", "has_sig": false, "md5_digest": "3da5a58bc7da48a6da4bc9ee1b091812", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 140857, "upload_time": "2017-10-28T05:09:10", "url": "https://files.pythonhosted.org/packages/a4/c0/ccbee6f314952f09c6423039b5694c5a69f5026ce365bb178150f9e4d200/visearch-0.4.4.tar.gz" } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "9259b03a76b55ee360b6dc9eb313901a", "sha256": "4423715e17343e62fbe59a864580aaf4cd3fea40d04ebeec580a3ad295249144" }, "downloads": -1, "filename": "visearch-0.4.5.tar.gz", "has_sig": false, "md5_digest": "9259b03a76b55ee360b6dc9eb313901a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 141041, "upload_time": "2017-11-14T18:48:17", "url": "https://files.pythonhosted.org/packages/44/b3/c830ab951d319ec37fda97d61cb6e96a7cfa84193030b2402604686baf1e/visearch-0.4.5.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "4a5258d9d0cfd87cfad5bdb0fb397630", "sha256": "1b7e3add86169f2a9156642a5e974d8c480ff6e9e1466176577bbb0cee946d15" }, "downloads": -1, "filename": "visearch-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4a5258d9d0cfd87cfad5bdb0fb397630", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 140918, "upload_time": "2019-08-06T04:12:27", "url": "https://files.pythonhosted.org/packages/39/b9/d2896b4beca44e69a73a28e3adb74e1f8a56f90538710f4a969b9e596ef9/visearch-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4a5258d9d0cfd87cfad5bdb0fb397630", "sha256": "1b7e3add86169f2a9156642a5e974d8c480ff6e9e1466176577bbb0cee946d15" }, "downloads": -1, "filename": "visearch-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4a5258d9d0cfd87cfad5bdb0fb397630", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 140918, "upload_time": "2019-08-06T04:12:27", "url": "https://files.pythonhosted.org/packages/39/b9/d2896b4beca44e69a73a28e3adb74e1f8a56f90538710f4a969b9e596ef9/visearch-0.5.0.tar.gz" } ] }