-
.
Rispondiamo alla domanda che probabilmente vi state ponendo: che cazzo ti sei fumato stavolta? Roba molto buona .
Spieghiamo rapidamente, tutto iniziòcon gli antichi Greciper colpa di un mio compagno di corso, in pratica stava provando a fare il porting di un pack di stickers da Line a Telegram: per chi non lo sapesse, Line usa per gli sticker immagini in 256x256px (massimo), Telegram invece 512x512, perciò se semplicemente si amplia la superficie dell'immagine aggiungendo trasparenza avrete anche bisogno di una lente di ingrandimento per vedere lo sticker; la soluzione quindi, ovviamente, era fare un upscale, ma come tutti (o quasi) ben saprete, un upscale così estremo (2x) vi ritorna un qualcosa che è vagamente pixel art, perciò l'unica soluzione che permettesse di avere una qualità accettabile era quella di ridisegnare il tutto (e sapete che immensa rotta di cazzi sia farlo per un immagine, figuratevi per 60).
Mentre il nostro baldo eroe si godeva la sua fenomenale pixel art quindi, io mi sono dilettato con la google art, per capire se magari nel 2015 qualcuno aveva trovato una soluzione migliore: ecco quindi che mi imbatto in questo waifu2x, provo a darci un occhio, e in teoria è una figata (di fatto è molto simile a nnedi, solo che non ho trovato una singola implementazione di nnedi per fare upscaling di un immagine e basta), perciò lo provo, ed i risultati sono davvero buoni (questo è l'esempio ufficiale).
Ok, ma come si usa? Avete 2 possibilità:
1) Utilizzare il sito demo e adattarvi alle sue limitazioni.
2) Installarlo sul vostro PC, dopo vari esperimenti, in windows ho visto che conviene usare la build in caffe (qui come cristo si usa quella maledetta GUI), in linux (ed anche in windows) invece il porting in C++ ha un bug per cui non riesce a upscalare un immagine con il canale alpha (o a dir meglio, lo fa ma si perde la trasparenza nel processo), ho aperto un'issue su github nella speranza che venga risolta direttamente (dato che nella versione lua originale è già risolto, basterebbe applicare il commit che fixa il tutto in soldoni), nel frattempo o si usa una build diversa che non presenta questo bug, oppure come escamotage ho fatto uno script bash che richiede anche imagemagick, in pratica splitto i canali RGB dall'alpha, li upscalo separatamente e poi li unisco, è più lento, ma funziona; se volete usare questo trucco in windows, arrangiatevi a fare il porting in DOS.
Qualche esempio?
Ho preso come base il mio attuale avatar di blogfree (click), ed ho provato ad upscalarlo di 2x (la prima è solo upscalata, la seconda ha anche del denoise, e la terza il filtro di denoise molto più forte), giudicate voi il risultato; il tempo impiegato è stato questo:CODICE$ waifu2x-converter-cpp -i luvLxj6.png -o archer.png -m scale --scale_ratio 2.0 --disable-gpu
CPU: Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
...
process successfully done! (all:1.44697[sec], 98.5779[GFLOPS], filter:0.550139[sec], 259.278[GFLOPS])
$ waifu2x-converter-cpp -i luvLxj6.png -o archer_denoised.png -m noise_scale --scale_ratio 2.0 --noise_level 1 --disable-gpu
CPU: Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
...
process successfully done! (all:1.58362[sec], 113.351[GFLOPS], filter:0.699849[sec], 256.491[GFLOPS])
$ waifu2x-converter-cpp -i luvLxj6.png -o archer_really_denoised.png -m noise_scale --scale_ratio 2.0 --noise_level 2 --disable-gpu
CPU: Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
...
process successfully done! (all:1.58347[sec], 113.361[GFLOPS], filter:0.711946[sec], 252.133[GFLOPS])
(Il disable-gpu l'ho messo per essere sicuro che venisse fatto tutto dal processore)
Insomma, diciamo che il tutto non è leggerissimo, però dati i risultati non è male; per curiosità, ho provato ad upscalare un immagine in 4K (per essere pignoli era in 3780x1572), il risultato è stato questoCODICE$ waifu2x-converter-cpp -i Wisp_update_splash.png -o wisp_denoised.png -m noise_scale --scale_ratio 2.0 --noise_level 1 --disable-gpu
CPU: Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
...
process successfully done! (all:104.259[sec], 175.647[GFLOPS], filter:101.315[sec], 180.75[GFLOPS])
Se avete una scheda grafica Nvidia, è possibile usare CUDA per velocizzare il tutto, in windows avrete bisogno di scaricare qualche file dal sito di Nvidia (non so bene quali), in linux o avete una quadro oppure preparatevi a porconare abbastanza con sperimentazioni varie, io sono riuscito a farlo andare sul mio portatile con alcune build meno recenti (sia di waifu2x sia di CUDA), se non va probabilmente quindi è un po' colpa dei giapponesi e un po di Nvidia che dice "vuoi fare il figo in CUDA/OpenCL? Prenditi una quadro!" e quindi il supporto driver delle schede consumer lascia parecchio a desiderare sotto questo punto di vista; nel caso di AMD dovrebbe essere possibile guadagnare prestazioni in OpenCV, ma non avendo schede AMD non posso provare nulla; nel caso delle integrate Intel infine, ho visto che non ne vale proprio la pena, anzi, si perdono performance a fare le operazioni di copia CPU-GPU se avete una CPU relativamente nuova.
Buona sperimentazione .. -
.
Non interesserà a nessuno, ma Tanakamura la settimana scorsa ha risolto il problema della trasparenza nella build C++, provato con le sue build windows e funziona, devo ancora provare a ricompilare in linux per provare, ma al 99% anche li è risolto. . -
..
-
.
So che il tuo dubbio fen è rivolto alla mia mancanza di aggiornamenti, rejoice, ho provato a compilare la nuova versione in linux, funziona alla grande l'upscale del canale alpha . . -
Dermambra.
User deleted
Photoshop mi fa la stessa cosa... . -
.
Sì, e ci impieghi quante ore per raggiungere un risultato soddisfacente?.