Skip to main content

Write applications to charge money to your friends after you paid the whole bill by easily parsing the receipt 💸

Project description

Receipt Scanner

Write applications to charge money to your friends after you paid the whole bill by easily parsing the receipt 💸

PyPI - Version Linters

Why would I use Receipt Scanner

We've all been there: the dinner ended and the bill arrived at the table. Everyone is looking at you to pay for the bill. "I will pay you back immediately", they say. "Just send a picture of the receipt I will transfer you the money". Idiots. We all know most of them will have forgotten about the damn receipt picture as soon as they get into their cars. Now you can take matters into your own hands. Using this library, you can write an application that parses and classifies items from the receipt, and then charges money to your friends automagically. No more waiting for them to calculate the amount they owe you "as soon as they have a minute".

Installation

Install using pip!

pip install receipt-scanner

Usage

As a package

After installation, you can import the scan method from the library. Just pass the image location (it can be a local path or a URL), an optional regular expression to filter the parsed text and the optional debug parameter:

import re
from receipt_scanner import scan

expression = re.compile("([0-9]+\.[0-9]+)")
scanned_text_lines = scan(
    "path/to/some/image.jpg",
    regular_expression=expression,
    debug=True,
)

The scan method returns a list of strings for each text line that the regular expression matched. If no regular expression gets passed, every parsed text line will be returned.

As a CLI

You can also use receipt-scanner as a CLI! Once installed, the scanner command will be available. Here is a sample usage:

scanner --image path/to/some/image.jpg --expression "([0-9]+\.[0-9]+)" --debug

Specifying allowed characters

By default, the library will use for the following characters:

DEFAULT_ALLOWED_CHARACTERS = (
    "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890\ "
)

Notice that the last "\ " represents the space character.

You can pass a set of allowed characters to the engine, either by using the --characters flag when using the CLI or by passing the allowed_characters attribute to the scan method of the library.

Debugging

The debug flag will show logs of every step, and will freeze each image manipulation step to show the result of said manipulation. This can be useful to understand why the scan command might be returning an empty list, for example (you might find that the image has poor contrast and that the contour of the receipt is not being correctly mapped).

Developing

Requirements

Steps

Clone the repository:

git clone https://github.com/daleal/receipt-scanner.git

cd receipt-scanner

Then, recreate the environment:

make build-env

Once the package is installed for development (poetry install), you can use the CLI from the virtualenv.

Aknowledgements

Most of the code from this project was adapted from StackOverflow answers to questions about contour-finding, denoising and stuff like that. I also used code from several guides from the internet for utilities such as transforming a contour to a rect. Without those answers, most of this library would have been impossible for me to write. Thanks for the awesome information! 💖

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

receipt-scanner-0.3.2.tar.gz (12.1 kB view hashes)

Uploaded Source

Built Distribution

receipt_scanner-0.3.2-py3-none-any.whl (18.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page