1- from PIL import Image
2- import numpy as np
3- import infer
4- import onnxruntime as ort
5- from argparse import ArgumentParser
6-
7- # Disable MS telemetry
8- ort .disable_telemetry_events ()
9-
10- # Parse cli arguments
11- parser = ArgumentParser ()
12- parser .add_argument ('-i' , '--img_path' , dest = 'img_path' , required = True ,
13- help = 'path to the input image' )
14- parser .add_argument ('-n' , '--normal_path' , dest = 'normal_path' , required = True ,
15- help = 'path where the generated normal map is saved' )
16- parser .add_argument ('-o' , '--overlap' , dest = 'overlap' , required = True ,
17- help = 'tiles overlap size, must be "small", "medium" or "big"' ,
18- choices = ['small' , 'medium' , 'big' ])
19- args = parser .parse_args ()
20-
21- # Load image
22- img = np .array (Image .open (args .img_path )) / 255.0
23- # Reshape to C,H,W
24- img = np .transpose (img , (2 , 0 , 1 ))
25- # Grayscale
26- img = np .mean (img [0 :3 ], axis = 0 , keepdims = True )
27-
28- # Split image in tiles
29- print ('tilling' )
30- tile_size = (256 , 256 )
31- overlaps = {'small' : 20 , 'medium' : 50 , 'big' : 124 }
32- stride_size = (tile_size [0 ]- overlaps [args .overlap ], tile_size [1 ]- overlaps [args .overlap ])
33- tiles , paddings = infer .tiles_split (img , tile_size , stride_size )
34-
35- # Predict tiles normal map
36- print ('generating' )
37-
38- def progress_print (current , total ):
39- print ('{}/{}' .format (current , total ))
40-
41- ort_session = ort .InferenceSession ('./deepbump256.onnx' )
42- pred_tiles = infer .tiles_infer (tiles , ort_session , progress_callback = progress_print )
43-
44- # Merge tiles
45- print ('merging' )
46- pred_img = infer .tiles_merge (pred_tiles , stride_size , (3 , img .shape [1 ], img .shape [2 ]), paddings )
47-
48- # Save image
49- pred_img = pred_img .transpose ((1 ,2 ,0 ))
50- pred_img = Image .fromarray ((pred_img * 255.0 ).astype (np .uint8 ))
51- pred_img .save (args .normal_path )
1+ from PIL import Image
2+ import numpy as np
3+ import infer
4+ import onnxruntime as ort
5+ from argparse import ArgumentParser
6+
7+
8+ def progress_print (current , total ):
9+ print ('{}/{}' .format (current , total ))
10+
11+
12+ # Disable MS telemetry
13+ ort .disable_telemetry_events ()
14+
15+ # Parse cli arguments
16+ parser = ArgumentParser ()
17+ parser .add_argument ('-i' , '--img_path' , dest = 'img_path' , required = True ,
18+ help = 'path to the input image' )
19+ parser .add_argument ('-n' , '--normal_path' , dest = 'normal_path' , required = True ,
20+ help = 'path where the generated normal map is saved' )
21+ parser .add_argument ('-o' , '--overlap' , dest = 'overlap' , required = True ,
22+ help = 'tiles overlap size, must be "small", "medium" or "large"' ,
23+ choices = ['small' , 'medium' , 'large' ])
24+ args = parser .parse_args ()
25+
26+ # Load image
27+ img = np .array (Image .open (args .img_path )) / 255.0
28+ # Reshape to C,H,W
29+ img = np .transpose (img , (2 , 0 , 1 ))
30+ # Grayscale
31+ img = np .mean (img [0 :3 ], axis = 0 , keepdims = True )
32+
33+ # Split image in tiles
34+ print ('tilling' )
35+ tile_size = 256
36+ overlaps = {'small' : tile_size // 6 , 'medium' : tile_size // 4 ,
37+ 'large' : tile_size // 2 }
38+ stride_size = tile_size - overlaps [args .overlap ]
39+ tiles , paddings = infer .tiles_split (img , (tile_size , tile_size ),
40+ (stride_size , stride_size ))
41+
42+ # Predict tiles normal map
43+ print ('generating' )
44+ ort_session = ort .InferenceSession ('./deepbump256.onnx' )
45+ pred_tiles = infer .tiles_infer (tiles , ort_session ,
46+ progress_callback = progress_print )
47+
48+ # Merge tiles
49+ print ('merging' )
50+ pred_img = infer .tiles_merge (pred_tiles , (stride_size , stride_size ),
51+ (3 , img .shape [1 ], img .shape [2 ]),
52+ paddings )
53+
54+ # Save image
55+ pred_img = pred_img .transpose ((1 , 2 , 0 ))
56+ pred_img = Image .fromarray ((pred_img * 255.0 ).astype (np .uint8 ))
57+ pred_img .save (args .normal_path )
0 commit comments