alexey-m-ukolov / gouda

Decoding barcodes using python

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

gouda

A python package for decoding barcodes, possibly more than one, in complex images such as scans of museum specimens.

gouda/engines

Barcode decoding engines. An engine is an interface to a barcode reading library. Engines for both open-source and commercial libraries are provided.

Open source

Commercial

Not all libraries are available on all OSes. Gouda engines are currently hard-coded to detect either Data Matrix or Code 128 + Code 39 barcodes - those used by the Natural History Musem.

gouda/strategies

No engines are capable of reliably locating and decoding (possibly multiple) barcodes. Gouda provides two strategies to help the decoding engines. If strategy A finds no barcodes, strategy B is attempted.

  • Strategy A - shrink image until a barcode is found
    • this algorithm exits as soon as one or more barcodes are reported by the engine:
      • Present the image to the decoding library at 100%, 95%, 90%, 85%...5% of its original size
      • Sharpen the image and repeat 1
      • Sharpen the image even more and repeat 1
    • Strategy B
      • Use OpenCV to identify areas of the image that might contain barcodes
      • Present each candidate area to the engines

Installation

Python

The easiest way is to install the current Python 2.7 release of Anaconda:

conda update --all
conda update --all
pip install --upgrade pip
python <Anaconda dir>\Scripts\pywin32_postinstall.py -install
pip install -r requirements.txt

Install OpenCV

Linux

conda install -c https://conda.binstar.org/menpo opencv

OS X

conda install -c https://conda.binstar.org/jjhelmus opencv

Windows

Download OpenCV 2.4.10 and extract to c:\opencv
If you installed 32-bit Anaconda:

copy C:\opencv\build\python\2.7\x86\cv2.pyd C:\Users\lawh\Anaconda\DLLs`

If you installed 64-bit Anaconda:

copy C:\opencv\build\python\2.7\x64\cv2.pyd C:\Users\lawh\Anaconda\DLLs`

Test by start Anaconda prompt and running

python -c "import cv2; print cv2"

Install decoders

Accusoft

Windows only. Download and install their SDK.

DataSymbol

Windows only. Download and install their SDK.

DTK

Windows 32-bit only. You must run 32-bit Python. Download and install their SDK.

Inlite

Windows only. Download and install their SDK.

libdmtx

Windows

Download and install the appropriate build of pydmtx from dmtx-wrapper:

pip install pydmtx-<whatever>.whl

Test

python -c "import pydmtx; print(pydmtx)"

Linux

Library and utils

sudo apt-get install libdmtx-dev libdmtx-utils

Python lib

git clone git://libdmtx.git.sourceforge.net/gitroot/libdmtx/dmtx-wrappers
cd dmtx-wrappers/python
python setup.py install
python -c "import pydmtx; print(pydmtx)"
python test.py

OS X

Source

git clone git://libdmtx.git.sourceforge.net/gitroot/libdmtx/libdmtx
git clone git://libdmtx.git.sourceforge.net/gitroot/libdmtx/dmtx-wrappers
git clone git://libdmtx.git.sourceforge.net/gitroot/libdmtx/dmtx-utils

Library

cd libdmtx
git checkout v0.7.4
./autogen.sh
./configure
make
make install

Python lib

cd ../dmtx-wrappers/
./autogen.sh
./configure
make

cd python
python setup.py install
python -c "import pydmtx; print(pydmtx)"

Command-line tools (not used but might be useful to you)

cd ../dmtx-utils
brew install imagemagick
git checkout v0.7.4
./autogen.sh
./configure
make

Softek

Linux, OS X and Windows. Download and install their SDK.

If on OS X or Linux, set SOFTEK_BARDECODE in gouda/config.py to the path to the bardecode app provided with the SDK.

Enter your licence key in SOFTEK_LICENSE_KEY in gouda/config.py.

Windows

You may need to install the Visual C++ Redistributable Packages for Visual Studio 2013 before registering the COM controls.

You may need to use 'Run As Administrator' when registering the controls.

Stecos

Tested on OS X only. Download and install their SDK.

On OS X:

sudo cp ScMac64SDK/bin/*dylib /usr/lib/

Alter the readDM and readbar programs to print decoded data in the form 'TYPE:DATA\n' and recompile them. If on OS X or Linux, set STECOS_DMREAD and STECOS_READBAR in gouda/config.py to the paths to the readDM and readbar apps respectively, provided with the SDK.

zbar

Linux without anaconda

sudo apt-get install libzbar-dev
pip install zbar

Linux anaconda

conda install --channel https://conda.binstar.org/weiyan zbar

Windows 32-bit

Download and run the zbar-0.10 windows installer; check 'Development Headers and Libraries'. Modify your PATH to include C:\Program Files (x86)\ZBar\bin

pip install --global-option=build_ext --global-option="-IC:/Program Files (x86)/ZBar/include" --global-option="-LC:/Program Files (x86)/ZBar/lib" zbar

Windows 64-bit

Download and install the build from zbar:

pip install zbar-<whatever>.whl

Test

python -c "import zbar; print(zbar)"

Mac

The pip install of zbar on my Mac resulted in a segfault on import zbar. I compiled zbar-0.10.tar.bz2 from source.

zxing

Install a JDK.

cd gouda/java/decode_data_matrix/
./build.sh

Test

python -m unittest discover

Examples

Print values of all 1d (Code 128) barcodes using the zbar library:

./gouda/bin/decode_barcode.py zbar gouda/test/test_data/code128.png 

A terse (file per line) report of two files:

./gouda/bin/decode_barcode.py zbar --report=terse gouda/test/test_data/code128.png gouda/test/test_data/BM001128287.jpg

A rich csv report (file per line):

./gouda/bin/decode_barcode.py zbar --report=csv gouda/test/test_data/code128.png gouda/test/test_data/BM001128287.jpg

Reading images as greyscale

./gouda/bin/decode_barcode.py zbar --report=csv --greyscale gouda/test/test_data/code128.png gouda/test/test_data/BM001128287.jpg

Greyscale can improve or degrade chances of finding barcodes, dependent upon the image and engine.

About

Decoding barcodes using python

License:GNU General Public License v2.0


Languages

Language:Python 95.8%Language:Java 2.5%Language:Shell 1.0%Language:Batchfile 0.7%