Giter Club home page Giter Club logo

imageprek-compression's Introduction

ImaGeprek - A simple image compression tool

Program kompresi gambar dengan memanfaatkan algoritma SVD dalam bentuk website lokal sederhana.

Tugas Besar 2 IF2123 Aljabar Linier dan Geometri
Aplikasi Nilai Eigen dan Vektor Eigen dalam Kompresi Gambar
Semester I 2021/2022

Table of Contents

General Information

Gambar adalah salah satu bentuk media yang populer digunakan untuk menyajikan informasi. Gambar banyak dipertukarkan di dunia digital melalui file-file yang mengandung gambar tersebut. Dalam transmisi dan penyimpanan gambar digital, seringkali ditemukan masalah karena ukuran file gambar digital yang cenderung besar. Untuk mengatasi hal tersebut, suatu gambar digital dapat dikompresi menjadi file gambar yang lebih kecil. Salah satu algoritma yang dapat digunakan untuk mengkompresi gambar adalah algoritma SVD (Singular Value Decomposition). Algoritma SVD didasarkan pada teorema dalam aljabar linier yang mengatakan bahwa sebuah matriks dua dimensi dapat dipecah menjadi hasil perkalian dari 3 sub-matriks. Gambar digital direpresentasikan oleh matriks yang mengandung elemen-elemen gambar. Dengan SVD, matriks gambar tersebut dipecah menjadi 3 sub-matriks kemudian direkonstruksi dengan suatu batasan sehingga didapatkan gambar yang mirip dengan gambar yang aslinya dan tentunya dengan ukuran file yang lebih kecil dari file aslinya.


Program ini dibuat sebagai pemenuhan Tugas Besar 2 IF2123 Aljabar Linier dan Geometri Semester I 2021/2022.

Technologies Used

Languages

  • Python
  • Javascript

Frameworks / Libraries

  • Connexion[swagger-ui] + Flask
  • ReactJS
  • Numpy / Jax Numpy
  • Pillow

Features

Fitur yang dihadirkan oleh website ini adalah:

  • Menerima gambar dalam berbagai format (.jpg, .png, .jpeg, .gif, .bmp, .tiff, .psd, dst. Support List).
  • Menampilkan gambar input, output, runtime algoritma, dan persentase hasil kompresi gambar (perubahan jumlah pixel gambar).
  • Output hasil kompresi dapat diunduh melalui website
  • Kompresi gambar tetap mempertahankan warna dari gambar asli
  • Kompresi gambar tetap memertahankan transparansi dari gambar asli, misal untuk gambar dengan format .png dan background transparan

Screenshots

Directory Listing

├── README.md
└── src
    ├── backend
    │   ├── api.py               [Main Operation API]
    │   ├── app.py               [App Factory]
    │   ├── requirements.txt     [Requirements List]
    │   └── swagger.yml          [API spec in OAS 3.0]
    ├── frontend
    │   ├── package-lock.json
    │   ├── package.json     
    │   ├── public               [Static Assets]
    │   └── src                  [JSX Source]
    │       └── components       [Components]
    └── library
        ├── alingeo
        │   ├── imaging
        │   │   └── compress.py  [Compress Class]
        │   └── matriks
        │       ├── eigen.py     [EigenSolver Class]
        │       └── svd.py       [SVDSolver Class]
        └── setup.py

Setup

Clone repository ini terlebih dahulu.

A. Frontend

  1. [RECOMMENDED] Gunakan NodeJS, atau pastikan NodeJS sudah ter-install di device.
  2. Pastikan sedang berada di folder src/frontend.
  3. Jalankan perintah npm install untuk memasang semua node_modules yang diperlukan.
  4. Tunggu proses instalasi hingga selesai.

B. Library

  1. [RECOMMENDED] Gunakan virtual environment Python baru.

  2. Change directory ke src/library.

  3. Install package dengan command berikut:

    pip install .
    

    Untuk pengembangan, jalankan pip install -e . sehingga package terinstall dalam edit mode.

  4. [OPTIONAL] Untuk dapat menggunakan mode GPU, kamu harus menginstall CUDA dan cuDNN terlebih dahulu, kemudian jaxlib. Setelah itu, kamu dapat menginstall package dengan extras gpu

    pip install .[gpu]
    

    Perhatikan bahwa jaxlib hanya bisa dijalankan pada OS Linux/Mac. Untuk Windows, dapat menginstall CUDA, cuDNN dan jaxlib di WSL2. Cara instalasi dapat dilihat disini. Informasi lebih lanjut tentang JAX bisa lihat disini.

    Terdapat extras lain yaitu jax-cpu jika ingin menggunakan jax sebagai backend untuk mode CPU.

C. Backend

  1. [RECOMMENDED] Gunakan virtual environment yang sama dengan instalasi Library sebelumnya.
  2. Pastikan library alingeo sebelumnya telah terinstall.
  3. Change directory ke src/backend.
  4. Install requirements dengan command:
    pip install -r requirements.txt
    

Usage

A. Frontend

  1. Pastikan Anda berada di folder src/frontend
  2. Jalankan perintah npm start
  3. Website akan terbuka di browser di port localhost
  4. Ada beberapa opsi antarmuka yang dapat diubah sesuai keinginan:
    • Slider rasio Eigen untuk menentukan kualitas hasil akhir kompresi (default = 20)
    • Input skala resolusi untuk menentukan perbandingan resolusi akhir kompresi dalam persentase (default = 100)
    • Input banyaknya iterasi untuk proses kompresi (default = 2)
    • Checkbox untuk kompresi gambar dengan layer alpha
  5. Setelah mengisi semua opsi, gambar akan dikirim ke backend untuk diproses. Apabila gambar selesai diproses, gambar akan dikirimkan ke frontend beserta waktu dan persentase kompresi. Pengguna juga bisa mengunduh hasil gambar ke local.

B. Library

Library dapat digunakan sebagai module python yang bisa diimport oleh program lain. Beberapa sample program yang dapat digunakan sebagai referensi:

  1. Melakukan pencarian nilai eigen dan vektornya

    import numpy as np
    from alingeo.matriks.eigen import EigenSolver
    
    solver = EigenSolver()
    matrix = np.random(10, 10)
    eigen_vectors, eigen_values = solver.calcEigens(matrix)
  2. Melakukan dekomposisi SVD dari sebuah matriks

    import numpy as np
    from alingeo.matriks.svd import SVDSolver
    
    solver = SVDSolver()
    matrix = np.random(10,15)
    U, sigma, VT = solver.calculate(matrix)
  3. Melakukan kompresi gambar dengan dekomposisi SVD

    from io import BytesIO
    from alingeo.imaging.compress import CompressSVD
    
    compressor = CompressSVD()
    with open('sample.png', 'rb') as f:
        res, _, _ = compressor.compress(f, scale=0.3)
        res.save('sample-opt.png')

C. Backend

  1. Gunakan virtual environment sebelumnya, change directory ke src/backend. Pastikan package alingeo sudah terinstall.

  2. Jalankan flask pada direktori yang sama dengan command berikut:

    flask run
    
  3. Untuk melakukan kompresi, dapat melakukan pemanggilan pada endpoint [POST] /v1/compress

  4. Backend dijalankan oleh spesifikasi OAS 3.0 dan memiliki swagger-ui sehingga dapat membaca dokumentasi dari API. Silahkan lihat dokumentasi pada endpoint /v1/doc untuk informasi cara menggunakan API lebih lanjut.

    Untuk localhost, dokumentasi API dapat diakses pada URL http://localhost/v1/doc

Contact

Dibuat oleh Kelompok 30 - Newo Social Credit

  • Amar Fadil (13520103) GitHub
  • Owen Christian Wijaya (13520124) GitHub
  • Fachry Dennis Heraldi (13520139) GitHub

imageprek-compression's People

Contributors

owencwijaya avatar marfgold1 avatar dennisheraldi 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.