@@ -47,12 +47,14 @@ def str2bool(v):
4747parser .add_argument ('--text_threshold' , default = 0.7 , type = float , help = 'text confidence threshold' )
4848parser .add_argument ('--low_text' , default = 0.4 , type = float , help = 'text low-bound score' )
4949parser .add_argument ('--link_threshold' , default = 0.4 , type = float , help = 'link confidence threshold' )
50- parser .add_argument ('--cuda' , default = True , type = str2bool , help = 'Use cuda to train model ' )
50+ parser .add_argument ('--cuda' , default = True , type = str2bool , help = 'Use cuda for inference ' )
5151parser .add_argument ('--canvas_size' , default = 1280 , type = int , help = 'image size for inference' )
5252parser .add_argument ('--mag_ratio' , default = 1.5 , type = float , help = 'image magnification ratio' )
5353parser .add_argument ('--poly' , default = False , action = 'store_true' , help = 'enable polygon type' )
5454parser .add_argument ('--show_time' , default = False , action = 'store_true' , help = 'show processing time' )
5555parser .add_argument ('--test_folder' , default = '/data/' , type = str , help = 'folder path to input images' )
56+ parser .add_argument ('--refine' , default = False , action = 'store_true' , help = 'enable link refiner' )
57+ parser .add_argument ('--refiner_model' , default = 'weights/craft_refiner_CTW1500.pth' , type = str , help = 'pretrained refiner model' )
5658
5759args = parser .parse_args ()
5860
@@ -64,7 +66,7 @@ def str2bool(v):
6466if not os .path .isdir (result_folder ):
6567 os .mkdir (result_folder )
6668
67- def test_net (net , image , text_threshold , link_threshold , low_text , cuda , poly ):
69+ def test_net (net , image , text_threshold , link_threshold , low_text , cuda , poly , refine_net = None ):
6870 t0 = time .time ()
6971
7072 # resize
@@ -79,12 +81,17 @@ def test_net(net, image, text_threshold, link_threshold, low_text, cuda, poly):
7981 x = x .cuda ()
8082
8183 # forward pass
82- y , _ = net (x )
84+ y , feature = net (x )
8385
8486 # make score and link map
8587 score_text = y [0 ,:,:,0 ].cpu ().data .numpy ()
8688 score_link = y [0 ,:,:,1 ].cpu ().data .numpy ()
8789
90+ # refine link
91+ if refine_net is not None :
92+ y_refiner = refine_net (y , feature )
93+ score_link = y_refiner [0 ,:,:,0 ].cpu ().data .numpy ()
94+
8895 t0 = time .time () - t0
8996 t1 = time .time ()
9097
@@ -127,14 +134,30 @@ def test_net(net, image, text_threshold, link_threshold, low_text, cuda, poly):
127134
128135 net .eval ()
129136
137+ # LinkRefiner
138+ refine_net = None
139+ if args .refine :
140+ from refinenet import RefineNet
141+ refine_net = RefineNet ()
142+ print ('Loading weights of refiner from checkpoint (' + args .refiner_model + ')' )
143+ if args .cuda :
144+ refine_net .load_state_dict (copyStateDict (torch .load (args .refiner_model )))
145+ refine_net = refine_net .cuda ()
146+ refine_net = torch .nn .DataParallel (refine_net )
147+ else :
148+ refine_net .load_state_dict (copyStateDict (torch .load (args .refiner_model , map_location = 'cpu' )))
149+
150+ refine_net .eval ()
151+ args .poly = True
152+
130153 t = time .time ()
131154
132155 # load data
133156 for k , image_path in enumerate (image_list ):
134157 print ("Test image {:d}/{:d}: {:s}" .format (k + 1 , len (image_list ), image_path ), end = '\r ' )
135158 image = imgproc .loadImage (image_path )
136159
137- bboxes , polys , score_text = test_net (net , image , args .text_threshold , args .link_threshold , args .low_text , args .cuda , args .poly )
160+ bboxes , polys , score_text = test_net (net , image , args .text_threshold , args .link_threshold , args .low_text , args .cuda , args .poly , refine_net )
138161
139162 # save score text
140163 filename , file_ext = os .path .splitext (os .path .basename (image_path ))
0 commit comments