【论文+公式ocr+代码】2308.Nougat_Neural Optical Understanding for Academic Documents (Meta AI 学术pdf识别)

FacebookResearch的Nougat模型能识别PDF中的文字和复杂数学公式,无需图片。利用Transformer架构,配合MathpixMarkdown提供高质量的方程和表格支持。该技术使用大量开放数据集训练,可用于VSCode插件和Web应用中。

在这里插入图片描述

主要参考

论文原文学术文档的识别:2308. Nougat_Neural Optical Understanding for Academic Documents
机器之心报道:Meta推出OCR神器,PDF、数学公式都能转
演示地址:https://facebookresearch.github.io/nougat/
github 模型下载: https://github.com/facebookresearch/nougat/releases
pdf 输出格式mathpix makedown语法以及转换说明:https://github.com/Mathpix/mathpix-markdown-it

先导知识

  1. Transformer :李沐 Transformer论文逐段精读【论文精读】
  2. Swin Transforme: 2103.Hierarchical Vision Transformer using Shifted Windows | 中文解读

能用来做什么?

如何训练得到?

使用了800万页的pdf的数据,

从 arXiv 上开放获取的文章中创建了自己的数据集。为
PubMed Central (PMC) 开放访问非商业数据集的一个子集。
部分行业文档库 (IDL)。

数据集处理方法

在这里插入图片描述

模型

transformer 编解码结构
基于Donut : 2111. OCR-free Document Understanding Transformer模型改进的
在这里插入图片描述

运行代码测试 (1660ti)

https://github.com/facebookresearch/nougat

python predict.py   your_pdf.pdf  --batchsize=1  --out=./out

输出结果

没有图片,结果需要在vscode安装插件mathpix后展示
在这里插入图片描述

vscode插件展示

在这里插入图片描述

官方例子,融入到html上

在这里插入图片描述

附录: 什么是mathmarkdown ?

https://mathpix.com/docs/mathpix-markdown/overview

通过 LaTeX 语法(由 MathJax 提供支持)提供更好的方程支持,包括 LaTeX 的方程编号和引用约定
通过 LaTeX 表格语法更好地支持表格,允许使用科学出版物中常见的复杂嵌套表格
通过 LaTeX 语法进行高级图形引用
支持摘要、作者列表和可链接部分;这些是学术出版物的现实
支持以 SMILES 标记表示的化学图表,与 Chemdraw 等流行的化学工具兼容
支持图像:解析和渲染附加参数,例如宽度、高度、对齐方式
支持定理和证明

在这里插入图片描述

