这个项目属于哪个课程 | 2024数据采集与融合技术实践 |
---|---|
组名 | 在大大的数据里面挖呀挖呀挖 |
项目简介 | 项目名称:城市记忆 Logo:
项目需求:整合城市历史文化资源:需要以交互式的方式展示城市的历史发展、新旧照片、方言特色以及名人故事等内容。增强用户参与感:为用户提供交互性体验,如照片上色、语音生成、内容检索等。利用多媒体技术提升展示效果:通过地图、视频、音频、图像等多种形式,全方位展示城市记忆,构建沉浸式体验。 项目开展技术路线:python、html、JavaScript、flask、mysql |
团队成员学号 | 102202114农晨曦,102202118杨美荔、102202144傅钰、102202147赖越、102202150魏雨萱、102202152张静雯 |
这个项目的目标 | 建立多模块融合的城市记忆平台:打造一个集历史资源展示、文化传承和科技互动为一体的平台。 提升用户体验与交互性:通过地图导航、名人故事展示、黑白照片上色和方言音频生成等功能,让用户更生动地了解城市文化。 促进文化保护与传承:利用现代技术对城市历史资源进行数字化存档,帮助大众更便捷地探索与分享城市记忆。 探索跨学科技术融合:结合深度学习、多模态技术与地理信息系统等技术,提升文化展示的深度与广度。 |
其他参考文献 | 近20 年城市记忆研究综述 城市记忆与城市形态——从心理学、社会学视角探讨城市历史文化的延续 星火认知大模型Web API文档 |
团队gitee链接 | 城市记忆-gitee链接 |
综合设计——多源异构数据采集与融合应用综合实践
项目介绍
项目Logo
项目背景
城市记忆承载着一座城市的历史、文化与情感,其背后的故事和影像是研究城市变迁与文化保护的重要资源。然而,许多城市的历史资源缺乏系统化的整理与展示,普通大众难以方便地接触这些内容。随着人工智能与多媒体技术的快速发展,利用技术手段将历史内容与现代形式结合,可以更好地传递城市文化,增强公众的文化认同感。
功能介绍
- 时空地图
功能描述:
用户通过交互式地图探索城市历史文化资源。
点击地图标记点:显示对应城市的方言音频、新旧照片对比、历史发展时间轴信息。
查看名人故事:点击标记点的“名人故事”按钮跳转到城市的名人集页面,展示与该城市相关的名人列表。
名人故事展示:点击名人列表中的名人姓名,可以查看详细的名人故事,包括其生平事迹、贡献和与城市的关联性。
技术实现:
使用 高德地图 API 提供地图展示与交互功能。
数据库存储包含城市地理信息及相关文化资源。
名人资源使用Spark 4.0 Ultra搜索并整理名人集和名人故事。 - 照片上色
功能描述:
用户上传黑白照片,系统自动将其转换为色彩丰富的上色照片,直观展现历史影像的色彩还原效果。
支持多种照片格式,快速处理。
生成对比图,展示黑白原图与上色图的差异。
技术实现:
使用 百度图片上色接口 提供高精度的图片上色服务。
后端实现文件上传和上色结果的高效存储与展示。 - 方言之声
功能描述:
用户输入一段文本并选择城市名称,系统自动生成对应城市方言的音频文件。
支持多种方言生成,包括普通话、粤语、东北话等。
生成音频后提供播放功能,用户可以在线收听或下载保存。
技术实现:
使用 讯飞星火语音合成 API 实现高质量的多方言语音合成。 - 时光影像
功能描述:
用户输入城市名称,系统搜索该城市的老视频并在页面中展示。
视频内容涵盖城市建设、名胜古迹、历史活动等主题。
视频可在线播放,支持用户分享和下载功能。
技术实现:
后端通过查询 MySQL 数据库,根据用户输入的城市关键词匹配相关视频链接。
视频资源通过动态渲染展示在页面,支持跨平台兼容的播放功能。
技术路线
- 前端
使用 HTML + CSS + JavaScript 开发实现页面布局与动画效果框架,支持动态渲染和响应式设计,兼容多种设备(PC 和移动端),提升视觉吸引力。
高德地图 API 集成,用于实现地图标记与交互功能。 - 后端
基于 Flask 框架开发 RESTful API,与前端交互。
集成第三方服务接口(高德地图API、百度AI图片上色接口、讯飞星火语音合成API、Spark4.0 UltraAPI)。
提供与 MySQL 数据库的高效交互,支持查询与数据更新。 - 数据库
使用 MySQL 数据库存储视频链接、名人信息和其他相关数据。
提供灵活的表结构设计,便于数据检索与扩展。 - AI 技术
图片上色:集成百度AI图片上色接口,实现黑白图像智能上色。
语音合成:调用讯飞星火语音合成API生成高质量方言语音。
数据检索:借助 Spark4.0 UltraAPI 快速检索与展示名人集和名人故事数据。 - 爬虫数据采集
使用 Python 爬虫技术 (如 Scrapy、Requests、BeautifulSoup 等)从各类公共数据源(如百科、城市历史网站、档案馆、哔哩哔哩)抓取城市历史数据、名人故事、黑白照片、老视频等内容,并存入数据库供后续处理和展示。
在搜索到名人之后使用Selenim同时爬取名人照片并展示。
动态加载和解析页面数据,清洗并规范化抓取到的信息,确保数据质量和一致性。 - 多媒体资源管理
结合阿里云OSS(对象存储服务)管理照片、音频与视频资源,确保高效访问与展示。
个人分工及具体实现
1. 前端开发与交互功能
- 负责功能
地图标记功能实现:动态添加标记点,根据用户操作调整缩放级别显示详细标记。
实现地图的路径高亮功能,设计路径视觉效果。
工具:vscode、HTML、CSS、JavaScript。 - 具体任务
调用 AMap API 进行地图交互开发。
实现动态展示历史标记点、用户自定义内容上传功能。
用户体验优化:设计友好的 UI 界面,提升地图功能的使用便捷性。 - 代码展示:
<body>
<div class="map-container">
<div class="background-image"></div>
<div class="overlay"></div>
<h1>探索中国地图</h1>
<div id="map"></div>
<button class="back-button" onclick="goBack()">返回</button>
</div>
<script type='text/javascript'>
window._AMapSecurityConfig = {
securityJsCode: '安全密钥',
}
</script>
<script type="application/javascript"
src="https://webapi.amap.com/maps?v=2.0&key=eda3dd9617ed730c1717e9673bd0459f"></script>
// 初始化高德地图
const map = new AMap.Map('map', {
zoom: 4,
center: [104.195397, 35.86166], // 中国地理中心
});
// 渲染地图标记
function renderMarkers() {
photoData.forEach(photo => {
const marker = new AMap.Marker({
position: [photo.longitude || 104.195397, photo.latitude || 35.86166],
title: photo.city_name,
content: `
<div style="
width: 10px;
height: 10px;
background-color: #3FB1CE; /* 贴近地图的蓝绿色 */
border-radius: 50%;
border: 1px solid #FFFFFF; /* 白色边框增强可见性 */
box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); /* 轻微阴影效果 */
position: relative;
"></div>
`,
offset: new AMap.Pixel(-5, -5) // 确保居中
});
map.add(marker);
});
}
2、搭建与维护数据库(如 MySQL 或 MongoDB),支持前端动态查询与数据更新。
将队友爬取到的数据导入到数据库中,由后端调取使用
- 代码展示:
import pandas as pd
import mysql.connector
from openpyxl import load_workbook
# 连接到MySQL数据库
db_connection = mysql.connector.connect(
host="localhost",
user="root",
password="031212",
database="city_data"
)
cursor = db_connection.cursor()
# 加载XLSX文件
xlsx_file = 'D:/project_folder_data/音频3.xlsx'
df = pd.read_excel(xlsx_file)
# 创建表(如果尚未存在)
create_table_query = """
CREATE TABLE IF NOT EXISTS audio_links3 (
city_name varchar(255),
audio_url varchar(255),
jingdu float,
weidu float
);
"""
cursor.execute(create_table_query)
# 插入数据
insert_query = """
INSERT INTO audio_links3 (city_name, audio_url, jingdu, weidu)
VALUES (%s, %s, %s, %s)
"""
for row in df.itertuples():
cursor.execute(insert_query, (row.city_name, row.audio_url, row.jingdu, row.weidu))
# 提交所有数据插入操作
db_connection.commit()
# 关闭连接
cursor.close()
db_connection.close()
心得体会:
在本次任务分配与团队协作中,我深刻体会到任务细化与分工对于项目高效推进的重要性。通过将任务按前端、后端和数据处理三个大类进行划分,每个人能够专注于自己的领域,同时又能实现团队间的高效协同。作为团队的一员,我在专注于自己的任务时,也学习到了其他成员的工作内容。例如,前端在开发地图功能时,了解了后端如何处理数据接口,数据处理如何进行内容的预处理。这种跨领域的了解提升了我的整体视野和综合能力