Skip to content

Repository files navigation

智阅(ZhiYue)

原生 AI 集成的本地阅读器:阅读 PDF(文字版 / 扫描版)与图片文件,选中文字即可翻译、解释、搜索;支持文本层与图像层标记;内置完全离线的本地 OCR 与多模态识图。

当前阶段:M0–M6 全部核心功能已完成。 书库管理、PDF 管线、选区与文本层标记、AI 对话与识图、整页 OCR 与图像层标记、全文搜索均已实现,另有 OCR 精度增强(7.1.x 系列)。详见 docs/IMPLEMENTATION_STATUS.md。

架构

┌────────────────────────────────────────────────┐
│ Flutter Desktop(UI 层,Dart)                  │
│  书库  阅读区  标记层  侧边栏  AI 面板  设置      │
│  状态管理:Riverpod   路由:go_router           │
└───────────────────┬────────────────────────────┘
                    │ flutter_rust_bridge v2(类型安全 FFI)
┌───────────────────┴────────────────────────────┐
│ Rust 核心层(无 UI,全部重活)                    │
│  PDF(pdfium-render)  OCR(rapidocr-core)      │
│  AI(reqwest SSE 流式)SQLite + FTS5 + jieba    │
│  数据模型 / 命令接口(FRB 导出)                 │
└────────────────────────────────────────────────┘
  • 分工原则:所有重活与数据在 Rust 侧(PDF 渲染、OCR、AI 网络、数据库、搜索索引);Flutter 只做绘制与交互。
  • 完全离线 OCR:rapidocr-core(PP-OCRv4 det/cls/rec,ONNX Runtime 静态链接),高精度 + 快速双模式,模型随安装包内置(~210MB)。
  • AI 侧:OpenAI 兼容协议(BYOK,可配 DeepSeek / Kimi / 通义等),流式对话(Markdown + LaTeX 渲染)+ 自由截图多模态识图。
  • 目标平台:Linux 桌面(Arch / Debian / Ubuntu / Fedora 等,详见 docs/LINUX_PACKAGES.md)。
  • 零参考:完全重写,不迁移任何旧代码。

详见 docs/FEATURES.md(需求)、docs/TECH_ROADMAP.md(技术路线)与 docs/IMPLEMENTATION_STATUS.md(实施状态)。

目录结构

ZhiYue/
├── docs/                 # 需求与技术文档
│   ├── FEATURES.md               # 需求规格
│   ├── TECH_ROADMAP.md           # 技术路线
│   ├── IMPLEMENTATION_STATUS.md  # 实施状态与后续开发方向
│   ├── ARCHITECTURE.md           # 架构设计
│   ├── DEPENDENCIES.md           # 工具链依赖说明
│   ├── LINUX_PACKAGES.md         # Linux 分发包(deb/rpm/AppImage)
│   └── FLUTTER_UI_MIGRATION.md   # Flutter UI 迁移说明
├── scripts/              # 构建与安装脚本
│   ├── setup.sh                  # 工具链安装(pacman 依赖 / FRB codegen)
│   ├── fetch_pdfium.sh           # 获取 pdfium 动态库(构建前置)
│   ├── download_ocr_models.sh    # 下载 OCR 模型(运行时 / 打包内置)
│   ├── build_packages.sh         # 构建 deb/rpm/AppImage
│   └── build_deb.sh              # 单独构建 deb(被 build_packages.sh 调用)
├── rust/                 # Rust 核心 lib crate(rbwa_core)
│   ├── Cargo.toml
│   ├── libpdfium/                # pdfium 动态库(fetch_pdfium.sh 下载)
│   └── src/
│       ├── api.rs        # FRB 导出层(Flutter->Rust 唯一入口)
│       ├── models/       # 共享数据模型(跨 FFI)
│       ├── db/           # SQLite 连接 + schema + FTS5 索引
│       ├── pdf/          # PDF 渲染与文本提取(pdfium-render)
│       ├── ocr/          # OCR 引擎(rapidocr-core,懒加载)
│       ├── ai/           # AI 客户端(手写 reqwest SSE 流式)+ 系统提示词
│       ├── search/       # 全文搜索(FTS5 + jieba 分词)
│       ├── export.rs     # 标注导出(Markdown/JSON)
│       ├── error.rs      # 统一错误类型
│       └── frb_generated.rs  # FRB 生成的 Rust 侧绑定(勿手改)
├── lib/                  # Flutter Dart 代码
│   ├── main.dart         # 启动初始化(窗口+FRB+SQLite)
│   ├── app.dart          # 根 widget(标题栏+主题+路由)
│   ├── router/           # go_router 配置
│   ├── core/             # 主题 / 通用组件
│   ├── features/         # 功能模块(library/reader/annotation/ai/search/screenshot/settings/shell)
│   ├── data/             # 数据层(repositories,桥接 FRB)
│   └── src/rust/         # FRB 生成的 Dart 绑定(勿手改)
├── linux/                # Flutter Linux 桌面 runner(CMake:cargo 编译 + .so/pdfium 打包进 bundle)
├── test/                 # 单元 / 组件 / 冒烟测试(flutter test)
├── integration_test/     # 集成测试(flutter test integration_test)
├── packaging/            # Linux 打包资源(ZhiYue.desktop / ZhiYue.spec / 图标)
├── assets/               # 应用图标(ZhiYue.png)
├── dist/                 # 分发包产物(deb/rpm/AppImage,构建时生成)
└── pubspec.yaml

