Menghuan1918 / pdfdeal

A python wrapper for the Doc2X API and comes with native PDF processing (to improve PDF recall in RAG). | Doc2X API的python封装,同时附带本地的PDF处理(提升PDF在RAG中的召回率)。
https://menghuan1918.github.io/pdfdeal-docs/
MIT License
162 stars 8 forks source link

对于全图片的pdf或者带盖章的文件识别,选那个好呢? #8

Closed tqangxl closed 1 month ago

tqangxl commented 1 month ago

nice work! 新需求如题 from:https://blog.menghuan1918.com/posts/Something_new_4.html 无标题jpg.pdf 多级(每个文件夹内还含有多个子文件夹)文件夹批量输入pdf格式文件

Menghuan1918 commented 1 month ago

测试结果如下:

4 建议

Help me study Show me a code snippet Expla

vocabulary for a college entrance of a website's sticky header if I'm f exam selling

提示词 $ \uparrow $ 提示词 $ \uparrow $ 提示词

Something went wrong :/ "There is no item

named ‘word/document.xml’ in the archive®

352F

wew {MEF, James Tang KO REEFBIRMTA?

Help me study Show me a code snippet Expl

- easyocr识别:
```python
from pdfdeal import deal_pdf
output_path = deal_pdf(
    input="jpg.pdf",
    output="md",
    language=["en"],
    path="Output",
)

结果:


alalatest
Something went wrong :1 There is noiten named Worddocumentxml in the archive
352
858
nage U
你好, James Tang 我今天能帮你做什么? 建议
Help me study VOCabulany IOr college entrance exam
Show me a code snippet Website5 Sticky header
Expla i Im Sellin
Oh
提示词
提示词
提示词
发送消息
tqangxl commented 1 month ago

在进行图文识别时,ChatGPT可能使用多种光学字符识别(OCR)技术和工具,以下是一些常见的OCR库和工具:

Tesseract OCR:这是一个开源OCR引擎,由Google维护。它支持多种语言,并且可以通过训练数据来识别新的字体和手写文字。

EasyOCR:一个基于深度学习的OCR库,支持80多种语言。它使用PyTorch作为后端,效果不错,尤其在识别手写文字和复杂背景方面表现出色。

Google Cloud Vision API:这是Google提供的一个强大的OCR服务,能够识别图像中的文字并返回文字的位置信息和识别结果。

Microsoft Azure Computer Vision:微软的计算机视觉服务也包含OCR功能,支持多种语言和复杂场景的文字识别。

Amazon Textract:这是亚马逊AWS提供的一项OCR服务,不仅可以识别图像中的文字,还能提取表格和表单中的结构化数据。

根据具体需求和使用场景,ChatGPT可以选择合适的OCR技术来完成图文识别任务 飞桨OCR好像是支持中英文混合识别,

tqangxl commented 1 month ago

image image

tqangxl commented 1 month ago

我在提供图像识别和处理时,使用的是OpenAI的模型及其相关技术,这些技术集成了多种OCR和图像分析工具。虽然具体实现细节是集成在模型内部的,但常见的工具和库包括:

OCR工具 Tesseract OCR:一个开源的OCR引擎,能够识别多种语言的文本。它通常被集成到许多应用和服务中,用于从图像中提取文本。 EasyOCR:一个基于深度学习的OCR库,支持多种语言,尤其在复杂背景和手写文字识别方面表现优越。 Google Cloud Vision API:一个强大的云端OCR服务,能够识别图像中的文字并返回位置信息和文本内容。 图像分析工具 OpenCV:一个开源的计算机视觉库,包含丰富的图像处理和分析功能,如边缘检测、轮廓识别、形状检测等。 scikit-image:一个基于Python的图像处理库,提供各种图像处理算法,如过滤、变换、特征提取等。 TensorFlow 和 PyTorch:这些深度学习框架可以用于训练和部署用于图像分类、对象检测和其他视觉任务的神经网络模型。 通过结合这些工具和库,系统可以有效地从图像中提取文本信息和图表数据,进行分析和解释。具体来说,图像中的文本信息通常由OCR工具处理,而图表和图形元素则通过图像分析算法进行识别和解析。

Menghuan1918 commented 1 month ago

image image

这个是多模态LLM(VLLM)的功能,有库是这么做的: https://github.com/CosmosShadow/gptpdf

但是多模态LLM做OCR还是有明显缺点的:

所以最终我没选择用VLLM,还是使用的传统OCR进行的图片处理

tqangxl commented 1 month ago

嗯,调用API的确费用 高,幻觉的确存在,可以参考

是怎么分层传递给不同工具,怎么汇总输出的呢 ChatGPT 图像识别和处理系统通常采用分层架构来实现不同任务的分工,并将结果汇总输出。以下是一个典型的分层处理和汇总流程:

分层处理架构 输入层:接收和预处理图像

图像读取:使用OpenCV或PIL库读取图像文件。 图像预处理:进行灰度转换、二值化、噪声去除等预处理操作,以提高OCR和图像分析的准确性。 OCR层:文字识别

文字检测:使用文本检测算法(如基于深度学习的文本检测模型)定位图像中的文本区域。 文字识别:将检测到的文本区域传递给OCR工具(如Tesseract OCR、EasyOCR、Google Cloud Vision API)进行文字识别。 文本处理:对识别结果进行清洗和格式化,以便后续处理。 图像分析层:图表和图形分析

图表检测:使用图像分析算法(如OpenCV中的轮廓检测、形状识别等)定位图像中的图表和图形区域。 数据提取:解析图表中的数据,例如读取仪表盘的指针位置、柱状图的高度、折线图的点等。 特征提取:提取图表的特征信息,如颜色、线条样式、图例等。 数据汇总层:整合识别和分析结果

数据整合:将OCR层和图像分析层的结果汇总到一个统一的数据结构中。 结果校验:对识别和分析结果进行校验,确保数据的一致性和准确性。 输出层:展示和存储结果

数据展示:将汇总后的数据以易于理解的格式展示出来,如表格、文本报告等。 数据存储:将结果保存到文件、数据库或通过API传递给其他系统。 具体实现示例 以下是一个简化的Python代码示例,展示如何通过分层处理实现图像识别和分析:

python 复制代码 import cv2 import pytesseract from pytesseract import Output import numpy as np

def preprocess_image(image_path):

读取图像

image = cv2.imread(image_path)
# 转为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
return binary

def perform_ocr(image):

使用Tesseract进行文字识别

custom_config = r'--oem 3 --psm 6'
details = pytesseract.image_to_data(image, output_type=Output.DICT, config=custom_config)
return details

def analyze_image(image):

图像分析,检测圆形或矩形图表区域

contours, _ = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
analysis_results = []
for contour in contours:
    shape = cv2.boundingRect(contour)
    analysis_results.append(shape)
return analysis_results

def main(image_path):

分层处理图像

preprocessed_image = preprocess_image(image_path)
ocr_results = perform_ocr(preprocessed_image)
analysis_results = analyze_image(preprocessed_image)

# 汇总结果
combined_results = {
    "ocr": ocr_results,
    "analysis": analysis_results
}
return combined_results

调用主函数进行处理

image_path = 'path_to_image.png' results = main(image_path) print(results) 汇总输出 在上述示例中,combined_results包含了OCR识别结果和图像分析结果。这些结果可以进一步处理和展示,例如生成报告、更新数据库或通过API提供给其他系统。

这种分层处理架构确保了每个任务由专门的工具和算法处理,并通过汇总层将所有结果整合在一起,提供统一的输出。

Menghuan1918 commented 1 month ago

一般我对于这种工作流程都是doc2x识别,随后再交给非多模态LLM处理,这样的花费最低 主要是doc2x每天免费500次识别

例如你可以看以下这个例子,就是doc2x识别-> Deepseek LLM处理 -> 整理数据并生成表格

https://github.com/langgenius/dify/assets/122662527/1cc17566-60eb-4d14-ba4e-1eda745b564a

Menghuan1918 commented 1 month ago

现在可以通过CLI命令处理文件夹里的所有文件了~

https://menghuan1918.github.io/pdfdeal-docs/zh/guide/CLI/

或者使用Client.pdf2file也可以

tqangxl commented 1 month ago

最近又有个新工具出来,https://github.com/opendatalab/PDF-Extract-Kit,加到https://blog.menghuan1918.com/posts/graphrag_doc2x_deepseek.html里呗

Menghuan1918 commented 1 month ago

最近又有个新工具出来,https://github.com/opendatalab/PDF-Extract-Kit,加到https://blog.menghuan1918.com/posts/graphrag_doc2x_deepseek.html里呗

试了下,提取的效果不是特别好,就懒得加了XD

而且graphrag的应用问题在于它的反应时间和消耗的token实在太高了