Deep-Barcode-Reader / README.md
afshin-dini's picture
Push to hugging face
52973d2
---
title: Deep Barcode Reader
emoji: 🔳
colorFrom: gray
colorTo: red
sdk: streamlit
sdk_version: 1.42.2
app_file: app.py
pinned: false
---
# Deep-Barcode-Reader
This repository is used for reading different types of barcodes and QR codes from images.
The code is written in Python and uses OpenCV, Pyzbar and other libraries for reading barcodes and QR codes.
## How to Use
The library offers several functions for reading barcodes and QR codes from images.
General options can be selected before applying the reader method. These options are:
- `--data_path` is the path to the image file.
- `--result_path` is the path to the output file.
- `--verbose` is the verbosity level of the code.
- `--method` is the method for reading the barcode or QR code.
- `--model_size` is the size of the deep learning model.
The available methods are as:
- [Opencv Barcode Reader](#opencv-barcode-reader)
- [Zbar Barcode Reader](#zbar-barcode-reader)
- [QR Reader](#qr-reader)
### Opencv Barcode Reader
This method can only detect barcodes but NOT QR codes. It can detect and decode EAN-8, EAN-13, UPC-A and UPC-E
barcode types. You can use the method by running the following command:
```shell
deep_barcode_reader -vv -d tests/test_data/sample.jpg -m opencv
```
This method can only detect specific types of barcodes. However, it is faster than the other methods.
### Zbar Barcode Reader
This method can detect and decode both barcodes and QR codes.
It is very powerful to detect and decode different types of barcodes and QR codes.
You can use the method by running the following command:
```shell
deep_barcode_reader -vv -d tests/test_data/sample.jpg -m zbar
```
### QR Reader
This method can only detect and decode QR codes.
Depending on the model size as `n` as nano, `s` as small, `m` as medium, or `l` as large,
the detection and decoding process time and accuracy can be changed.
```shell
deep_barcode_reader -vv -d tests/test_data/sample.jpg -m zbar --model_size l
```
## How to Develop
Do the following only once after creating your project:
- Init the git repo with `git init`.
- Add files with `git add .`.
- Then `git commit -m 'initialize the project'`.
- Add remote url with `git remote add origin REPO_URL`.
- Then `git branch -M master`.
- `git push origin main`.
Then create a branch with `git checkout -b BRANCH_NAME` for further developments.
- Install poetry if you do not have it in your system from [here](https://python-poetry.org/docs/#installing-with-pipx).
- Create a virtual env preferably with virtualenv wrapper and `mkvirtualenv -p $(which python3.10) ENVNAME`.
- Then `git add poetry.lock`.
- Then `pre-commit install`.
- For applying changes use `pre-commit run --all-files`.
## Docker Container
To run the docker with ssh, do the following first and then based on your need select ,test, development, or production containers:
```shell
export DOCKER_BUILDKIT=1
export DOCKER_SSHAGENT="-v $SSH_AUTH_SOCK:$SSH_AUTH_SOCK -e SSH_AUTH_SOCK"
```
### Test Container
This container is used for testing purposes while it runs the test
```shell
docker build --progress plain --ssh default --target test -t barcode_docker:test .
docker run -it --rm -v "$(pwd):/app" $(echo $DOCKER_SSHAGENT) barcode_docker:test
```
### Development Container
This container can be used for development purposes:
```shell
docker build --progress plain --ssh default --target development -t barcode_docker:development .
docker run -it --rm -v "$(pwd):/app" -v /tmp:/tmp $(echo $DOCKER_SSHAGENT) barcode_docker:development
```
### Production Container
This container can be used for production purposes:
```shell
docker build --progress plain --ssh default --target production -t barcode_docker:production .
docker run -it --rm -v "$(pwd):/app" -v /tmp:/tmp $(echo $DOCKER_SSHAGENT) barcode_docker:production deep_barcode_reader -vv -d tests/test_data/sample.jpg -m zbar --model_size l
```
## Hugging Face Deployment
The repository is also deployed in [hugging face](https://huggingface.co/spaces/afshin-dini/Deep-Barcode-Reader) in which one can upload images, select the appropriate method and its parameters and detect and decode the barcodes or QR codes.
It is good to mention that you can also run the application locally by running the following command:
```shell
streamlit run app.py
```
and then open the browser and go to the address `http://localhost:8501`