快速开始

1. 安装工具链

sudo bash scripts/setup.sh

脚本会安装 cmake / ninja 等系统依赖(pacman)与 flutter_rust_bridge_codegen。Flutter SDK 需自行安装(脚本会检测并提示;默认路径 ~/develop/flutter,解压后把 bin 加入 PATH)。详见 docs/DEPENDENCIES.md。

2. 构建与运行

# 获取 pdfium 动态库(构建前置,Rust 核心的 PDF 渲染依赖它)
bash scripts/fetch_pdfium.sh

# 重新生成 FRB 绑定(修改 rust/src/api.rs 后执行)
flutter_rust_bridge_codegen generate

# 构建(debug 或 release)-- CMake 会自动 cargo 编译 Rust 并把 .so 打进 bundle
flutter build linux --release

# 运行(可执行文件名为 ZhiYue)
./build/linux/x64/release/bundle/ZhiYue

# 或直接热重载开发
flutter run -d linux

OCR 模型不参与构建,运行时整页 OCR 功能需要(开发模式下载到 ~/.local/share/RBWA/models):

bash scripts/download_ocr_models.sh --all

3. 测试

# Rust 单元测试(系统提示词 / 数据层 / 注入防御等)
cargo test --manifest-path rust/Cargo.toml

# Dart 测试(AI 冒烟等需先 cargo build --release 生成 librbwa_core.so 供加载)
flutter test

4. 安装包

一键构建 deb / rpm / AppImage 分发包(内置 OCR 模型,约 250MB):

bash scripts/build_packages.sh

安装与使用方式见 docs/LINUX_PACKAGES.md。

5. 验证功能

应用启动后:

  • 书库页:导入 PDF / 图片 → 网格展示 + 封面缩略图,支持收藏、删除、分类(拖拽归类)、检索
  • 阅读器:单页 / 双滚动 / 双页三模式,缩放、翻页、进度恢复、侧栏(目录树、缩略图轨)
  • 文字版 PDF:划词选区 → 高亮 / 下划线 / 删除线 / 笔记,标注侧栏 + Markdown/JSON 导出
  • 扫描版 PDF / 图片:整页 OCR(高精度 / 快速双模式)→ 隐形文本层可选中;低置信度行标记 + 手动修正
  • AI 侧栏:流式对话(提示词模板 / 自定义),自由截图 → 多模态识图
  • 搜索:书库全局全文搜索(命中书 / 页 / 摘要 + 页内高亮)
  • 数据:~/.local/share/RBWA/rbwa.db(SQLite WAL + FTS5 索引)

里程碑

里程碑 内容 状态
M0 骨架 工程脚手架 + FRB 管道 + SQLite schema + UI 空壳 ✅ 完成
M1 书库 导入 / 网格 / 收藏 / 删除 / 分类(拖拽归类)/ 封面缩略图 / 无边框标题栏 / 主题持久化 ✅ 完成
M2 PDF 管线 pdfium 渲染 → GPU 纹理 / 虚拟滚动 / 三视图模式 / 缩放 / 翻页 / 进度恢复 / 侧栏 ✅ 完成
M3 选区与文本层标记 字符盒精确选区 / 高亮 / 下划线 / 删除线 / 笔记 / 标注侧栏 / Markdown+JSON 导出 ✅ 完成
M4 AI 与识图 流式对话(Markdown + LaTeX)/ 提示词模板 / 历史持久化 / 自由截图 → 多模态识图 ✅ 完成
M5 整页 OCR 与图像层标记 扫描页自动检测 / 双模式整页扫描 / 隐形文本层 / 按页缓存 / 图片阅读 / 画笔 / 便签 / 图章 / 形状 / 拼合导出 ✅ 完成
M6 全文搜索 FTS5 + jieba / 后台预构建 + 增量索引 / 失败终态标记 / 全局搜索跳转 / 页内高亮 ✅ 完成
7.1.x OCR 精度 预处理增强 / 90° 自适应矫正 / 180° cls 矫正 / 置信度展示 / 手动修正 ✅ 完成

各里程碑的详细实施记录见 docs/IMPLEMENTATION_STATUS.md。

许可证

GNU General Public License v3.0 — Copyleft:允许使用、修改与分发,但衍生作品必须以 GPL 开源

About

智阅(Read Book With AI) 是一款 AI 增强的本地 PDF/图片阅读器,采用 Flutter(界面)+ Rust(核心) 双端架构,通过 flutter_rust_bridge 桥接。功能实现在 Rust 侧(渲染/OCR/AI/数据库),界面只做绘制与交互。支持基础PDF阅读器功能,并增加了侧栏AI功能。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages