Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI 双端搜题

AI 双端搜题 · QuizSync AI

电脑截屏、手机截屏 → AI 读题作答 → 答案同时出现在电脑和手机上

局域网内两台设备直连,不经过任何第三方中转服务器,也不需要注册账号。

功能一览 · 五分钟上手 · 日常使用 · 常见问题 · 技术栈


file_00000000d44c81fdba4bb49175bd47f3

这是什么

一个在局域网里跨设备搜题的小工具。它把「截屏 → 多模态 AI 读题 → 显示答案」这条链路做成两端协同:

电脑截屏(热键 / 悬浮球 / 剪贴板)
        │
        ▼
   多模态 AI 读题(题目 / 选项 / 材料 / 主观题结构化)
        │
        ├──────────────► 电脑端:当场显示答案与解析、可标绿、可导出
        │
        └──── 局域网 ──► 手机端:自动刷新出同一条结果,可离线回看

手机截屏(悬浮球 / 相册选图)
        │
        ▼
   上传到电脑 → 电脑端 AI 分析 → 结果回传手机(电脑端同步留档)

典型场景:电脑上做网课作业 / 题库练习,想快速看答案与解析;或者用手机对着题目截一张屏(或从相册选一张已经拍好的图)上传给电脑上的 AI —— 两边看到的永远是同一份结果。

答案由 AI 生成,仅供参考;请遵守所在学校 / 机构关于作业与考试的规定。


功能一览

电脑端(Windows)

mmexport1789841226554
能力 说明
全局热键截屏搜题 三个可自定义的热键:截屏识别 / 追加一页 / 结束多页识别;默认组合键可随时改,被别的软件占用会自动回退并给出提示
桌面悬浮球 常驻桌面最上层的小圆球:单击截一张图直接识别(正在攒页时 = 收尾识别);按住 0.5 秒或右键追加一页进入多页模式。可拖动、松手自动吸附屏幕左右边缘;大小、透明度、描边都可调,三种状态三种颜色(待识别 / 识别中 / 多页模式)
多页识别 一道大题分好几屏(题干 + 材料 + 图)时,逐页「追加」,最后「结束」一次性提交,AI 按页序整体读题;题目顺序由模型自行纠正
剪贴板监听 复制一张图(截图工具、浏览器、看图软件都行)就自动识别,不用切窗口
拖入 / 粘贴 图片文件直接拖进主界面,或 Ctrl+V 粘贴
结果页 一次识别的所有题目在同一页纵向显示;命中选项标绿、不确定的标黄;阅读材料默认折叠、可展开;可展开「原始返回」排查解析问题
历史记录 按「任务合集」分组,可二次确认后删除;支持关键词搜索历史题目(题干 / 解析,FTS5);支持 Markdown / JSON 导出、合集导出、一键备份与恢复
托盘常驻 关闭窗口 = 隐藏到托盘,不退出;托盘菜单可直接截屏、追加页、切换合集、打开设置
内置服务端 电脑端自带局域网服务(HTTP + WebSocket),手机端通过配对码 / 二维码连上来,无需另装服务

手机端(Android)

示例1 示例2 示例3
Screenshot_2026-09-20-02-05-45-894_com example quizsync_android_1_2026-09-21_09-03-02_998 Screenshot_2026-09-20-02-14-43-423_com example quizsync_android_8_2026-09-21_09-03-03_019 Screenshot_2026-09-20-02-01-42-370_com example quizsync_android_0_2026-09-21_09-03-02_985
能力 说明
当前任务 手机默认就是「电脑识别结果的显示器」:显示与电脑的连接状态(「已连接 · 合集名」)与正在识别的图片张数,出结果后自动跳到本次结果页
悬浮球 常驻在别的应用之上:单击截屏上传分析;长按进入多页模式(一次长按加一页,最后短按收尾);可拖动、自动吸附边缘
相册选图搜题 从相册挑一张图上传到电脑分析
结果页 与电脑端同一套题目卡片;「上一次 / 下一次识别」在多次识别之间切换、字号可调、可请求电脑「重新生成」
历史记录 按合集分组、可离线查看(数据本来就在手机上),支持删除
静默采集 手机自己发起的识别全程不打扰:不跳页、不切标签、不把界面拉到前台,进度只反映在「当前任务」页与通知里

