这个项目属于哪个课程 2024数据采集与融合技术实践
组名 在大大的数据里面挖呀挖呀挖
项目简介

项目名称:城市记忆

Logo:

项目需求:整合城市历史文化资源:需要以交互式的方式展示城市的历史发展、新旧照片、方言特色以及名人故事等内容。增强用户参与感:为用户提供交互性体验,如照片上色、语音生成、内容检索等。利用多媒体技术提升展示效果:通过地图、视频、音频、图像等多种形式,全方位展示城市记忆,构建沉浸式体验。

项目开展技术路线:python、html、JavaScript、flask、mysql

团队成员学号 102202114农晨曦,102202118杨美荔、102202144傅钰、102202147赖越、102202150魏雨萱、102202152张静雯
这个项目的目标 建立多模块融合的城市记忆平台:打造一个集历史资源展示、文化传承和科技互动为一体的平台。
提升用户体验与交互性:通过地图导航、名人故事展示、黑白照片上色和方言音频生成等功能,让用户更生动地了解城市文化。
促进文化保护与传承:利用现代技术对城市历史资源进行数字化存档,帮助大众更便捷地探索与分享城市记忆。
探索跨学科技术融合:结合深度学习、多模态技术与地理信息系统等技术,提升文化展示的深度与广度。
其他参考文献 近20 年城市记忆研究综述
城市记忆与城市形态——从心理学、社会学视角探讨城市历史文化的延续
星火认知大模型Web API文档
项目的gitee链接 城市记忆

综合设计——多源异构数据采集与融合应用综合实践

项目介绍

项目背景

城市记忆承载着一座城市的历史、文化与情感,其背后的故事和影像是研究城市变迁与文化保护的重要资源。然而,许多城市的历史资源缺乏系统化的整理与展示,普通大众难以方便地接触这些内容。随着人工智能与多媒体技术的快速发展,利用技术手段将历史内容与现代形式结合,可以更好地传递城市文化,增强公众的文化认同感。

功能介绍

  1. 时空地图
    功能描述:
    用户通过交互式地图探索城市历史文化资源。
    点击地图标记点:显示对应城市的方言音频、新旧照片对比、历史发展时间轴信息。
    查看名人故事:点击标记点的“名人故事”按钮跳转到城市的名人集页面,展示与该城市相关的名人列表。
    名人故事展示:点击名人列表中的名人姓名,可以查看详细的名人故事,包括其生平事迹、贡献和与城市的关联性。
    技术实现:
    使用 高德地图 API 提供地图展示与交互功能。
    数据库存储包含城市地理信息及相关文化资源。
    名人资源使用Spark 4.0 Ultra搜索并整理名人集和名人故事。
  2. 照片上色
    功能描述:
    用户上传黑白照片,系统自动将其转换为色彩丰富的上色照片,直观展现历史影像的色彩还原效果。
    支持多种照片格式,快速处理。
    生成对比图,展示黑白原图与上色图的差异。
    技术实现:
    使用 百度图片上色接口 提供高精度的图片上色服务。
    后端实现文件上传和上色结果的高效存储与展示。
  3. 方言之声
    功能描述:
    用户输入一段文本并选择城市名称,系统自动生成对应城市方言的音频文件。
    支持多种方言生成,包括普通话、粤语、东北话等。
    生成音频后提供播放功能,用户可以在线收听或下载保存。
    技术实现:
    使用 讯飞星火语音合成 API 实现高质量的多方言语音合成。
  4. 时光影像
    功能描述:
    用户输入城市名称,系统搜索该城市的老视频并在页面中展示。
    视频内容涵盖城市建设、名胜古迹、历史活动等主题。
    视频可在线播放,支持用户分享和下载功能。
    技术实现:
    后端通过查询 MySQL 数据库,根据用户输入的城市关键词匹配相关视频链接。
    视频资源通过动态渲染展示在页面,支持跨平台兼容的播放功能。

技术路线

  1. 前端
    使用 HTML + CSS + JavaScript 开发实现页面布局与动画效果框架,支持动态渲染和响应式设计,兼容多种设备(PC 和移动端),提升视觉吸引力。
    高德地图 API 集成,用于实现地图标记与交互功能。
  2. 后端
    基于 Flask 框架开发 RESTful API,与前端交互。
    集成第三方服务接口(高德地图API、百度AI图片上色接口、讯飞星火语音合成API、Spark4.0 UltraAPI)。
    提供与 MySQL 数据库的高效交互,支持查询与数据更新。
  3. 数据库
    使用 MySQL 数据库存储视频链接、名人信息和其他相关数据。
    提供灵活的表结构设计,便于数据检索与扩展。
  4. AI 技术
    图片上色:集成百度AI图片上色接口,实现黑白图像智能上色。
    语音合成:调用讯飞星火语音合成API生成高质量方言语音。
    数据检索:借助 Spark4.0 UltraAPI 快速检索与展示名人集和名人故事数据。
  5. 爬虫数据采集
    使用 Python 爬虫技术 (如 Scrapy、Requests、BeautifulSoup 等)从各类公共数据源(如百科、城市历史网站、档案馆、哔哩哔哩)抓取城市历史数据、名人故事、黑白照片、老视频等内容,并存入数据库供后续处理和展示。
    在搜索到名人之后使用Selenim同时爬取名人照片并展示。
    动态加载和解析页面数据,清洗并规范化抓取到的信息,确保数据质量和一致性。
  6. 多媒体资源管理
    结合阿里云OSS(对象存储服务)管理照片、音频与视频资源,确保高效访问与展示。

