Skip to content

Get text from an image using tessaract in a lambda function

Notifications You must be signed in to change notification settings

musale/txt-from-img

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CircleCI Python 3.6

Extract text from image

This project uses the tesseract project to extract characters from an image. It's deployed as a lambda function here. Currently, only text in English language can be processed. Other options are possible but are not covered.

Getting started

Development requirements

  • Docker: this is used to build the binary files for tessaract. These are uploaded as layers in AWS lambda and linked to the main function.
  • NodeJs: this is to run serverless which is used for packaging and deploying the layers and lambda function. Dependencies for the serverless environment are also installed using this.
  • Python 3.6: this is the default language for the AWS runtime and the lambda functions.
  • Pipenv: to install the project dependencies for awscli and pytest.

Deployment requirements

  • An AWS account. You will have to configure it using pipenv run aws configure then fill in the required AWS access keys.

Creating the tessaract layer

  • cd layers
  • Run ./build.sh script. This will build the binary files for tessaract and copy them into the correct folders.
  • Run serverless package to create a layers zip file.
  • Run serverless deploy to deploy the layers to AWS.

Deploying the function

  • From the root of the folder, run serverless build then serverless deploy.

Testing

Testing locally

To test locally, run pipenv run pytest

Testing the function

If you successfully deployed the function, you can use the following value to test the endpoint:

The lambda function is accepting json post request

{
  "image64": "base64 endcoded image"
}
Lambda Test function

Lambda Test function

{
  "image64": "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"
}

Which has the response:

{
  "success": true,
  "text_in_image": "1234567890"
}

Built With

Special S/O

  • gwittchen for most of the steps in packaging this.

Some thoughts

  1. Security: this is a public API. To mitigate some security issues like being spoofed I could implement an Authentication layer and add it to the function using authorizer. For bad requests, that is handled by exceptions so not thinking of much now. Maybe ratelimit?

  2. Large files: this would require a re-think. Maybe chunk the files and have md5 sums to assemble the chunks? gzip?

  3. Cache: maybe have a redis instance that I can connect to and check before processing valid base64 images. Still a stretch and unnecessary as it's beating the purpose of making this a lambda function 🤡

About

Get text from an image using tessaract in a lambda function

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published