/Guetzli

Micro-nano system integrated design Project Guetzli based on Zybo development board.

Primary LanguageC++Apache License 2.0Apache-2.0

Guetzli

Zynq Project: Guetzli

Generic badgeGeneric badge Generic badge Generic badge Generic badge Generic badge Generic badge

What is this repo?

This repo is a project of micro-nano system integrated design that aims to implement Guetzli, a perceptual JPEG encoder algorithm on Xilinx Zynq development board. We'll use Vivado RTL, HLS, and Embedded System.

What is Guetzli?

Guetzli is a JPEG encoder that aims for excellent compression density at high visual quality. Guetzli-generated images are typically 20-30% smaller than images of equivalent quality generated by libjpeg. Guetzli generates only sequential (nonprogressive) JPEGs due to faster decompression speeds they offer.

Who created this project?

This project is a teamwork project. All 3 collaborators are from School of Microelectronics, SJTU. They are:

Yang Wenxi @VenciFreeman
Luo Tian @luotian12345
Liu Jianwei liujianwei0225

How to use it?

If you build it youself

  • On Windows
    • Get a copy of the source code, either by cloning this repository, or by downloading an archive and unpacking it.
    • Install Visual Studio 2015 and vcpkg
    • Install libpng using vcpkg: .\vcpkg install libpng.
    • Cause the installed packages to be available system-wide: .\vcpkg integrate install. If you prefer not to do this, refer to vcpkg's documentation.
    • Open the Visual Studio project enclosed in the repository and build it.
  • On MacOS
    • To install using Homebrew:
    • To install using the repository:
      • Get a copy of the source code, either by cloning this repository, or by downloading an archive and unpacking it.
      • Install Homebrew or MacPorts
      • Install libpng
        • Using Homebrew: brew install libpng.
        • Using MacPorts: port install libpng (You may need to use sudo).
        • Run the following command to build the binary in bin/Release/guetzli.
          • If you installed using Homebrew simply use make
          • If you installed using MacPorts use CFLAGS='-I/opt/local/include' LDFLAGS='-L/opt/local/lib' make

Or you wanna use it directly

In .\bin\x86\Release:

  • Add your images into imgs/
  • Edit the quality you need in py. or bat.

Warnings!

  • Guetzli uses a large amount of memory. You should provide 300MB of memory per 1MPix of the input image.
  • Guetzli uses a significant amount of CPU time. You should count on using about 1 minute of CPU per 1 MPix of input image.
  • Guetzli assumes that input is in sRGB profile with a gamma of 2.2. Guetzli will ignore any color-profile metadata in the image.

Requests

  • At least 2 methods to implement, quantitative comparison of trade-off;
    • Performance: execution speed, throughput, etc;
    • Design complexity: code / tool synergy;
    • Cost: resource occupation.

Schedule

  • 2019/11/29:Team up;
  • 2019/12/06:First defense;
  • About 2019/12/28:Final defense.

Reference