📖 个人分工及具体实现

📃 1. 数据处理

  • 负责功能
    将爬取到的数据通过代码的方式处理为可以合并的格式,还有图像特性提取、文本分析
  • 具体任务
    使用vscode编写代码将数据中与其他数据不符合的格式修改,并增加一些需要的数据,例如经纬度等
  • 代码展示:
import pandas as pd
import requests
import time
import re

AMAP_API_URL = 'https://restapi.amap.com/v3/geocode/geo'
API_KEY = '2aca31bbb724485da9b90ae038f3df12'

def get_location(city_name, retries=3):
    params = {'key': API_KEY, 'address': city_name}
    for attempt in range(retries):
        try:
            response = requests.get(AMAP_API_URL, params=params, timeout=5)
            data = response.json()
            if data['status'] == '1' and data['geocodes']:
                location = data['geocodes'][0]['location']
                lng, lat = map(float, location.split(','))
                return lng, lat
        except Exception as e:
            print(f"获取城市 '{city_name}' 经纬度时发生错误,重试 {attempt + 1}/{retries}: {e}")
        time.sleep(0.5)  # 延时0.5秒
    print(f"未能获取城市 '{city_name}' 的经纬度")
    return None, None

def process_excel(input_file, output_file):
    df = pd.read_excel(input_file)
    df['city_name'] = df['city'].apply(lambda x: re.sub(r'[^\u4e00-\u9fa5]', '', x.split('.')[0]))

    longitudes, latitudes = [], []
    not_found_cities = []

    for city in df['city_name']:
        print(f"正在获取城市 '{city}' 的经纬度...")
        lng, lat = get_location(city)
        if lng is None or lat is None:
            not_found_cities.append(city)
        longitudes.append(lng)
        latitudes.append(lat)

    df['longitude'] = longitudes
    df['latitude'] = latitudes
    df.drop(columns=['city_name'], inplace=True)
    df.to_excel(output_file, index=False)

    print(f"处理完成!结果保存到 '{output_file}'")
    if not_found_cities:
        print("未找到的城市:", not_found_cities)

if __name__ == '__main__':
    process_excel("D:/project_folder_data/图片链接2.xlsx", "D:/project_folder_data/图片链接3.xlsx")

2、协作队员进行网页的搭建内容

与队友一起进行图像对比、视频内容与文本同步展示

  • 代码展示:
// 获取音频和照片数据并合并
let audioData = [];
let photoData = [];

// 先获取音频数据
fetch('/get_audio_links')
    .then(response => response.json())
    .then(data => {
        audioData = data;
        return fetch('/get_photo_links'); // 再获取照片数据
    })
    .then(response => response.json())
    .then(data => {
        photoData = data;
        const combinedData = combineData(audioData, photoData);
        renderMarkers(combinedData);
    })
    .catch(error => console.error("Error fetching data:", error));

// 数据合并函数
function combineData(audioData, photoData) {
    const combined = [];
    const audioMap = {};

    // 将音频数据转为以 city_name 为键的映射
    audioData.forEach(item => {
        audioMap[item.city_name] = item.audio_url;
    });

    // 遍历照片数据,合并音频链接
    photoData.forEach(item => {
        combined.push({
            city_name: item.city_name,
            old_photo_url: item.old_photo_url,
            new_photo_url: item.new_photo_url,
            longitude: item.longitude,
            latitude: item.latitude,
            audio_url: audioMap[item.city_name] || null  // 如果有对应音频,合并上去
        });
    });

    return combined;
}

心得体会:

数据预处理是整个项目的基础,直接关系到后续分析与展示的准确性和效率。在这一环节中,我面对了数据格式多样、不一致的挑战,例如对图片、文本和地理信息数据的清洗、格式统一和存储优化。通过利用Python和相关数据处理库(如Pandas、NumPy),我学会了高效地批量操作和处理复杂数据,同时进一步认识到数据质量对整个项目的决定性作用。
在这个过程中,我还尝试对数据进行特征提取和归一化操作,为后续模型的训练与预测打下坚实基础。同时,借助可视化工具,我能够快速发现数据中的问题并进行修正。这一过程让我切实体会到数据分析师需要具备的细致与耐心。

posted on 2024-12-14 23:48  pandas2  阅读(17)  评论(0编辑  收藏  举报