双端同步

  • 电脑发起识别:手机 1 秒内看到「N 张图片识别中…」,出结果后自动跳到本次结果页;如果手机正停在某次结果页上,页顶会浮出一条「电脑正在识别中…/识别完成,正在打开新结果…」。
  • 手机发起识别:结果落回手机并同步到电脑端,全程静默。
  • 电脑上新建 / 改名合集、新增识别结果:手机在前台时 1 秒内跟着变;电脑上删掉的合集在手机端会保留(手机端自己删的合集会同步给电脑)。
  • 断线也没关系:手机有离线队列,重新连上会自动补跑并补齐。

运行要求

要求
电脑 Windows 10 / 11(64 位)。电脑与手机需要在同一个局域网(同一个路由器 / 同一个 Wi‑Fi)。VC++ 运行库已随包提供,无需另外安装
手机 Android 8.0 及以上(minSdk 26),arm64 / armeabi-v7a / x86_64 三种架构都有对应安装包
AI 服务 需要自备一个支持图片输入的多模态模型 API Key(默认已按 DeepSeek 官方接口填好模型名与地址,通常只要粘一个 Key)
权限 手机端需要相机(扫码配对)、通知、悬浮窗、截屏授权(首次使用时按引导授权即可)

安装

电脑端

两种包任选其一,功能相同:

  • 便携版:解压 quizsync-windows-portable-*.zip 到任意目录,双击 quizsync_desktop.exe。数据(数据库、截图、日志)就放在软件目录下的 userdata\,拷走整个目录即搬走全部数据。
  • 安装版:运行 quizsync-windows-setup-*.exe,会创建开始菜单与桌面快捷方式,卸载不会删除你的数据目录。

首次启动如果 Windows 防火墙询问是否允许访问网络,请选择允许(只在局域网内使用)。

手机端

安装 quizsync-android-<架构>-*.apk

文件 适用机型
arm64-v8a 近几年绝大多数手机(首选)
armeabi-v7a 较老的 32 位机型
x86_64 模拟器 / x86 平板

⚠️ 装过早期版本的手机,请先卸载旧版再装:包名已从 com.example.quizsync_android 改为 com.quizsync.android。系统把两者当作两个不同的应用,无法覆盖安装,也不会提示升级。 卸载旧版会一并删掉它的历史记录与配对信息,装好新包后需要重新配对一次

Android 会提示「未知来源应用」,按系统引导允许一次即可。


五分钟上手