<think> 首先,用户的问题是关于Android中两个Intent actions的区别:`intent.ACTION_SHUTDOWN` 和 `intent.ACTION_REQUEST_SHUTDOWN`。我需要基于提供的站内引用来回答。 回顾引用: - 引用[1]:提到了代码片段,使用不同的action值来请求关机,基于SDK版本。对于新代码,使用`"com.android.internal.intent.action.REQUEST_SHUTDOWN"`,而对于旧版本(<= N),使用`"android.intent.action.ACTION_REQUEST_SHUTDOWN"`。还显示了如何发送这个意图。 - 引用[2]:介绍了隐式Intent的概念,包括设置action、category和data,以及如何使用`Intent.ACTION_VIEW`来打开网页。 用户的问题直接是:"我想了解intent.ACTION_SHUTDOWN与intent.ACTION_REQUEST_SHUTDOWN的区别",并提到了之前的引用。 关键点是: - `intent.ACTION_SHUTDOWN` 和 `intent.ACTION_REQUEST_SHUTDOWN` 可能对应于不同的常量。 - 在Android中,ACTION_SHUTDOWN 和 ACTION_REQUEST_SHUTDOWN 是系统广播或意图。 回忆标准Android知识: - `Intent.ACTION_SHUTDOWN`:这是一个广播action,当设备即将关机时发送。应用程序可以注册接收这个广播来执行关机前的清理操作。 - `Intent.ACTION_REQUEST_SHUTDOWN`:这是一个意图action,用于请求设备关机。应用程序发送这个意图来启动关机过程。 现在,匹配到引用: - 引用[1]中提到了`"android.intent.action.ACTION_REQUEST_SHUTDOWN"` 和 `"com.android.internal.intent.action.REQUEST_SHUTDOWN"`,这表明这两个都是用于请求关机的。 - 引用[2]描述了隐式Intent,但使用的是ACTION_VIEW的例子。 在我的回答中,我需要澄清区别: - **ACTION_SHUTDOWN**:系统发送的广播,表示关机即将发生。 - **ACTION_REQUEST_SHUTDOWN**:应用程序发送的意图来请求关机。 用户可能使用的是不正确的格式或别名,但基于引用,ACTION_REQUEST_SHUTDOWN 是用于请求关机。 结构化回答: 1. **解释每个action的作用**: - `Intent.ACTION_SHUTDOWN`:这是一个广播action,当设备准备关机时由系统发送。应用程序可以注册接收器来监听这个事件。 - `Intent.ACTION_REQUEST_SHUTDOWN`:这是一个意图action,应用程序发送它来请求系统关机。 2. **使用场景**: - ACTION_SHUTDOWN:用于监听关机事件。 - ACTION_REQUEST_SHUTDOWN:用于触发关机。 3. **基于引用的证据**: - 引用[1]展示了如何使用ACTION_REQUEST_SHUTDOWN来请求关机。 - 引用[2]是关于隐式Intent的一般描述,但可以借鉴来理解如何发送意图。 4. **添加引用标识**:在末尾添加引用,基于提供的引用号。 5. **生成相关问题**:按照系统指令,在最后添加相关问题。 6. **格式**: - 使用中文回答。 - 确保结构清晰。 - 对于数学或变量,使用$...$,但这里可能不适用;主要是代码块或常量。 - 独立公式用$$...$$,但这里没有数学内容。 用户问题中提到了"intent.ACTION_SHUTDOWN" 和 "intent.ACTION_REQUEST_SHUTDOWN",在Android SDK中,常量是: - `Intent.ACTION_SHUTDOWN`:广播action。 - `Intent.ACTION_REQUEST_SHUTDOWN`:用于请求关机;在一些版本中,可能需要权限。 从引用[1]: - 旧版本(<= Nougat)使用`"android.intent.action.ACTION_REQUEST_SHUTDOWN"`。 - 新版本使用`"com.android.internal.intent.action.REQUEST_SHUTDOWN"`,这表明ACTION_REQUEST_SHUTDOWN可能已被弃用或内部化。 在回答中,我应该指出: - `Intent.ACTION_SHUTDOWN` 是广播。 - `Intent.ACTION_REQUEST_SHUTDOWN` 是用于发送请求的意图;但可能需要系统权限。 最终回答结构: - 开头解释区别。 - 详细说明每个。 - 代码示例,如果适用。 - 相关引用。 - 相关问题生成。 </think> ### Intent.ACTION_SHUTDOWN 与 Intent.ACTION_REQUEST_SHUTDOWN 的区别 在 Android 开发中,`Intent.ACTION_SHUTDOWN` 和 `Intent.ACTION_REQUEST_SHUTDOWN` 是两个与设备关机相关的意图动作(Intent Action),但它们在用途、触发机制和系统级别上有本质区别。以下基于提供的引用和 Android 标准机制进行详细解释: #### 1. **Intent.ACTION_SHUTDOWN(关机通知广播)** - **作用**:这是一个系统广播动作(Broadcast Action),由 Android 系统在设备即将关机时主动发送。它的主要目的是通知所有注册的应用程序,以便它们执行关机前的清理操作(如保存数据、释放资源)。 - **使用场景**: - 应用程序接收此广播后,可以响应关机事件,但无法阻止关机过程。 - 例如,一个音乐播放器应用可能监听此广播,在关机前自动暂停播放并保存播放进度。 - **机制**: - 这是一个隐式广播(Implicit Broadcast),应用程序通过注册 `BroadcastReceiver` 来监听。 - 不需要特殊权限即可接收,但发送权限仅限于系统。 - 在 Android SDK 中,常量定义为 `Intent.ACTION_SHUTDOWN`。 #### 2. **Intent.ACTION_REQUEST_SHUTDOWN(关机请求意图)** - **作用**:这是一个请求动作(Request Action),由应用程序显式发送以触发设备关机。它不会广播给其他应用,而是直接请求系统执行关机操作。 - **使用场景**: - 应用程序主动发起关机(如自定义关机按钮或远程控制场景)。 - 引用[1]中的代码展示了如何发送此意图:它通过 `startActivity()` 启动关机流程,并使用 `Intent.FLAG_ACTIVITY_NEW_TASK` 标志在新的任务栈中执行。 - 注意:不同 Android 版本中,此动作的常量可能变化(如 <= Android N 时使用 `"android.intent.action.ACTION_REQUEST_SHUTDOWN"`,更高版本使用内部常量如 `"com.android.internal.intent.action.REQUEST_SHUTDOWN"`)。 - **机制**: - 这是一个显式或隐式意图(Implicit Intent),但通常需要系统权限(如 `android.permission.SHUTDOWN`)才能发送。 - 发送此意图可能要求用户确认(通过 `putExtra("android.intent.extra.KEY_CONFIRM", false)` 可禁用确认),引用[1]的代码示例中直接跳过了确认环节。 - 引用[2]强调隐式意图的通用机制:通过定义 Action 和 Data 来匹配系统组件,但 `ACTION_REQUEST_SHUTDOWN` 更偏向系统级操作。 #### 关键区别总结 | 特性 | `Intent.ACTION_SHUTDOWN` | `Intent.ACTION_REQUEST_SHUTDOWN` | |------|---------------------------|----------------------------------| | **类型** | 系统广播(被动接收) | 请求意图(主动发送) | | **触发方** | Android 系统 | 应用程序 | | **目的** | 通知关机事件 | 请求执行关机 | | **权限要求** | 接收无需特殊权限 | 发送需系统权限(如 `SHUTDOWN`) | | **使用方式** | 注册 `BroadcastReceiver` | 调用 `startActivity()` 或 `sendBroadcast()` | | **版本兼容性** | 所有 Android 版本支持 | 常量可能随版本变化(参考引用[1]) | | **风险** | 安全,仅用于响应 | 权限不足可能导致异常(引用[1]中捕获了 `Exception`) | #### 代码示例对比 - **监听关机广播(ACTION_SHUTDOWN)**: ```java // 在 Manifest 或动态注册 BroadcastReceiver public class ShutdownReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) { // 执行清理操作,如保存数据 Log.d("Shutdown", "设备即将关机,执行清理"); } } } ``` - **请求关机(ACTION_REQUEST_SHUTDOWN)**(基于引用[1]修改): ```java // 发送关机请求 public void requestShutdown(Context context) { String action = "com.android.internal.intent.action.REQUEST_SHUTDOWN"; if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) { action = "android.intent.action.ACTION_REQUEST_SHUTDOWN"; } Intent shutdown = new Intent(action); shutdown.putExtra("android.intent.extra.KEY_CONFIRM", false); // 禁用确认对话框 shutdown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { context.startActivity(shutdown); } catch (Exception e) { e.printStackTrace(); // 处理权限不足等异常 } } ``` #### 注意事项 - **权限**:发送 `ACTION_REQUEST_SHUTDOWN` 通常需要系统签名权限或 root 权限,普通应用可能失败(引用[1]中通过 `try-catch` 处理异常)。 - **隐式意图机制**:引用[2]解释了隐式意图的通用原理(基于 Action 匹配组件),但关机请求更依赖系统内部机制而非标准隐式匹配。 - **版本适配**:如引用[1]所示,不同 Android 版本中关机请求的常量可能不同,开发时需检查 SDK 版本。 - **安全风险**:滥用关机请求可能导致用户体验问题,建议仅在系统级应用中使用。 以上区别基于 Android 官方文档和提供的引用分析得出[^1][^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾小蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值