12 款开源OCR发 PDF 识别框架
2024 年 12 款开源文档解析框架的选型对比评测:PDF解析、OCR识别功能解读、应用场景分析及优缺点比较
这是该系列的第二篇文章,聚焦于智能文档处理(特别是 PDF 解析)。无论是在模型预训练的数据收集阶段,还是基于 RAG 的知识库构建阶段,大量高质量数据通常以 PDF 或扫描图像的形式出现。由于这些文件的排版多样、格式不一以及扫描质量参差不齐,利用这些数据极具挑战。主要难点在于:一是有效提取内容信息和版面信息(如正文、标题、图注、图片、表格、公式等);二是处理版面元素之间的关系。鉴于此领域的巨大需求,市场上既有开源框架,也不乏商业解决方案,涵盖了从传统 OCR 识别到新型多模态大模型,甚至两者的结合,本篇文章就对他们进行盘点并做功能解读,优缺点比较,应用场景推荐。
如果觉得内容不错,欢迎关注,分享和在看~
文档智能一直是学术研究的重要课题和工业界的痛点需求,它涉及对网页、数字文档及扫描文档中的文本和排版信息的理解、分类、提取及信息归纳。文档布局和格式的多样性、低质量的扫描图像以及模板结构的复杂性,给文档智能带来了许多挑战,自动、精确、快速的信息处理对于提升生产力至关重要,自大模型技术爆发以来,文档和图像等载体的结构化分析与内容提取成为了企业进行 LLM 落地的关键因素之一,在金融领域,文档智能可用于财报分析和智能决策支持;在医疗领域,它可以实现病例的数字化,提高诊断精度,并通过分析医学文献和病例的关联性,提出潜在的治疗方案;在财务领域,它可以实现发票和采购单的自动化信息提取,大幅降低人工处理的时间成本。关于文档智能详细的演进历史,可以阅读微软亚洲研究院这篇综述《文档智能:数据集、模型和应用》
常规工作流
无论是厂商提供的智能文档识别与处理服务,还是日常遇到的 PDF 内容提取和影像扫描件识别,其背后的技术核心都是文档智能,这里快速梳理下文档智能处理流程中的关键环节及关键技术,以便更好地理解随后对 12 款开源 PDF 工具和 5 家智能文档处理服务的对比分析,这些方案大致可分为两类:一是较为成熟、适用范围广的常规工作流方案;二是尚处于探索阶段、应用场景有限的基于多模态模型的端到端解决方案。
首先看常规的处理流程,通常涉及以下几个步骤:
文档预处理:预处理措施可能包括去噪、校正倾斜、二值化和增强对比度等,这一步是为了提升(图像)文档的质量,以确保后续分析和识别的准确性。
物理版面分析:使用基于回归的单阶段检测模型(如 Faster R-CNN、YOLO 等)检测文档中的物理布局元素(如栏、章节等),通过分析图像中的空白区域、边界和文本密度等特征,识别出标题、段落、图片和表格等不同区域。
文本区域分析:进一步分析检测到的文本区域,识别单词、行和段落,这可能涉及文本行提取和字符分割等子任务。
内容识别:应用 OCR 和表格解析等技术,提取表格、公式、文字等内容。
逻辑版面:通过语义分析理解文档的结构和层次关系,将文本块组织成段落、列表等语义单元。
数据输出:将分析结果以 HTML、JSON 等格式输出,便于后续处理和应用。
内容识别
内容识别是版面分析流程的后续步骤,版面分析关注的是文档的整体布局和结构,而关注的是文档中具体内容的识别,主要包括三种场景,即表格解析、公式识别和文字提取。
表格解析
表格结构识别是在完成表格区域检测后进行的任务,旨在解析表格的布局和层次结构,将视觉信息转化为可用于重建表格的结构描述。这些描述信息涵盖单元格的确切位置、单元格间的关系及单元格的行、列定位。目前,表格结构信息主要采用两种描述方式:1)单元格列表(包括每个单元格的位置、行列表信息及内容);2)HTML 或 LaTeX 代码(除了单元格的位置,有时还包括内容)。实际应用中,表格类型多样,结构各异。根据表头的位置,表格大致可分为四类:
垂直表格:首行为表头,其余行为垂直排列的数据,是最基础的表格形式。
水平表格:首列为行表头,其余列为水平排列的数据,常见于维基百科中的人物信息记录。
层级表格:表头具有层级结构,表格中包含合并单元格,常见于统计报告和学术论文,此类表格可能同时具有行表头和列表头的层级结构。
复杂表格:表头不仅限于表格的左侧或顶部,还可以出现在任意位置,甚至与常规数据混杂,如专业设备手册、政府登记表和公司面试申请表中常见的形式。
公式识别
公式识别用于将图像中的数学公式转换为 LaTeX、MathML 等格式,确保其在文档中正确显示和编辑,但在自动阅卷、数字图书馆建设和办公自动化等场景中,手写数学公式的识别仍面临挑战,主要因为这些公式具有复杂的二维结构、多样的书写风格和手写符号的歧义性,具体来说,手写数学公式的识别难度体现在以下几个方面:
复杂的二维结构,如分式、上下标和根号等;
多样化的书写风格,不同人书写同一符号可能存在差异;
手写符号的歧义性,某些符号在手写时容易混淆。
文字提取
这里需要重点说下 OCR 识别,OCR(Optical Character Recognition、光学字符识别)用于将图像中的文字内容识别并转换为可编辑的文本格式,文字识别是 OCR 技术的核心应用场景之一。广州软件应用技术研究院发布了一份关于 12 款开源 OCR 工具(包括PaddleOCR、RapidOCR、读光、ChineseOCR、EasyOCR、Tesseract、OcrLiteOnnx、Surya、docTR、JavaOCR以及文档分析组件RagFlow和Unstructured)的文字识别性能评估报告。评估覆盖了五个关键场景:印刷中文、印刷英文、手写中文、复杂自然场景和变形字体。该评估的数据集在数量和多样性方面(见下图)很有说服力,而且时间很新(2024 年 6 月),具有较高的参考价值。可以在公众号「莫尔索随笔」后台获取回复「文档解析」获取完整的评估报告,对你进行技术选型和设计符合自己场景的测试数据集很有帮助。
多模态模型端到端
基于多模态大模型(如面壁智能的 MiniCPM-V 2.6)的端到端解决方案较为直接,通过设计特定的提示词,能够直接从图片文档中提取和分析信息,输出结构化的数据。尽管开源社区已有许多相关项目,但是远远还不成熟,后面我会详细介绍。针对多模态模型,已有一个名为 OCR 任务测评基准(OCRBench
[2]
)的评估工具,该工具涵盖了文本识别、场景文本为中心的视觉问答(VQA)、文档导向的 VQA、关键信息提取(KIE)以及手写数学公式识别(HMER)等测试维度。多模态模型在传统的文本任务上表现出色,但在处理缺乏语义上下文的文本、手写文本、多语言文本及高分辨率输入图像方面存在不足。
开源框架
了解完核心能力,接下来就可以对开源的 12 款文档解析框架了进行比较了,首先我会快速介绍下每款工具,最后用一个表格直观展示每个框架具备的能力,不想看介绍的可以直接翻到总结部分查看。
常规流程
1. MinerU
[3]
MinerU 放在第一个,因为这个项目完成度特别高。作为由上海人工智能实验室大模型数据基座团队(OpenDataLab)开发的开源数据提取工具,MinerU 专精于从复杂的 PDF 文档、网页和电子书中高效提取内容。它能去除文档中的页眉、页脚、脚注和页码等非文本元素,确保提取内容的语义连贯性。该工具支持单栏、多栏及复杂排版的文本提取,并能保留原文档的结构,如标题、段落和列表等。此外,MinerU 还能提取图像、图片描述、表格、表格标题和脚注。对于文档中的数学公式,MinerU 可以自动识别并转换为 LaTeX 格式,同时将表格转换为 HTML 格式。对于扫描版 PDF 和乱码 PDF,MinerU 配备了 OCR 功能,支持 84 种语言的检测与识别,输出格式多样,包括 Markdown 和 JSON。
然而,MinerU 不支持垂直文字的处理。目录和列表依赖规则识别,少数不常见的列表类型可能无法被正确识别。仅支持一级标题,不支持多级标题。漫画书、艺术图册、小学教材和习题集目前无法准确解析。在处理复杂表格时可能出现行列错误。小语种 PDF 的 OCR 识别可能无法准确识别特殊字符,例如拉丁文重音符号或阿拉伯文中的易混淆字符。某些数学公式可能无法在 Markdown 中正确显示。
尽管存在上述限制,但我依旧很推荐这个项目,其 PDF 解析功能已被拆分为独立项目 PDF-Extract-Kit
[4]
,通过它可以深入了解文档处理流程的具体实现,包括表格解析方法和版面分析模型的设计。此外,OpenDataLab 团队还分享了一份关于 MinerU 的 PPT,链接在此
[5]
,其中包含了许多有价值的见解,特别是关于网页内容采集和 PDF 解析的系统性思考。
2. PaddleOCR
[6]
PaddleOCR 放在第二个,生态繁荣,影响力巨大,延伸的项目特别多,OCR 话题基本绕不过它,上面的 PDF-Extract-Kit 就在用。PaddleOCR 是一个基于 PaddlePaddle(飞桨) 深度学习框架开发的开源多语言 OCR 工具包,为开发者提供丰富实用的 OCR 解决方案,帮助训练更优质的模型并应用于实际场景。PaddleOCR 提供了一系列功能模型,涵盖文本图像智能分析、通用 OCR、版面解析、表格识别及印章文字识别等。此外,还支持以下高级功能:
文档场景信息抽取
[7]
%28PP-ChatOCRv3-doc%29:用于从文档中提取关键信息。
高精度版面区域检测模型
[8]
(基于 RT-DETR):适用于需要高精度检测的应用。
高效率版面区域检测模型
[9]
(基于 PicoDet):适用于对处理速度有较高要求的场景。
高精度表格结构识别模型
[10]
SLANet_Plus:能够准确识别表格的结构。
文本图像矫正模型
[11]
UVDoc:用于校正扭曲的文本图像。
公式识别模型
[12]
LatexOCR:能够识别并转换数学公式。
文档图像方向分类模型
[13]
(基于 PP-LCNet):用于确定文档图像的方向。
3. Marker
[14]
Marker 用于将 PDF 文件快速且准确地转换成 Markdown、JSON 和 HTML 格式,也有对应的商业化服务 Datalab
[15]
,包含特性如下:
页面布局检测:利用 Surya 模型检测页面布局,确定文本的阅读顺序。
内容清洗与格式化:采用 heuristics、texify 和 tabled 模型对文本进行清洗和格式化,确保表格、代码块等元素的结构清晰。
文本提取:除了使用常规 PDF 解析方式,还使用 OCR 技术(如 heuristics 和 Surya 模型)识别图像中的文本。
公式图片处理:提取 PDF 中的图片,并将公式转换为 LaTeX 格式。
Marker 的核心是开源的Surya
[16]
,它是一个支持 90 多种语言的文档 OCR 工具包,提供文本检测、布局分析、阅读顺序和表格识别等功能,具体的能力详情前面的开源 OCR 工具评测报告有详细介绍,可自行阅读。
4. Unstructured
[17]
Unstructured 是一个开源库和 API 套件,旨在构建自定义数据预处理管道。它主要用于机器学习任务中的数据提取、转换和加载(ETL)过程,支持 PDF、图像等多种文档格式,帮助开发者从非结构化数据中提取结构化信息,以用于标注、训练或生产环境中的机器学习模型。该项目的创始人在此基础上构建企业级数据预处理工具,提供商业服务,已融资 2500 万美元。
多模态模型
5. gptpdf
[18]
想法很不错,这是我看到的第一个使用多模态模型做 PDF 处理的,虽然已经不维护了,但我还是放在这里,几百行代码,使用 GPT-4o 解析 PDF 文件。首先利用 PyMuPDF 库分析 PDF 文件,识别并标记出所有非文本区域,例如图表和图片,接着使用 GPT-4o 来处理这些标记过的非文本区域,向模型提供适当的提示词,指导其将这些区域内容转换为 Markdown 格式。
DEFAULT_PROMPT = “”“使用 markdown 语法,将图片中识别到的文字转换为 markdown 格式输出。你必须做到: 1. 输出和使用识别到的图片的相同的语言,例如,识别到英语的字段,输出的内容必须是英语。2. 不要解释和输出无关的文字,直接输出图片中的内容。例如,严禁输出 “以下是我根据图片内容生成的 markdown 文本:”这样的例子,而是应该直接输出 markdown。3. 内容不要包含在markdown
中、段落公式使用 的形式、行内公式使用 $ $ 的形式、忽略掉长直线、忽略掉页码。 再次强调,不要解释和输出无关的文字,直接输出图片中的内容。 “”” DEFAULT_RECT_PROMPT = “”“图片中用红色框和名称%28%s%29标注出了一些区域。 如果区域是表格或者图片,使用 %21[]%28%29 的形式插入到输出内容中,否则直接输出文字内容。 “”” DEFAULT_ROLE_PROMPT = “”“你是一个 PDF 文档解析器,使用 markdown 和 latex 语法输出图片的内容。 “””
6. Zerox
[19]
Zerox 首先将 PDF、 Docx 等格式转换为一系列图像,这一步使用graphicsmagick和ghostscript等工具来处理 PDF 文件。对于 Docx 格式使用libreoffice等工具将其先转换为 PDF,然后再进行图像转换。将转换得到的图像传递给多模态模型,下面的步骤就和在 gptpdf 的思路上一致了,将模型返回的每个页面的 Markdown 文本聚合起来,形成完整的 Markdown 文档。顺便一提,项目创始人也基于此推出了OmniAI
[20]
产品,用于将多种类型的文档转换为结构化数据,融资 320 万美元。
结合方案
7. Chunkr
[21]
Chunkr 可以将 PDF、PPT、Docx 和 Excel 等格式的文件转换成结构化数据,它通过使用 11 种语义标签(结合多模态模型)进行文档的布局分析,支持 OCR 技术提取文本内容,并能够生成包含边框信息的结构化输出,如 HTML 和 Markdown 格式,开源这个项目的公司叫 Lumina
[22]
,也是做 AI 搜索引擎的,拿了 YC 投资。
8. pdf-extract-api
[23]
pdf-extract-api 用于将图片和 PDF 文档转换为 Markdown 或 JSON 格式,支持多种 OCR 策略,包括 surya、llama_vision(多模态模型) 和 tesseract,此外,它还集成了 LLM(如 LLama 3.1)来改善 OCR 文本的质量。
9. Sparrow
[24]
Sparrow 项目用于从各种文档和图像中高效提取和处理数据,包括表格、银行对账单、发票、收据等非结构化数据源,具有模块化架构,包括多个组件,其中 Sparrow Parse 支持使用多模态模型进行数据提取,Sparrow OCR 使用 OCR 技术进行字符识别,Sparrow 只擅长处理常见的形式化文档。
其他
题目提到 12 个开源的项目,怎么只罗列了 9 种呢,别急,其余 3 种已在系列第一篇关于 RAG 框架的介绍
RAGFlow 开源的DeepDoc
[26]
以及 Quivr 开源的MegaParse
[27]
,这些组件不仅提供了文档解析功能,还处理了内容分块的步骤,是构建高效 RAG 框架不可或缺的一部分,这里不再赘述。
总结
划重点的部分来了!
PDF、DOCX、Excel 和 PPT 四种文档格式均有对应的解析器,其中 PDF 的解析最为复杂,因此常被用作评估文档解析能力的基准。尽管有许多优秀的开源项目,但在处理复杂表格和公式识别时,它们大多表现不佳。例如,当公式嵌入到上下文页面中时,具备布局分析能力的框架往往会出现大量识别错误。此外,这些项目还存在各自的局限性:gptpdf、PaddleOCR 缺乏必要的后处理步骤;Marker 支持的语言种类有限,Figure 处理不够完善;MinerU 消耗较多的计算资源等。大多数项目转换后的格式支持 Markdown 和 HTML,以便于 LLM 理解和处理。不过不支持 HTML 输出的项目可以确定是无法解析较为复杂的表格,因为标准 Markdown 语法仅适用于简单的表格结构,而复杂的表格则需借助 HTML 表格或其他文档格式(如 LaTeX、AsciiDoc、ReStructuredText)来实现。
文件解析是一个不断优化的过程,针对不同格式和复杂性的文件,需要持续探索和调整解决方案,在处理 PDF 文件时,数字签名、扫描件、影印件及复杂表格的解析均属特殊情形,需采取专门的方法,这个领域仍有许多机会,欢迎有兴趣合作的朋友后台联系我交流咨询。
智能文档处理服务
鉴于开源项目在处理复杂表格和公式方面过于拉垮,我进一步测试了 5 家收费的智能文档处理服务,发现其性能确实更出色些,果然是贵有贵的道理。比如下面这个复杂合并单元格(关于更多带复杂表格和公式的文档测试数据,可以在公众号「莫尔索随笔」后台获取回复「文档解析」获取,相信对你进行厂商选择和设计符合自己场景的测试数据集很有帮助)
TextIn
[28]
TextIn 是合合信息推出的通用文档解析服务,它能够识别文档或图片中的文字信息,并将文档内容解析为 HTML 格式,保持常见的阅读顺序。该服务在表格识别方面具有高精度,能够处理有线表、无线表、密集表格,以及单元格合并和跨页表格合并。解析速度极快,100 页长文档最快仅需 1.5 秒,同时支持在线和离线批量处理。TextIn ParseX 支持多种文档格式,包括 PDF、Word、HTML 等,并且能够一次性获取文字、表格、标题层级、公式、手写字符、图片信息。TextIn 解析正确,但表格内内容区分度不明显。
PDFlux
[29]
PDFlux 是专为 PDF 文档设计的数据提取工具,实现对 PDF 或图片中的表格和文字内容的智能识别和提取。在内容识别方面,PDFlux 能够智能识别 PDF 或图片中的表格和文字内容,支持无线表格识别、复杂排版精确提取、自动扶正歪斜表格、去除印章干扰、智能合并跨页表格以及一键去除空格换行等功能。在格式转换方面,PDFlux 支持将 PDF 转换为 Word、Excel、HTML 等多种格式,方便用户编辑和移动端阅读,同时保留文档的章节目录结构。PDFlux 的识别结果丢失了表格标题。
Mathpix
[30]
通过 OCR 技术识别公式,可以快速准确地将数学公式截图和手写公式转换为 LaTeX 格式,无论是行间公式还是行内公式都可以准确识别,支持多国语言;可以识别图片或 pdf 文件中的表格,并输出 TSV(制表符分隔值)格式,可以直接将 pdf 转换为 LaTeX、Word、HTML 等格式,沉浸式翻译、Anthropic、谷歌 Bard 等都调用了它的服务。Mathpix 识别正确,但没有合并单元格。
Doc2x
[31]
上传 PDF 或图片,精准公式识别和表格识别,一键高效转换为 Word、LaTeX、HTML、Markdown 等多种格式,Doc2x 识别正确 ,内容使用空格区分。
百度智能云办公文档识别服务
[32]
大厂产品就首先试了下百度的,内容对,但丢失表格结构,直接放弃,其他家的就没再继续试了。
写在最后
以后再看到新的和文档解析相关开源项目时,可以通过以下技巧快速判断其是否具有实质性创新:首先检查项目是否沿用了传统的 OCR 流程;其次,观察表格识别和版面分析模型是自主研发的还是基于 PaddleOCR 等开源工具,如果这些方面有所创新,那么该项目值得深入研究。若计划在实际产品中应用相关技术,本着对用户负责的态度,优先考虑商业化的智能文档处理服务(商业化的智能文档处理服务,主要关注三个维度,快、准、稳,(表格、公式)识别精准、解析速度快、稳定性好),对于包含大量表格和公式的文档,我推荐如下选择:英文上下文中的公式识别首选 Mathpix;中文上下文中的公式识别则应选择 Doc2X;而面对复杂的表格,则 PDFlux 或 TextIn 更为可靠。如果你要自建一套文档解析解决方案,基于 MinerU 去搭建,针对无法处理的特定场景利用 PaddleOCR 工具包训练相应的模型。
相关文章:
12 款开源OCR发 PDF 识别框架
2024 年 12 款开源文档解析框架的选型对比评测:PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章,聚焦于智能文档处理(特别是 PDF 解析)。无论是在模型预训练的数据收集阶段,还是基于 RAG…...
使用 lock4j-redis-template-spring-boot-starter 实现 Redis 分布式锁
在分布式系统中,多个服务实例可能同时访问和修改共享资源,从而导致数据不一致的问题。为了解决这个问题,分布式锁成为了关键技术之一。本文将介绍如何使用 lock4j-redis-template-spring-boot-starter 来实现 Redis 分布式锁,从而…...
css-background-color(transparent)
1.前言 在 CSS 中,background-color 属性用于设置元素的背景颜色。除了基本的颜色值(如 red、blue 等)和十六进制颜色值(如 #FF0000、#0000FF 等),还有一些特殊的属性值可以用来设置背景颜色。 2.backgrou…...
MySQL 9.2.0 的功能
MySQL 9.2.0 的功能 MySQL 9.2.0 的功能新增、弃用和删除内容如下: 新增功能 权限新增12:引入了CREATE_SPATIAL_REFERENCE_SYSTEM权限,拥有该权限的用户可执行CREATE SPATIAL REFERENCE SYSTEM、CREATE OR REPLACE SPATIAL REFERENCE SYSTEM…...
编程题-最长的回文子串(中等)
题目: 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: 输入:s &…...
打破传统束缚:领略 Web3 独特魅力
在互联网发展的历程中,我们见证了Web1和Web2的变迁。Web1是静态信息的展示平台,Web2则引领了社交互动和内容创作的繁荣,而如今,Web3作为新时代的互联网架构,正逐渐展现出其独特的魅力,带领我们走向一个更加…...
linux系统中的 scp的使用方法
SCP(Secure Copy Protocol)是一种通过加密的方式在本地主机和远程主机之间安全地传输文件的协议。 它是基于SSH协议的扩展,允许用户在不同主机之间进行文件复制和传输,是Linux和Unix系统中常用的工具之一。 在嵌入式Linux软件的…...
RAG技术:通过向量检索增强模型理解与生成能力
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
【现代深度学习技术】深度学习计算 | 参数管理
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
【Linux基础指令】第三期
近期更新的基础指令链接: 【Linux基础指令】第一期-CSDN博客 【Linux基础指令】第二期-CSDN博客 本期博客的主题依旧是 "基础指令" ;话不多说,正文开始。 一、Linux的指令 1.zip / unzip 功能:打包压缩 命令格式&…...
WPS数据分析000005
目录 一、数据录入技巧 二、一维表 三、填充柄 向下自动填充 自动填充选项 日期填充 星期自定义 自定义序列 1-10000序列 四、智能填充 五、数据有效性 出错警告 输入信息 下拉列表 六、记录单 七、导入数据 编辑 八、查找录入 会员功能 Xlookup函数 VL…...
UiAutomator的详细介绍
UIAutomator作为一种高效的测试框架,通过自动化手段显著提升了用户界面(UI)测试的效率与准确性。它不仅支持自动生成功能测试用例,还允许开发者在不同设备上执行这些测试,确保了应用程序的一致性和稳定性。 以下是对 …...
在虚拟机里运行frida-server以实现对虚拟机目标软件的监测和修改参数(一)
frida-server下载路径 我这里选择frida-server-16.6.6-android-x86_64 以root身份启动adb 或 直接在android studio中打开 adb root 如果使用android studio打开的话,最好选择google api的虚拟机,默认以root模式开启 跳转到下载的frida-server文件位…...
Ubuntu二进制部署K8S 1.29.2
本机说明 本版本非高可用,单Master,以及一个Node 新装的 ubuntu 22.04k8s 1.29.3使用该文档请使用批量替换 192.168.44.141这个IP,其余照着复制粘贴就可以成功需要手动 设置一个 固定DNS,我这里设置的是 8.8.8.8不然coredns无法…...
机器学习周报-文献阅读
文章目录 摘要Abstract 1 相关知识1.1 WDN建模1.2 掩码操作(Masking Operation) 2 论文内容2.1 WDN信息的数据处理2.2 使用所收集的数据构造模型2.2.1 Gated graph neural network2.2.2 Masking operation2.2.3 Training loss2.2.4 Evaluation metrics 2…...
TensorFlow实现逻辑回归模型
逻辑回归是一种经典的分类算法,广泛应用于二分类问题。本文将介绍如何使用TensorFlow框架实现逻辑回归模型,并通过动态绘制决策边界和损失曲线来直观地观察模型的训练过程。 数据准备 首先,我们准备两类数据点,分别表示两个不同…...
06-AD向导自动创建P封装(以STM32-LQFP48格式为例)
自动向导创建封装 自动向导创建封装STM32-LQFP48Pin封装1.选则4排-LCC或者QUAD格式2.计算焊盘相定位长度3.设置默认引脚位置(芯片逆时针)4.特殊情况下:加额外的标记 其他问题测量距离:Ctrl M测量 && Ctrl C清除如何区分一脚和其他脚?芯片引脚是逆时针看的? 自动向导…...
《 C++ 点滴漫谈: 二十四 》深入 C++ 变量与类型的世界:高性能编程的根基
摘要 本文深入探讨了 C 中变量与类型的方方面面,包括变量的基本概念、基本与复合数据类型、动态类型与内存管理、类型推导与模板支持,以及类型系统的高级特性。通过全面的理论讲解与实际案例分析,展示了 C 类型系统的强大灵活性与实践价值。…...
Ceph:关于Ceph 中 RADOS 块设备快照克隆管理的一些笔记整理(12)
写在前面 准备考试,整理 ceph 相关笔记博文内容涉及使用 RADOS 块设备提供 RDB 的快照和克隆如何操作理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想…...
C语言连接Mysql
目录 C语言连接Mysql下载 mysql 开发库 方法介绍mysql_init()mysql_real_connect()mysql_query()mysql_store_result()mysql_num_fields()mysql_fetch_fields()mysql_fetch_row()mysql_free_result()mysql_close() 完整代码 C语言连接Mysql 下载 mysql 开发库 方法一…...
2023CISCN初赛unzip
2023CISCN初赛unzip 随便上传一个文件,会自动跳转到uplaod.php目录下,源码如下: <?php error_reporting(0); highlight_file(__FILE__);$finfo finfo_open(FILEINFO_MIME_TYPE); if (finfo_file($finfo, $_FILES["file"]["tmp_name…...
Elasticsearch的索引生命周期管理
目录 零、参考一、ILM的基本概念二、ILM的实践步骤Elasticsearch ILM策略中的“最小年龄”是如何计算的?如何监控和调整Elasticsearch ILM策略的性能? 1. **监控性能**使用/_cat/thread_pool API基本请求格式请求特定线程池的信息响应内容 2. **调整ILM策…...
检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作
联想鼠标会自动时不时的调用“运行”窗口 然后鼠标自己作为键盘输入 然后打开这个网页 (不是点击了什么鼠标外加按键,这个鼠标除了左右和中间滚轮,没有其他按键了)...
2024年记 | 凛冬将至
放弃幻想,准备斗争! 考研or就业? 上大学以来,考研上名校在我的心里一直是一颗种子,2024年初,当时的想法是考研和就业两手抓。买了张宇的高数现代,想要死磕! 也记了挺多笔记... 如果…...
【Java-数据结构】Java 链表面试题下 “最后一公里”:解决复杂链表问题的致胜法宝
我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 引言: Java链表,看似简单的链式结构,却蕴含着诸多有趣的特性与奥秘,等待我们去挖掘。它就像一…...
vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题
过程描述: 由于我修改文件时(一定得修改了文件,不做任何修改不会产生这个问题)的非法关闭,比如直接关闭虚拟机,或者直接断开远程工具的远程连接,产生了以下遗留交换文件的问题: 点击…...
国内优秀的FPGA设计公司主要分布在哪些城市?
近年来,国内FPGA行业发展迅速,随着5G通信、人工智能、大数据等新兴技术的崛起,FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此,国内优秀的FPGA设计公司主要分布在哪些城市&a…...
运用python爬虫爬取汽车网站图片并下载,几个汽车网站的示例参考
当然,以下是一些常见的汽车网站及其爬虫示例代码,展示如何爬取汽车图片并下载。请注意,爬取网站内容时应遵守网站的使用协议和法律法规,避免对网站造成不必要的负担。 示例1:爬取汽车之家图片 网站地址 汽车之家 爬…...
IO进程寒假作业DAY6
请使用互斥锁 和 信号量分别实现5个线程之间的同步 使用互斥锁 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include &…...
C++ 中用于控制输出格式的操纵符——setw 、setfill、setprecision、fixed
目录 四种操纵符简要介绍 setprecision基本用法 setfill的基本用法 fixed的基本用法 setw基本用法 以下是一些常见的用法和示例: 1. 设置字段宽度和填充字符 2. 设置字段宽度和对齐方式 3. 设置字段宽度和精度 4. 设置字段宽度和填充字符,结合…...
solidity高阶 -- 线性继承
Solidity是一种面向合约的高级编程语言,用于编写智能合约。在Solidity中,多线继承是一个强大的特性,允许合约从多个父合约继承属性和方法。本文将详细介绍Solidity中的多线继承,并通过不同的实例展示其使用方法和注意事项。 在Sol…...
PydanticAI应用实战
PydanticAI 是一个 Python Agent 框架,旨在简化使用生成式 AI 构建生产级应用程序的过程。 它由 Pydantic 团队构建,该团队也开发了 Pydantic —— 一个在许多 Python LLM 生态系统中广泛使用的验证库。PydanticAI 的目标是为生成式 AI 应用开发带来类似 FastAPI 的体验,它基…...
Leecode刷题C语言之跳跃游戏②
执行结果:通过 执行用时和内存消耗如下: int jump(int* nums, int numsSize) {int position numsSize - 1;int steps 0;while (position > 0) {for (int i 0; i < position; i) {if (i nums[i] > position) {position i;steps;break;}}}return steps…...
fpga学习入门 串口rs232回环
奇偶检验位这里是省略了 做好回环后可以使用上位机做回环测试,top文件写的方式就是将rx(fpga端)接受到的模块(pc端)tx发送出去,这两个端口用杜邦线连接,同理模块的rx连接fpga的tx,…...
单片机基础模块学习——DS18B20温度传感器芯片
不知道该往哪走的时候,就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚,分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点:占用端口少,电路设计方便 同时该协议要求通过上拉电阻…...
C基础寒假练习(4)
输入带空格的字符串,求单词个数、 #include <stdio.h> // 计算字符串长度的函数 size_t my_strlen(const char *str) {size_t len 0;while (str[len] ! \0) {len;}return len; }int main() {char str[100];printf("请输入一个字符串: ");fgets(…...
es6.7.1分词器ik插件安装-和head插件连接es特殊配置
es6.7.1分词器ik插件安装-和head插件连接es特殊配置 如果对运维课程感兴趣,可以在b站上、A站或csdn上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频 1.查看es6.7.1和es-head安装位置和es插件路径 [ro…...
Luzmo 专为SaaS公司设计的嵌入式数据分析平台
Luzmo 是一款嵌入式数据分析平台,专为 SaaS 公司设计,旨在通过直观的可视化和快速开发流程简化数据驱动决策。以下是关于 Luzmo 的详细介绍: 1. 背景与定位 Luzmo 前身为 Cumul.io ,专注于为 SaaS 公司提供嵌入式分析解决方案。…...
菜鸟之路Day10一一集合进阶(三)
菜鸟之路Day10一一集合进阶(三) 作者:blue 时间:2025.1.28 文章目录 菜鸟之路Day10一一集合进阶(三)0.概述1.双列集合概述2.Map2.1Map的常见API2.2Map的遍历方式 3.HashMap4.LinkedHashMap5.TreeMap 0.概…...
Android车机DIY开发之学习篇(六)编译讯为3568开发板安卓
Android车机DIY开发之学习篇(六)编译讯为3568开发板安卓 1.SDK解压到家目录下的 rk3588_android_sdk 目录 一. 全部编译 ###执行 sudo apt-get update sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib gmultilib…...
Workerman和Swoole有什么区别
Workerman和Swoole都是PHP的socket服务器框架,它们之间存在一些显著的区别,主要体现在以下几个方面: 一、实现语言与性能 Workerman:使用纯PHP实现。由于PHP本身的性能限制,Workerman在某些方面可能不如C语言实现的框…...
MySQL(1)
数据库 基础篇 MYSQL概述 SQL 函数 约束 多表查询 事务 进阶篇 存储索引 索引 SQL优化 试图/存储过程/触发器 锁 InnoDB核心 MySQL管理 运维篇 日志 主从复制 分库本表 读写分离 基础篇 MySQL 数据库概念:存储数据的仓库,数据是有…...
DeepseekMath:超强开源数学模型(论文详解)
摘要 近日,中国团队Deepseek推出了一款名为DeepSeekMath的7B开源数学模型,这个模型在数学方面的表现令人惊叹。DeepSeekMath 7 B在不依赖外部工具包和投票技术的情况下,在竞赛级MATH基准测试中获得了51.7%的分数,接近Gemini-Ultr…...
OpenCSG月度更新2025.1
1月的OpenCSG取得了一些亮眼的成绩 在2025年1月,OpenCSG在产品和社区方面继续取得了显著进展。产品方面,推出了AutoHub浏览器自动化助手,帮助用户提升浏览体验;CSGHub企业版功能全面升级,现已开放试用申请,…...
简易CPU设计入门:控制总线的剩余信号(四)
项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 CSDN文章:下载本项目代码 上述链接为本项目…...
scrol家族 offset家族 client家族学习
Scroll 系列属性 scrollTop & scrollLeft scrollTop: 返回元素的内容已向上滚动的部分的高度。scrollLeft: 返回元素的内容已向左滚动的部分的宽度。 scrollHeight & scrollWidth scrollHeight: 返回元素的实际高度,包括由于溢出而在屏幕上不可见的内容…...
人工智能发展历程
AI 发展历史时间表 1943年,美国神经科学家沃伦斯特麦卡洛克和逻辑学家沃尔特皮茨提出了神经元的数学模型,第一个神经元的数学模型- MP 模型。为现代人工智能学科的建立奠定了基础。1950年,艾伦图灵提出了著名的“图灵测试”,使得…...
vim交换文件的工作原理
在vim中,交换文件是一个临时文件,当我们使用vim打开一个文件进行编辑(一定得是做出了修改才会产生交换文件)时候,vim就会自动创建一个交换文件,而之后我们对于文件的一系列修改都是在交换文件中进行的&…...
利用 PyTorch 动态计算图和自动求导机制实现自适应神经网络
在深度学习任务中,不同任务的复杂度千差万别。为了解决复杂任务对模型容量的需求,同时避免简单任务因过度拟合导致的性能下降,我们可以构建一个能够根据任务自动调整网络结构的神经网络。在 PyTorch 中,动态计算图和自动求导机制为…...
docker如何查看容器启动命令(已运行的容器)
docker ps 查看正在运行的容器 该命令主要是为了详细展示查看运行时的command参数 # 通过docker --no-trunc参数来详细展示容器运行命令 docker ps -a --no-trunc | grep <container_name>通过docker inspect命令 使用docker inspect,但是docker inspect打…...