当前位置: 首页 > wzjs >正文

怎么用vs做动态网站百度拉新推广平台

怎么用vs做动态网站,百度拉新推广平台,网站开发流行吗,临沂购物网站建设目录 重点是四 先用 PPStructure 版面分析,分成不同的块儿,再选用 PaddleOCR、或PPStructure基础路径OCR模型配置OCR模型配置GPU配置硬件配置性能配置一、框架选型对比分析1. **PaddleOCR核心能力**2. **PP-Structure核心能力**3. **选型结论**二、错误根因分析与修复方案1. …

目录

  • 重点是四 先用 PPStructure 版面分析,分成不同的块儿,再选用 PaddleOCR、或PPStructure
  • 基础路径
  • OCR模型配置
  • OCR模型配置
  • GPU配置
  • 硬件配置
  • 性能配置
      • 一、框架选型对比分析
        • 1. **PaddleOCR核心能力**
        • 2. **PP-Structure核心能力**
        • 3. **选型结论**
      • 二、错误根因分析与修复方案
        • 1. **错误现象**
        • 2. **深层原因**
        • 3. **修复方案
      • 三、性能优化建议
        • 1. **GPU资源利用**
        • 2. **内存管理**
        • 3. **模型裁剪**
      • 四、架构设计升级建议
        • 1. **流程重组**
        • 2. **模块解耦**
      • 五、关键参数调优指南

重点是四 先用 PPStructure 版面分析,分成不同的块儿,再选用 PaddleOCR、或PPStructure

https://chat.deepseek.com/a/chat/s/1dafb23d-d230-48a6-b3a1-72569eb1c7cd

我有解析PDF的程序如下:
1、配置
“”"
OCR处理工具类
功能:统一管理OCR引擎的初始化、处理、资源回收
“”"
import multiprocessing
import os
from pathlib import Path
from typing import Tuple, Optional, Dict, Any

import paddle
from paddleocr import PaddleOCR, PPStructure

from .GPUResource import GPUResourceController
from …utils.logutil import get_local_logger

logger = get_local_logger()

基础路径

BASE_DIR = Path(file).parent.parent
MODEL_DIR = BASE_DIR / “common/models”
logger.info(f" >>>>>> MODEL_DIR路径: {MODEL_DIR}")

OCR模型配置

START_PAGE = 6

OCR模型配置

OCR_CONFIG = {
# 显式指定所有模型路径
# det_model_dir=str(MODEL_DIR /“ch_PP-OCRv4_det_infer”),
“det_model_dir”: str(MODEL_DIR / “ch_PP-OCRv4_det_infer”),
“rec_model_dir”: str(MODEL_DIR / “ch_PP-OCRv4_rec_infer”),
“cls_model_dir”: str(MODEL_DIR / “ch_ppocr_mobile_v2.0_cls_infer”),
“table_model_dir”: str(MODEL_DIR / “en_ppstructure_mobile_v2.0_table_structure_infer”),
“layout_model_dir”: str(MODEL_DIR / “en_ppstructure_mobile_v2.0_layout_infer”),
“lang”: “ch”,
“ocr_version”: “PP-OCRv4”,
“table_version”: “PP-StructureV2”
}

GPU配置

GPU_CONFIG = {
“enable_gpu”: True,
“max_gpus”: 2,
“memory_fraction”: 0.5
}

硬件配置

GPU_MEMORY_LIMIT = 0.8 # 单进程最大显存占比
CPU_THREADS = 4 # CPU模式线程数

性能配置

PRECISION_MODE = “fp16” if paddle.is_compiled_with_cuda() else “fp32”
ENABLE_TENSORRT = True

