构建 SSR 友好型头像与浏览器内 AI:我如何训练 Python 模型并将其移植到 TensorFlow.js

发布: (2025年12月9日 GMT+8 20:02)
4 min read
原文: Dev.to

Source: Dev.to

用于构建 SSR 友好头像的浏览器内 AI:我如何训练 Python 模型并将其移植到 TensorFlow.js 的封面图

问题

头像库通常分为两类:

  • 基于 Canvas – 快速,但会破坏 SSR 和可访问性
  • SVG 作为图片 – 支持 SSR,但缺乏动态主题或组件组合

我想要两者兼顾:真正的 SSR 兼容 以及 从用户照片生成智能头像。

原生 SVG = 一等的 SSR

Avatune 中的每个头像都渲染为真实的 SVG 元素,而不是 canvas 或 base64 图片。这意味着:

  • 零水合不匹配 – 服务器渲染的标记与客户端完全相同
  • 内置可访问性 – 屏幕阅读器可以读取 SVG 语义
  • CSS 样式生效 – 使用选择器定位元素,使用 CSS 变量
  • 在 DevTools 中可检查 – 像调试普通 DOM 元素一样调试
import { Avatar } from '@avatune/react';
import theme from '@avatune/pacovqzz-theme/react';

// This SSR renders as clean SVG markup
function UserCard({ seed }: { seed: string }) {
  return ;
}

实验性的浏览器内机器学习预测器

我在 Python 中使用 TensorFlow/Keras 对 CelebAFairFace 数据集训练了多个 CNN 模型,然后将它们转换为 TensorFlow.js 以在浏览器中推理:

  • 发色预测器 – 黑色、棕色、金色、灰色
  • 发长预测器 – 短发、中等、长发
  • 肤色预测器 – 浅色、中等、深色
  • 胡须预测器 – 干净剃须 vs 有胡须

训练管道使用 Marimo 笔记本(响应式 Jupyter)。模型量化为 uint8 并通过 CDN 提供。每个预测器的总包大小约为 2 MB。

类型安全的主题

每个主题导出强类型的颜色枚举和图层配置:

import type { ReactAvatarItem } from '@avatune/types';
import { createTheme, fromHead } from '@avatune/theme-builder';

const theme = createTheme()
  .withStyle({ size: 500, borderRadius: '100%' })
  .addColors('hair', [HairColors.Black, HairColors.Brown, HairColors.Blond])
  .addColors('skin', [SkinTones.Light, SkinTones.Medium, SkinTones.Dark])
  .connectColors('head', ['ears', 'nose']) // ears + nose inherit head's skin color
  .setOptional('glasses')
  .mapPrediction('hairColor', 'brown', [HairColors.Brown, HairColors.Auburn])
  .toFramework()
  .build();

TypeScript 能准确知道每个主题下哪些颜色和项目是有效的——不再有运行时的意外。

自定义 Rsbuild 插件用于 SVG → 组件

在多个框架中处理 500+ SVG 文件时,ID 和 mask 冲突会成为问题。两个 Rsbuild 插件可以解决此问题:

它们将 SVG 文件转换为对应框架的组件,并具备:

  • 通过 SVGO 自动前缀化 ID(避免冲突)
  • 保留 viewBox 以实现响应式缩放
  • 基于查询的导入方式,灵活可控
import Icon from './icon.svg?svelte';
import Icon from './icon.svg?vue';

技术栈

  • Turborepo – 单体仓库编排与缓存
  • Bun – 包管理器(≈2 倍更快的安装)
  • Rspack / Rslib – 构建工具(≈10 倍快于 webpack)
  • Biome – Lint + 格式化(取代 ESLint + Prettier)
  • uv – Python 包管理器(10–100 倍快于 pip)

该单体仓库包含 10 套主题、5 种框架渲染器(React、Vue、Svelte、Vanilla、React Native)以及 5 个机器学习预测器。

试一试

  • 网站 + 文档:
  • GitHub:
  • 演示平台:
npm install @avatune/react @avatune/pacovqzz-theme

这些机器学习模型仍属实验性质——欢迎提供关于准确性和性能的反馈。如果你有兴趣训练更好的属性预测器,欢迎提交 PR。

Back to Blog

相关文章

阅读更多 »