From 2f7200022e656565f05f688f237785dfe47cbb6a Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Tue, 16 May 2023 16:13:38 +0200 Subject: [PATCH] added multi-threaded additional upscaler --- bin/__pycache__/handler.cpython-311.pyc | Bin 24051 -> 28408 bytes bin/__pycache__/probe.cpython-311.pyc | Bin 3777 -> 3781 bytes bin/handler.py | 69 ++++++++++++++++++++++-- imagevideoupscaler-cli.py | 4 +- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/bin/__pycache__/handler.cpython-311.pyc b/bin/__pycache__/handler.cpython-311.pyc index 74ada87e1d4123c94a4fc88e9f2f276e3b60b884..2de20d8fba094c16e631658c5baec0488ce9e460 100644 GIT binary patch delta 4591 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 delta 951 zcmZvaOGs2v7{~9quX#Uw+ru20QByOplpxy}xzHed6oqLu&b^MKGxtvC-Z7dadRX+r z8cz@{B3+5CirZt+qD@gyh(duJDB47=(y)bCWak?)5;~mw*HA|Lr}q)@0qCDv|%x1$QH*>zSzd&x`x2mY7Sn#}nmdD?~@ zO35G(jd3HnU9?vU4RhlGGO;COl@{xE`4Ed3Io8d<4<6N!Ot98H>#u(6ub#s_!w z2^B48z87hMTjyFNxWR)!%s6BP^qC;%=!gqoSc>lge5u(W_!A_Qm2VcCZpEhm%QF zQ%Fxs%|_}=q~c~QiS>wT7%?qM9g$?}XhctGCK+p~ucZ>6h|@NkS3j?5=C_Z;V+S>2>ZtE@X9qD>3j R|M@L@{{7!5wv*>t{coZ|29W>& diff --git a/bin/__pycache__/probe.cpython-311.pyc b/bin/__pycache__/probe.cpython-311.pyc index bdb75f549180e265101047f72d077a5c5ab6bb05..2fca37df29bf3072f80e190971d14f7cd40947fc 100644 GIT binary patch delta 36 qcmX>odsLQtIWI340}w=AR@}&aikZ=Q@-=27mUzF^^35D9JGlV5p$cCB delta 31 lcmX>qdr+2pIWI340}$vc3UA~-#ms0w`5Lp)W*(NETmX8h2ju_& diff --git a/bin/handler.py b/bin/handler.py index 0c793e3..d1c5392 100644 --- a/bin/handler.py +++ b/bin/handler.py @@ -17,7 +17,6 @@ import time import shutil import subprocess import multiprocessing -import itertools # Loading the config file to get user preferred temp path @@ -138,7 +137,7 @@ class Handler: if ( not useSpecialModeSS ): self.superScaler( self.tmppath, threads, quality_setting, self.os_type, model ) else: - self.specialSuperScaler( ) + self.specialSuperScaler( self.tmppath, threads, quality_setting, model ) else: raise Exception( 'ERROR upscaling. scalerEngine invalid' ); @@ -194,9 +193,62 @@ class Handler: os.system( self.command ); - def specialSuperScaler (): - pass + def specialSuperScaler ( self, tmppath, threads, quality_setting, model ): + self.fileList = os.listdir( tmppath ) + self.fileList.pop( 0 ) + self.fileList.sort() + if ( threads > multiprocessing.cpu_count() * 2 ): + self.threads = multiprocessing.cpu_count() * 2; + else: + self.threads = threads + self.fileCount = len( self.fileList ) // self.threads + self.spareFiles = len( self.fileList ) % self.threads + + self.cmdList = []; + + for t in range( threads ): + try: + os.mkdir( f'{tmppath}{t}' ) + except FileExistsError: + pass + + self.base = t * self.fileCount; + print( self.base ); + if ( self.os_type == 'win32' ): + for j in range( self.fileCount ): + os.rename( f'{tmppath}{self.fileList[ self.base + j ] }', f'{tmppath}{ t }\\{self.fileList[ self.base + j ] }' ) + elif ( self.os_type == 'linux' ): + for j in range( self.fileCount ): + os.rename( f'{tmppath}{self.fileList[ self.base + j ] }', f'{tmppath}{ t }/{self.fileList[ self.base + j ] }' ) + + self.cmdList.append( ( tmppath, t, quality_setting, model, self.os_type ) ) + + print( self.threads * self.fileCount ); + + try: + os.mkdir( f'{tmppath}{self.threads + 1}' ) + except FileExistsError: + pass + + if ( self.os_type == 'win32' ): + for k in range( self.spareFiles ): + os.rename( f'{tmppath}{self.fileList[ self.threads * self.fileCount + k ] }', f'{tmppath}{ t }\\{self.fileList[ self.threads * self.fileCount + k ] }' ) + elif ( self.os_type == 'linux' ): + for k in range( self.spareFiles ): + os.rename( f'{tmppath}{self.fileList[ self.threads * self.fileCount + k ] }', f'{tmppath}{ self.threads + 1 }/{self.fileList[ self.threads * self.fileCount + k ] }' ) + + try: + os.mkdir( f'{tmppath}sc' ) + except FileExistsError: + pass + + self.pool_ss = multiprocessing.Pool( self.threads ) + self.pool_ss.starmap( specialScalerEngine, self.cmdList ); + self.pool_ss.close(); + self.pool_ss.join(); + + specialScalerEngine( tmppath, t, quality_setting, model, self.os_type ) def fsrScaler ( self, tmppath, filepath, threads, fsrpath, quality_setting, sharpening, scaling, filetype ): # Locate Images and assemble FSR-Command @@ -306,6 +358,15 @@ class Handler: self.pool.join(); +def specialScalerEngine ( tmppath, tNumber, quality_setting, model, os_type ): + if ( os_type == 'win32' ): + command = f'realesrgan-ncnn-vulkan -i {tmppath}{tNumber} -o {tmppath}sc -s {quality_setting} -n {model}' + elif ( os_type == 'linux' ): + command = f'wine ./bin/lib/realesrgan-ncnn-vulkan.exe -i {tmppath}{tNumber} -o {tmppath}sc -s {quality_setting} -n {model}' + sub = subprocess.Popen( command, shell=True ); + sub.wait(); + + def upscalerEngine ( files, fsrpath, quality_setting, number, maxlength, os_type ): files = files; diff --git a/imagevideoupscaler-cli.py b/imagevideoupscaler-cli.py index 5cf5177..e579b2d 100644 --- a/imagevideoupscaler-cli.py +++ b/imagevideoupscaler-cli.py @@ -59,7 +59,7 @@ if __name__ == '__main__': if ( args.model in availableModels ): model = args.model; else: - print( 'Invalid argument for model. Can be: realesr-animevideov3 | realesrgan-x4plus | realesrgan-x4plus-anime | realesrnet-x4plus' ) + print( 'Invalid argument for model. Can be: realesr-animevideov3 | realesrgan-x4plus-anime' ) go2 = False; if ( args.noscaling ): @@ -74,7 +74,7 @@ if __name__ == '__main__': if ( args.sharpening != None ): if ( float( args.sharpening ) > 1 ): - print( 'Invalid argument for Sharpening, please specify value between 0 and 1!' ) + print( 'Invalid argument for Sharpening, please specify a value between 0 and 1!' ) go3 = False; if ( args.filetype != None ):