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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file receipt-scanner-0.3.2.tar.gz.

File metadata

  • Download URL: receipt-scanner-0.3.2.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for receipt-scanner-0.3.2.tar.gz
Algorithm Hash digest
SHA256 46412f1e5335f2e0b59e0419c3c9196acd215c30eb4067c240d213a7c11d181d
MD5 3e4026d9e9523827cbc86bb9da774444
BLAKE2b-256 80a8ffc1de751c4199901ba66ce4a0dcbc2c30388284ddc829a9e78497c56f3c

See more details on using hashes here.

File details

Details for the file receipt_scanner-0.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for receipt_scanner-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e18a80f7081792c0fa813dbe8381764ef0713f261f3b66e0c5a1f50af720ea6c
MD5 426cdd447f5362a7ede934ab4b540c48
BLAKE2b-256 ac5b0924c10b28ca354ba8e6a445ee6d264aa32a6e144de76ee22ec448523051

See more details on using hashes here.

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