# 【PP-ChatOCR】基于LLM+OCR技术的通用文本图像智能分析系统 ## 1. 任务简介 PP-ChatOCR是一个融合了LLM大模型+OCR技术的通用文本图像进行智能分析系统。无需针对繁杂的垂类任务定制规则模版,一个智能系统即可实现通用场景下的图片关键信息抽取。 当前本项目支持以下12个场景的图片关键信息抽取,包括:身份证、火车票、电子回单、行驶证、港澳台通行证、驾驶证、社保卡、户口本、检查报告单据、结婚证、车辆合格证、营业执照。 这些场景在自建评测集合上平均准确率超越75%,支持的场景种类和效果还在持续优化。 点击右上角`创建模型产线` 选择配置好的GPU、CPU环境,可以快速体验效果。 |<img src="https://ai-studio-static-online.cdn.bcebos.com/95ec63355ec0427a9179e4d40c0616285a1821805c6144bd953d151347967272" style="height: 200px" >| <img src="https://ai-studio-static-online.cdn.bcebos.com/4f2c0b9e38594c878cf389a9d0a95e72f6d9aad1c784416fa2de13aa95483bc7" style="height: 200px"> |--|--| <img src="https://ai-studio-static-online.cdn.bcebos.com/f57fba8b6f8f477faa91edf3038ee119085b7319ec8f45c38012aa5cf9f8d316" style="height: 200px">|<img src="https://ai-studio-static-online.cdn.bcebos.com/397c707e0b164aa9b2e6031b736201770b4731ca5dbb41e1a64f37e588092510" style="height: 200px">| ## 2. 模型选择和二次开发 `PP-ChatOCR通用文本图像智能分析系统`选择了PP-OCRv4和文心大模型串联完成,PP-OCRv4是一个端到端的串联OCR系统,可实现CPU/GPU上的实时预测,在通用场景上达到开源SOTA的效果。文心大语言模型将海量数据和知识的融合,准确率高且应用广泛。 PP-ChatOCR的系统流程如下图所示:首先输入预测图片,通用OCR系统,获取图片中全部的文字信息。将图片中的文本信息与期望的信息提取指令,组合成适当的prompt送入大模型进行预测。最终对返回结果进行解析。 <img src="https://ai-studio-static-online.cdn.bcebos.com/21ac129a6f5841a2964df406e4501c4436a0b49659844629a4d04ed921f9e4cf" style="height: 400px"> PP-ChatOCR的泛化性很好,但在具体的垂类场景中还有很多的优化空间,例如可以使用垂类场景中微调的PP-OCR模型,也可以使用in-context learning等Prompt工程技巧来提升大模型的效果。 ### 2.1 OCR 模型优化 本产线考虑精度和性能的不同需求,在通用OCR阶段提供了server和mobile两种方案,默认使用server进行文字内容获取。当通用任务无法满足现有场景时,推荐基于自有数据进行模型训练: | 场景方案 | 检测 mAP(%) | 识别 Top1 Acc(%) | GPU 推理耗时(ms) | CPU 推理耗时(ms) | 模型存储大小(M) | 启动训练 | | -------- | ------- | ------ | --------------- | ------------- | ----------- | ------ | | PP-OCRv4-server | 82.69 | 79.20 | 32.59 | 423.91 | 198 | ([文本检测](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=282)/[文本识别](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=270)) | | PP-OCRv4-mobile | 77.79 | 78.20 | 3.12 | 35.47 | 15 | ([文本检测](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=272)/[文本识别](https://aistudio.baidu.com/aistudio/modelsdetail?modelId=281)) | **注:GPU 推理耗时基于 NVIDIA Tesla V100 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz,线程数为10,精度类型为 FP32。** **注:评估集是PaddleOCR自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中文本识别包含1.1w张图片,检测包含500张图片。** **如何更新OCR模型:** 1. 在`单模型产线中`完成模型评估后,可得到推理模型,具体请进入`开发者模式` ,压缩并下载 `/home/aistudio/output/infer` 目录。 2. 更新本`场景产线`中的模型路径,具体请进入 `开发者模式` 修改 `infer_ui.py` 中的`model_dir` 参数: ```python from uapi.infer import Predictor # 定义文本检测推理 det_predictor = Predictor(model_name='ch_PP-OCRv4_det', model_dir='{your_model_path}', prd_config={'device': 'gpu'})) # 文本识别推理 rec_predictor = Predictor( model_name='ch_PP-OCRv4_rec', model_dir='{your_model_path}', prd_config={'device': 'cpu'}) ``` ### 2.2 Prompt优化 LLM 正在逐步改变人们的生活,恰当的提示词可引导大模型输出更加准确、安全、简洁的输出。PP-ChatOCR中提供了经过验证的Prompt,可以准确的提取图片中的关键信息。您当然也可以调整自己的Prompt,以实现更多的功能。 具体请进入 `开发者模式` 修改 `infer_eb.py` 中的`get_prompt` 函数: ```python ... prompt = f"""你现在的任务是从OCR文字识别的结果中提取我指定的关键信息。OCR的文字识别结果使用```符号包围,包含所识别出来的文字, 顺序在原始图片中从左至右、从上至下。我指定的关键信息使用[]符号包围。请注意OCR的文字识别结果可能存在长句子换行被切断、不合理的分词、 对应错位等问题,你需要结合上下文语义进行综合判断,以抽取准确的关键信息。 在返回结果时使用json格式,包含一个key-value对,key值为我指定的关键信息,value值为所抽取的结果。 如果认为OCR识别结果中没有关键信息key,则将value赋值为“未找到相关信息”。 请只输出json格式的结果,不要包含其它多余文字!下面正式开始: OCR文字:```{ocr_result}``` 要抽取的关键信息:[{key}]。""" ``` 完成上述修改后,在开发者模式中执行下列命令,可启动gradio界面,验证效果: ``` bash prepare.sh python main.webui.gradio.py ``` ## 3.模型部署 本模型目前的部署支持情况如下: | 操作系统 | Windows | Windows | Windows | Windows | Linux | Linux | Linux | Linux | | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | | 部署硬件 | NV GPU | NV GPU | X86 CPU | X86 CPU | NV GPU | NV GPU | X86 CPU | X86 CPU | | 接口语言 | C++ | Python | C++ | Python | C++ | Python | C++ | Python | | 支持情况 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | 根据实际业务需求选择所需要的操作系统、部署硬件、接口语言等条件后,获取 FastDeploy 部署包,**完成之后到开发者模式下进行下载(文件右击选择下载即可)**,其中包括部署代码和预测模型。 最后就可以参考部署包里面的 README 使用说明,在目标硬件上进行部署啦。 **注意:如果需要手动更新预测模型,可以直接修改部署包中的预测模型。**