code: def __init__(
      self,
      in_channels,
      character_dict_path="ppocr/utils/ic15_dict.txt",
      **kwargs,
  ):
      super(PGHead, self).__init__()
  
      # get character_length
      with open(character_dict_path, "rb") as fin:
          lines = fin.readlines()
          character_length = len(lines) + 1
  
      self.conv_f_score1 = ConvBNLayer(
          in_channels=in_channels,
          out_channels=64,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_score{}".format(1),
      )
      self.conv_f_score2 = ConvBNLayer(
          in_channels=64,
          out_channels=64,
          kernel_size=3,
          stride=1,
          padding=1,
          act="relu",
          name="conv_f_score{}".format(2),
      )
      self.conv_f_score3 = ConvBNLayer(
          in_channels=64,
          out_channels=128,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_score{}".format(3),
      )
  
      self.conv1 = nn.Conv2D(
          in_channels=128,
          out_channels=1,
          kernel_size=3,
          stride=1,
          padding=1,
          groups=1,
          weight_attr=ParamAttr(name="conv_f_score{}".format(4)),
          bias_attr=False,
      )
  
      self.conv_f_boder1 = ConvBNLayer(
          in_channels=in_channels,
          out_channels=64,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_boder{}".format(1),
      )
      self.conv_f_boder2 = ConvBNLayer(
          in_channels=64,
          out_channels=64,
          kernel_size=3,
          stride=1,
          padding=1,
          act="relu",
          name="conv_f_boder{}".format(2),
      )
      self.conv_f_boder3 = ConvBNLayer(
          in_channels=64,
          out_channels=128,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_boder{}".format(3),
      )
      self.conv2 = nn.Conv2D(
          in_channels=128,
          out_channels=4,
          kernel_size=3,
          stride=1,
          padding=1,
          groups=1,
          weight_attr=ParamAttr(name="conv_f_boder{}".format(4)),
          bias_attr=False,
      )
      self.conv_f_char1 = ConvBNLayer(
          in_channels=in_channels,
          out_channels=128,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_char{}".format(1),
      )
      self.conv_f_char2 = ConvBNLayer(
          in_channels=128,
          out_channels=128,
          kernel_size=3,
          stride=1,
          padding=1,
          act="relu",
          name="conv_f_char{}".format(2),
      )
      self.conv_f_char3 = ConvBNLayer(
          in_channels=128,
          out_channels=256,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_char{}".format(3),
      )
      self.conv_f_char4 = ConvBNLayer(
          in_channels=256,
          out_channels=256,
          kernel_size=3,
          stride=1,
          padding=1,
          act="relu",
          name="conv_f_char{}".format(4),
      )
      self.conv_f_char5 = ConvBNLayer(
          in_channels=256,
          out_channels=256,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_char{}".format(5),
      )
      self.conv3 = nn.Conv2D(
          in_channels=256,
          out_channels=character_length,
          kernel_size=3,
          stride=1,
          padding=1,
          groups=1,
          weight_attr=ParamAttr(name="conv_f_char{}".format(6)),
          bias_attr=False,
      )
  
      self.conv_f_direc1 = ConvBNLayer(
          in_channels=in_channels,
          out_channels=64,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_direc{}".format(1),
      )
      self.conv_f_direc2 = ConvBNLayer(
          in_channels=64,
          out_channels=64,
          kernel_size=3,
          stride=1,
          padding=1,
          act="relu",
          name="conv_f_direc{}".format(2),
      )
      self.conv_f_direc3 = ConvBNLayer(
          in_channels=64,
          out_channels=128,
          kernel_size=1,
          stride=1,
          padding=0,
          act="relu",
          name="conv_f_direc{}".format(3),
      )
      self.conv4 = nn.Conv2D(
          in_channels=128,
          out_channels=2,
          kernel_size=3,
          stride=1,
          padding=1,
          groups=1,
          weight_attr=ParamAttr(name="conv_f_direc{}".format(4)),
          bias_attr=False,
      )
  
file_path: PaddleOCR/ppocr/modeling/heads/e2e_pg_head.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import paddle
  from paddle import nn
  import paddle.nn.functional
  from paddle import ParamAttr
label_desc: Use image node_id 1 to create a new PGHead object from inherited base classes: nn with example: obj = PGHead(in_channels, character_dict_path)