一、创作背景与灵感来源
非遗数字传统艺术馆的创作灵感源自陈景轩同学在故宫参观时对《清明上河图》的深刻体验,以及对于偏远山区孩子无法便捷接触和欣赏这些珍贵文物的思考。为了打破地理限制,让更多人能够领略中华文明的魅力,牛思诚和陈景轩同学共同设计了这一创新科技作品。
二、作品功能与技术实现
智能语音导览:
作品内置智能语音导览助手,后续可以尝试接入deepseek模型通过语音指令与系统进行交互,如说出“带我看看三星堆的秘密”等指令,系统即会以三维动画形式展示相关文物细节,提供沉浸式的观赏体验。
三维动画展示:
利用伪全息投影动画技术,对文物进行细致入微的展示,如拆北京非遗展品细节,使用户能够直观感受文物的构造和历史背景。
四、作品意义与价值
文化传承与创新:
非遗数字传统艺术馆不仅是一次科技与文化的融合实践,更是对中华文明传承方式的新探索。它通过数字技术,使历史与科技紧密结合,为用户带来全新的文化体验。
教育普及作用:
作品打破了地域限制,使偏远地区的孩子也能接触到精美的文物和非遗文化,有助于提升大众对中华文明的认知和保护意识。
青少年创新能力展示:
牛思诚和陈景轩同学通过这一作品,展现了青少年在科技与文化融合领域的独特见解和创新能力,为同龄人树立了榜样。

