see-on-phone
Health Uyari
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Basarisiz
- rm -rf — Recursive force deletion command in app/build.sh
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
鱼眼 / See on Phone —— 让 AI 住进手机:在手机上直接和模型聊天,需要时用自己的摄像头看世界(取帧 → 挑帧 → 拼宫格)。导盲只是其中一个可选读者。An Android app + a DSH plugin that let an agent chat on the phone and see the real world. Blind navigation is one optional mode, not the product.
鱼眼 · See on Phone
让 AI 住进手机 —— 在手机上聊天,需要时自己看世界。
一个 Android App + 一个电脑插件,同一个仓库,同一份 Apache-2.0。
English, briefly. See on Phone puts an AI agent on the phone instead of on a server:
a self-contained Android chat app that can open the camera, fold several frames into one
contact sheet, remember things, write files, speak, and listen — no PC required. A companion
Node plugin lets a desktop agent borrow the same camera. Blind navigation is one optional
mode, not the product.
🐟 它是什么
鱼眼是一个能自己看东西的 AI 聊天 App。 你打字或说话,模型需要知道"眼前有什么"时,
自己调用 look 打开摄像头、看 1~8 秒、把几帧拼成一张宫格、然后回答你。
不需要电脑、不需要上传视频流、不需要装 ffmpeg。
它同时还能:听(语音输入)、说(系统 TTS)、记(跨会话记忆)、
写文件(自己的一个工作区目录)、搬会话(和桌面 DSH 互通)。
电脑上的插件 dsh-see-on-phone 是另一半:让桌面上的 agent 借手机的眼睛看一眼,
一张 JPEG 回来 —— 屏幕里看不到你桌上的杯子。
三条设计取向(决定了它长成现在这样)
| 取向 | 具体做法 |
|---|---|
| 端上跑,不绕服务器 | 模型 API 你自己填;画面在手机本地拼成一张 471×628 的宫格(4~7 KB)再发出去。没有中转、没有统计 |
| 相机是工具,不是取景器 | 只有 look 被调用时借相机,没人要 3 秒后自动关。想自己看画面进"通话页" |
| 导盲只是读者之一 | normal(你看得见,它给你细节)和 guide(你看不见,它只给结论和动作)是同一个模型的两个提示词,不是两套代码。它不是辅具,见 NOTICE |
📦 装哪个
仓库的 Releases 里每次都放两个文件,
按你需要挑:
| 你想要 | 下这个 | 还需要 |
|---|---|---|
| 手机上有个能聊天、能看东西的 AI | see-on-phone-<ver>.apk |
一个 OpenAI 兼容的 API Key |
| 让电脑上的 agent 借手机的眼睛 | dsh-see-on-phone-<ver>.tgz |
必须先装上面那个 APK(手机就是服务端) |
| 两个都要 | 两个都下 | 同上 |
不需要新仓库,也不需要两个仓库。 App 和插件是一个产品的两端,版本一起发、契约一起改,
分开放只会让"插件 0.4 配 App 0.29"这种错配变成常态。Release 用两个资产区分就够了。
🐠 鱼眼 App
能干什么
- 聊天:流式输出、Markdown 渲染、思考过程可折叠、上下文预算可调(2k~900k)
- 看:
look工具 —— 开相机 → 采样 → 挑帧 → 拼宫格 → 交给模型。宫格是按镜头切换点排的,
动得多的帧给大格子,静止的给一条;不是平均切九宫格 - 听:系统语音识别,单句输入
- 说:用系统 TTS。装一个语音引擎(讯飞 / 搜狗 / Google TTS / 厂商自带)就能有
多种音色,装了什么设置里就能选什么。我们不自己联网合成 —— 原因见出处 - 记:
memory_read/memory_write,跨会话;每轮自动带上 - 写:
files工具,一块固定工作区Download/DSH-Go/workspace/—— 文件管理器里能直接看到、拷走、删
(目录名沿用DSH-Go,这样老版本的会话、记忆、日志原地还能用,不用迁移) - 搬:会话与记忆的摊平导出/增量导入,和桌面
phone-bridge对得上 - 给别人看:内置 HTTP 服务(
127.0.0.1:4444),电脑插件靠它工作
界面
| 会话页 | 通话页 | 设置 | 对话 |
|---|---|---|---|
| 消息流 + 输入栏 + 工具状态 | 实时预览 + 字幕(离开就还相机) | 分组卡片,二十来项配置一页到底 | 置顶 / 今天 / 更早,搜索和新建 |
截图是实机(华为,1084×2412)跑的 1.0.0,没有修饰。
它看到的是什么
不是平均切的九宫格。 先算逐帧变化分 → 找镜头切点 → 按切点密度分档 →
行 DP 装箱:动得多的帧给大格子,没动的给一条。所以一张图里信息量是被分配过的。
一张 471×628 的 JPEG,4~7 KB,约 197 token。
装法
# 1. 从 Releases 下 APK,然后
adb install -r see-on-phone-<ver>.apk
# 2. 打开「鱼眼」→ 右上角齿轮 → 填接口和 Key
# 接口:https://api.deepseek.com/v1 (任何 OpenAI 兼容端点都行)
# 模型:deepseek-chat
第一次点"看"会申请相机权限。装在应用商店之外(sideload),系统会提示风险,正常。
自己编译
不需要 Gradle,不需要 Android Studio。只要 JDK 17 + 一份 android.jar + 四个 jar(d8 / aapt2 / apksigner / lib):
export ANDROID_SDK=/path/to/android-sdk # 里面有 android.jar 和 build-tools
bash app/build.sh # 6 步:javac → d8 → aapt2 compile → link → 塞 dex → 签名
产物 app/see-on-phone.apk,约 220 KB(图标是 WebP)。构建细节与踩过的坑:app/docs/BUILD.md。
- ≤ 28 会被新系统弹"此应用是针对旧版 Android 打造的",OPPO/小米上都见过;
- ≥ 30 强制分区存储,
Download/鱼眼/下的工作区文件就写不进去,得改成 SAF 或申请全盘权限; - Android 12 的后台启动限制只管 targetSdk ≥ 31 的 App,而它要开机自启;
- sideload 没有 Play 的 targetSdk 门槛,所以 29 没有代价。
🖥 电脑插件 dsh-see-on-phone
npm i -g dsh-see-on-phone # 或者从 Release 里的 .tgz 装
模型调用 see_phone → 插件 HTTP 打手机 /look → 手机自己采、自己挑、自己拼 → 一张 JPEG 回来。
电脑这边不抽帧、不装 ffmpeg、不拉原始流。
| action | 干什么 | 等待 |
|---|---|---|
look(默认) |
抓一张宫格 | 手机采集 12 秒(wait 可调 0.58) |
watch |
看"这一会儿发生了什么" | 默认 8 秒 |
peek |
最快的一张 | 1 秒 |
status |
手机状态(相机/上下文/思考/朗读) | — |
stop |
停语音(相机归手机自己关) | — |
mode:"normal"(默认,用户看得见画面)或 mode:"guide"(导盲:只给结论和动作)。
配置只有两项,在 ~/.dsh/see-phone.json:url 和 mode —— 档位、节奏、前后摄像头都在手机 App 里,
两个地方各存一份配置最后一定会打架。
node scripts/doctor.mjs # 手机通不通、语音播放有没有
node scripts/smoke.mjs 6 # 拍 6 秒存成 jpg,自己看
搬会话(手机 ⇄ 电脑)
手机上聊过的可以搬到电脑的 DSH 里接着聊,反过来也行。装完插件就自带这个命令:
dsh-see-on-phone sync # 一条命令:从手机拉包 + 导进 DSH
dsh-see-on-phone status # 先看看手机在不在
dsh-see-on-phone export latest # 反向:把 DSH 里最近改过的那条推到手机
dsh-see-on-phone push # (导出后再推)
dsh-see-on-phone doctor # 体检:哪些会话 DSH 打不开、为什么
dsh-see-on-phone repair --write # 修(默认只看不改;每个文件先备份 .bak-*)
| 你担心的 | 实际行为 |
|---|---|
| 会不会覆盖我原来的会话 | 只加不删。手机侧按时间戳增量追加,电脑侧新建 / 补齐,从不 truncate |
| 图片呢 | 不跟着搬:导出时换成一行「图已省略」占位(省时间省流量),手机上的原图还在 |
| 电脑上看得到图吗 | 看不到。这是刻意的 —— 那段对话在电脑上只有文字 |
| 搬完为什么列表没变 | 列表是 DSH 进程里的缓存,完全退出再打开才刷新 |
不插线也能搬:手机 App → 设置 → 数据 → 打开「局域网」,然后dsh-see-on-phone sync --host 192.168.1.5:4444(IP 用手机上显示的那个)。
导进 WorkBuddy 侧边栏也行:
dsh-see-on-phone import --wb(这条线要 Node 22.5+)。
插线时先用-s <序列号>指定设备(adb devices第一列),插两台时必用。
🧭 出处与署名
拼图那套(切点检测 → 档位 → 行 DP 装箱 → 拼图 → token 换算)最初写在dsh-see-now 和dsh-video-storyboard 里,
App 里这份是同一套算法的 Java 逐行移植(同作者,同许可),曾经逐字节对拍过。
切点那套的思想来源是 PySceneDetect(BSD-3)的ContentDetector:把 HSV 三通道的差异加权成一个变化分。它用 OpenCV 在原始分辨率上算,
我们在 64×36 网格上手写 —— 取的是结论,没有读它的源码。
在线音色(小轩那些)
App 里有 5 个 Edge 在线音色(小轩 / 晓晓 / 晓伊 / 云希 / 云扬),要自己算 Sec-MS-GEC 令牌。
那套算法是照着 edge-tts 的 Python 实现翻译成 Java 的 ——
著作权上属于演绎作品,所以 Drm.java / EdgeTts.java 这两个文件是 LGPL-3.0,不是 Apache-2.0。
LGPL 不是 GPL。 它有「组合作品」例外,不会把同一个 APK 里的 Apache-2.0 代码拖下水;
除这两个文件外,仓库其余代码仍是 Apache-2.0。逐条见 CREDITS §4.1。
2.1.0 曾以「GPL 会污染整包」为由把这条链路整段删掉(852 行)——那个判断不准确,
2.3.0 加了回来,并把许可标对。它默认不启用:设置 → 音色 里选中才会联网合成,
失败会自动回落系统 TTS,不会让 App 哑掉。
当前代码树只有这一处第三方源码。逐条见 CREDITS.md。
⚖️ 许可
Apache-2.0。拿去商用、改名、闭源分发都可以,保留版权与许可声明即可。
许可全文跟着二进制走:npm 包里有 LICENSE / NOTICE / CREDITS.md;
APK 里打进 res/raw/,手机上「设置 → 关于 → 许可」能直接看。
但它不是辅具。 这个 App 会把画面变成文字描述,它会看错、会延迟、会在暗处失灵。
过马路、上下楼梯、避障 —— 用白杖、用导盲犬、用无障碍设施。详见 NOTICE。
☕ 打赏
不影响上面任何一个字:代码是 Apache-2.0,不收费、不需要授权、不搞"打赏才给好功能"。
觉得它替你省了时间,就扫下面这个码请我喝杯咖啡 —— 纯自愿,不给也照样能用全部功能。
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi