Mengubah Foto Hitam Putih Menjadi Berwarna Menggunakan NoGAN

575

Beberapa hari yang lalu saya sedang mencari perangkat lunak yang mampu memberi warna foto hitam putih, atau lebih tepatnya mengkonversi citra 2D hitam putih ataupun grayscale menjadi citra berwarna secara ajaib (baca: menggunakan AI). Jadi maksudnya, saya tinggal input gambar digital (misal berformat JPEG atau PNG), klik tombol ajaib, lalu keluarlah gambarnya versi berwarna, tanpa perlu melakukan sirkus yang merepotkan.

Nah, saya memang menemukan banyak perangkat lunak yang menarik -- ada yang berbasis web, ada yang desktop. Namun untuk menghasilkan keluaran dengan resolusi yang sama tanpa watermark, kebanyakan harus membayar.. ehemehemsayabokek.

Lalu saya berpikir,.. karena ini sudah zamanya machine learning yang accessible bagi seluruh kalangan masyarakat, mungkin ada versi sumber terbuka? Misalnya program dengan lisensi MIT.

Setelah sibuk berkelana sana-sini di www, akhirnya ada satu "program" yang menarik perhatian saya, karena setelah saya mengujinya, hasilnya seperti yang saya harapkan.

DeOldify

Situs resmi (code repository): GitHub atau yang di-fork ke akun saya di sini

Dari file lisensinya, tertulis atas nama Jason Antic, dibangun pada tahun 2018.

demo

Input (kiri) dan output (kanan) dari DeOldify

Pemberian warna dari input citra hitam putih dilakukan menggunakan teknik generative adversarial network (GAN). Untuk DeOldify, mereka menggunakan teknik turunan yang disebut NoGAN. Dijelaskan bahwa mereka belum sempat menulis artikel yang menjabarkan NoGAN ini secara mendetail. Satu-satunya penjelasan yang ada hanya dari repo di atas:

This is a new type of GAN training that I've developed to solve some key problems in the previous DeOldify model. It provides the benefits of GAN training while spending minimal time doing direct GAN training. Instead, most of the training time is spent pretraining the generator and critic separately with more straight-forward, fast and reliable conventional methods. A key insight here is that those more "conventional" methods generally get you most of the results you need, and that GANs can be used to close the gap on realism. During the very short amount of actual GAN training the generator not only gets the full realistic colorization capabilities that used to take days of progressively resized GAN training, but it also doesn't accrue nearly as much of the artifacts and other ugly baggage of GANs. In fact, you can pretty much eliminate glitches and artifacts almost entirely depending on your approach. As far as I know this is a new technique. And it's incredibly effective.

Implementasi tekniknya bersifat programatis, non UI. Jadi bagi yang terbiasa menggunakan program dengan UI ciamik seperti Photoshop atau ColorSurprise mungkin agak tidak nyaman.

FYI, saya tidak ada kaitannya dengan proyek ini, hanya merasa tertarik membagikan info mengenai program ini.

Cara Menjalankan Program

Program bisa dijalankan pada Jupyter Notebook, yang biasanya dipasang bersama paket Anaconda. Perlu diingat bahwa sepertinya ada library yang membutuhkan prosesor grafis yang mutakhir.

Tapi kalau tidak mau repot, Anda bisa menggunakan tools gratis bernama Google Colab. Pembuat aplikasi sudah menyediakan link siap pakai di bawah. Jangan lupa copy dulu ke Google Drive pribadi agar bisa menggunakan runtime sendiri:

  • Citra 2D (modus warna artistik)
  • Citra 2D (stabil -- gunakan ini jika output program di atas tidak sesuai selera)
  • Video (yap, video hitam putih juga bisa 😎)

(Jika link di atas tidak berfungsi, lihat README di repo, atau di Colab punya saya di sini)

Tidak perlu pusing membaca kode sumbernya. Yang akan saya tunjukkan sedikit adalah blok kode di bagian akhir lembar kerja sbb:

source_url = '' #@param {type:"string"}
render_factor = 35  #@param {type: "slider", min: 7, max: 40}
watermarked = False #@param {type:"boolean"}

if source_url is not None and source_url !='':
    image_path = colorizer.plot_transformed_image_from_url(url=source_url, render_factor=render_factor, compare=True, watermarked=watermarked)
    show_image_in_notebook(image_path)
else:
    print('Provide an image url and try again.')

Ada tiga parameter input yang harus disetel (dalam bentuk tipe data Python):

  • source_url bertipe string, yang merupakan URL lokasi gambar. Unggah gambar input ke URL publik semacam imgur atau postimage
  • render_factor bilangan bulat, default 35. Mengatur resolusi warna yang dirender pada base citra. Semakin kecil angkanya maka semakin cepat proses rendernya. Gambar high-res sebaiknya menggunakan nilai di atas 30. Sesuaikan dengan kebutuhan.
  • watermarked tipe data boolean, default False. Digunakan untuk menampilkan watermark

Oh iya, gambar input harus diunggah ke URL publik semacam imgur atau postimage. URL ini pastilah berakhiran ekstensi citra, misal PNG untuk logo blog saya di https://prasetyadi.name/static/img/gprasetyadi.png. Gambar input mungkin bisa diunggah via menu File tapi saya tidak yakin apakah bisa di base directory, lagipula nama metode yang dipanggil dari obyek colorizer bernama plot_transformed_image_from_url.

Jika sudah, klik menu Runtime (menu bar di kiri atas), lalu pilih saja Run all (atau Ctrl + F9).

Nanti sel kode terakhir akan menampilkan citra keluaran dengan resolusi yang (seharusnya) sama dengan resolusi citra masukan (misalnya 1920 x 1080 pixel). Citra keluaran bisa diunduh dengan cara Save As..

Karena teknik ini membutuhkan data latih, seperti model machine learning lainnya, maka tidak ada jaminan hasilnya akurat atau sebaik jika dimanipulasi secara manual menggunakan Photoshop.