{ "info": { "author": "Michael Hucka", "author_email": "mhucka@library.caltech.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Image Recognition", "Topic :: Text Processing :: Linguistic" ], "description": "Handprint\n=========\n\nA Python program to apply different handwritten text recognition services to images of handwritten text pages, and produce an annotated image (and optionally more) showing the text recognized.\n\n[![Latest release](https://img.shields.io/badge/Latest_release-1.0.1-b44e88.svg?style=flat-square)](http://shields.io)\n[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg?style=flat-square)](https://choosealicense.com/licenses/bsd-3-clause)\n[![Python](https://img.shields.io/badge/Python-3.4+-brightgreen.svg?style=flat-square)](http://shields.io)\n[![GitHub stars](https://img.shields.io/github/stars/caltechlibrary/handprint.svg?style=flat-square&color=lightgray&label=Stars)](https://github.com/caltechlibrary/handprint/stargazers)\n[![DOI](http://img.shields.io/badge/DOI-10.22002%20%2f%20D1.1268-navy.svg?style=flat-square)](https://data.caltech.edu/records/1268)\n![PyPI](https://img.shields.io/pypi/v/handprint.svg?style=flat-square&color=orange)\n\n\n\ud83c\udfc1 Log of recent changes\n-----------------------\n\n_Version 1.0.1_: This version adds instructions for installing from PyPI and fixes a bug writing files downloaded from URLs.\n\n_Version 1.0.0_: This is a sufficiently complete version of Handprint that can finally be called a version 1.0. Changes compared to version 0.10.0 include: new way to provide credential files, new default output (in which results from different services are placed side-by-side in a single large image), new command-line arguments, parallel execution, and more.\n\nThe file [CHANGES](CHANGES.md) contains a more complete change log that includes information about previous releases.\n\nTable of Contents\n-----------------\n\n* [Introduction](#-introduction)\n* [Installation](#-installation)\n * [Install Handprint on your computer](#-install-handprint-on-your-computer)\n * [Add cloud service credentials](#-add-cloud-service-credentials)\n* [Usage](#\ufe0e-usage)\n * [Supported HTR/OCR services](#supported-htrocr-services)\n * [Input files and URLs](#input-files-and-urls)\n * [Annotated output images](#annotated-output-images)\n * [Extended results](#extended-results)\n * [Other options](#other-options)\n * [Command line options summary](#command-line-options-summary)\n* [Known issues and limitations](#known-issues-and-limitations)\n* [Getting help](#-getting-help)\n* [Contributing](#-contributing)\n* [License](#-license)\n* [Authors and history](#-authors-and-history)\n* [Acknowledgments](#\ufe0e-acknowledgments)\n\n\u2600 Introduction\n-------------\n\n\n\nHandprint (_**Hand**written **P**age **R**ecognit**i**o**n** **T**est_) is a small project to examine the performance of alternative services for [handwritten text recognition (HTR)](https://en.wikipedia.org/wiki/Handwriting_recognition). It was developed for use with documents from the [Caltech Archives](http://archives.caltech.edu), but it is completely independent and can be applied to any images of text documents. Services supported include Google's [Google Cloud Vision API](https://cloud.google.com/vision/docs/ocr), Microsoft's Azure [Computer Vision API](https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/), Amazon's [Textract](https://aws.amazon.com/textract/) and [Rekognition](https://aws.amazon.com/rekognition/), and more. Among other features, Handprint can generate versions of the input images with recognized text overlaid over them, to visualize the results. The image at right shows an example.\n\nHandprint can work with individual images, directories of images, and URLs pointing to images on remote servers. In addition to producing annotated images as output, it can output the raw results from an HTR service as JSON and text files. Handprint can use multiple processor threads for parallel execution.\n\n\u273a Installation and configuration\n-------------------------------\n\nThe instructions below assume you have a Python interpreter installed on your computer; if that's not the case, please first install Python and familiarize yourself with running Python programs on your system.\n\nHandprint includes several adapters for working with cloud-based HTR services from Amazon, Google, and Microsoft. Installing Handprint requires a both installing a copy of Handprint on your computer and supplying your copy with credentials for accessing the cloud services you want to use.\n\n\n### \u24f5   _Install Handprint on your computer_\n\nThe following is probably the simplest and most direct way to install the latest release of Handprint on your computer:\n```sh\nsudo python3 -m pip install handprint --upgrade\n```\n\nAlternatively, you can install the latest version directly from the GitHub repository using the following command:\n```sh\nsudo python3 -m pip install git+https://github.com/caltechlibrary/handprint.git --upgrade\n```\n\n\n### \u24f6   _Add cloud service credentials_\n\nA one-time configuration step is needed for each cloud-based HTR service after you install Handprint on a computer. This step supplies Handprint with credentials to access the services. In each case, the same command format is used:\n```sh\nhandprint -a SERVICENAME CREDENTIALSFILE.json\n```\n\n_SERVICENAME_ must be one of the service names printed by running `handprint -l`, and `CREDENTIALSFILE.json` must have one of the formats discussed below. When you run this command, Handprint will copy `CREDENTIALSFILE.json` to a private location, and thereafter uses the credentials to access _SERVICENAME_. (The private location is different on different systems; for example, on macOS it is `~/Library/Application Support/Handprint/`.) Examples are given below.\n\n\n#### Microsoft\n\nMicrosoft's approach to credentials in Azure involves the use of [subscription keys](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/vision-api-how-to-topics/howtosubscribe). The format of the credentials file for Handprint just needs to contain a single field:\n\n```json\n{\n \"subscription_key\": \"YOURKEYHERE\"\n}\n```\n\nThe value of \"YOURKEYHERE\" will be a string such as `\"18de248475134eb49ae4a4e94b93461c\"`. To obtain a key, visit [https://portal.azure.com](https://portal.azure.com) and sign in using your account login. (Note: you will need to turn off browser security plugins such as Ad Block and uMatrix if you have them, or else the site will not work.) Once you are authenticated to the Azure portal, you can create credentials for using Azure's machine-learning services. Some notes about this can be found in the [Handprint project Wiki pages on GitHub](https://github.com/caltechlibrary/handprint/wiki/Getting-Microsoft-Azure-credentials). Once you have obtained a key, use a text editor to create a JSON file in the simple format shown above, save that file somewhere on your computer (for the sake of this example, assume it is `myazurecredentials.json`), and use the command discussed above to make Handprint copy the credentials file:\n```sh\nhandprint -a microsoft myazurecredentials.json\n```\n\n#### Google\n\nCredentials for using a Google service account need to be stored in a JSON file that contains many fields. The overall format looks like this:\n\n```\n{\n \"type\": \"service_account\",\n \"project_id\": \"theid\",\n \"private_key_id\": \"thekey\",\n \"private_key\": \"-----BEGIN PRIVATE KEY-----anotherkey-----END PRIVATE KEY-----\\n\",\n \"client_email\": \"emailaddress\",\n \"client_id\": \"id\",\n \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n \"token_uri\": \"https://oauth2.googleapis.com/token\",\n \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n \"client_x509_cert_url\": \"someurl\"\n}\n```\n\nGetting one of these is summarized in the Google Cloud docs for [Creating a service account](https://cloud.google.com/docs/authentication/), but more explicit instructions can be found in the [Handprint project Wiki pages on GitHub](https://github.com/caltechlibrary/handprint/wiki/Getting-Google-Cloud-credentials). Once you have downloaded a Google credentials file from Google, save the file somewhere on your computer (for the sake of this example, assume it is `mygooglecredentials.json`), and use the command discussed above to make Handprint copy the credentials file:\n```sh\nhandprint -a google mygooglecredentials.json\n```\n\n\n#### Amazon\n\nAmazon credentials for AWS take the form of two alphanumeric strings: a _key id_ string and a _secret access key_ string. In addition, the service needs to be invoked with a region identifier. For the purposes of Handprint, these should be stored in a JSON file with the following format:\n\n```json\n{\n \"aws_access_key_id\": \"YOUR_KEY_ID_HERE\",\n \"aws_secret_access_key\": \"YOUR_ACCESS_KEY_HERE\",\n \"region_name\": \"YOUR_REGION_NAME_HERE\"\n}\n```\n\nGetting this information is, thankfully, a relatively simple process for Amazon's services. Instructions can be found in the [Handprint project Wiki pages on GitHub](https://github.com/caltechlibrary/handprint/wiki/Creating-credentials-for-use-with-Amazon-Rekognition). Once you have obtained the two alphanumeric keys and a region identifier string, use a text editor to create a JSON file in the simple format shown above, save that file somewhere on your computer (for the sake of this example, assume it is `myamazoncredentials.json`), and use _two_ commands to make Handprint copy the credentials file for the two different Amazon services currently supported by Handprint:\n```sh\nhandprint -a amazon-textract myamazoncredentials.json\nhandprint -a amazon-rekognition myamazoncredentials.json\n```\n\n\n\u25b6\ufe0e Usage\n-------\n\nHandprint comes with a single command-line interface program called `handprint`. Here is a screen cast to give a sense for what it's like to run Handprint. Click on the following image:\n\n

\n \"Screencast\n

\n\nThe `handprint` command-line program should end up installed in a location where software is normally installed on your computer, if the installation steps described in the previous section proceed successfully. Running Handprint from a terminal shell then should be as simple as running any other shell command on your system:\n\n```bash\nhandprint -h\n```\n\nIf that fails for some reason, you should be able to run Handprint from anywhere using the normal approach for running Python modules:\n\n```bash\npython3 -m handprint -h\n```\n\nThe `-h` option (`/h` on Windows) will make `handprint` display some help information and exit immediately. To make Handprint do more, you can supply other arguments that instruct Handprint to process image files (or alternatively, URLs pointing to image files at a network location) and run text recognition algorithms on them, as explained below.\n\n\n### _Supported HTR/OCR services_\n\nHandprint can contact more than one cloud service for HTR. You can use the `-l` option (`/l` on Windows) to make it display a list of the services currently implemented:\n\n```\n# handprint -l\nKnown services: amazon-rekognition, amazon-textract, google, microsoft\n```\n\nBy default, Handprint will run every known service in turn, creating annotated images to represent the results of each individual service. To invoke only specific services, use the `-s` option (`/s` on Windows) followed by a service name or a list of names separated by commas (e.g., `google,microsoft`). For example, the following command will save the results of invoking only Microsoft's text recognition service on a page from [Clara Barton's unpublished draft book \"The Life of My Childhood\"](https://picryl.com/media/clara-barton-papers-speeches-and-writings-file-1849-1947-books-the-life-of-71), available in Handprint's source directory:\n```csh\nhandprint -s microsoft tests/images/public-domain/clara-barton-life-of-my-childhood-p90.jpg\n```\n\nHere is what that result looks like:\n\"Example\n\n\n### _Input files and URLs_\n\nAfter credentials are installed, running Handprint _without_ the `-a` option will invoke one or more services on files, directories of files, or URLs pointing to files. More specifically, inputs can be supplied in any of the following ways:\n\n* One or more directory paths or one or more image file paths on the local disk, which will be interpreted as images (either individually or in directories) to be processed\n* One or more URLs, which will be interpreted as network locations of image files to be processed\n* If given the `-f` option (`/f` on Windows), a file containing either image paths or image URLs to be processed\n\nHandprint considers each input path individually, and determines when an input is a URL based on whether the given path begins with letters followed by the characters `:/` followed by the rest of the path (e.g., `http://some/other/characters`). If any of the input images are URLs, Handprint will first download the images found at the URLs to a directory indicated by the option `-o` (`/o` on Windows). If a destination directory is not provided via `-o`, the current working directory where Handprint is running is used instead.\n\nNo matter whether files or URLs, each input should be a single image of a document page in which text should be recognized. Handprint reads a number of common formats: JP2, JPEG, PNG, GIF, BMP, and TIFF. However, for simplicity and maximum compatibility with all cloud services, **Handprint always converts all input files to PNG** if they are not already in that format, before sending them to a service. Handprint also resizes images if necessary, to the smallest size accepted by any of the services invoked if an image exceeds that size. (For example, if service A accepts files up to 10 MB in size and service B accepts files up to 5 MB, all input images will be resized to 5 MB before sending them to A and B, even if A could accept a higher-resolution image.)\n\nNote that providing URLs on the command line can be problematic due to how terminal shells interpret certain characters, and so when supplying URLs, it's usually better to store the URLs in a file in combination with the `-f` option (`/f` on Windows).\n\n\n### _Annotated output images_\n\nBy default, Handprint will create a single output file for each input file. This file will be have the suffix `.all-results.png` and contain an annotated version of the results for each service invoked, tiled in a _N_×_N_ grid fashion to produce one (big) output image. Here is a sample output image to illustrate:\n\n

\n\"Example\n

\n\nThe 2×2 image above was produced by running the following command from the Handprint source directory:\n```csh\nhandprint tests/images/public-domain/H96566k.jpg\n```\n\nThe individual results, as well as individual annotated images corresponding to the results from each service, will not be retained unless the `-e` extended results option (`/e` on Windows) is invoked. The production of the overview grid image can be skipped by using the `-G` option (`/G` on Windows).\n\n\n### Extended results\n\nIf the `-e` option `-e` (`/e` on Windows) is used, Handprint saves not only the overview image containing all the results, but also, individual annotated images for each service's results, the raw data (converted to a JSON file by Handprint), and the text extracted by the service. These additional outputs will be written in files named after the original files with the addition of a string that indicates the service used. For example, a file named `somefile.jpg` will produce\n\n```\nsomefile.png\nsomefile.amazon-textract.png\nsomefile.amazon-textract.json\nsomefile.amazon-textract.txt\nsomefile.google.png\nsomefile.google.json\nsomefile.google.txt\n...\n```\n\nA complication arises with using URLs in combination with the `-e` option: how should Handprint name the files that it writes? Some CMS systems store content using opaque schemes that provide no clear names in the URLs, making it impossible for a software tool such as Handprint to guess what file name would make sense to use for local storage. Worse, some systems create extremely long URLs, making it impractical to use the URL itself as the file name. For example, the following is a real URL pointing to an image in Caltech Archives:\n\n```\nhttps://hale.archives.caltech.edu/adore-djatoka//resolver?rft_id=https%3A%2F%2Fhale.archives.caltech.edu%2Fislandora%2Fobject%2Fhale%253A85240%2Fdatastream%2FJP2%2Fview%3Ftoken%3D7997253eb6195d89b2615e8fa60708a97204a4cdefe527a5ab593395ac7d4327&url_ver=Z39.88-2004&svc_id=info%3Alanl-repo%2Fsvc%2FgetRegion&svc_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajpeg2000&svc.format=image%2Fjpeg&svc.level=4&svc.rotate=0\n```\n\nTo deal with this situation, Handprint manufactures its own file names when a URL is encountered. The scheme is simple: by default, Handprint will use a base name of `document-N`, where `N` is an integer. The integers start from `1` for every run of Handprint, and the integers count the URLs found either on the command line or in the file indicated by the `-f` option. The image found at a given URL is stored in a file named `document-N.E` where `E` is the format extension (e.g., `document-1.jpg`, `document-1.png`, etc.). The URL itself is stored in another file named `document-1.url`. Thus, the files produced by Handprint will look like this when the `-e` option is used (assuming, for this example, that the files at the source URLs are in JPEG format):\n\n```\ndocument-1.jpg\ndocument-1.url\ndocument-1.google.png\ndocument-1.google.json\ndocument-1.google.txt\ndocument-1.microsoft.png\ndocument-1.microsoft.json\ndocument-1.microsoft.txt\n...\ndocument-2.jpg\ndocument-2.url\ndocument-2.google.png\ndocument-2.google.json\ndocument-2.google.txt\ndocument-2.microsoft.png\ndocument-2.microsoft.json\ndocument-2.microsoft.txt\n...\ndocument-3.jpg\ndocument-3.url\ndocument-3.google.png\ndocument-3.google.json\ndocument-3.google.txt\ndocument-3.microsoft.png\ndocument-3.microsoft.json\ndocument-3.microsoft.txt\n...\n```\n\nThe base name `document` can be changed using the `-b` option (`/b` on Windows). For example, running Handprint with the option `-b einstein` will cause the outputs to be named `einstein-1.jpg`, `einstein-1.url`, etc.\n\nFinally, if an image is too large for any of the services invoked, then Handprint will resize it prior to sending the image to any of the services (as noted above). It will write the reduced image to a file named `FILENAME-reduced.EXT`, where `FILENAME` is the original file name and `EXT` is the file extension. This means that if an image needs to be resized, the results of applying the text recognition services will be, e.g.,\n\n```\ndocument-1-reduced.png\ndocument-1-reduced.google.png\ndocument-1-reduced.google.json\ndocument-1-reduced.google.txt\ndocument-1-reduced.microsoft.png\ndocument-1-reduced.microsoft.json\ndocument-1-reduced.microsoft.txt\n...\n```\n\n### _Other options_\n\nHandprint produces color-coded diagnostic output as it runs, by default. However, some terminals or terminal configurations may make it hard to read the text with colors, so Handprint offers the `-C` option (`/C` on Windows) to turn off colored output.\n\nHandprint will send files to the different services in parallel, using a number of process threads equal to 1/2 of the number of cores on the computer it is running on. (E.g., if your computer has 4 cores, it will by default use at most 2 threads.) The `-t` option (`/t` on Windows) can be used to change this number.\n\nIf given the `-@` option (`/@` on Windows), this program will print additional diagnostic output as it runs; in addition, it will start the Python debugger (`pdb`) when an exception occurs, instead of simply exiting. *Important*: some Python version/platform combinations seem to crash outright if `pdb` is invoked in a process thread – something that is likely to happen if you are debugging the execution of Handprint. Consequently, Handprint's debug mode (via the `-@` option) almost always has to be combined with `-t 1` to make Handprint use only one thread.\n\nIf given the `-V` option (`/V` on Windows), this program will print the version and other information, and exit without doing anything else.\n\n\n### _Command line options summary_\n\nThe following table summarizes all the command line options available. (Note: on Windows computers, `/` must be used as the prefix character instead of the `-` dash character):\n\n| Short | Long form opt    | Meaning | Default | |\n|----------|-------------------|----------------------|---------|---|\n| `-a`_A_ | `--add-creds`_A_ | Add credentials for service _A_ and exit | | |\n| `-b`_B_ | `--base-name`_B_ | Write outputs to files named _B_-n | Use the base names of the image files | \u2691 |\n| `-C` | `--no-color` | Don't color-code the output | Use colors in the terminal output |\n| `-e` | `--extended` | Produce extended results | Produce only results overview image | |\n| `-f`_F_ | `--from-file`_F_ | Read file names or URLs from file _F_ | Use names or URLs on command line |\n| `-G` | `--no-grid` | Do not produce results overview image | Produce an _N_×_N_ grid image| |\n| `-h` | `--help` | Display help text and exit | | |\n| `-l` | `--list` | Display list of known services and exit | | | \n| `-o`_O_ | `--output`_O_ | Write outputs to directory _O_ | Directories where images are found | |\n| `-q` | `--quiet` | Don't print messages while working | Be chatty while working |\n| `-s`_S_ | `--service`_S_ | Use recognition service _S_ | \"all\" | |\n| `-t`_T_ | `--threads`_T_ | Use _T_ number of threads | Use #cores/2 threads | |\n| `-V` | `--version` | Display program version info and exit | | |\n| `-@` | `--debug` | Debugging mode | Normal mode | |\n\n\u2691   If URLs are given, then the outputs will be written by default to names of the form `document-n`, where n is an integer. Examples: `document-1.jpg`, `document-1.google.txt`, etc. This is because images located in network content management systems may not have any clear names in their URLs.\n\n\n\u2691 Known issues and limitations\n-------------------------------\n\nHere are some known limitations in the current version of Handprint:\n\n* The Amazon Rekognition API will return [at most 50 words in an image](https://docs.aws.amazon.com/rekognition/latest/dg/limits.html).\n* Some services have different file size restrictions depending on the format of the file, but Handprint always uses the same limit for all files for a given service. This is a code simplification.\n\n\n\u2047 Getting help\n-------------\n\nIf you find an issue, please submit it in [the GitHub issue tracker](https://github.com/caltechlibrary/handprint/issues) for this repository.\n\n\n\u266c Contributing\n-------------\n\nI would be happy to receive your help and participation with enhancing Handprint! Please visit the [guidelines for contributing](CONTRIBUTING.md) for some tips on getting started.\n\n\n\u262e\ufe0e License\n---------\n\nCopyright (C) 2018–2019, Caltech. This software is freely distributed under a BSD/MIT type license. Please see the [LICENSE](LICENSE) file for more information.\n\n\n\u2761 Authors and history\n--------------------\n\n[Mike Hucka](https://github.com/mhucka) designed and implemented Handprint beginning in mid-2018.\n\n\n\u263a\ufe0e Acknowledgments\n-----------------------\n\nThe [vector artwork](https://thenounproject.com/search/?q=hand&i=733265) of a hand used as a logo for Handprint was created by [Kevin](https://thenounproject.com/kevn/) from the Noun Project. It is licensed under the Creative Commons [CC-BY 3.0](https://creativecommons.org/licenses/by/3.0/) license.\n\nHandprint benefitted from feedback from several people, notably from Tommy Keswick, Mariella Soprano, Peter Collopy and Stephen Davison.\n\nHandprint makes use of numerous open-source packages, without which it would have been effectively impossible to develop Turf with the resources we had. I want to acknowledge this debt. In alphabetical order, the packages are:\n\n* [appdirs](https://github.com/ActiveState/appdirs) – module for determining appropriate platform-specific directories\n* [boto3](https://github.com/boto/boto3) – Amazon AWS SDK for Python\n* [colorama](https://github.com/tartley/colorama) – makes ANSI escape character sequences work under MS Windows terminals\n* [colored](https://gitlab.com/dslackw/colored) – library for color and formatting in terminal\n* [google-api-core, google-api-python-client, google-auth, google-auth-httplib2, google-cloud, google-cloud-vision, googleapis-common-protos, google_api_python_client](https://github.com/googleapis/google-cloud-python) – Google API libraries \n* [halo](https://github.com/ManrajGrover/halo) – busy-spinners for Python command-line programs\n* [humanize](https://github.com/jmoiron/humanize) – make numbers more easily readable by humans\n* [httplib2](https://github.com/httplib2/httplib2) – a comprehensive HTTP client library\n* [imagesize](https://github.com/shibukawa/imagesize_py) – determine the dimensions of an image\n* [ipdb](https://github.com/gotcha/ipdb) – the IPython debugger\n* [matplotlib](https://matplotlib.org) – a Python 2-D plotting library\n* [oauth2client](https://github.com/googleapis/oauth2client) – Google OAuth 2.0 library\n* [Pillow](https://github.com/python-pillow/Pillow) – a fork of the Python Imaging Library\n* [plac](http://micheles.github.io/plac/) – a command line argument parser\n* [psutil](https://github.com/giampaolo/psutil) – cross-platform package for process and system monitoring in Python\n* [requests](http://docs.python-requests.org) – an HTTP library for Python\n* [setuptools](https://github.com/pypa/setuptools) – library for `setup.py`\n* [termcolor](https://pypi.org/project/termcolor/) – ANSI color formatting for output in terminal\n\nFinally, I am grateful for computing & institutional resources made available by the California Institute of Technology.\n\n
\n \n \n \n
\n\n\n", "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/caltechlibrary/handprint", "keywords": "", "license": "BSD 3-clause license", "maintainer": "Michael Hucka", "maintainer_email": "mhucka@library.caltech.edu", "name": "handprint", "package_url": "https://pypi.org/project/handprint/", "platform": "any", "project_url": "https://pypi.org/project/handprint/", "project_urls": { "Homepage": "https://github.com/caltechlibrary/handprint", "Source": "https://github.com/caltechlibrary/handprint", "Tracker": "https://github.com/caltechlibrary/handprint/issues" }, "release_url": "https://pypi.org/project/handprint/1.0.1/", "requires_dist": [ "appdirs (>=1.4.3)", "boto3 (>=1.9.193)", "colorful (>=0.5.1)", "google-api-core (>=1.4.0)", "google-api-python-client (>=1.7.4)", "google-auth-httplib2 (>=0.0.3)", "google-auth (>=1.5.1)", "google-cloud-vision (>=0.34.0)", "google-cloud (>=0.34.0)", "googleapis-common-protos (>=1.5.3)", "grpcio (>=1.15.0)", "halo (>=0.0.18)", "humanize (>=0.5.1)", "imagesize (>=1.1.0)", "matplotlib (>=2.2.3)", "Pillow (>=5.2.0)", "plac (>=1.0.0)", "psutil (>=5.6.3)", "requests (>=2.19.1)", "setuptools (>=39.1.0)", "termcolor (>=1.1.0)", "urllib3 (>=1.23)" ], "requires_python": ">=3.5", "summary": "Handprint: HANDwritten Page RecognitIoN Test", "version": "1.0.1" }, "last_serial": 5706642, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "ed2bb44b486579d7cdf76e4177d80552", "sha256": "98b80cf0df082f6e8aa9eab595dbd21e31cc260cc561372caeba402e7da30ede" }, "downloads": -1, "filename": "handprint-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ed2bb44b486579d7cdf76e4177d80552", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 59750, "upload_time": "2019-08-21T01:14:04", "url": "https://files.pythonhosted.org/packages/ea/67/3a7182e5e4035d626dd7e5554fc07d29410d55b5d664f9eea2a3054c18e0/handprint-1.0.0-py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "65c1658dff6cb0ef06450d2f8d6ca760", "sha256": "3dc3bb9291080b041a98a15234debbba5fd08f3e41b3bdb92539254b46bff203" }, "downloads": -1, "filename": "handprint-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "65c1658dff6cb0ef06450d2f8d6ca760", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 59871, "upload_time": "2019-08-21T02:27:14", "url": "https://files.pythonhosted.org/packages/16/0e/b5725d6455906835d09e370deda55908035d16dd82ce08ff95d167271669/handprint-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e6d76ed731ae58e30d8be170d5357744", "sha256": "206f5d10b20625ee2516a4f98d70e3d5d4c627dbb63d0ecb79d9aec2595c1fcb" }, "downloads": -1, "filename": "handprint-1.0.1.tar.gz", "has_sig": false, "md5_digest": "e6d76ed731ae58e30d8be170d5357744", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 65908, "upload_time": "2019-08-21T02:27:16", "url": "https://files.pythonhosted.org/packages/3e/fa/c9af790433a603f58fe7955c250069d1c0c30e7e79399507dfee76c65e90/handprint-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "65c1658dff6cb0ef06450d2f8d6ca760", "sha256": "3dc3bb9291080b041a98a15234debbba5fd08f3e41b3bdb92539254b46bff203" }, "downloads": -1, "filename": "handprint-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "65c1658dff6cb0ef06450d2f8d6ca760", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 59871, "upload_time": "2019-08-21T02:27:14", "url": "https://files.pythonhosted.org/packages/16/0e/b5725d6455906835d09e370deda55908035d16dd82ce08ff95d167271669/handprint-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e6d76ed731ae58e30d8be170d5357744", "sha256": "206f5d10b20625ee2516a4f98d70e3d5d4c627dbb63d0ecb79d9aec2595c1fcb" }, "downloads": -1, "filename": "handprint-1.0.1.tar.gz", "has_sig": false, "md5_digest": "e6d76ed731ae58e30d8be170d5357744", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 65908, "upload_time": "2019-08-21T02:27:16", "url": "https://files.pythonhosted.org/packages/3e/fa/c9af790433a603f58fe7955c250069d1c0c30e7e79399507dfee76c65e90/handprint-1.0.1.tar.gz" } ] }