材料清单
- 行空板 X1
- USB喇叭 X1
代码
# -*- coding: UTF-8 -*-
# MindPlus
# Python
import time
import siot
from unihiker import GUI
from unihiker import Audio
from pinpong.board import Board
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *
import base64
from io import BytesIO
from PIL import Image
from pinpong.libs.dfrobot_speech_synthesis import DFRobot_SpeechSynthesis_I2C
# 事件回调函数
def button_click1():
wenzi1.remove()
wenzi2.remove()
anniu.remove()
wenzi3.remove()
bg.config(x=0)
zan.config(x=100)
p_gravitysynthesis.speak("你好,我是你的智能语音导览助手小贝,按下互动键可以和我互动哦")
time.sleep(0.5)
p_gravitysynthesis.speak("欢迎踏入这座连接过去与未来的数字殿堂!在这里,每一帧画面都是穿越时空的邀请函,每一处细节都跳动着非遗文化的生命脉搏。请跟随我们的数字导游小贝,开启一场前所未有的文化探秘之旅。")
time.sleep(0.5)
p_gravitysynthesis.speak("行空板左右倾斜可以控制我们的视角,现在你可以尝试一下")
global flag
flag = 1
u_audio.start_play("a1.mp3")
def button_click2():
global zan_flag
global count
global zan_y
zan_flag = 1
zan_y = 220
count = (count + 1)
jishu.config(text=count)
if (count == 1):
p_gravitysynthesis.speak("请将镜头推近沙燕风筝穿云画面")
time.sleep(1)
siot.publish_save(topic="siot/全息投影", data=encode_image("shayan.jpg"))
p_gravitysynthesis.speak("看那云端翱翔的沙燕风筝,它的竹骨架构精密如古老榫卯,0.1毫米的绘制精度让每根竹篾都蕴含匠人指尖的温度。")
p_gravitysynthesis.speak("这可不是普通的风筝,它正带着我们飞越老北京的天际线。")
if (count == 2):
siot.publish_save(topic="siot/全息投影", data=encode_image("tianfan.jpg"))
p_gravitysynthesis.speak("切换至天桥中幡舞动场景")
p_gravitysynthesis.speak("二十米高的中幡在艺人掌心起舞,幡面上《燕京岁时记》的市井百态正随着流苏摇曳重生。注意看幡顶那抹流苏,它们正以0.5厘米为刻度,在数字风中书写着\"龙腾虎跃\"的笔意。")
if (count == 3):
siot.publish_save(topic="siot/全息投影", data=encode_image("dagu.jpg"))
p_gravitysynthesis.speak("请将镜头下移至太平鼓队")
time.sleep(0.5)
p_gravitysynthesis.speak("听!鼓点如骤雨击打心弦,这是金代狩猎图在鼓面上的数字化重生。马尾毛鼓槌击打瞬间的0.5厘米形变,在虚拟空间里激荡出跨越千年的共鸣。")
if (count == 4):
siot.publish_save(topic="siot/全息投影", data=encode_image("jingtailan.jpg"))
p_gravitysynthesis.speak("接下来请聚焦景泰蓝点蓝特写")
time.sleep(0.5)
p_gravitysynthesis.speak("此刻我们正透过匠人的瞳孔,见证七色釉料在铜胎上的涅槃。镊子尖端那粒孔雀蓝釉料,正以12层渐变演绎\"天青过雨\"的绝美,这是数字技术才能捕捉的色彩密码。")
if (count == 5):
siot.publish_save(topic="siot/全息投影", data=encode_image("jingtailan.jpg"))
p_gravitysynthesis.speak("我们将切换至京绣现场")
time.sleep(0.5)
p_gravitysynthesis.speak("绣娘指尖流转的不仅是丝线,更是0.2毫米精度的光阴。您看那龙纹鳞片在绢帛上泛起的珠光,正是\"平金打籽\"针法与数字渲染的完美联姻。")
if (count == 6):
siot.publish_save(topic="siot/全息投影", data=encode_image("tuye.jpg"))
p_gravitysynthesis.speak("转向兔儿爷摊位")
time.sleep(0.5)
p_gravitysynthesis.speak("从泥胚到彩塑,竹刀在数字黏土上刻下0.3毫米的痕迹。三青四绿的传统配色在虚拟画布上流转,仿佛能闻到老北京胡同里飘来的桐油香")
u_gui=GUI()
u_audio = Audio()
siot.init(client_id="7201742593200391",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
Board().begin()
siot.connect()
siot.loop()
siot.getsubscribe(topic="siot/全息投影")
def frame2base64(frame):
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame) #将每一帧转为Image
output_buffer = BytesIO() #创建一个BytesIO
img.save(output_buffer, format='JPEG') #写入output_buffer
byte_data = output_buffer.getvalue() #在内存中读取
base64_data = base64.b64encode(byte_data) #转为BASE64
return base64_data #转码成功 返回base64编码
def base642base64(frame):
data=str('data:image/png;base64,')
base64data = str(frame2base64(frame))
framedata = base64data[2:(len(base64data)-1)]
base642base64_data = data + str(framedata)
return base642base64_data
def encode_image(filename):
ext = filename.split(".")[-1]
with open(filename, "rb") as f:
img = f.read()
data = base64.b64encode(img).decode()
src = "data:image/{ext};base64,{data}".format(ext=ext, data=data)
return src
p_gravitysynthesis = DFRobot_SpeechSynthesis_I2C()
p_gravitysynthesis.begin(p_gravitysynthesis.V2)
wenzi1=u_gui.draw_text(text="欢迎来到非遗互动博物馆",x=25,y=10,font_size=12, color="#000000")
wenzi2=u_gui.draw_text(text="——互动体验",x=65,y=40,font_size=12, color="#000000")
wenzi3=u_gui.draw_image(image="logo.png",x=40,y=75)
wenzi3.config(w=160)
anniu=u_gui.add_button(text="点击按钮进入",x=60,y=255,w=120,h=30,onclick=button_click1)
bg=u_gui.draw_image(image="bg.png",x=320,y=0)
bg.config(h=320)
zan=u_gui.add_button(text="互动",x=230,y=260,w=60,h=50,onclick=button_click2)
zantu=u_gui.draw_image(image="赞1.png",x=100,y=320)
bgxZuoBiao = 0
flag = 0
zan_y = 0
zan_flag = 0
count = 0
jishu=u_gui.draw_text(text=count,x=210,y=5,font_size=12, color="#FF0000")
# 循环内部
# 控制点赞图片不断上升
# 检测行空板加速度y值,左右倾斜控制画卷
while True:
while not ((flag == 1)):
pass
if (zan_flag == 1):
zantu.config(y=zan_y)
zan_y = (zan_y - 1)
JiaSuDuZhi = accelerometer.get_y()
if ((0.1 < JiaSuDuZhi) and (bgxZuoBiao < 0)):
bg.config(x=bgxZuoBiao)
bgxZuoBiao = (bgxZuoBiao + 1)
if ((JiaSuDuZhi < -0.1) and (-410 < bgxZuoBiao)):
bg.config(x=bgxZuoBiao)
bgxZuoBiao = (bgxZuoBiao - 1)
附件
评论