最近在做一个浏览器 TTS 扩展( CastReader ),碰到一个有意思的技术问题。 Kindle Cloud Reader ( read.amazon.com )用了一套自定义加密字体做 DRM 。打开任意一本书,右键检查元素,DOM 里的字符全是乱的——"chapter" 在源码里可能显示为 "∆♦⊗∑≈∂"。浏览器能正常渲染是因为加载了亚马逊的自定义字体文件做映射,但 DOM 里的 textContent 是废的。 这导致所有 TTS 扩展在 Kindle 上全军覆没。Read Aloud 、NaturalReader 、Speechify ,全部读出来是乱码。我测了 15 个扩展,没有一个能用。 我的解决方案:不读 DOM ,读像素。用 tesseract-wasm 在浏览器里跑 OCR ,直接识别渲染后的页面图像。整个流程: 1. 截取当前页面渲染结果 2. tesseract-wasm 本地 OCR (不上传任何数据) 3. 拿到文字 + 每个词的 bounding box 坐标 4. 送进 Kokoro TTS 生成语音 5. 用 bounding box 做段落级高亮跟随 首页 OCR 2-3 秒,之后自动翻页 + 预处理下一页,听的时候感觉不到延迟。 还做了个「发送到手机」功能,点一下通过 Telegram 把音频推到手机,自动翻页持续朗读。相当于把 Kindle 书库变成免费有声书。 技术细节写了一篇博客: https://castreader.ai/blog/how-castreader-cracks-kindle-font-encryption 扩展免费,不要账号: - Chrome: https://chromewebstore.google.com/detail/castreader-tts-reader/foammmkhpbeladledijkdljlechlclpb
有什么技术问题欢迎讨论
1
vinxu OP 对了,做微信读书页面版本的 tts 适配也花了不少时间,不过现在已经可以 tts+高亮跟随了,也可以一键下到手机。
|
2
Danswerme 11 小时 35 分钟前
感谢分享,让我想起来很久之前看过的一篇帖子,里面也提到了关于字体加密相关的内容:
https://web.archive.org/web/20240326202743/https://cjting.me/2020/07/01/douyu-crawler-and-font-anti-crawling/ |
3
w568w 11 小时 33 分钟前
微信读书的网页版(电纸书版)也有类似的技术,不过是打乱每个字符的坐标,然后用绝对定位渲染到屏幕上,相对好还原。
|
4
ltaoo1o 11 小时 21 分钟前
番茄小说网页端也是这样,看到的部分「中文」其实是 iconfont 。
我的方案是拿到字体文件,找到映射关系然后替换内容,优点是不需要 OCR 。缺点是不通用,对于你的场景,就要对每个网站做适配,而且可能网站更新了字体文件,映射关系就变了 |