媒体导入
通过带缓存的转码代理,标注浏览器无法显示的文件,包括多页 16 位 TIFF、HEIC、相机 RAW、ProRes 与 MKV。
浏览器无法显示的文件会得到一块空白画布,并且没有任何报错,于是标注者会认定工具坏了。 Potato 会在首次请求时转码这些文件并缓存结果;当它确实无能为力时,会明确说明,并给出应当改为运行的命令。
请求转码后的文件
引用文件时使用 /media/proxy/ 而非 /media/:
json
{"id": "scan_001", "image_url": "/media/proxy/scan_001.tif"}浏览器本就能显示的文件(.jpg、.png、.webp、.mp4、.webm)会直接透传、不再重新编码,因此混合格式的语料无需特殊处理。把所有内容都指向代理即可。
结果缓存在 <output_annotation_dir>/.media_cache/ 下。缓存键包含源文件的大小与修改时间,因此编辑源文件会产生新条目,而不会命中过期缓存。
支持的内容
| 源格式 | 转换为 | 说明 |
|---|---|---|
| TIFF | WebP | 支持多页与 16 位,并做百分位窗口化 |
| HEIC | WebP | iPhone 的默认照片格式 |
| 相机 RAW | WebP | 通过 rawpy |
| ProRes、MKV、MOV、HEVC | MP4 | 用 ffmpeg 做代理转码,并提供抽帧作为回退方案 |
ffmpeg 与 Pillow-SIMD 仍为可选项。它们缺失时会给出一条指明缺少哪个工具的提示,而不是一块空白面板。
16 位窗口化才是实质所在
科研用 TIFF 通常是 16 位的,而其内容通常只占据可用范围中很窄的一段。把它粗暴地转成 8 位并不是一点小损失:一份内容位于 1200 到 1800 之间的扫描件,渲染出来只有 255 级灰阶中的 4 级区分度。而在百分位窗口下,它有 254 级。
同一套窗口化逻辑也驱动着深度图,在那里,做错同样是看不出来的,而不是显而易见的。