目录
前言
在上一篇章节,我们实现了基于文件来进行回答,不过还遗留了一些问题,那就是无法识别带有文字的图片,不过现在会在这篇篇章进行问题解决。
原因是markitdown的官网并没有写明白,mrkitdown并不具备含有ocr图片文件识别,但是标注了,ocr识别是基于模型是否能够支持图片输入进行回答,那就需要含有视觉的模型来支撑这个ocr,如果你的模型本身就是普通的聊天模型,那不好意思,识别不到。
OK,详情的话可以参考上一篇文章:https://blog.csdn.net/Aainm/article/details/153784250?spm=1001.2014.3001.5501
学习不易,为了之后章节连续学习,可以点点关注防止下次就找不到了,也可以订阅本专栏来获取实时更新和学习,如有问题可以私信,要源码参考的也是可以的啦,谢谢大家了。
那么开启本篇章的学习吧!!!!!
Paddle-OCR安装
官网:https://github.com/PaddlePaddle/PaddleOCR
关于什么是paddle-ocr这里详细的介绍一下
PaddleOCR 是百度飞桨(PaddlePaddle)推出的一款开源 OCR(Optical Character Recognition,光学字符识别)工具库,主要用于将图片、扫描件等视觉内容中的文字信息提取为可编辑的文本。
核心特点:
- 多语言支持:默认支持中文、英文、数字,还可扩展至日文、韩文、德文等 80+ 语言,覆盖常见场景的文字识别需求。
- 多场景适配:能处理印刷体(如文档、海报、车牌)、手写体(如笔记、签名)、表格、二维码等多种形式的文字内容。
- 高精度模型:基于深度学习技术,内置经过大规模数据训练的预训练模型,识别准确率在行业内处于较高水平(尤其对中文场景优化明显)。
- 轻量化部署:支持本地离线部署(无需联网),提供 Python API、C++ 接口等,可轻松集成到桌面应用、移动端或服务器端。
- 开源免费:代码和模型完全开源,允许商业使用,开发者可根据需求二次开发或优化模型。
典型应用场景:
- 文档数字化(扫描件转文字、PDF 文字提取);
- 证件识别(身份证、银行卡、营业执照等);
- 场景文字识别(街景招牌、商品标签、快递单等);
- 表格识别(Excel 表格内容提取);
- 手写体识别(手写笔记、作业批改等)。
使用优势:
对于开发者而言,PaddleOCR 开箱即用,无需从零训练模型,通过简单的代码调用即可实现文字识别功能(如你之前改造的代码中,通过 PaddleOCR() 初始化后直接调用 ocr.ocr() 即可提取图片文本),且支持 CPU/GPU 加速,兼顾易用性和性能。
安装
需python3.10以上的环境
在控制台输入以下两条指令即可
bash
# 安装 PaddlePaddle(核心框架,选 CPU 版即可本地运行)
pip install paddlepaddle==3.2.0
# 安装 PaddleOCR(包含预训练模型,支持中英文等多语言)
pip install paddleocr
代码编写
还是之前那个逻辑,原本的逻辑
python
md = MarkItDown()
file_path = "C:\\Users\\a\Desktop\\AgentTestworddemo.txt"
res = md.convert(file_path)
text = res.text_content
# 修改此处:对系统提示中的大括号进行转义
prompt = ChatPromptTemplate.from_messages(
[
("system",
f"用户上传文件的内容{text}\n\n你是一个问答助手,用户和你进行对话,你先基于用户上传文件的内容查询回答,如果没有需要根据用户问题给出一个回答。".replace(
"{", "{{").replace("}", "}}")),
("human", "{question}"),
]
)
chat = prompt | llm
question = input("请输入问题:")
response = chat.invoke({"question": question})
print(response.content)
我们还是一样的思路,不过编写的是Paddle-OCR的端口
代码参考
python
"""用paddleocr识别图片中的文本(支持中英文,多语言)"""
OCR = PaddleOCR(lang="ch",use_angle_clas=True,use_gpu=False,show_log=False)
image_path = "D:\\pychram\\test_ocr.png"
res = OCR.ocr(image_path,cls= True)
#提取识别文字(按顺序拼接)
text = ""
for line in res:
if line is not None:
for word_info in line:
text += word_info[1][0] + "\n" #word_info[1][0]为识别文字
text.strip() #去除首位空行
ocr_text = text
prompt = ChatPromptTemplate.from_messages(
[
("system",
f"用户上传文件内容{ocr_text}\n\n你是一个问答助手,用户和你进行对话,你需要基于用户上传文件内容查询回答,如果没有需要根据用户问题给出一个回答。".replace(
"{", "{{").replace("}", "}}")),
("human", "{question}"),
]
)
chat = prompt | llm
# 开始聊天
question = input("请输入问题:")
response = chat.invoke({"question": question})
print(response.content)
可以不难发现,大体的逻辑都是能实现的
运行演示
不出意外,你应该会和我一样

报错了,别担心,接下来会告诉原因,和解决办法。
问题原因和解决办法
原因呢,很简单,Langchain最新版本不支持旧版的"langchain.docstore"模块了,但是paddle-ocr还是要查询这个模块调用,后续应该会更新,不过目前应该没有办法去解决
那么解决办法就很简单,就是降版本。
那么思路就很清晰
卸载当前的Langchain,我知道舍不得,但是同志们,没办法,这种事情会哼常见的。
bash
pip uninstall langchain langchain-core -y
然后下载一个长期稳定的使用的旧版本
bash
pip install langchain==0.2.14 langchain-core==0.2.34
那么到这里,基本上就能完成了,在重新运行,这里就不放演示了,因为我还没解决,你们自己尝试一下,万一还有其他的方法,我也想学习,嘿嘿。