AIGC守护老祖宗的宝贝:数字复原非遗技艺全攻略
AIGC守护老祖宗的宝贝:数字复原非遗技艺全攻略
AIGC守护老祖宗的宝贝:数字复原非遗技艺全攻略
“哥,你这不是让AI给兵马俑开美颜吗?”
“开不开美颜另说,先把那条裂缝给我补回去,别补成双眼皮就行。”
刚听说用AI搞文物修复?别急着划走!这真不是玄学
前阵子我在西安搬砖,隔壁文保院的大姐拎着一个碎成七瓣的唐代陶俑来找我:“听说你们搞前端的,能用AI给拼回去不?”
我当时差点把嘴里的冰峰汽水喷出来——我他妈连自家CSS都拼不利索,还拼唐朝人?
结果大姐一句话把我噎回去:“你们不是天天嚷嚷‘生成式人工智能’吗?生成个完整俑头,应该比生成老婆简单吧?”
我当场社死,只能硬着头皮说“我试试”。
试完我才发现:
AIGC 这玩意儿,在文保圈里已经不是“概念”,是“救命稻草”。
碎成渣的壁画、烧掉角的《兰亭序》、被熊孩子抠掉眼睛的皮影……全靠它一点点“脑补”。
但!是!
AI 不是神仙,它更像一个醉酒的临摹师傅——你得先给他打好格子、调好颜料、再递根烟,他才不给你把关公画成蔡徐坤。
AIGC到底能干啥——从破陶罐到千年壁画全给你“P”回来
先放句人话:AIGC 在文保里,核心就干三件事:补全、上色、超分。
听着像美图三连,但每一步都把考古学家按在地上摩擦。
1. 补全:碎成渣也能“脑补”
传统修复靠石膏、靠竹签、靠老师傅 40 年经验;AI 靠“猜”。
猜也不是瞎猜,是拿同年代、同窑口、同形制的完整器物做“提示词”,让模型学“唐朝陶俑头一般长啥样”。
技术栈:
- 点云补全:Open3D + PointNet++
- 图像 inpainting:Stable Diffusion + ControlNet(canny 深度图)
- 文本提示:BLIP 先给碎片打标签,再喂给 diffusion
代码片段 1:把碎俑照片扔给 diffusion 补个脑袋
// 前端上传 + 调用 inpainting 接口constuploadFragment=async(file: File)=>{// 1. 先压缩到 2048,省得显存爆炸const blob =awaitcompressImage(file,{ maxWidth:2048, quality:0.85});const form =newFormData(); form.append('image', blob); form.append('mask',awaitgenMask(blob));// 黑色遮罩:缺哪补哪 form.append('prompt','Tang dynasty pottery warrior head, terracotta, 8k, museum lighting'); form.append('steps','50'); form.append('cfg','12');const res =awaitfetch('/api/sd/inpaint',{ method:'POST', body: form });const{ url }=await res.json();// 返回补完的图return url;};// 顺手把遮罩涂黑asyncfunctiongenMask(blob: Blob):Promise<Blob>{const img =awaitcreateImageBitmap(blob);const cv =awaitimport('opencv.js');const mat = cv.imread(img);const mask =newcv.Mat.zeros(mat.rows, mat.cols, cv.CV_8UC1);// 简单示例:手动圈个矩形空const roi =newcv.Rect(100,50,200,250);// 头顶缺一块 mask.roi(roi).setTo(newcv.Scalar(255));const result =awaitcanvasToBlob(maskToCanvas(mask)); mat.delete(); mask.delete();return result;}效果:
原图只剩半张脸,AI 给你“长出”另外半张,连唐朝人的双下巴都没丢。
2. 上色:黑白壁画一键“彩妆”
敦煌 57 窟那幅《说法图》,最早被伯希和拍走的时候只有黑白照片。
现在用 AIGC 做“风格化上色”,不是瞎涂,而是先让模型学同年代颜料成分:
- 青金石→蓝色
- 朱砂→红色
- 氯铜矿→绿色
技术栈:
- 线稿上色:Stable Diffusion + AnimeLineart 模型
- 颜料约束:把多光谱数据做成调色板,embedding 进 prompt
- 交互微调:前端用 Fabric.js 做“笔刷”,让专家手动改两笔,再送回去 img2img
代码片段 2:给壁画线稿上色,还能手动微刷
<template> <div> <canvas ref="canvas" /> <button @click="colorize">AI 上色</button> <button @click="sendCorrection">提交微调</button> </div> </template> <script setup> import { onMounted, ref } from 'vue'; import { fabric } from 'fabric'; import { colorizeLineart, correctionImg2Img } from '@/api/sd'; const canvas = ref(null); let fab: fabric.Canvas; onMounted(() => { fab = new fabric.Canvas(canvas.value, { isDrawingMode: true }); fab.freeDrawingBrush.width = 8; fab.freeDrawingBrush.color = '#ff0000'; // 专家手动补红 }); async function colorize() { const lineart = await loadImage('/assets/dunhuang_lineart.png'); fab.setBackgroundImage(lineart, fab.renderAll.bind(fab)); const blob = await canvasToBlob(fab.lowerCanvasEl); const colored = await colorizeLineart(blob, 'Dunhuang mural, mineral colors, 8k'); fabric.Image.fromURL(colored, img => { fab.add(img); fab.renderAll(); }); } async function sendCorrection() { const userBlob = await canvasToBlob(fab.lowerCanvasEl); const corrected = await correctionImg2Img(userBlob, 0.55); // denoise 0.55 fabric.Image.fromURL(corrected, img => { fab.clear(); fab.add(img); fab.renderAll(); }); } </script> 效果:
黑白→ mineral 质感,连脸颊的“褪色”都给你做旧出来,专家看了都说“比我用 Photoshop 涂三天还细”。
3. 超分:肉眼马赛克→ 8K 显微镜
很多壁画被相机年代限制,只有 800×600。
AI 直接给你拉到 8K,连“起甲”的裂缝都看得清。
技术栈:
- Real-ESRGAN 模型,x4 超分
- 前端用 wasm 跑轻量版,先预览再决定要不要云端 16K
- 瓦片切片:用 OpenSeadragon 展示,别让用户一下把流量跑没
代码片段 3:浏览器里 wasm 超分,省流量
import{ initESRGAN }from'@wasm/realesrgan';let model;onmessage=async(e)=>{if(!model) model =awaitinitESRGAN('models/realesrgan-x4.wasm');const bitmap =awaitcreateImageBitmap(e.data.file);const low = cv.imread(bitmap);const high =await model.enhance(low);const blob =awaitcanvasToBlob(matToCanvas(high));postMessage({ blob });};效果:
流量省 70%,用户放大到 1000% 还能看清“朱砂里的一颗气泡”,甲方爸爸直接给你鼓掌。
手把手拆解:AIGC在文保里那些骚操作到底是怎么跑起来的
上面吹得天花乱坠,到底怎么落地?
我画了个“文保 AIGC 五连鞭”流程图,前端仔看完就能抄作业:
- 素材入库
多光谱、三维扫描、高清 RGB 全量上传。
前端用 Uppy + Tus 断点续传,100G 的碑刻包 20 分钟传完。 - 专家标注
用 Recogito.js 给壁画“画圈”:这是“莲花”,那是“迦陵频伽”。
标注完直接导出 JSON-LD,喂给 CLIP 做微调。 - 模型训练
不是从头炼,是用 LoRA 在 Stable Diffusion 上“小步快跑”。
30 张样本就能出“唐俑风格”专用模型,训练 15 分钟,显存 12G 够吃。 - 人机协同
前端搭个“画板”,专家用画笔改两笔,实时 img2img。
把“AI 猜的”和“专家改的”混一起,再送回去当新样本——闭环了。 - 数字归档
修复结果写回 IIIF 标准,直接进博物馆数字仓库。
观众手机扫码,AR 看“原貌”,还能滑动对比“修复前后”。
吹完牛也得说实话:AIGC救得了敦煌,但救不了所有坑
坑 1:数据集比甲方还难伺候
你想让 AI 学“北魏蓝”,结果博物馆只给你 8 张,还全是反光。
LoRA 再牛也救不了,只能厚着脸皮问隔壁故宫借图,借完发现版权 79 年,律师函比壁画还厚。
坑 2:风格漂移
唐三彩秒变赛博朋克,是因为 prompt 里多写了个“vivid”。
AI 以为“vivid”就是霓虹灯,直接把骆驼染成电音蓝。
解决:
- 负向 prompt 写“no neon, no cyber, no LED”
- 加颜色卡:把“钴蓝”用十六进制写死,#0047AB,谁改谁秃头
坑 3:专家不信你
老教授看见 AI 补的“飞天”多了一条大腿,当场翻脸:“我研究 40 年,飞天没大腿!”
你只能赔笑:“您说得对,我让它截肢。”
解决:
- 每一步都留“可回溯图层”
- 把“专家手动笔刷”存成独立 mask,AI 再牛也不敢覆盖
我在项目里踩过的雷:AI把唐三彩生成成赛博朋克风了怎么办
真事。
那天我熬夜写 prompt:“Tang sancai horse, vivid, 8k”。
生成完一看,马鬃毛是荧光绿,马鞍闪着 RGB,跟蹦迪现场似的。
甲方爸爸当场沉默三秒,说:“这马……是刚从电音节回来?”
我连夜改 prompt:
Tang sancai horse, mineral glaze, low saturation, no neon, no cyber, palette:#718662,#3e5d52,#a9c1b5 再把多光谱采样图塞进 controlNet,权重 1.2,才把那股“夜店风”按下去。
第二天教授看完点头:“这马正常了,像刚出土,不像刚蹦迪。”
教训:
颜色关键词别用“vivid”“bright”,文保圈不吃这套,直接甩十六进制,AI 再蠢也认得码。
老手私藏技巧:让AI乖乖听话复原古画不乱加美颜滤镜
- 负向 prompt 模板先存好
no modern, no photoshop, no Instagram filter, no overexposure, no skin smoothing, no AI illustration style - 用“考古报告”当 prompt
把《敦煌石窟报告》里原文粘一句:“色呈青灰,有龟裂,局部剥落”,比“old”管用 100 倍。
AI 一看“龟裂”,立刻给你画裂缝,比专家手画还细致。 - 颜色卡 Embedding
把馆藏颜料做成 32×32 色板,喂给 embedding,命名“tang-mineral-v1”。
以后 prompt 直接写“”,AI 再也不敢给你赛博朋克。 - “专家笔刷”权重拉满
前端画板里,专家手动涂的权重设为 1.5,AI 生成区 0.7。
确保“人”永远盖过“机”,不然教授掀桌。
下次甲方再要“有文化感的AI方案”,直接甩他这套组合拳
PPT 我都给你写好了,复制粘贴即可:
- 封面:
“AI 不是魔法,是考古工地上新来的小工,扛不动洛阳铲,但能帮你把缺的瓦片画出来。” - 技术路线:
- 多光谱采集 → IIIF 标准
- LoRA 微调 → 15 分钟出专属风格模型
- 人机协同画板 → 专家实时改图
- wasm 超分 → 观众手机 8K 看裂缝
- 闭环归档 → 修复即入库,永绝后患
- 落地案例:
- 敦煌 57 窟上色,专家验收一次过
- 唐三彩拼头,误差 <0.3 mm,3D 打印直接装俑
- 皮影戏脸部补全,老艺人看完沉默十秒:“把我手艺还回来了。”
- 报价:
- 软件授权:0 元(全开源)
- 训练显卡:RTX4090 租一周 800 元
- 专家工时:3 人日 × 2000 元
- 合计:比传统手工修复便宜 70%,时间从 3 个月缩到 10 天
- 结尾金句:
“AI 不会抢文物修复师的饭碗,它只是个夜班实习生,帮老师傅多拧几颗螺丝。
真正的灵魂,还是那双手、那盏灯、和那口传承了两千年的气。”
写到这儿,我键盘已经冒烟,咖啡续了三杯。
如果你明天就要给甲方讲方案,把上面这段复制过去,足够让他们在会议室里“文化高潮”十五分钟。
剩下的?
把代码跑通,把 prompt 调稳,把专家哄好。
老祖宗的宝贝,就能在硬盘里再活一次。
哥儿们,冲!
