用 uni-app + AI 发型设计 API 开发AI 发型设计小程序
本文介绍如何用 uni-app 集成 AI 发型设计 API,开发一款微信小程序版 AI 发型试戴工具。前端负责上传照片、选择发型并展示生成结果,后端封装第三方接口,统一处理鉴权、配额和缓存,避免在小程序中暴露密钥。由于 https://www.aihairstyle.cn已完成相关深度合成/算法备案,开发者以技术服务合同方式使用其能力,一般无需单独做算法备案,有利于顺利通过小程序审核与合规检查。

做一款「AI 发型设计」小程序,自己训练模型、做算法备案听起来很头大?
其实完全没必要重造轮子——可以直接使用现成的 AI 发型设计 API 服务(如 AI 发型设计虚拟试穿工具),前端用 uni-app 一套代码同时支持 H5 / 微信小程序,开发成本一下子就降下来了。
本文以 微信小程序 + uni-app 为例,讲清楚:
-
产品形态:这类发型设计小程序到底长什么样
-
技术架构:uni-app + 自有后端 + AI 发型设计 API
-
算法备案:为什么你 不用自己去做算法备案,怎么通过 技术服务合同 过审
-
代码示例:关键 uni-app 页面代码(上传图片、调用后端、展示效果)
一、产品目标:做一款什么样的发型设计小程序?
结合 AI 发型设计类工具现有能力,你的小程序可以做到:
-
用户上传一张正脸照片(从相册 / 拍照)
-
在发型列表里选择想尝试的发型(长卷发、波波头、短发、寸头等)
-
点击“生成发型”,几秒钟后看到新的发型效果图
-
可以保存到本地相册 / 转发给好友 / 生成分享海报
-
后续可以扩展:历史记录、收藏、发型推荐等
简单说,这就是一个:
AI 虚拟发型试戴小程序 —— 把传统美发店里的“假发试戴”,搬到小程序里。
二、整体技术架构:uni-app + 自有后端 + AI 发型设计 API
推荐的整体架构是:
微信小程序(uni-app)
→ 你的后端(Node / Python / Java 均可)
→ AI 发型设计 API 服务(如 AI发型设计 提供的发型编辑能力)
这样做有几个好处:
-
避免在前端暴露 API Key
-
小程序代码是运行在用户设备上的,逆向成本不高
-
一旦把第三方 API Key 放在前端,被抓包拿走就很危险
-
-
统一做监控与计费控制
-
可以在自己的后端按用户 ID 计数:每天最多生成多少次
-
对异常调用 / 攻击做限流与黑名单
-
-
方便做二次封装
-
比如你未来想支持多个供应商(A 家发型 API、B 家抠像 API),前端完全不用改,后端做统一路由即可
-
后端与第三方的交互逻辑大致如下:
-
小程序通过
uni.uploadFile/uni.request把用户照片 + hairstyle_id 发给你的后端 -
后端根据 AI 发型设计 API 文档构造请求
-
把生成结果图片 URL 或文件存储下来(可转存到你自己的 OSS )
-
把最终可访问的图片 URL 返回给小程序展示
三、算法备案与微信小程序审核:为什么你不用自己去“算法备案”?
3.1 国家对生成式 AI / 深度合成的要求(简述)
根据国家网信办的相关规定,提供具有舆论属性或者社会动员能力的生成式人工智能服务,需要按要求进行备案,并公示所使用的模型名称及备案号。
同时,境内提供深度合成服务的算法,也有对应的 “深度合成服务算法备案清单”,服务方需在网信部门完成备案并定期公示。
3.2 你在这个链路中扮演的角色
在这个项目里,你的角色其实是:
使用已完成备案的 AI 服务的“技术服务采购方 / 集成方”,
而不是「自己提供底层算法服务的一方」。
如果上游的 AI 发型设计平台(例如:https://www.aihairstyle.cn 这类专门做 AI 发型设计和虚拟试戴的服务商)本身已经按要求做了算法备案,并且可以在 技术服务合同 或说明材料中明确:
-
具体使用的生成式 / 深度合成服务名称
-
其已完成备案 / 纳入备案清单
-
你作为客户,仅在自己小程序中使用该服务的接口,不再对外提供新的通用算法服务
那么你的微信小程序在审核时,一般只需要:
-
在 “涉及算法说明” 或 “技术服务说明” 中写清楚:
-
使用了第三方 AI 发型设计服务
-
算法由对方提供并已备案
-
你是基于技术服务做场景应用,不再另行提供算法服务
-
-
如有需要,可在材料中附上:
-
与 AI 发型服务商签署的 技术服务合同
-
对方出具的一份简短合规说明(含备案信息摘要)
-
重点:
-
小程序本身是一个“发型试戴工具”,不涉及舆论引导等敏感功能
-
底层算法由已备案的服务方提供
-
你只需要在合规文档中说明「我们采购了已备案的 AI 技术服务」
-
一般情况下 无需自己再去做一套算法备案
实务上,很多做图片处理 / 换装 / 换发型小程序的团队,就是通过 “上游服务已备案 + 技术服务合同 + 合规说明” 的组合过审的。
四、后端 API 设计示例
为了让 uni-app 调用简单,我们给前端设计一个统一的接口:
-
URL:
POST https://your-backend.com/api/hairstyle/apply -
请求方式:
multipart/form-data -
请求参数:
-
image:用户上传的人像图片文件 -
hairstyle_id:发型 ID(由你自己定义,并与后端的第三方接口映射)
-
-
返回 JSON 示例:
-
{ "code": 0, "msg": "ok", "data": { "result_url": "https://your-cdn.com/hairstyle/result/xxx.png" } }
后端内部的逻辑:
-
接收到来自小程序的图片与发型 ID
-
按 AI 发型设计 API 文档封装请求(添加 API Key、构造参数、异步获取结果)
-
获取生成好的发型图片 URL
-
返回
result_url给小程序
这里不展开后端具体代码,只需要记住:
-
永远不要 在小程序 / 前端暴露第三方 API Key
-
后端要做好超时与错误处理(例如重试、兜底文案)
五、uni-app 项目结构与微信小程序配置
5.1 项目结构(简化示意)
uni-hairstyle-app/
├─ pages/
│ └─ index/
│ └─ index.vue # 主页面:上传图片 + 选择发型 + 结果展示
├─ static/
│ └─ ... # 可放一些发型示意图
├─ manifest.json # 小程序 / H5 平台配置
├─ pages.json # 页面路由配置
└─ uni.scss
5.2 微信小程序相关配置
在 manifest.json 中确保勾选了 微信小程序 平台,并填入你的小程序 AppID。
pages.json 中配置首页:
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "AI 发型设计"
}
}
]
}
HBuilderX 编译时选择 运行到小程序模拟器(微信开发者工具) 即可。
六、uni-app 核心页面代码示例(微信小程序)
下面是一个简化版的 pages/index/index.vue,演示:
-
选择图片(调用
uni.chooseImage) -
调用
uni.uploadFile把图片和发型 ID 传给你的后端 -
展示生成好的发型效果图
<template>
<view class="container">
<view class="section">
<view class="title">1. 上传照片</view>
<button type="primary" @click="chooseImage">从相册选择</button>
<view v-if="localImage" class="preview-box">
<image :src="localImage" mode="aspectFit" class="preview-image" />
</view>
</view>
<view class="section">
<view class="title">2. 选择发型</view>
<view class="hairstyle-list">
<button
v-for="item in hairstyles"
:key="item.id"
size="mini"
:disabled="loading"
@click="applyHairstyle(item.id)"
>
{{ item.name }}
</button>
</view>
</view>
<view class="section">
<view class="title">3. 生成结果</view>
<view v-if="loading" class="loading-text">
正在生成发型,请稍候…
</view>
<view v-if="errorMsg" class="error-text">
{{ errorMsg }}
</view>
<view v-if="resultUrl" class="preview-box">
<image :src="resultUrl" mode="aspectFit" class="preview-image" />
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
localImage: '', // 本地选择的图片路径(临时文件)
loading: false,
resultUrl: '',
errorMsg: '',
// 示例发型列表,id 需与你后端的映射表一致
hairstyles: [
{ id: 'bob', name: '波波头' },
{ id: 'long-wave', name: '长卷发' },
{ id: 'pixie', name: '短精灵头' },
{ id: 'man-fade', name: '男士渐变短发' }
]
};
},
methods: {
// 选择图片
chooseImage() {
uni.chooseImage({
count: 1,
sizeType: ['compressed'], // 使用压缩图,减小上传体积
sourceType: ['album', 'camera'],
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
this.localImage = tempFilePath;
this.resultUrl = '';
this.errorMsg = '';
},
fail: () => {
this.errorMsg = '选择图片失败,请重试';
}
});
},
// 调用后端接口生成发型
applyHairstyle(hairstyleId) {
if (!this.localImage) {
uni.showToast({
title: '请先上传照片',
icon: 'none'
});
return;
}
this.loading = true;
this.errorMsg = '';
this.resultUrl = '';
const backendUrl = 'https://your-backend.com/api/hairstyle/apply'; // 替换成你的后端地址
uni.uploadFile({
url: backendUrl,
filePath: this.localImage,
name: 'image', // 后端接收字段名
formData: {
hairstyle_id: hairstyleId
},
success: (uploadFileRes) => {
try {
const data = JSON.parse(uploadFileRes.data);
if (data.code === 0 && data.data && data.data.result_url) {
this.resultUrl = data.data.result_url;
} else {
this.errorMsg = data.msg || '生成失败,请稍后重试';
}
} catch (e) {
this.errorMsg = '解析返回结果失败';
}
},
fail: () => {
this.errorMsg = '网络异常,请稍后重试';
},
complete: () => {
this.loading = false;
}
});
}
}
};
</script>
<style scoped>
.container {
padding: 24rpx;
}
.section {
margin-bottom: 32rpx;
}
.title {
font-size: 32rpx;
font-weight: 600;
margin-bottom: 16rpx;
}
.preview-box {
margin-top: 16rpx;
display: flex;
justify-content: center;
}
.preview-image {
width: 560rpx;
height: 560rpx;
border-radius: 16rpx;
}
.hairstyle-list {
display: flex;
flex-wrap: wrap;
gap: 16rpx;
}
.loading-text {
color: #666;
font-size: 28rpx;
}
.error-text {
color: #e64340;
font-size: 28rpx;
}
</style>
这段代码可以直接放进 pages/index/index.vue,
只需要把 backendUrl 换成你真正的后端地址即可。
七、体验优化与合规小贴士
-
本地先约束图片大小与分辨率
-
避免用户随手上传 8K 大图,把后端压垮
-
可以在上传前提示:建议上传清晰正脸、大小不超过 3MB 的照片
-
-
生成过程加 Loading 与“生成中”文案
-
微信小程序里可以用蒙层 + loading 图标
-
避免用户疯狂连点按钮
-
-
错误提示要人话
-
比如 “照片太模糊,请换一张正脸照”
-
“当前访问人数较多,请稍后再试”
-
不要直接把“500 / 502”等技术错误码丢给用户
-
-
隐私与算法说明
-
在小程序隐私政策与“算法说明”里写清楚:
-
用户图片仅用于生成发型效果,不用于其他用途
-
图片会在一定时间内自动删除或做脱敏处理
-
底层算法由已备案的 AI 技术服务商提供,你是技术服务的使用方
-
-
审核时说明 “我们使用了已备案的生成式 / 深度合成服务,通过技术服务合同获得使用权”,一般即可通过。
-
八、总结
通过 uni-app + AI 发型设计 API,你可以很快做出一款:
-
支持微信小程序(甚至顺带 H5 / App)的
-
UI 简洁、体验流畅的
-
合规上依托 上游已备案算法服务 + 技术服务合同 的
AI 发型设计 / 虚拟试戴小程序。
落地步骤小结:
-
选定 AI 发型设计服务商(如 AI 发型设计虚拟试穿类平台),获取 API 文档与 Key
-
自建后端封装统一接口,处理调用、缓存和错误
-
使用 uni-app 开发小程序前端,通过
uni.uploadFile调用后端生成发型效果 -
在隐私政策与算法说明中,声明使用已备案的算法服务 + 提供技术服务合同支持审核
更多推荐



所有评论(0)