瀏覽代碼

Added ability to resume Video Upscaling

You can stop the Video Upscaling by sending "Ctrl + C" to the terminal.
Then simply run the same command again to start video upscaling, and it will skip all frames already processed.
BrokenSilence 10 年之前
父節點
當前提交
c48c3eb017
共有 1 個文件被更改,包括 47 次插入36 次删除
  1. 47 36
      waifu2x.lua

+ 47 - 36
waifu2x.lua

@@ -15,7 +15,6 @@ local function convert_image(opt)
    local x = image_loader.load_float(opt.i)
    local new_x = nil
    local t = sys.clock()
-   
    if opt.o == "(auto)" then
       local name = path.basename(opt.i)
       local e = path.extension(name)
@@ -23,8 +22,7 @@ local function convert_image(opt)
       opt.o = path.join(path.dirname(opt.i), string.format("%s(%s).png", base, opt.m))
    end
    if opt.m == "noise" then
-      local model = torch.load(path.join(opt.model_dir,
-					 ("noise%d_model.t7"):format(opt.noise_level)), "ascii")
+      local model = torch.load(path.join(opt.model_dir, ("noise%d_model.t7"):format(opt.noise_level)), "ascii")
       model:evaluate()
       new_x = reconstruct.image(model, x, BLOCK_OFFSET)
    elseif opt.m == "scale" then
@@ -32,8 +30,7 @@ local function convert_image(opt)
       model:evaluate()
       new_x = reconstruct.scale(model, opt.scale, x, BLOCK_OFFSET)
    elseif opt.m == "noise_scale" then
-      local noise_model = torch.load(path.join(opt.model_dir,
-					       ("noise%d_model.t7"):format(opt.noise_level)), "ascii")
+      local noise_model = torch.load(path.join(opt.model_dir, ("noise%d_model.t7"):format(opt.noise_level)), "ascii")
       local scale_model = torch.load(path.join(opt.model_dir, ("scale%.1fx_model.t7"):format(opt.scale)), "ascii")
       noise_model:evaluate()
       scale_model:evaluate()
@@ -62,37 +59,51 @@ local function convert_frames(opt)
    end
    fp:close()
    for i = 1, #lines do
-      local x = image_loader.load_float(lines[i])
-      local new_x = nil
-      if opt.m == "noise" and opt.noise_level == 1 then
-	 new_x = reconstruct.image(noise1_model, x, BLOCK_OFFSET)
-      elseif opt.m == "noise" and opt.noise_level == 2 then
-	 new_x = reconstruct.image(noise2_model, x, BLOCK_OFFSET)
-      elseif opt.m == "scale" then
-	 new_x = reconstruct.scale(scale_model, opt.scale, x, BLOCK_OFFSET)
-      elseif opt.m == "noise_scale" and opt.noise_level == 1 then
-	 x = reconstruct.image(noise1_model, x, BLOCK_OFFSET)
-	 new_x = reconstruct.scale(scale_model, opt.scale, x, BLOCK_OFFSET)
-      elseif opt.m == "noise_scale" and opt.noise_level == 2 then
-	 x = reconstruct.image(noise2_model, x, BLOCK_OFFSET)
-	 new_x = reconstruct.scale(scale_model, opt.scale, x, BLOCK_OFFSET)
-      else
-	 error("undefined method:" .. opt.method)
-      end
-      local output = nil
-      if opt.o == "(auto)" then
-	 local name = path.basename(lines[i])
-	 local e = path.extension(name)
-	 local base = name:sub(0, name:len() - e:len())
-	 output = path.join(path.dirname(opt.i), string.format("%s(%s).png", base, opt.m))
-      else
-	 output = string.format(opt.o, i)
-      end
-      image.save(output, new_x)
-      xlua.progress(i, #lines)
-      if i % 10 == 0 then
-	 collectgarbage()
-      end
+	if file_exists(string.format(opt.o, i)) == false then
+	      local x = image_loader.load_float(lines[i])
+	      local new_x = nil
+	      if opt.m == "noise" and opt.noise_level == 1 then
+		 new_x = reconstruct.image(noise1_model, x, BLOCK_OFFSET)
+	      elseif opt.m == "noise" and opt.noise_level == 2 then
+		 new_x = reconstruct.image(noise2_model, x, BLOCK_OFFSET)
+	      elseif opt.m == "scale" then
+		 new_x = reconstruct.scale(scale_model, opt.scale, x, BLOCK_OFFSET)
+	      elseif opt.m == "noise_scale" and opt.noise_level == 1 then
+		 x = reconstruct.image(noise1_model, x, BLOCK_OFFSET)
+		 new_x = reconstruct.scale(scale_model, opt.scale, x, BLOCK_OFFSET)
+	      elseif opt.m == "noise_scale" and opt.noise_level == 2 then
+		 x = reconstruct.image(noise2_model, x, BLOCK_OFFSET)
+		 new_x = reconstruct.scale(scale_model, opt.scale, x, BLOCK_OFFSET)
+	      else
+		 error("undefined method:" .. opt.method)
+	      end
+	      local output = nil
+	      if opt.o == "(auto)" then
+		 local name = path.basename(lines[i])
+		 local e = path.extension(name)
+		 local base = name:sub(0, name:len() - e:len())
+		 output = path.join(path.dirname(opt.i), string.format("%s(%s).png", base, opt.m))
+	      else
+		 output = string.format(opt.o, i)
+	      end
+	      image.save(output, new_x)
+	      xlua.progress(i, #lines)
+	      if i % 10 == 0 then
+		 collectgarbage()
+	      end
+	else
+           xlua.progress(i, #lines)
+	end
+   end
+end
+
+function file_exists(name)
+   local f=io.open(name,"r")
+   if f~=nil then 
+	io.close(f) 
+	return true 
+   else 
+	return false 
    end
 end