Giter Club home page Giter Club logo

lycon's Introduction

Lycon

A minimal and fast image library for Python and C++.

Lycon is a small subset of optimized image operations derived from OpenCV.

Current set of features include:

  • Reading and writing JPEG and PNG images
  • Fast SIMD optimized image resizing
  • Zero-copy interop with NumPy whenever possible

Tested on:

  • Linux (Ubuntu 14.04) with Python2.7.6 and 3.5.2.
  • macOS (Sierra, 10.12) with Python 2.7.11 and 3.5.1.

Install

pip install lycon

Native extension dependencies:

  • CMake 2.8 or newer
  • C++ toolchain
  • LibJPEG
  • LibPNG

Ubuntu

Single-line command for installing all dependencies:

sudo apt-get install cmake build-essential libjpeg-dev libpng-dev

Anaconda

When working within an Anaconda Python distribution, it is recommended to use the latest cmake version (3.6 or newer). Older versions can lead to a mismatch between the libpng and libjpeg headers used to build Lycon (usually the system headers), and the linked library (which may be preempted by the Anaconda-scoped version). To install the latest cmake version:

conda install cmake

Example

import lycon

# Load an image as a numpy array
img = lycon.load('mittens.jpg')
# Resize the image using bicubic interpolation
resized = lycon.resize(img, width=256, height=512, interpolation=lycon.Interpolation.CUBIC)
# Crop the image (like any regular numpy array)
cropped = resized[:100, :200]
# Save the image
lycon.save('cropped-mittens.png', cropped)

Limitations

Compared to other image processing libraries (OpenCV, pillow, scikit-image), Lycon offers a very limited set of operations. Intended usages include data loaders for deep learning, mass image resizing, etc.

Advantages over OpenCV

  • Drastically smaller (at the cost of drastically fewer features)
  • Python module installable via pip
  • Images use the more common RGB ordering (vs OpenCV's BGR)

However, if you already have OpenCV installed, Lycon's advantages are minimal.

Advantages over PIL(low)

  • Faster
  • First-class NumPy support
  • Full support for floating point images

Advantages over Scikit-Image

  • Drastically faster

Benchmarks

  • The table below lists execution time (in seconds), averaged across 10 runs
  • The multiplier next to the time is the relative slowdown compared to Lycon
Operation Lycon OpenCV PIL Scikit-Image
Upsample: Nearest 0.1944 0.1948 (1x) 2.1342 (11x) 30.8982 (158.9x)
Upsample: Bilinear 0.4852 0.4940 (1x) 7.2940 (15x) 45.9095 (94.6x)
Upsample: Bicubic 1.8162 1.8182 (1x) 8.9589 (4.9x) 120.1645 (66.1x)
Upsample: Lanczos 4.5641 4.5714 (1x) 10.7517 (2.3x)
Upsample: Area 0.4801 0.4931 (1x)
Downsample: Nearest 0.0183 0.0181 (1x) 0.4379 (24.2x) 3.6101 (199.9x)
Downsample: Bilinear 0.0258 0.0257 (1x) 1.3122 (51x) 4.8487 (188.4x)
Downsample: Bicubic 0.1324 0.1329 (1x) 1.8153 (13.7x) 9.4905 (71.6x)
Downsample: Lanczos 0.3317 0.3328 (1x) 2.4058 (7.2x)
Downsample: Area 0.0258 0.0259 (1x)
Read: JPG 0.3409 0.5085 (1.5x) 1.4081 (4.1x) 1.4628 (4.3x)
Read: PNG 1.2114 1.3245 (1.1x) 1.8274 (1.5x) 1.8674 (1.5x)
Write: JPG 0.4760 0.6046 (1.3x) 2.3823 (5x) 5.0159 (10.5x)
Write: PNG 2.1421 2.2370 (1x) 9.0580 (4.2x) 11.6060 (5.4x)
  • Blank cells indicate that the operation is not supported by the library
  • All operations performed on a 16k (15360 x 8640) RGB image
  • Tests performed on Ubuntu 14.04 running on an Intel Core i7 (Skylake)
  • OpenCV 3.2+ (master: a85b4b5), Pillow 4.0.0, skimage 0.12.3, Python 2.7.3
  • OpenCV can potentially achieve better performance with GPU implementations and proprietary libraries like Intel IPP

License

  • All code derived from the OpenCV project is licensed under the 3-clause BSD License.
  • All Lycon-specific modifications are licensed under the MIT license.

See LICENSE for further details.

lycon's People

Contributors

ethereon avatar chsasank avatar

Stargazers

VonVictor V. Rosenchild avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.