ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Fugleramme 墨水屏渲染揭秘:6色抖动、纸张纹理与 Halo 融合的完整技术指南

Fugleramme 墨水屏渲染揭秘:6色抖动、纸张纹理与 Halo 融合的完整技术指南 Fugleramme 墨水屏渲染揭秘6色抖动、纸张纹理与 Halo 融合的完整技术指南【免费下载链接】fuglerammeBird frame for Raspberry Pi - real-time bird detection by audio, fully local AI, rendered as real, hand-cut 1800s bird illustrations. On an e-ink panel, a TV, or any screen.项目地址: https://gitcode.com/gh_mirrors/fu/fuglerammeFugleramme 是一款运行在树莓派上的墨水屏鸟类画框它通过音频实时识别鸟鸣完全本地 AI再把识别到的鸟渲染成 19 世纪手绘风格的博物学插图显示在 E-ink 墨水屏、电视或任意屏幕上。本文带你深入它的渲染引擎看懂6 色抖动dithering、纸张纹理生成与Halo 融合这三项关键技术是如何让全彩网页版和 6 色墨水屏版看起来“像同一张纸”。为什么墨水屏版只有 6 种颜色Fugleramme 默认搭档是 Pimoroni 的 Inky Impression 13.3 英寸面板Spectra 6 技术它一屏只能显示6 种颜色黑、白、黄、红、蓝、绿。网页端kiosk是全彩渲染而墨水屏端不能靠屏幕驱动“将错就错”——如果直接把全彩图交给驱动驱动会再抖动一次对已经抖动过的图二次抖动会糊成一团。因此 Fugleramme 选择在渲染端自己完成降色源码见 src/fugleramme/render/dither.py 核心思路模块直接产出一张恰好 6 色调色板的 P 模式图像。驱动看到调色板只有 6 色就会跳过自己的抖动、只做索引重映射于是“保存的帧 玻璃上的画面”。几个值得细看的工程细节调色板是“混合色”驱动写入的是去饱和色而面板实际显示接近饱和色代码按SATURATION 0.5取两者中间值。这样抖动时计算的颜色距离才接近人眼在屏上看到的距离。抖动算法使用 Floyd–Steinberg 有序扩散见 dither()。索引顺序有讲究黑、白、黄、红、蓝、绿必须与驱动的固定顺序一致否则重映射会落到错误的颜色上。纸张纹理一整页“印”在同一张旧纸上19 世纪鸟类插图源自 von Wright 等经典图版的手绘裁切每张扫描件的底色都不一样直接拼到一页上会像贴了 40 张不同年代的贴纸。Fugleramme 的解法是不跟素材较劲而是顺着它走——把每只鸟周围残留的“原扫描纸”统一归一化到同一纸色再让整页共享同一种纹理。实现位于 src/fugleramme/render/paper.py纹理不是拍脑袋画的噪点在频域里整形噪声低通截断在 96px所以 512px 的纹理块可以无缝平铺且低频不过强——太强会像水渍斑点而不是纸。两套纸色网页版用偏暖的TARGET_PAPER242,237,226墨水屏版改用PANEL_PAPER233,225,202刻意与 6 色面板的“白”拉开一点距离——太接近的话整页会被量化成死白白色羽毛也就没了细节对应 issue #138。Halo 融合让旧插图“化”进新纸裁切素材时每只鸟边缘都留了一圈原扫描纸的余边术语叫halo。process_sprite() 是这套魔法的核心它做三件事归一色调从鸟体不透明边缘采样一圈纸色用中位数算出与目标纸色的差值把“纸感像素”整体平移过去抹平阴影带扫描件在裁切线附近常有渐变阴影代码用 4-连通距离变换限制在 24px 范围内逐带修正且向外渐隐避免在浅色羽毛上画出可见的“修图痕迹”羽化边缘给透明区垫上纸色后做 5px 高斯羽化让裁切边溶进页面纹理里而不是露出一圈发硬的轮廓线。网页版还会把页面同一坐标的纹理“印”进鸟身下的纸区保证纸纹跨鸟连续——这正是拼贴看起来像一张完整旧纸的关键。从网页到墨水屏同一条渲染管线两种输出整个渲染包 src/fugleramme/render/ 的设计哲学是一句话“纸上的墨”——拼贴collage、单鸟图版plate共用同一套页面家具最后只差一道抖动。拼贴collage.py 把最近窗口内听见的鸟按真实体重压缩指数定尺寸大鸟居中、小鸟环绕用轮廓掩码做碰撞装箱名字标签与鸟绑成一体参与装箱保证标签永远不会压到邻居图版plate.py 渲染“最新听到 / 今日之鸟 / 最新新客”三种单鸟模式分叉点page.py 的blank()决定底色——网页版用带颗粒的纸纹墨水屏版用平纸因为纸张颗粒会被抖动放大成彩色噪点文字同理屏上版本会二值化掉抗锯齿防止抗灰边抖成彩色斑点。最终在 service.py 汇合网页请求返回全彩页面墨水屏收到的永远是dither()之后的 6 色版本。上手看看效果装好之后打开:8080即可看到实时拼贴:8080/admin的Display页可以切换模式、布局Spiral/Voids、边距与物种名语言详见 docs/display.md延伸阅读模块文件职责颜色降采样dither.py6 色调色板 Floyd–Steinberg 抖动纸张与 Halopaper.py无缝纸纹、色调归一、边缘羽化拼贴排版collage.py体重定尺寸、轮廓装箱、标签预留页面公共件page.py底色、文字掩码、空栖展示单鸟图版plate.py图版排版与图注显示设置docs/display.md模式、布局、边距等用户侧选项想要给画框加新鸟可以阅读 docs/adding-artwork.md素材版权归属见 assets/artwork/classic/ATTRIBUTION.md。【免费下载链接】fuglerammeBird frame for Raspberry Pi - real-time bird detection by audio, fully local AI, rendered as real, hand-cut 1800s bird illustrations. On an e-ink panel, a TV, or any screen.项目地址: https://gitcode.com/gh_mirrors/fu/fugleramme创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表