def run(self, result_filename, image_filename, where=None, annotation_filename=None, ann_index=0): # 读入图片数据 final_batch_data, data_raw, gaussian_mask, ann_data, ann_mask = Data.load_image( image_filename, where=where, annotation_filename=annotation_filename, ann_index=ann_index, image_size=self.input_size) # 网络 img_placeholder = tf.placeholder(dtype=tf.float32, shape=(None, self.input_size[0], self.input_size[1], 4)) net = PSPNet({'data': img_placeholder}, is_training=True, num_classes=1, last_pool_size=self.last_pool_size, filter_number=32) # 输出/预测 raw_output_op = net.layers["conv6_n"] sigmoid_output_op = tf.sigmoid(raw_output_op) # 启动Session/加载模型 sess = tf.Session(config=tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))) sess.run(tf.global_variables_initializer()) Tools.restore_if_y(sess, self.log_dir) # 运行 raw_output, sigmoid_output = sess.run([raw_output_op, sigmoid_output_op], feed_dict={img_placeholder: final_batch_data}) # 保存 Image.fromarray(np.asarray(np.squeeze(data_raw), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "data.png")) Tools.print_info('over : result save in {}'.format(os.path.join(self.save_dir, result_filename))) Image.fromarray(np.asarray(np.squeeze(sigmoid_output[0] * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "pred.png")) Tools.print_info('over : result save in {}'.format(os.path.join(self.save_dir, result_filename))) Image.fromarray(np.asarray(np.squeeze(np.greater(raw_output[0], 0.5) * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "pred_raw.png")) Tools.print_info('over : result save in {}'.format(os.path.join(self.save_dir, result_filename))) Image.fromarray(np.asarray(np.squeeze(np.greater(sigmoid_output[0], 0.5) * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "pred_sigmoid.png")) Tools.print_info('over : result save in {}'.format(os.path.join(self.save_dir, result_filename))) Image.fromarray(np.asarray(np.squeeze(gaussian_mask * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "mask.bmp")) Tools.print_info('over : result save in {}'.format(os.path.join(self.save_dir, result_filename))) Image.fromarray(np.asarray(np.squeeze(ann_mask * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "ann.bmp")) Tools.print_info('over : result save in {}'.format(os.path.join(self.save_dir, result_filename))) pass
def run(self, image_filename_or_data, mask_color, opacity): plt.ion() plt.axis('off') if isinstance(image_filename_or_data, str): image_data = np.array(Image.open(image_filename_or_data)) elif isinstance(image_filename_or_data, list) or isinstance(image_filename_or_data, np.ndarray): image_data = image_filename_or_data else: print("image_filename_or_data is error") return plt.imshow(image_data) plt.title('Click one point of the object that you interested') try: while 1: object_point = np.array(plt.ginput(1, timeout=0)).astype(np.int)[0] where = [int(self.input_size[0] * object_point[1] / len(image_data)), int(self.input_size[1] * object_point[0] / len(image_data[0]))] print("point=[{},{}] where=[{},{}]".format(object_point[0], object_point[1], where[0], where[1])) final_batch_data, data_raw, gaussian_mask = Data.load_image(image_data, where=where, image_size=self.input_size) print("begin to run ...") # 运行 predict_output_r, pred_classes_r = self.sess.run([self.predict_output, self.pred_classes], feed_dict={self.img_placeholder: final_batch_data}) print("end run") # 类别 print("the class is {}({})".format(pred_classes_r[0], CategoryNames[pred_classes_r[0]])) # 分割 segment = np.squeeze(np.asarray(np.where(predict_output_r[0] == 1, 1, 0), dtype=np.uint8)) segment = np.asarray(Image.fromarray(segment).resize((len(image_data[0]), len(image_data)))) image_mask = np.ndarray(image_data.shape) image_mask[:, :, 0] = (1 - segment) * image_data[:, :, 0] + segment * ( opacity * mask_color[0] + (1 - opacity) * image_data[:, :, 0]) image_mask[:, :, 1] = (1 - segment) * image_data[:, :, 1] + segment * ( opacity * mask_color[1] + (1 - opacity) * image_data[:, :, 1]) image_mask[:, :, 2] = (1 - segment) * image_data[:, :, 2] + segment * ( opacity * mask_color[2] + (1 - opacity) * image_data[:, :, 2]) plt.clf() # clear image plt.text(len(image_data[0]) // 2 - 10, -6, CategoryNames[pred_classes_r[0]], fontsize=15) plt.imshow(image_mask.astype(np.uint8)) print("") pass except Exception: print("..................") print("...... close .....") print("..................") pass pass
def run(self, result_filename, image_filename, where=None, annotation_filename=None, ann_index=0): # 读入图片数据 if annotation_filename: final_batch_data, data_raw, gaussian_mask, ann_data, ann_mask = Data.load_image( image_filename, where=where, annotation_filename=annotation_filename, ann_index=ann_index, image_size=self.input_size) else: final_batch_data, data_raw, gaussian_mask = Data.load_image( image_filename, where=where, annotation_filename=annotation_filename, ann_index=ann_index, image_size=self.input_size) # 网络 img_placeholder = tf.placeholder(dtype=tf.float32, shape=(None, self.input_size[0], self.input_size[1], 4)) net = PSPNet({'data': img_placeholder}, is_training=True, num_classes=21, last_pool_size=self.last_pool_size, filter_number=32, num_segment=4) # 输出/预测 raw_output_op = net.layers["conv6_n_4"] sigmoid_output_op = tf.sigmoid(raw_output_op) predict_output_op = tf.argmax(sigmoid_output_op, axis=-1) raw_output_classes = net.layers['class_attention_fc'] pred_classes = tf.cast(tf.argmax(raw_output_classes, axis=-1), tf.int32) # 启动Session/加载模型 sess = tf.Session(config=tf.ConfigProto(gpu_options=tf.GPUOptions( allow_growth=True))) sess.run(tf.global_variables_initializer()) Tools.restore_if_y(sess, self.log_dir) # 运行 raw_output, sigmoid_output, predict_output_r, raw_output_classes_r, pred_classes_r = sess.run( [ raw_output_op, sigmoid_output_op, predict_output_op, raw_output_classes, pred_classes ], feed_dict={img_placeholder: final_batch_data}) # 保存 print("{} {} {}".format(pred_classes_r[0], CategoryNames[pred_classes_r[0]], raw_output_classes_r)) print("result in {}".format( os.path.join(self.save_dir, result_filename))) Image.fromarray(np.asarray(np.squeeze(data_raw), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "data.png")) output_result = np.squeeze( np.split(np.asarray(sigmoid_output[0] * 255, dtype=np.uint8), axis=-1, indices_or_sections=4)) Image.fromarray( np.squeeze( np.asarray(predict_output_r[0] * 255 // 4, dtype=np.uint8))).save( os.path.join(self.save_dir, result_filename + "pred.png")) Image.fromarray(output_result[0]).save( os.path.join(self.save_dir, result_filename + "pred_0.png")) Image.fromarray(output_result[1]).save( os.path.join(self.save_dir, result_filename + "pred_1.png")) Image.fromarray(output_result[2]).save( os.path.join(self.save_dir, result_filename + "pred_2.png")) Image.fromarray(output_result[3]).save( os.path.join(self.save_dir, result_filename + "pred_3.png")) Image.fromarray( np.asarray(np.squeeze(gaussian_mask * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "mask.bmp")) if annotation_filename: Image.fromarray( np.asarray(np.squeeze(ann_mask * 255), dtype=np.uint8)).save( os.path.join(self.save_dir, result_filename + "ann.bmp")) pass pass