1. 电脑端:填一个 AI Key

  1. 打开软件 → 左侧 API 配置
  2. Provider / 模型名 / Base URL 默认已经按 DeepSeek 官方接口填好(deepseek-flash + https://api.deepseek.com),通常只要把 API Key 粘进去、点保存;
  3. Key 申请入口就在该输入框下面(https://platform.deepseek.com/api_keys)。

用别家的多模态模型也可以:把 Provider 切到 OpenAI 兼容 / Anthropic / Gemini,填上对应的模型名、地址与 Key 即可。

2. 电脑端:新建一个任务合集

识别结果都归属于某个「任务合集」(例如「期末复习」「第三章作业」),方便以后查找与导出。 第一次打开会要求新建一个;每次启动都要重新选一次,避免新记录不小心落进上次的合集。

3. 手机端:扫码配对

  1. 电脑端 连接设备 → 打开时会自动刷新一个二维码和 6 位配对码;
  2. 手机端首次进入点「开始使用」→ 扫码(或手动输入 6 位码);
  3. 配对成功后手机自动回到「当前任务」页,并显示「已连接 · 合集名」。

4. 手机端:按引导授权

  • 通知权限:常驻截屏服务需要(Android 13+ 会弹窗);
  • 悬浮窗权限:悬浮球需要;
  • 截屏授权:第一次点悬浮球时,系统会弹出「开始录制或投射」之类的确认框,点允许(这是 Android 对截屏的硬性要求,无法跳过);
  • 部分机型还需要把应用加入电池优化白名单 / 允许后台弹出界面,否则悬浮球可能被系统清理(设置 → 识别模块设置 → 权限引导里有直达入口)。

日常使用

电脑端

  • 按截屏热键(默认 Ctrl+Alt+Q;被别的软件占用时会自动回退到 Ctrl+Alt+X / Ctrl+Alt+G,以「热键设置」页显示的为准)→ 截取鼠标所在的那块屏幕 → 答案,全程后台静默:不会抢焦点、不会把窗口弹到前台。
  • 点桌面悬浮球:在别的应用里也能截,不用切回本程序。
  • 多页:按「追加页」热键(默认 Ctrl+Alt+A)逐页攒,最后按「结束多页」热键(默认 Ctrl+Alt+S);或直接用悬浮球长按 / 右键追加、单击收尾。悬浮球变绿说明正在攒页。
  • 剪贴板:在设置里打开「剪贴板监听」后,复制一张图就会自动识别。
  • 结果:成功时界面保持静默,结果写进当前会话,回到主界面就能看到题目与解析;失败(没配 Key、没找到题目、网络不通)会把窗口带到前台并写明原因。

手机端

  • 把手机当第二块屏:电脑识别时看着手机就行,结果会自动出现(停在结果页上时也会有浮层提示)。
  • 手机自己发题:点悬浮球截屏(或「相册选图搜题」)→ 上传到电脑分析 → 结果回传;
  • 多页:长按悬浮球加页(球变色表示已进入多页模式),最后短按一次作为最后一页并提交。

设置项速查(电脑端)

分类 内容
显示设置 主题模式(跟随系统 / 浅色 / 深色)、界面缩放 50%–300%、题目字号与字重
API 配置 AI 服务供应商、API Key、模型名、Base URL、超时、每日调用上限、今日用量
连接设备 连接状态、监听端口与局域网地址、配对二维码 / 配对码、已配对设备(可吊销)
识别设置 剪贴板监听、是否保存图片文件、多页识别页数上限、本地图片缓存上限
悬浮球设置 显示开关、大小、整体透明度、描边(开关 / 宽度 / 不透明度,颜色跟随状态)
热键设置 三个用途各自一行:自定义 / 恢复默认;停在本页(且窗口在前台)时按键不会触发截屏,离开或切到别的程序立刻恢复
数据管理 任务合集(切换 / 新建 / 删除 / 按合集导出)、一键备份、恢复备份、导出全部历史、导出日志、打开数据目录
关于 应用名与版本、项目地址、技术栈、字体与开源许可

手机端设置项集中在「设置」标签:外观(主题 / 字号)、识别模块总开关与二级页(截屏方式含备选的无障碍截屏、悬浮球开关与外观、一题多页、权限引导)、配对与解除配对、关于。安卓端本地原图固定只留最近 20 张(没有缓存上限设置项;文本结果与元数据永久保留)。


数据、隐私与安全

  • 只在你自己的设备之间传输:电脑与手机在同一个局域网内直连(HTTP + WebSocket),没有云端中转、没有账号体系,代码里也不包含任何遥测 / 统计。
  • 什么会离开你的设备只有你主动截取或选中的那张图片会发给你自己配置的 AI 服务商(例如 DeepSeek 官方接口)用于识题。除此之外的数据都留在本机。
  • API Key 的存放:Key 只存在电脑端,用 Windows DPAPI 加密后落盘,数据库里不存明文;界面上只回显尾 4 位,输入框保存后立刻清空;手机端不保存 Key,只持有一份配对 token(放 Android Keystore),可在电脑端「吊销设备」或手机端「解除配对」立即作废。
  • 数据落在哪:电脑端在软件目录的 userdata\(数据库、images\ 截图、logs\ 日志、备份与导出);手机端在应用私有目录(对外不可见)。两端都可以一键导出 / 备份。
  • 删除与卸载:删除识别记录是软删除(可随备份恢复);电脑端卸载不会删除数据目录(userdata\ 要手动删),手机端卸载会连同应用私有数据一起清掉(换机请先在电脑端备份)。
  • 局域网访问:服务只监听局域网地址,并用配对 token 鉴权;手机端「解除配对」或电脑端「吊销设备」可立即让旧 token 失效。

常见问题

现象 处理
手机连不上电脑 确认两台设备在同一个 Wi‑Fi、电脑端服务已启动(连接设备页有状态与端口);Windows 防火墙放行该端口;若网络开启了「AP 隔离」(公司 / 学校网络常见)会互相不可见,换成手机热点试试
识别结果一直是「识别中」 看电脑端是否弹过错误提示(Key 未填 / 额度超限 / 网络不通);API 配置页的「今日用量」能看到调用情况
截出来是黑图 该应用禁止截屏(视频类、银行类应用常见),换用手机截屏或相册选图上传
悬浮球不见了 手机端:设置 → 识别模块设置 → 权限引导,补授予悬浮窗权限并加入电池白名单;电脑端:设置 → 悬浮球设置 → 打开「显示悬浮球」
手机端不自动刷新 确认手机停在「当前任务」页且电脑端已选合集;手机在前台时每秒会主动问一次电脑状态
手机上的合集 / 记录和电脑不一致 电脑端新建 / 改名 / 新增记录后,手机在前台时 1 秒内会跟上;电脑端删掉的合集在手机端会保留(手机端自己删的合集会同步给电脑);手机刚才在后台的话,回到前台也会自动补齐
换了电脑 / 重装 把旧的 userdata\ 目录拷到新软件目录旁边即可(也可用「数据管理」里的一键备份 / 恢复)
想用别家模型 API 配置里换 Provider(OpenAI 兼容 / Anthropic / Gemini)并填模型名与地址;必须是支持图片输入的模型

已知限制

  • 只支持 Windows + Android 两端(没有 iOS / macOS / Linux 版本)。
  • 依赖局域网直连,不支持公网远程使用
  • 系统级禁止截屏的应用只能得到黑图(本工具不做任何绕过)。
  • AI 会出错:答案与解析仅供参考,重要场合请自行核对;题目不清、缺页时结果可能不完整(界面会标出「题目不全」与「AI 猜测」)。
  • 图片与结果保存在本机,跨设备迁移请用备份 / 导出功能。
  • 手机端没有内置拍照入口:想用照片搜题,请先用系统相机拍好,再从「相册选图搜题」导入(或直接点悬浮球截屏)。

技术栈与架构

apps/desktop              Flutter(Windows 桌面端,内置局域网服务端)
apps/android              Flutter(Android 端,含极薄的 Kotlin 平台通道)
packages/quizsync_core    纯 Dart 共享核心:协议模型 / drift(SQLite) / 同步引擎 / AI 客户端 / 解析
packages/quizsync_ui      两端共享的 Flutter 组件(题目卡片 / 配色 / 会话导航)
docs/                     协议、数据模型、AI 契约、功能规格等设计文档
tools/                    一键构建与打包脚本
选型
界面 / 业务 Flutter 3 · Dart 3 · Riverpod
本地数据 drift(SQLite,含 FTS5)
端到端同步 自研:Lamport 时钟 + 逐字段 LWW + 软删除墓碑 + 离线队列,两端共用同一份实现
电脑端服务 shelf(HTTP + WebSocket),配对码 / token 鉴权
截屏 Windows:GDI(含剪贴板 DIB 解析);Android:MediaProjection(备选无障碍截屏)
悬浮球 Windows:原生分层窗口(UpdateLayeredWindow);Android:原生 View + WindowManager(不在浮层里跑第二个 Flutter 引擎)

为什么不把逻辑分散写:两端最容易出问题的地方是「同一份数据在两边长得不一样」。协议、模型、序列化与同步算法全部放在共享包里,两端跑同一份代码,从结构上消灭这类不一致。


开发与构建

需要 Flutter 3.4x(stable)与对应平台的工具链(Windows 桌面:Visual Studio 生成工具;Android:Android SDK + JDK 17)。

# 依赖(在 packages/quizsync_core、packages/quizsync_ui、apps/desktop、apps/android 下分别执行)
flutter pub get

# 静态检查
flutter analyze

# 构建
cd apps/desktop && flutter build windows --release
cd apps/android && flutter build apk --split-per-abi --release

仓库内的设计文档见 docs/:功能规格(SPEC.md)、局域网协议(protocol.md)、数据模型与同步算法(data-model.md)、AI 契约与输出格式(ai-contract.md)。

本源码包不含测试目录(发布版已裁剪):flutter test / dart test 没有用例可跑,tools/build_all.ps1 会自动跳过测试步骤。


许可与致谢

  • 界面字体 MiSans(小米):依官方 FAQ,允许个人与商业免费使用、可随软件嵌入分发,但不得单独售卖 / 再分发字体文件本身,也不得改名后再发布
  • 图标字体 Material Icons:Apache License 2.0。
  • 其余第三方依赖的许可证全文可在应用「设置 → 关于 → 第三方组件许可全文」中查看。
  • 本项目的代码MIT 许可证 开源,可自由使用、修改与再分发(保留版权与许可声明即可)。
  • 上表中随包分发的第三方资源(MiSans 字体、Material Icons、KaTeX 字体等)不因本项目开源而改变许可,仍按各自的条款使用。

AI 双端搜题 · QuizSync AI — 局域网内的跨端 AI 搜题工具

About

局域网内的跨端 AI 搜题工具:Windows 截屏 → 多模态 AI 解题 → 结果同步到 Android(Flutter/Dart 双端 + 共享核心包)

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages