{"id":16960865,"url":"https://github.com/carleslc/imagetotext","last_synced_at":"2026-03-10T11:32:08.925Z","repository":{"id":88500419,"uuid":"187394698","full_name":"Carleslc/ImageToText","owner":"Carleslc","description":"OCR with Google's AI technology (Cloud Vision API)","archived":false,"fork":false,"pushed_at":"2023-02-22T22:15:24.000Z","size":19,"stargazers_count":75,"open_issues_count":0,"forks_count":16,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-26T08:27:19.540Z","etag":null,"topics":["artificial-intelligence","google-cloud","google-cloud-vision","image-to-text","img2txt","ocr","optical-character-recognition"],"latest_commit_sha":null,"homepage":"https://carleslc.me/ImageToText","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Carleslc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"carleslc"}},"created_at":"2019-05-18T18:55:30.000Z","updated_at":"2025-06-07T02:52:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"2ae5fa18-5511-4471-9873-8d87bfe0eae9","html_url":"https://github.com/Carleslc/ImageToText","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Carleslc/ImageToText","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Carleslc%2FImageToText","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Carleslc%2FImageToText/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Carleslc%2FImageToText/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Carleslc%2FImageToText/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Carleslc","download_url":"https://codeload.github.com/Carleslc/ImageToText/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Carleslc%2FImageToText/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30332294,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artificial-intelligence","google-cloud","google-cloud-vision","image-to-text","img2txt","ocr","optical-character-recognition"],"created_at":"2024-10-13T22:50:22.630Z","updated_at":"2026-03-10T11:32:08.910Z","avatar_url":"https://github.com/Carleslc.png","language":"Python","funding_links":["https://ko-fi.com/carleslc","https://ko-fi.com/C0C2VFGD"],"categories":[],"sub_categories":[],"readme":"# ImageToText\n\nOCR ([*Optical Character Recognition*](https://en.wikipedia.org/wiki/Optical_character_recognition)) with Google's AI technology ([Cloud Vision API](https://cloud.google.com/vision/docs/ocr)).\n\nThe Vision API can detect and extract text from images.\n\n[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/C0C2VFGD)\n\n## Install\n\n1. Download [Python 3.6+](https://www.python.org/downloads/) or follow [this guide from Google Cloud](https://cloud.google.com/python/setup).\n2. Clone or [download](https://github.com/Carleslc/ImageToText/archive/refs/heads/master.zip) this repository.\n3. Inside this repository, install the `img2txt` script from your terminal:\n  \n   ```sh\n   pip install -e .\n   ```\n\nTo uninstall: `pip uninstall ImageToText`\n\n## Usage\n\n```\nusage: img2txt [-h] [--url] [--document] [--languages LANGUAGES] [--full] [--confidence CONFIDENCE] [--key KEY] path\n\npositional arguments:\n  path                  path to image\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --url                 specify the path for an external image located on the Web (http:// or https://) or in Google Cloud Storage (gs://)\n  --document            optimized for dense images\n  --languages LANGUAGES, --language LANGUAGES\n                        specify language hints from https://cloud.google.com/vision/docs/languages (comma separated)\n  --full, --verbose     show full description (paragraphs, per-word confidence, boundaries...)\n  --confidence CONFIDENCE\n                        display possible mistakes for symbols with low confidence. Default: 0.6\n  --key KEY             explicitly define the path to your service account JSON credentials\n```\n\n## Authentication\n\nFollow [these instructions](https://cloud.google.com/vision/docs/detect-labels-image-client-libraries#before-you-begin) to set up a project with the Cloud Vision API enabled:\n\n1. [Select or create a Google Cloud Platform project](https://console.cloud.google.com/projectselector2). Project name suggestion: *ImageToText*\n2. [Enable Cloud Vision API for your project](https://console.cloud.google.com/apis/library/vision.googleapis.com).\n3. [Create a service account and get your JSON credentials](https://console.cloud.google.com/iam-admin/serviceaccounts/create). Service account name suggestion: *ImageToText*\n4. [Make sure that billing is enabled for your project](https://console.cloud.google.com/billing/linkedaccount).\n  \n   Pricing is based on [Google Cloud Vision API quota](https://cloud.google.com/vision/pricing#prices): *1,000 requests/month free*\n\nTo authenticate your project you need to reference the service account JSON credentials you just downloaded.\nYou have different options to do it, choose what you prefer:\n\n### service_account.json file\n\nRename the JSON you downloaded in step 3 to `service_account.json` and place it inside this repository folder.\n\n### `--key` parameter\n\nAnother option is to explicitly specify the `--key` parameter on every script execution:\n\n`img2txt abbey_road.jpg --key \"/path/to/service_account.json\"`\n\n### Environment variable\n\nYou can also [set the ***GOOGLE_APPLICATION_CREDENTIALS*** environmental variable](https://cloud.google.com/docs/authentication/provide-credentials-adc#local-key):\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca\u003e\u003ci\u003ebash\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n\n  \u003cp\u003eAdd to your \u003ccode\u003e.bash_profile\u003c/code\u003e file:\u003c/p\u003e\n\n  \u003ccode\u003eexport GOOGLE_APPLICATION_CREDENTIALS=\"/path/to/service_account.json\"\u003c/code\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca\u003e\u003ci\u003efish\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n\n  \u003cp\u003eAdd to your \u003ccode\u003econfig.fish\u003c/code\u003e file:\u003c/p\u003e\n\n  \u003ccode\u003eset -gx GOOGLE_APPLICATION_CREDENTIALS \"/path/to/service_account.json\"\u003c/code\u003e\n\n\u003c/details\u003e\n\n## Examples\n\n![abbey_road.JPG](https://cloud.google.com/vision/docs/images/abbey_road.JPG)\n\nFrom file:\n\n`img2txt abbey_road.jpg`\n\nFrom any URL from the web:\n\n`img2txt --url https://cloud.google.com/vision/docs/images/abbey_road.JPG`\n\n```\nLanguage: en\n\nABBEY\nROAD NW8\nCITY OF WESTMINSTER\n```\n\n![sign.jpg](https://cloud.google.com/static/vision/docs/images/sign_small.jpg)\n\nFrom Google Cloud Storage:\n\n`img2txt --url gs://cloud-samples-data/vision/ocr/sign.jpg`\n\n```\nLanguage: en\n\nWAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE\n```\n\nWith full description:\n\n`img2txt --full --url https://cloud.google.com/static/vision/docs/images/sign_small.jpg`\n\n```\nLanguage: en\n\nWAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE\nbounds: (52,143),(391,143),(391,343),(52,343)\n\nWAITING\nbounds: (59,143),(355,157),(353,197),(57,184)\n\n?\nbounds: (359,157),(391,158),(389,198),(357,197)\n\nPLEASE\nbounds: (211,214),(332,219),(331,241),(210,236)\n\nTURN\nbounds: (213,246),(299,249),(298,271),(212,268)\n\nOFF\nbounds: (313,250),(372,252),(371,273),(312,271)\n\nYOUR\nbounds: (211,281),(303,283),(303,304),(211,302)\n\nENGINE\nbounds: (213,315),(336,318),(335,340),(212,337)\n```\n\n![Example image in spanish](https://i.imgur.com/7YhDbGf.jpg)\n\nWith dense documents:\n\n`img2txt --document --url https://i.imgur.com/7YhDbGf.jpg`\n\nSpecify [language hints](https://cloud.google.com/vision/docs/languages) (Optional):\n\n`img2txt --document --language \"es\" --url https://i.imgur.com/7YhDbGf.jpg`\n\n```\nLanguage: es\n\nExisten otras razones por las que masticar los alimentos como es debido es algo\nesencial para nuestro bienestar. Según un fascinante estudio de investigación rea-\nlizado en la Universidad de Gifu, en Japón, la masticación mejora la memoria al\nreducir la liberación de las hormonas del estrés. La técnica de formación de ima-\ngen por resonancia magnética (IRM) muestra que la masticación estimula el hi-\npocampo, el cual, a su vez, ayuda a controlar los niveles de hormonas del estrés en\nsangre. El resultado es que el simple acto de masticar reduce tanto el estrés como\nlas hormonas del estrés, de modo que masticar bien los alimentos puede reducir\nefectivamente el grado de ansiedad.\nLos científicos japoneses descubrieron también que cuando faltan dientes o és-\ntos se hallan en mal estado, se suele masticar menos. Ello hace que, acto seguido,\naumenten los niveles de hormonas del estrés. La conclusión de este estudio es que\nuna buena salud dental y una adecuada masticación son factores muy importantes\npara conservar la memoria cuando envejecemos y para protegernos de los dañinos\nefectos del estrés.\nUna vez ha pasado por el esófago, el alimento entra en el estómago. Si lo que co-\nmemos contiene hidratos de carbono (azúcares complejos y almidones como los que\nse encuentran\n```\n\nWith full description:\n\n`img2txt --full --document --url https://i.imgur.com/7YhDbGf.jpg`\n\n\u003cdetails\u003e\n\u003csummary\u003eOutput\u003c/summary\u003e\n\n\u003cpre\u003e\u003ccode\u003eLanguage: es\n\nExisten otras razones por las que masticar los alimentos como es debido es algo\nesencial para nuestro bienestar. Según un fascinante estudio de investigación rea-\nlizado en la Universidad de Gifu, en Japón, la masticación mejora la memoria al\nreducir la liberación de las hormonas del estrés. La técnica de formación de ima-\ngen por resonancia magnética (IRM) muestra que la masticación estimula el hi-\npocampo, el cual, a su vez, ayuda a controlar los niveles de hormonas del estrés en\nsangre. El resultado es que el simple acto de masticar reduce tanto el estrés como\nlas hormonas del estrés, de modo que masticar bien los alimentos puede reducir\nefectivamente el grado de ansiedad.\nLos científicos japoneses descubrieron también que cuando faltan dientes o és-\ntos se hallan en mal estado, se suele masticar menos. Ello hace que, acto seguido,\naumenten los niveles de hormonas del estrés. La conclusión de este estudio es que\nuna buena salud dental y una adecuada masticación son factores muy importantes\npara conservar la memoria cuando envejecemos y para protegernos de los dañinos\nefectos del estrés.\nUna vez ha pasado por el esófago, el alimento entra en el estómago. Si lo que co-\nmemos contiene hidratos de carbono (azúcares complejos y almidones como los que\nse encuentran\n\nSINGLE LINE\n\nExisten otras razones por las que masticar los alimentos como es debido es algo esencial para nuestro bienestar. Según un fascinante estudio de investigación realizado en la Universidad de Gifu, en Japón, la masticación mejora la memoria al reducir la liberación de las hormonas del estrés. La técnica de formación de imagen por resonancia magnética (IRM) muestra que la masticación estimula el hipocampo, el cual, a su vez, ayuda a controlar los niveles de hormonas del estrés en sangre. El resultado es que el simple acto de masticar reduce tanto el estrés como las hormonas del estrés, de modo que masticar bien los alimentos puede reducir efectivamente el grado de ansiedad. Los científicos japoneses descubrieron también que cuando faltan dientes o éstos se hallan en mal estado, se suele masticar menos. Ello hace que, acto seguido, aumenten los niveles de hormonas del estrés. La conclusión de este estudio es que una buena salud dental y una adecuada masticación son factores muy importantes para conservar la memoria cuando envejecemos y para protegernos de los dañinos efectos del estrés. Una vez ha pasado por el esófago, el alimento entra en el estómago. Si lo que comemos contiene hidratos de carbono (azúcares complejos y almidones como los que se encuentran\n\nPARAGRAPHS\n\n--\nExisten otras razones por las que masticar los alimentos como es debido es algo esencial para nuestro bienestar. Según un fascinante estudio de investigación realizado en la Universidad de Gifu, en Japón, la masticación mejora la memoria al reducir la liberación de las hormonas del estrés. La técnica de formación de imagen por resonancia magnética (IRM) muestra que la masticación estimula el hipocampo, el cual, a su vez, ayuda a controlar los niveles de hormonas del estrés en sangre. El resultado es que el simple acto de masticar reduce tanto el estrés como las hormonas del estrés, de modo que masticar bien los alimentos puede reducir efectivamente el grado de ansiedad.\n\nLos científicos japoneses descubrieron también que cuando faltan dientes o éstos se hallan en mal estado, se suele masticar menos. Ello hace que, acto seguido, aumenten los niveles de hormonas del estrés. La conclusión de este estudio es que una buena salud dental y una adecuada masticación son factores muy importantes para conservar la memoria cuando envejecemos y para protegernos de los dañinos efectos del estrés.\n\nUna vez ha pasado por el esófago, el alimento entra en el estómago. Si lo que comemos contiene hidratos de carbono (azúcares complejos y almidones como los que\n\nse encuentran\n--\n\nBlock confidence: 0.991\n\nExisten otras razones por las que masticar los alimentos como es debido es algo esencial para nuestro bienestar. Según un fascinante estudio de investigación realizado en la Universidad de Gifu, en Japón, la masticación mejora la memoria al reducir la liberación de las hormonas del estrés. La técnica de formación de imagen por resonancia magnética (IRM) muestra que la masticación estimula el hipocampo, el cual, a su vez, ayuda a controlar los niveles de hormonas del estrés en sangre. El resultado es que el simple acto de masticar reduce tanto el estrés como las hormonas del estrés, de modo que masticar bien los alimentos puede reducir efectivamente el grado de ansiedad.\n\nParagraph confidence: 0.991\n\n(0.992) Existen\n(0.991) otras\n(0.993) razones\n(0.983) por\n(0.992) las\n(0.991) que\n(0.993) masticar\n(0.981) los\n(0.994) alimentos\n(0.991) como\n(0.992) es\n(0.994) debido\n(0.989) es\n(0.988) algo\n(0.994) esencial\n(0.993) para\n(0.994) nuestro\n(0.994) bienestar\n(0.987) .\n(0.992) Según\n(0.996) un\n(0.994) fascinante\n(0.990) estudio\n(0.994) de\n(0.994) investigación\n(0.988) rea\n(0.990) lizado\n(0.995) en\n(0.994) la\n(0.995) Universidad\n(0.997) de\n(0.992) Gifu\n(0.988) ,\n(0.996) en\n(0.993) Japón\n(0.986) ,\n(0.986) la\n(0.994) masticación\n(0.995) mejora\n(0.990) la\n(0.995) memoria\n(0.980) al\n(0.985) reducir\n(0.992) la\n(0.994) liberación\n(0.995) de\n(0.995) las\n(0.993) hormonas\n(0.996) del\n(0.992) estrés\n(0.965) .\n(0.994) La\n(0.994) técnica\n(0.998) de\n(0.995) formación\n(0.995) de\n(0.965) ima\n(0.991) gen\n(0.989) por\n(0.995) resonancia\n(0.994) magnética\n(0.987) (\n(0.972) IRM\n(0.975) )\n(0.993) muestra\n(0.995) que\n(0.988) la\n(0.992) masticación\n(0.992) estimula\n(0.996) el\n(0.960) hi\n(0.984) pocampo\n(0.891) ,\n(0.990) el\n(0.992) cual\n(0.972) ,\n(0.985) a\n(0.990) su\n(0.992) vez\n(0.984) ,\n(0.990) ayuda\n(0.992) a\n(0.991) controlar\n(0.982) los\n(0.994) niveles\n(0.990) de\n(0.992) hormonas\n(0.994) del\n(0.980) estrés\n(0.991) en\n(0.991) sangre\n(0.960) .\n(0.974) El\n(0.991) resultado\n(0.992) es\n(0.991) que\n(0.989) el\n(0.991) simple\n(0.991) acto\n(0.995) de\n(0.994) masticar\n(0.988) reduce\n(0.993) tanto\n(0.994) el\n(0.971) estrés\n(0.981) como\n(0.991) las\n(0.994) hormonas\n(0.992) del\n(0.994) estrés\n(0.987) ,\n(0.997) de\n(0.997) modo\n(0.995) que\n(0.995) masticar\n(0.995) bien\n(0.996) los\n(0.996) alimentos\n(0.995) puede\n(0.992) reducir\n(0.996) efectivamente\n(0.993) el\n(0.988) grado\n(0.986) de\n(0.992) ansiedad\n(0.945) .\n\nBlock confidence: 0.989\n\nLos científicos japoneses descubrieron también que cuando faltan dientes o éstos se hallan en mal estado, se suele masticar menos. Ello hace que, acto seguido, aumenten los niveles de hormonas del estrés. La conclusión de este estudio es que una buena salud dental y una adecuada masticación son factores muy importantes para conservar la memoria cuando envejecemos y para protegernos de los dañinos efectos del estrés.\n\nParagraph confidence: 0.989\n\n(0.980) Los\n(0.976) científicos\n(0.995) japoneses\n(0.985) descubrieron\n(0.985) también\n(0.994) que\n(0.994) cuando\n(0.996) faltan\n(0.994) dientes\n(0.989) o\n(0.903) és\n(0.985) tos\n(0.993) se\n(0.994) hallan\n(0.995) en\n(0.994) mal\n(0.991) estado\n(0.986) ,\n(0.993) se\n(0.992) suele\n(0.993) masticar\n(0.995) menos\n(0.987) .\n(0.990) Ello\n(0.992) hace\n(0.993) que\n(0.989) ,\n(0.995) acto\n(0.992) seguido\n(0.935) ,\n(0.993) aumenten\n(0.990) los\n(0.995) niveles\n(0.995) de\n(0.990) hormonas\n(0.996) del\n(0.990) estrés\n(0.984) .\n(0.993) La\n(0.970) conclusión\n(0.994) de\n(0.996) este\n(0.996) estudio\n(0.995) es\n(0.991) que\n(0.985) una\n(0.993) buena\n(0.986) salud\n(0.992) dental\n(0.995) y\n(0.994) una\n(0.996) adecuada\n(0.993) masticación\n(0.995) son\n(0.995) factores\n(0.995) muy\n(0.993) importantes\n(0.994) para\n(0.996) conservar\n(0.992) la\n(0.993) memoria\n(0.994) cuando\n(0.993) envejecemos\n(0.991) y\n(0.991) para\n(0.992) protegernos\n(0.993) de\n(0.985) los\n(0.950) dañinos\n(0.995) efectos\n(0.993) del\n(0.971) estrés\n(0.933) .\n\nBlock confidence: 0.981\n\nUna vez ha pasado por el esófago, el alimento entra en el estómago. Si lo que comemos contiene hidratos de carbono (azúcares complejos y almidones como los que\n\nParagraph confidence: 0.987\n\n(0.988) Una\n(0.986) vez\n(0.978) ha\n(0.995) pasado\n(0.986) por\n(0.991) el\n(0.972) esófago\n(0.994) ,\n(0.989) el\n(0.993) alimento\n(0.995) entra\n(0.994) en\n(0.994) el\n(0.983) estómago\n(0.939) .\n(0.975) Si\n(0.984) lo\n(0.978) que\n(0.959) co\n(0.991) memos\n(0.995) contiene\n(0.994) hidratos\n(0.994) de\n(0.993) carbono\n(0.992) (\n(0.984) azúcares\n(0.990) complejos\n(0.995) y\n(0.988) almidones\n(0.982) como\n(0.985) los\n(0.985) que\n\nse encuentran\n\nParagraph confidence: 0.912\n\n(0.951) se\n(0.905) encuentran\n\u003c/code\u003e\u003c/pre\u003e\n\n\u003c/details\u003e\n\n![Handwriting example](https://cloud.google.com/static/vision/docs/images/detect_handwriting_OCR-detect-handwriting_SMALL.png)\n\nWith handwritten documents:\n\n`img2txt --document --url https://cloud.google.com/static/vision/docs/images/detect_handwriting_OCR-detect-handwriting_SMALL.png --confidence 0.7`\n\n```\nLanguage: en\n\nGoogle Cloud\nPlatform\n\nPossible mistake: symbol 'u' in word 'Cloud' (confidence: 0.680)\nPossible mistake: symbol 'P' in word 'Platform' (confidence: 0.639)\n```\n\nWith full description:\n\n`img2txt --document --url https://cloud.google.com/static/vision/docs/images/detect_handwriting_OCR-detect-handwriting_SMALL.png --confidence 0.7 --full`\n\n```\nLanguage: en\n\nGoogle Cloud\nPlatform\n\nSINGLE LINE\n\nGoogle Cloud Platform\n\nPARAGRAPHS\n\n--\nGoogle Cloud\n\nPlatform\n--\n\nBlock confidence: 0.894\n\nGoogle Cloud\n\nParagraph confidence: 0.917\n\n(0.990) Google\n(0.829) Cloud\nPossible mistake: symbol 'u' in word 'Cloud' (confidence: 0.680)\n\nPlatform\n\nParagraph confidence: 0.862\n\n(0.862) Platform\nPossible mistake: symbol 'P' in word 'Platform' (confidence: 0.639)\n```\n\n### Alternative: Use \u003cu\u003egcloud\u003c/u\u003e CLI\n\nTo perform entity analysis, use the [`gcloud ml vision detect-text`](https://cloud.google.com/sdk/gcloud/reference/ml/vision/detect-text) command using the [Google Cloud SDK](https://cloud.google.com/sdk/docs/) as shown in the following example:\n\n```sh\ngcloud auth login\ngcloud projects list # check your PROJECT_ID (e.g. imagetotext)\ngcloud config set project imagetotext\n```\n\n![abbey_road.JPG](https://docs.cloud.google.com/vision/docs/images/abbey_road.JPG)\n\n```\ngcloud ml vision detect-text \"https://cloud.google.com/vision/docs/images/abbey_road.JPG\" \u003e abbey_road.txt\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003eabbey_road.txt\u003c/code\u003e\u003c/summary\u003e\n\n\u003cpre\u003e\u003ccode\u003e{\n  \"responses\": [\n    {\n      \"fullTextAnnotation\": {\n        \"pages\": [\n          {\n            \"blocks\": [\n              {\n                \"blockType\": \"TEXT\",\n                \"boundingBox\": {\n                  \"vertices\": [\n                    {\n                      \"x\": 43,\n                      \"y\": 43\n                    },\n                    {\n                      \"x\": 267,\n                      \"y\": 40\n                    },\n                    {\n                      \"x\": 269,\n                      \"y\": 174\n                    },\n                    {\n                      \"x\": 45,\n                      \"y\": 177\n                    }\n                  ]\n                },\n                \"paragraphs\": [\n                  {\n                    \"boundingBox\": {\n                      \"vertices\": [\n                        {\n                          \"x\": 43,\n                          \"y\": 43\n                        },\n                        {\n                          \"x\": 267,\n                          \"y\": 40\n                        },\n                        {\n                          \"x\": 268,\n                          \"y\": 129\n                        },\n                        {\n                          \"x\": 44,\n                          \"y\": 132\n                        }\n                      ]\n                    },\n                    \"words\": [\n                      {\n                        \"boundingBox\": {\n                          \"vertices\": [\n                            {\n                              \"x\": 43,\n                              \"y\": 43\n                            },\n                            {\n                              \"x\": 182,\n                              \"y\": 41\n                            },\n                            {\n                              \"x\": 182,\n                              \"y\": 79\n                            },\n                            {\n                              \"x\": 43,\n                              \"y\": 81\n                            }\n                          ]\n                        },\n                        \"property\": {\n                          \"detectedLanguages\": [\n                            {\n                              \"confidence\": 1.0,\n                              \"languageCode\": \"en\"\n                            }\n                          ]\n                        },\n                        \"symbols\": [\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 43,\n                                  \"y\": 44\n                                },\n                                {\n                                  \"x\": 73,\n                                  \"y\": 44\n                                },\n                                {\n                                  \"x\": 73,\n                                  \"y\": 81\n                                },\n                                {\n                                  \"x\": 43,\n                                  \"y\": 81\n                                }\n                              ]\n                            },\n                            \"text\": \"A\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 73,\n                                  \"y\": 43\n                                },\n                                {\n                                  \"x\": 96,\n                                  \"y\": 43\n                                },\n                                {\n                                  \"x\": 96,\n                                  \"y\": 80\n                                },\n                                {\n                                  \"x\": 73,\n                                  \"y\": 80\n                                }\n                              ]\n                            },\n                            \"text\": \"B\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 103,\n                                  \"y\": 43\n                                },\n                                {\n                                  \"x\": 126,\n                                  \"y\": 43\n                                },\n                                {\n                                  \"x\": 126,\n                                  \"y\": 80\n                                },\n                                {\n                                  \"x\": 103,\n                                  \"y\": 80\n                                }\n                              ]\n                            },\n                            \"text\": \"B\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 131,\n                                  \"y\": 42\n                                },\n                                {\n                                  \"x\": 151,\n                                  \"y\": 42\n                                },\n                                {\n                                  \"x\": 151,\n                                  \"y\": 79\n                                },\n                                {\n                                  \"x\": 131,\n                                  \"y\": 79\n                                }\n                              ]\n                            },\n                            \"text\": \"E\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 154,\n                                  \"y\": 42\n                                },\n                                {\n                                  \"x\": 182,\n                                  \"y\": 42\n                                },\n                                {\n                                  \"x\": 182,\n                                  \"y\": 79\n                                },\n                                {\n                                  \"x\": 154,\n                                  \"y\": 79\n                                }\n                              ]\n                            },\n                            \"property\": {\n                              \"detectedBreak\": {\n                                \"type\": \"EOL_SURE_SPACE\"\n                              }\n                            },\n                            \"text\": \"Y\"\n                          }\n                        ]\n                      },\n                      {\n                        \"boundingBox\": {\n                          \"vertices\": [\n                            {\n                              \"x\": 46,\n                              \"y\": 94\n                            },\n                            {\n                              \"x\": 154,\n                              \"y\": 92\n                            },\n                            {\n                              \"x\": 155,\n                              \"y\": 130\n                            },\n                            {\n                              \"x\": 47,\n                              \"y\": 132\n                            }\n                          ]\n                        },\n                        \"property\": {\n                          \"detectedLanguages\": [\n                            {\n                              \"confidence\": 1.0,\n                              \"languageCode\": \"en\"\n                            }\n                          ]\n                        },\n                        \"symbols\": [\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 46,\n                                  \"y\": 95\n                                },\n                                {\n                                  \"x\": 69,\n                                  \"y\": 95\n                                },\n                                {\n                                  \"x\": 70,\n                                  \"y\": 132\n                                },\n                                {\n                                  \"x\": 47,\n                                  \"y\": 132\n                                }\n                              ]\n                            },\n                            \"text\": \"R\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 72,\n                                  \"y\": 94\n                                },\n                                {\n                                  \"x\": 96,\n                                  \"y\": 94\n                                },\n                                {\n                                  \"x\": 97,\n                                  \"y\": 131\n                                },\n                                {\n                                  \"x\": 73,\n                                  \"y\": 131\n                                }\n                              ]\n                            },\n                            \"text\": \"O\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 98,\n                                  \"y\": 94\n                                },\n                                {\n                                  \"x\": 126,\n                                  \"y\": 94\n                                },\n                                {\n                                  \"x\": 127,\n                                  \"y\": 131\n                                },\n                                {\n                                  \"x\": 99,\n                                  \"y\": 131\n                                }\n                              ]\n                            },\n                            \"text\": \"A\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 130,\n                                  \"y\": 93\n                                },\n                                {\n                                  \"x\": 154,\n                                  \"y\": 93\n                                },\n                                {\n                                  \"x\": 155,\n                                  \"y\": 130\n                                },\n                                {\n                                  \"x\": 131,\n                                  \"y\": 130\n                                }\n                              ]\n                            },\n                            \"property\": {\n                              \"detectedBreak\": {\n                                \"type\": \"SPACE\"\n                              }\n                            },\n                            \"text\": \"D\"\n                          }\n                        ]\n                      },\n                      {\n                        \"boundingBox\": {\n                          \"vertices\": [\n                            {\n                              \"x\": 180,\n                              \"y\": 92\n                            },\n                            {\n                              \"x\": 268,\n                              \"y\": 91\n                            },\n                            {\n                              \"x\": 269,\n                              \"y\": 129\n                            },\n                            {\n                              \"x\": 181,\n                              \"y\": 130\n                            }\n                          ]\n                        },\n                        \"property\": {\n                          \"detectedLanguages\": [\n                            {\n                              \"confidence\": 1.0,\n                              \"languageCode\": \"en\"\n                            }\n                          ]\n                        },\n                        \"symbols\": [\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 180,\n                                  \"y\": 93\n                                },\n                                {\n                                  \"x\": 204,\n                                  \"y\": 93\n                                },\n                                {\n                                  \"x\": 205,\n                                  \"y\": 130\n                                },\n                                {\n                                  \"x\": 181,\n                                  \"y\": 130\n                                }\n                              ]\n                            },\n                            \"text\": \"N\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 208,\n                                  \"y\": 92\n                                },\n                                {\n                                  \"x\": 244,\n                                  \"y\": 91\n                                },\n                                {\n                                  \"x\": 245,\n                                  \"y\": 128\n                                },\n                                {\n                                  \"x\": 209,\n                                  \"y\": 129\n                                }\n                              ]\n                            },\n                            \"text\": \"W\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 248,\n                                  \"y\": 92\n                                },\n                                {\n                                  \"x\": 268,\n                                  \"y\": 92\n                                },\n                                {\n                                  \"x\": 269,\n                                  \"y\": 129\n                                },\n                                {\n                                  \"x\": 249,\n                                  \"y\": 129\n                                }\n                              ]\n                            },\n                            \"property\": {\n                              \"detectedBreak\": {\n                                \"type\": \"LINE_BREAK\"\n                              }\n                            },\n                            \"text\": \"8\"\n                          }\n                        ]\n                      }\n                    ]\n                  },\n                  {\n                    \"boundingBox\": {\n                      \"vertices\": [\n                        {\n                          \"x\": 49,\n                          \"y\": 160\n                        },\n                        {\n                          \"x\": 249,\n                          \"y\": 157\n                        },\n                        {\n                          \"x\": 249,\n                          \"y\": 174\n                        },\n                        {\n                          \"x\": 49,\n                          \"y\": 177\n                        }\n                      ]\n                    },\n                    \"words\": [\n                      {\n                        \"boundingBox\": {\n                          \"vertices\": [\n                            {\n                              \"x\": 49,\n                              \"y\": 160\n                            },\n                            {\n                              \"x\": 86,\n                              \"y\": 159\n                            },\n                            {\n                              \"x\": 86,\n                              \"y\": 176\n                            },\n                            {\n                              \"x\": 49,\n                              \"y\": 177\n                            }\n                          ]\n                        },\n                        \"property\": {\n                          \"detectedLanguages\": [\n                            {\n                              \"confidence\": 1.0,\n                              \"languageCode\": \"en\"\n                            }\n                          ]\n                        },\n                        \"symbols\": [\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 49,\n                                  \"y\": 161\n                                },\n                                {\n                                  \"x\": 58,\n                                  \"y\": 161\n                                },\n                                {\n                                  \"x\": 58,\n                                  \"y\": 177\n                                },\n                                {\n                                  \"x\": 49,\n                                  \"y\": 177\n                                }\n                              ]\n                            },\n                            \"text\": \"C\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 60,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 64,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 64,\n                                  \"y\": 176\n                                },\n                                {\n                                  \"x\": 60,\n                                  \"y\": 176\n                                }\n                              ]\n                            },\n                            \"text\": \"I\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 64,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 74,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 74,\n                                  \"y\": 176\n                                },\n                                {\n                                  \"x\": 64,\n                                  \"y\": 176\n                                }\n                              ]\n                            },\n                            \"text\": \"T\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 75,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 86,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 86,\n                                  \"y\": 176\n                                },\n                                {\n                                  \"x\": 75,\n                                  \"y\": 176\n                                }\n                              ]\n                            },\n                            \"property\": {\n                              \"detectedBreak\": {\n                                \"type\": \"SPACE\"\n                              }\n                            },\n                            \"text\": \"Y\"\n                          }\n                        ]\n                      },\n                      {\n                        \"boundingBox\": {\n                          \"vertices\": [\n                            {\n                              \"x\": 94,\n                              \"y\": 160\n                            },\n                            {\n                              \"x\": 114,\n                              \"y\": 160\n                            },\n                            {\n                              \"x\": 114,\n                              \"y\": 176\n                            },\n                            {\n                              \"x\": 94,\n                              \"y\": 176\n                            }\n                          ]\n                        },\n                        \"property\": {\n                          \"detectedLanguages\": [\n                            {\n                              \"confidence\": 1.0,\n                              \"languageCode\": \"en\"\n                            }\n                          ]\n                        },\n                        \"symbols\": [\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 94,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 103,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 103,\n                                  \"y\": 176\n                                },\n                                {\n                                  \"x\": 94,\n                                  \"y\": 176\n                                }\n                              ]\n                            },\n                            \"text\": \"O\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 106,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 114,\n                                  \"y\": 160\n                                },\n                                {\n                                  \"x\": 114,\n                                  \"y\": 176\n                                },\n                                {\n                                  \"x\": 106,\n                                  \"y\": 176\n                                }\n                              ]\n                            },\n                            \"property\": {\n                              \"detectedBreak\": {\n                                \"type\": \"SPACE\"\n                              }\n                            },\n                            \"text\": \"F\"\n                          }\n                        ]\n                      },\n                      {\n                        \"boundingBox\": {\n                          \"vertices\": [\n                            {\n                              \"x\": 121,\n                              \"y\": 159\n                            },\n                            {\n                              \"x\": 249,\n                              \"y\": 157\n                            },\n                            {\n                              \"x\": 249,\n                              \"y\": 174\n                            },\n                            {\n                              \"x\": 121,\n                              \"y\": 176\n                            }\n                          ]\n                        },\n                        \"property\": {\n                          \"detectedLanguages\": [\n                            {\n                              \"confidence\": 1.0,\n                              \"languageCode\": \"en\"\n                            }\n                          ]\n                        },\n                        \"symbols\": [\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 121,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 136,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 136,\n                                  \"y\": 175\n                                },\n                                {\n                                  \"x\": 121,\n                                  \"y\": 175\n                                }\n                              ]\n                            },\n                            \"text\": \"W\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 139,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 147,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 147,\n                                  \"y\": 175\n                                },\n                                {\n                                  \"x\": 139,\n                                  \"y\": 175\n                                }\n                              ]\n                            },\n                            \"text\": \"E\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 149,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 159,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 159,\n                                  \"y\": 175\n                                },\n                                {\n                                  \"x\": 149,\n                                  \"y\": 175\n                                }\n                              ]\n                            },\n                            \"text\": \"S\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 160,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 169,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 169,\n                                  \"y\": 175\n                                },\n                                {\n                                  \"x\": 160,\n                                  \"y\": 175\n                                }\n                              ]\n                            },\n                            \"text\": \"T\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 172,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 184,\n                                  \"y\": 159\n                                },\n                                {\n                                  \"x\": 184,\n                                  \"y\": 175\n                                },\n                                {\n                                  \"x\": 172,\n                                  \"y\": 175\n                                }\n                              ]\n                            },\n                            \"text\": \"M\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 188,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 193,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 193,\n                                  \"y\": 174\n                                },\n                                {\n                                  \"x\": 188,\n                                  \"y\": 174\n                                }\n                              ]\n                            },\n                            \"text\": \"I\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 195,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 204,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 204,\n                                  \"y\": 174\n                                },\n                                {\n                                  \"x\": 195,\n                                  \"y\": 174\n                                }\n                              ]\n                            },\n                            \"text\": \"N\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 207,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 216,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 216,\n                                  \"y\": 174\n                                },\n                                {\n                                  \"x\": 207,\n                                  \"y\": 174\n                                }\n                              ]\n                            },\n                            \"text\": \"S\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 218,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 227,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 227,\n                                  \"y\": 174\n                                },\n                                {\n                                  \"x\": 218,\n                                  \"y\": 174\n                                }\n                              ]\n                            },\n                            \"text\": \"T\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 229,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 237,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 237,\n                                  \"y\": 174\n                                },\n                                {\n                                  \"x\": 229,\n                                  \"y\": 174\n                                }\n                              ]\n                            },\n                            \"text\": \"E\"\n                          },\n                          {\n                            \"boundingBox\": {\n                              \"vertices\": [\n                                {\n                                  \"x\": 240,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 249,\n                                  \"y\": 158\n                                },\n                                {\n                                  \"x\": 249,\n                                  \"y\": 174\n                                },\n                                {\n                                  \"x\": 240,\n                                  \"y\": 174\n                                }\n                              ]\n                            },\n                            \"property\": {\n                              \"detectedBreak\": {\n                                \"type\": \"LINE_BREAK\"\n                              }\n                            },\n                            \"text\": \"R\"\n                          }\n                        ]\n                      }\n                    ]\n                  }\n                ]\n              }\n            ],\n            \"height\": 240,\n            \"property\": {\n              \"detectedLanguages\": [\n                {\n                  \"confidence\": 1.0,\n                  \"languageCode\": \"en\"\n                }\n              ]\n            },\n            \"width\": 320\n          }\n        ],\n        \"text\": \"ABBEY\\nROAD NW8\\nCITY OF WESTMINSTER\"\n      },\n      \"textAnnotations\": [\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 43,\n                \"y\": 40\n              },\n              {\n                \"x\": 269,\n                \"y\": 40\n              },\n              {\n                \"x\": 269,\n                \"y\": 177\n              },\n              {\n                \"x\": 43,\n                \"y\": 177\n              }\n            ]\n          },\n          \"description\": \"ABBEY\\nROAD NW8\\nCITY OF WESTMINSTER\",\n          \"locale\": \"en\"\n        },\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 43,\n                \"y\": 43\n              },\n              {\n                \"x\": 182,\n                \"y\": 41\n              },\n              {\n                \"x\": 182,\n                \"y\": 79\n              },\n              {\n                \"x\": 43,\n                \"y\": 81\n              }\n            ]\n          },\n          \"description\": \"ABBEY\"\n        },\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 46,\n                \"y\": 94\n              },\n              {\n                \"x\": 154,\n                \"y\": 92\n              },\n              {\n                \"x\": 155,\n                \"y\": 130\n              },\n              {\n                \"x\": 47,\n                \"y\": 132\n              }\n            ]\n          },\n          \"description\": \"ROAD\"\n        },\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 180,\n                \"y\": 92\n              },\n              {\n                \"x\": 268,\n                \"y\": 91\n              },\n              {\n                \"x\": 269,\n                \"y\": 129\n              },\n              {\n                \"x\": 181,\n                \"y\": 130\n              }\n            ]\n          },\n          \"description\": \"NW8\"\n        },\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 49,\n                \"y\": 160\n              },\n              {\n                \"x\": 86,\n                \"y\": 159\n              },\n              {\n                \"x\": 86,\n                \"y\": 176\n              },\n              {\n                \"x\": 49,\n                \"y\": 177\n              }\n            ]\n          },\n          \"description\": \"CITY\"\n        },\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 94,\n                \"y\": 160\n              },\n              {\n                \"x\": 114,\n                \"y\": 160\n              },\n              {\n                \"x\": 114,\n                \"y\": 176\n              },\n              {\n                \"x\": 94,\n                \"y\": 176\n              }\n            ]\n          },\n          \"description\": \"OF\"\n        },\n        {\n          \"boundingPoly\": {\n            \"vertices\": [\n              {\n                \"x\": 121,\n                \"y\": 159\n              },\n              {\n                \"x\": 249,\n                \"y\": 157\n              },\n              {\n                \"x\": 249,\n                \"y\": 174\n              },\n              {\n                \"x\": 121,\n                \"y\": 176\n              }\n            ]\n          },\n          \"description\": \"WESTMINSTER\"\n        }\n      ]\n    }\n  ]\n}\n\u003c/code\u003e\u003c/pre\u003e\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarleslc%2Fimagetotext","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarleslc%2Fimagetotext","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarleslc%2Fimagetotext/lists"}