获取全局PaddleOCR实例
(self)
| 131 | self._paddle = self._get_paddle_instance() |
| 132 | |
| 133 | def _get_paddle_instance(self) -> Optional[Any]: |
| 134 | """获取全局PaddleOCR实例""" |
| 135 | global _global_paddle_instance |
| 136 | if _global_paddle_instance is None: |
| 137 | try: |
| 138 | # 判断是否支持GPU |
| 139 | use_gpu = paddle and paddle.device.is_compiled_with_cuda() |
| 140 | device = "gpu" if use_gpu else "cpu" |
| 141 | if paddle: |
| 142 | paddle.set_device(device) |
| 143 | |
| 144 | logger.info(f"正在初始化PaddleOCR实例(设备: {device.upper()})...") |
| 145 | |
| 146 | # 合并配置参数 |
| 147 | config = { |
| 148 | "lang": "ch", |
| 149 | "use_textline_orientation": True, |
| 150 | **self.paddle_config |
| 151 | } |
| 152 | |
| 153 | _global_paddle_instance = PaddleOCR(**config) |
| 154 | logger.info(f"PaddleOCR初始化成功(使用{device.upper()})") |
| 155 | |
| 156 | except Exception as e: |
| 157 | logger.error(f"PaddleOCR初始化失败: {e}") |
| 158 | try: |
| 159 | logger.info("尝试使用默认参数初始化PaddleOCR...") |
| 160 | if paddle: |
| 161 | paddle.set_device("cpu") |
| 162 | _global_paddle_instance = PaddleOCR(lang="ch") |
| 163 | logger.info("PaddleOCR默认参数初始化成功") |
| 164 | except Exception as e2: |
| 165 | logger.error(f"PaddleOCR默认参数初始化也失败: {e2}") |
| 166 | _global_paddle_instance = None |
| 167 | return _global_paddle_instance |
| 168 | |
| 169 | def _to_pil(self, img: Any) -> Image.Image: |
| 170 | """将输入图像转换为PIL图像对象""" |