use_gpu_flag = paddle.device.is_compiled_with_cuda()
print(f"torch.cuda.is_available(){use_gpu_flag}")
print(f"torch.version
{paddle.device.get_cudnn_version()}")

class OCREngineInitError(Exception):
“”“OCR引擎初始化异常”“”
pass

“”"
OCR配置工具类
“”"
class OCRConfig:

def __init__(self, process_idx: int = 0):"""初始化OCR工具:param process_idx: 进程ID(用于多进程GPU分配)"""self.process_idx = process_idxself.gpu_id = -1self.ocr_engine = Noneself.table_engine = Noneself._init_gpu()self._init_ocr_engine()self._init_table_engine()def __enter__(self):self._set_hardware_environment()self._init_engines()return selfdef __exit__(self, exc_type, *_):self._cleanup_resources()self._report_gpu_status(exc_type is None)def _set_hardware_environment(self):os.environ["CUDA_VISIBLE_DEVICES"] = str(self.gpu_id) if self.gpu_id != -1 else ""device = "gpu:0" if self.gpu_id != -1 else "cpu"paddle.set_device(device)if self.gpu_id != -1:paddle.set_flags({'FLAGS_fraction_of_gpu_memory_to_use': GPU_MEMORY_LIMIT,'FLAGS_allocator_strategy': 'auto_growth'})def _init_gpu(self) -> None:"""初始化GPU环境"""if not GPU_CONFIG["enable_gpu"] or not paddle.is_compiled_with_cuda():logger.info(f" paddle.is_compiled_with_cuda: {paddle.device.is_compiled_with_cuda()}, 即将运行在CPU模式")paddle.set_device("cpu")returnnum_gpus = paddle.device.cuda.device_count()if num_gpus == 0:logger.warn(f" num_gpus: {num_gpus}, 没有检测到可用的GUP, 即将运行在CPU模式")return -1  # 标记为CPU模式self.gpu_id = self.process_idx % num_gpusos.environ["CUDA_VISIBLE_DEVICES"] = str(self.gpu_id)paddle.set_device(f"gpu:{self.gpu_id}")logger.info(f"初始化GPU:{self.gpu_id} | 进程:{self.process_idx}")# 设置显存分配比例paddle.set_flags({'FLAGS_fraction_of_gpu_memory_to_use': GPU_CONFIG["memory_fraction"]})def _init_ocr_engine(self) -> None:"""初始化OCR引擎"""try:self.ocr_engine = PaddleOCR(use_angle_cls=True,lang=OCR_CONFIG["lang"],page_num=START_PAGE,use_gpu=self.gpu_id != -1,gpu_id=self.gpu_id,table_model_dir="../common/models/en_ppstructure_mobile_v2.0_table_structure_infer",  # 显式指定表格模型# 显式指定所有模型路径# det_model_dir=str(MODEL_DIR /"ch_PP-OCRv4_det_infer"),det_model_dir=OCR_CONFIG["det_model_dir"],rec_model_dir=OCR_CONFIG["rec_model_dir"],cls_model_dir=OCR_CONFIG["cls_model_dir"],# ocr_version=OCR_CONFIG["ocr_version"],table_version="PP-StructureV2",  # 使用表格识别模型show_log=False,# 性能优化参数enable_mkldnn=True,  # Intel CPU 加速use_tensorrt=False,   # NVIDIA GPU 加速precision="fp16"     # 混合精度推理)print(f" OCR引擎初始化成功 [PID:{os.getpid()}] Assigned to GPU {self.gpu_id} (Process index: {self.process_idx})")except Exception as e:logger.error(f"OCR引擎初始化失败: {str(e)}")raise OCREngineInitError("OCR初始化失败") from edef _init_table_engine(self) -> None:"""初始化表格引擎: 使用RapidTable """# table_input = RapidTableInput(#     model_type="unitable",#     use_cuda=self.gpu_id != -1,#     device=f"cuda:{self.gpu_id}" if self.gpu_id != -1 else "cpu"# )# self.table_engine = RapidTable(table_input)"""初始化表格引擎: 使用PPStructure """try:self.table_engine = PPStructure(table_model_dir=OCR_CONFIG["table_model_dir"],layout_model_dir=OCR_CONFIG["layout_model_dir"],table_version=OCR_CONFIG["table_version"],ocr=False,use_gpu=GPU_CONFIG["enable_gpu"],gpu_id=self.gpu_id,show_log=False)logger.info("表格引擎初始化成功")except Exception as e:logger.error(f"表格引擎初始化失败: {str(e)}")raise OCREngineInitError("表格引擎初始化失败") from edef _cleanup_resources(self):"""资源清理"""if self.gpu_id != -1:paddle.device.cuda.empty_cache()logger.info(f"已释放GPU:{self.gpu_id}资源")
def _report_gpu_status(self, success: bool):if self.gpu_id != -1:GPUResourceController().release_gpu(self.gpu_id, success)

class OCRManager:
“”"
OCR引擎管理器(多进程安全)
“”"
_engines = {}

@classmethod
def get_engine(cls, process_idx: int) -> OCRConfig:"""获取进程专用引擎"""if not process_idx:process_idx = os.getpid()if process_idx not in cls._engines:try:cls._engines[process_idx] = OCRConfig(process_idx)except OCREngineInitError as e:raise RuntimeError(f"无法为进程{process_idx}创建引擎") from ereturn cls._engines[process_idx]
"""
GPU资源管理器(进程安全版本)
核心功能:
- 自动检测可用GPU
- 实现进程级GPU分配
- 避免跨进程污染
"""
_gpu_ring = []
_lock = multiprocessing.Lock()def __init__(self):self._init_gpu_pool()def _init_gpu_pool(self):"""安全初始化GPU资源池"""with self._lock:if not self._gpu_ring:if paddle.is_compiled_with_cuda():num_gpus = paddle.device.cuda.device_count()self._gpu_ring = list(range(num_gpus)) if num_gpus > 0 else []logger.info(f"GPU资源池初始化完成: {self._gpu_ring}")def acquire_gpu(self, process_id: int) -> int:"""进程安全获取GPU ID"""with self._lock:if not self._gpu_ring:return -1return self._gpu_ring[process_id % len(self._gpu_ring)]

2、处理程序:
def _process_ocr_and_table(self, img_path, page_idx:int):
# 假设这是你的 OCR 和表格识别逻辑
try:
“”“使用进程级引擎处理”“”
ocr_config = OCRManager.get_engine(os.getpid())
ocr_engine = ocr_config.ocr_engine
table_engine = ocr_config.table_engine

        # OCR识别ocr_output = ocr_engine.ocr(img_path)if not ocr_output:raise ValueError(" ocr_output OCR未识别到内容")logger.info(f" 第{page_idx}页OCR识别结果,类型:{type(ocr_output)}, \n 内容示例:{ocr_output}")# 解析OCR结果:每个元素的结构为 [box_coords, (text, score)]boxes = [line[0] for line in ocr_output]  # 提取所有框坐标txts = [line[1][0] for line in ocr_output]  # 提取所有文本
http://www.dtcms.com/wzjs/177487.html

相关文章:

  • 旅游集团网站建设搜索关键词排名查询
  • 如何选择网站项目网站推广的营销策划方案
  • 做网站 傻瓜软件seo网站关键词快速排名
  • 安庆市建设银行网站深圳博惠seo
  • 英德住房和城乡建设部网站黑科技引流软件是真的吗
  • 怎么增加网站反链引擎优化seo
  • 怎么建设一个优秀的网站网站建设对企业品牌价值提升的影响
  • 建设银行新加坡分行网站优化大师班级优化大师
  • 大良营销网站建设流程班级优化大师免费下载电脑版
  • 做机械比较好的外贸网站幽默软文广告经典案例
  • 站长工具乱码短视频seo系统
  • 微信服务号可以做万网站么成都营销型网站制作
  • 自建的电子网站如何做推广怎样做网站的优化、排名
  • 做网站如何语音对话属于网络营销特点的是
  • 单页面网站有哪些内容沈阳专业seo
  • 计算机系部网站开发背景跨境电商培训
  • 深圳知名网站建设供应百度小说官网
  • 游戏源码 wordpress郑州seo培训
  • 网页具有动画网站建设技术泉州百度推广咨询
  • 做外贸需要什么网站百度账号管家
  • 中国商机创业网seo网站排名软件
  • 厦门做网站哪家强如何在百度上发布广告
  • 太原网站上排名51网站统计
  • 陕西汽车网站建设seo工作内容有哪些
  • 个人备案网站内不能出现什么内容电子报刊的传播媒体是什么
  • 昆明网站制作推荐360站长工具
  • 文库网站开发建设南京seo代理
  • 厦门网站建设电话廊坊百度快照优化哪家服务好
  • 网站建设代码结构百度高级检索入口
  • 旅游景点推广策划方案太原关键词排名优化