基于人工智能,进行跨境游相关内容的生成
  • HTML 83%
  • Python 16.3%
  • JavaScript 0.5%
  • CSS 0.2%
Find a file
2026-06-25 01:39:10 +08:00
api init upload 2026-06-04 23:53:08 +08:00
config 增加homepage入口 2026-06-24 16:45:31 +08:00
models 更新项目介绍文档和设置文件为最新 2026-06-05 01:59:13 +08:00
modules update 3d_generate modules and samples 2026-06-24 15:14:20 +08:00
static update page scene_2d&homepage 2026-06-25 01:39:10 +08:00
.gitignore 2d demo从昆明市换为上海市,增加.gitignore等 2026-06-15 23:07:50 +08:00
generate_2d_scene.py 优化generate_scene_2d pipeline,提升download/generate等函数稳定性,更新产出demo 2026-06-15 22:54:58 +08:00
generate_3d_scene.py update 3d_generate modules and samples 2026-06-24 15:14:20 +08:00
generate_article.py 修改文章生成的本地模型为Qwen 2026-06-05 01:54:08 +08:00
generate_music.py init upload 2026-06-04 23:53:08 +08:00
generate_video.py init upload 2026-06-04 23:53:08 +08:00
homepage_guide.md 更新文档与静态生成结果 2026-06-24 17:37:17 +08:00
main.py update page scene_2d&homepage 2026-06-25 01:39:10 +08:00
README.md update 3d_generate modules and samples 2026-06-24 15:14:20 +08:00
requirements.txt update 3d_generate modules and samples 2026-06-24 15:14:20 +08:00

MyChinaTravelArticleProduction

项目简介

本项目是一个基于AI能力的内容自动创作平台专注于中国旅游主题内容的智能化生成。通过整合多种AI技术实现从文字、音频到视频、交互场景的全方位内容创作能力。

核心定位

AI驱动的中国旅游内容创作引擎

  • 降低旅游内容创作门槛
  • 提升内容生产效率
  • 创新旅游内容呈现形式
  • 提供线上途径旅游体验

功能模块

1. AI主题文章生成

  • 自动生成中国旅游主题文章
  • 支持多种文体风格(攻略、游记、科普等)
  • 智能整合景点信息、文化背景、参考文章
  • 多语言内容输出能力,文章可选自动配图

示例输出

2. AI主题音乐生成

  • 根据旅游主题和场景,自动创作背景音乐
  • 基于确定的输入歌词,生成人声歌曲
  • 支持多种音乐风格和情绪表达
  • 基于歌曲内容自动生成配套MV待实现

示例输出

3. AI主题视频生成

  • 基于输入智能生成旅游主题视频
  • 智能人物音及环境音融合
  • 智能双语字幕生成(待实现)

示例输出

4. AI可交互2D场景生成

  • 生成可交互的2D旅游场景
  • 支持用户选择和导航
  • 融入故事化元素和互动环节
  • 适配多种终端设备

可在项目根目录启动虚拟环境后运行python generate_2d_scene.py serve并在浏览器直接访问详情参见Demo4

页面 截图1 截图2 截图3
城市主页 城市主页面1 城市主页面2 城市主页3
区县冒险页 黄昏 破晓 暗夜

5. AI可交互3D场景生成

  • 构建沉浸式3D旅游环境
  • 自由探索和互动体验
  • 真实还原场景细节和氛围

可在项目根目录运行【python main.py serve】启动web服务然后跳转浏览器可交互访问

Park Valley
深度图 Park深度 Valley输入
3DGS截图 3DGS截图1 3DGS截图2
浏览器链接 点击跳转 点击跳转

技术架构

本项目采用模块化设计各AI能力模块可独立调用也可协同工作形成完整的内容创作流水线。

快速开始

环境准备

# 1. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 2. 安装依赖
pip install -r requirements.txt

# 3. 配置环境变量用于云端API如 OpenRouter
cp .env.example .env
# 编辑 .env填入你的 API Key

Demo 1: AI主题文章生成

git方式A基于参考文章生成推荐

将参考文章放在 static/article/input/ 目录下,系统会自动提取主题和格式:

# 使用本地模型(默认 gpt2-chinese-cluecorpussmall
python generate_article.py -r reference_article.txt

# 或使用云端API免费质量更高推荐 OpenRouter
# 1. 注册获取 Key: https://openrouter.ai/
# 2. 配置 .env 中的 CLOUD_API_KEY然后
python generate_article.py -r reference_article.txt -st cloud

# 生成的文章保存在:
# static/article/output/[主题].md

方式B指定主题 + 格式模板

当你有明确的主题和格式要求时:

# 提供主题 + 格式模板文件
python generate_article.py -t "北京故宫" -f travel_format.txt -s guide -l long

# 使用云端API生成质量更高
python generate_article.py -t "苏州园林" -f format.txt -st cloud

# 生成结果:
# static/article/output/[主题].md

本地模型

本地模型介绍、下载与配置详情请查看 models/README.md

云端API

使用 OpenRouter 提供的云端模型,需配置 API Key详见 config/README.md

输入输出目录

static/article/
├── input/
│   ├── reference_article.txt    # 参考文章(自动提取主题和格式)
│   └── travel_format.txt        # 格式模板(当不使用参考文章时)
├── output/                      # 生成的文章(.md 文件)
└── README.md                    # 详细使用说明

快速试用提示

  • 默认使用本地模型
  • 使用云端API时添加 -st cloud 参数
  • 详细参数说明:查看 static/article/README.md

Demo 2: AI主题音乐生成

方式A生成纯音乐

根据风格描述和时长生成纯音乐:

# 生成 30 秒的平静古风音乐
python generate_music.py -p "chinese traditional, guzheng, peaceful" -d 30

# 生成 60 秒的电子音乐
python generate_music.py -p "electronic, synthwave, 80s" -d 60

# 生成结果保存在:
# static/music/output/[时间戳].flac 和 .mp3

方式B生成带歌词的音乐

将歌词文件放在 static/music/input/ 目录下:

# 使用歌词文件生成带人声的音乐
python generate_music.py -p "jpop, city pop, female vocal" -l sample_lyrics.txt -d 60

# 生成结果:
# static/music/output/music_YYYYMMDD_HHMMSS.flac
# static/music/output/music_YYYYMMDD_HHMMSS.mp3

本地模型

音乐生成基于 ACE-Step 1.5 本地模型,安装与配置详情请查看 models/README.md

云端API

本模块当前基于本地模型不支持云端API。

输入输出目录

static/music/
├── input/
│   ├── sample_lyrics.txt        # 歌词文件(可选)
│   └── style_guide.txt          # 风格参考说明
├── output/                      # 生成的音乐文件(.flac 和 .mp3
└── README.md                    # 详细使用说明

快速试用提示

  • 默认同时生成 .flac(无损)和 .mp3(压缩)两种格式
  • -p 提示词决定音乐风格,用英文描述效果更好
  • -l 歌词文件为可选,省略时生成纯音乐
  • 详细参数说明:查看 static/music/README.md

Demo 3: AI主题视频生成

方式A直接输入提示词生成

根据提示词直接生成视频:

# 生成 5 秒动漫风格视频(需配置阿里云百炼 API Key详见 config/README.md
python generate_video.py -p "动漫风格的窈窕青春美少女在上海外滩向大家打招呼" -d 5 -r 720P

# 生成 10 秒风景视频
python generate_video.py -p "beautiful sunset over the Great Wall of China" -d 10 -r 1080P

# 生成结果保存在:
# static/video/output/video_YYYYMMDD_HHMMSS.mp4

方式B使用提示词文件生成

将提示词放在 static/video/input/ 目录下:

# 使用提示词文件
python generate_video.py -f anime_girl.txt

# 生成结果:
# static/video/output/video_YYYYMMDD_HHMMSS.mp4

本地模型

本模块基于云端API不支持本地模型。

云端API

使用阿里云百炼提供的文生视频模型,需配置 API Key详见 config/README.md

输入输出目录

static/video/
├── input/
│   ├── anime_girl.txt            # 提示词文件(可选)
│   └── prompt_guide.txt          # 提示词编写指南
├── output/                      # 生成的视频文件(.mp4
└── README.md                    # 详细使用说明

快速试用提示

  • -p 提示词直接描述视频内容,越详细效果越好
  • -d 时长支持2/5/10/15 秒
  • -r 分辨率支持720P标清、1080P高清
  • 任务提交后需等待 1-5 分钟生成时间
  • 详细参数说明:查看 static/video/README.md

Demo 4: AI 2D城市地图站生成

自动生成可交互的城市旅游地图网站,包含城市主地图和各区县冒险子页面。

完整流程(以上海市为例)

Step 1: 下载 OSM 地图数据

# 下载上海市的 OSM 数据(道路、建筑、景点等)
python generate_2d_scene.py download -c "上海市"

# 可以随时运行指令检查数据完整程度
python generate_2d_scene.py download -c "上海市" --check

# 注:由于一次性下载全部模块,失败率较高,可在后续指定-t增量下载完善尚未下载成功的部分
# 1. 增量更新城市boundary信息
python generate_2d_scene.py download -c "昆明市" -t boundary
# 2. 增量更新道路(城市级)
python generate_2d_scene.py download -c "昆明市" -t roads
# 3. 增量更新旅游景点(城市级)
python generate_2d_scene.py download -c "昆明市" -t tourist_attractions
# 4. 增量更新行政区划边界(城市级)
python generate_2d_scene.py download -c "昆明市" -t administrative
# 5. 增量更新城市基底(默认按城市边界下载;多 tag 合并)
python generate_2d_scene.py download -c "昆明市" -t city_base

# 数据保存到:
# static/scene_2d/input/上海市/
# ├── osm_data_上海市_YYYYMMDD_HHMMSS.json  # 全市 OSM 数据
# └── osm_data_city_base_上海市-*.json       # 各区县城市基底数据

Step 2: 生成区县边界数据(依赖 Step 1

# 从 OSM 数据中提取区县边界信息
python generate_2d_scene.py district -c "上海市"

# 生成结果:
# static/scene_2d/input/上海市/districts.json

Step 3: 生成景点 POI 数据(依赖 Step 1

# 从 OSM 数据中提取旅游景点信息
python generate_2d_scene.py location -c "上海市"

# 生成结果:
# static/scene_2d/input/上海市/locations.csv

Step 4: 生成城市主地图(依赖 Step 2、Step 3

# 生成城市主页 index.html含高德瓦片底图 + 区县列表 + 景点标记)
python generate_2d_scene.py generate --index -c "上海市"

# 生成结果:
# static/scene_2d/output/上海市/index.html

Step 5: 生成区县冒险子页面(依赖 Step 2、Step 3

# 批量生成所有区县子页面
python generate_2d_scene.py generate --district -c "上海市"

# 或只生成单个区县
python generate_2d_scene.py generate --district -c "上海市" --name "黄浦区"

# 生成结果:
# static/scene_2d/output/上海市/
# ├── index.html          # 城市主地图
# ├── 黄浦区.html         # 黄浦区冒险地图
# ├── 徐汇区.html         # 徐汇区冒险地图
# ├── ...
# └── _data/              # 各区县地理数据

Step 6: 启动本地服务预览(依赖 Step 4、Step 5

# 在项目根目录启动预览服务(端口 9000
python generate_2d_scene.py serve

# 在浏览器中访问首页:
# http://localhost:9000/

# 首页包含城市选择下拉列表,可直接跳转到对应城市页面

本地模型

地图渲染生成部分,主要基于 OpenStreetMap 数据,无需 AI 模型。

冒险流程剧本生成,来自本地大语言模型。

冒险流程素材生成,来自本地文生图模型。

云端API

本模块基于本地处理不支持云端API。

输入输出目录

static/scene_2d/
├── input/
│   ├── 上海市/                      # 城市特定数据目录
│   │   ├── districts.json          # 区县边界信息
│   │   ├── locations.csv           # 景点 POI 数据
│   │   ├── osm_data_上海市_*.json   # OSM 原始数据
│   │   └── osm_data_city_base_*.json # 区县城市基底
│   └── ...                         # 其他城市数据
├── output/
│   ├── 上海市/                      # 城市特定输出目录
│   │   ├── index.html              # 城市主地图
│   │   ├── 黄浦区.html             # 区县冒险子页面
│   │   ├── 徐汇区.html
│   │   └── _data/                  # 各区县 GeoJSON 数据
│   └── ...
├── index_template.html              # 主页模板
├── subpage_template_maplibre.html   # 区县子页模板
└── README.md                        # 详细使用说明

快速试用提示

  • 完整流程需依次执行 downloaddistrictlocationgenerate
  • -c 参数指定城市名,支持中文城市名(如 "上海市", "北京市", "广州市"
  • 数据和输出文件会自动按城市分类存放在对应目录下
  • 生成的 HTML 可直接在浏览器中打开查看
  • 详细参数说明:查看 static/scene_2d/README.md

Demo 5: AI 3D场景页面生成

基于 HY-World 2.0 模型从输入图像序列生成3D场景深度图、法线图、点云、高斯溅射并通过本地服务预览。

完整流程(以 Park 场景为例)

Step 1: 生成3D场景

# 从图像序列生成3D场景深度、法线、点云、高斯溅射等
python generate_3d_scene.py -m hyworld2 -t generate_scene --input "static/scene_3d/input/examples/worldrecon/realistic/Park"

# 生成结果保存在:
# static/scene_3d/output/examples/worldrecon/realistic/Park/
# ├── camera_params.json     # 相机参数
# ├── gaussians.ply          # 高斯溅射点云
# ├── depth/                 # 深度图预览
# ├── normal/                # 法线图预览
# ├── points/                # 点云 PLY
# └── trace.json             # 执行轨迹

Step 2: 启动本地服务预览

# 在项目根目录启动预览服务(端口 9000
python generate_2d_scene.py serve

# 在浏览器中访问3D场景输出文件
# http://localhost:9000/static/scene_3d/output/examples/worldrecon/realistic/Park/
# 如果路径符合Demo4中地点名称的话可以直接从2D地图跳转eg如果static/scene_3d/output/上海市/滴水湖/output.html存在则2D地图的地点浮窗会出现跳转入口

本地模型

3D场景生成基于 HY-World 2.0 本地模型(通过 mlx-spatial 在 Mac 上运行),安装与配置详情请查看 models/README.md

云端API

本模块基于本地模型不支持云端API。

输入输出目录

static/scene_3d/
├── input/
│   └── examples/worldrecon/realistic/Park/   # 输入图像序列
│       ├── image_0001.jpg
│       ├── image_0002.jpg
│       └── ...
├── output/
│   └── examples/worldrecon/realistic/Park/   # 3D场景输出
│       ├── camera_params.json               # 相机参数
│       ├── gaussians.ply                    # 高斯溅射点云
│       ├── depth/                           # 深度图预览
│       │   ├── depth_b00_f000.png
│       │   └── ...
│       ├── normal/                          # 法线图预览
│       │   ├── normal_b00_f000.png
│       │   └── ...
│       ├── points/
│       │   └── points.ply                   # 点云 PLY
│       └── trace.json                       # 执行轨迹
└── README.md                                # 详细使用说明

快速试用提示

  • -m hyworld2 指定使用 HY-World 2.0 模型
  • -t generate_scene 指定任务类型为场景生成
  • --input 参数指向包含图像序列的目录
  • 支持 --memory-profile 参数safe/balanced/fast控制内存使用
  • 可通过 --heads 参数指定输出头camera,depth,normal,points,gs
  • 详细参数说明:查看 static/scene_3d/README.md

快速命令速查

# === 文章生成 ===
# 基于参考文章(本地模型)
python generate_article.py -r reference_article.txt

# 基于参考文章云端API
python generate_article.py -r reference_article.txt -st cloud

# 指定主题和格式
python generate_article.py -t "杭州西湖" -f travel_format.txt -l long

# === 音乐生成 ===
# 生成纯音乐30秒
python generate_music.py -p "chinese traditional, peaceful" -d 30

# 生成带歌词的音乐60秒
python generate_music.py -p "jpop, city pop, female vocal" -l sample_lyrics.txt -d 60

# === 视频生成 ===
# 基于提示词生成视频(需配置阿里云百炼 API Key详见 config/README.md
python generate_video.py -p "动漫风格的窈窕青春美少女在上海外滩向大家打招呼" -d 5 -r 1080P

# 使用提示词文件生成视频
python generate_video.py -f anime_girl.txt

# 查询视频任务状态
python generate_video.py --status task-id-xxx

项目结构

MyChinaTravelArticleProduction/
├── generate_article.py         # 文章生成命令行工具
├── generate_music.py           # 音乐生成命令行工具
├── generate_video.py           # 视频生成命令行工具
├── download_model.py           # 模型下载工具
├── modules/                    # 核心模块
│   ├── article_generator.py   # 文章生成逻辑
│   ├── music_generator.py     # 音乐生成逻辑
│   └── video_generator.py     # 视频生成逻辑
├── config/                     # 配置文件
│   ├── settings.py            # 项目配置
│   ├── runninghub_config.json # RunningHub 配置
│   └── README.md              # 云端 API 配置详情
├── static/                     # 静态资源(输入/输出)
│   ├── article/               # 文章生成的输入输出
│   │   ├── input/             # 参考文章、格式模板
│   │   ├── output/            # 生成的文章
│   │   └── README.md          # 详细使用说明
│   ├── music/                 # 音乐生成的输入输出
│   │   ├── input/             # 歌词、风格参考
│   │   ├── output/            # 生成的音乐
│   │   └── README.md          # 详细使用说明
│   └── video/                 # 视频生成的输入输出
│       ├── input/             # 提示词文件
│       ├── output/            # 生成的视频
│       └── README.md          # 详细使用说明
│   └── scene_2d/              # AI 2D 旅游地图
│       ├── input/             # locations.csv + districts.json
│       ├── output/            # index.html + 区县子页面
│       ├── _data/昆明市-<区县>/ # 各区县 OSM GeoJSON
│       ├── index_template.html              # 主页 Leaflet 模板
│       ├── subpage_template_maplibre.html   # 区县子页 MapLibre 模板
│       └── district_adventure_map.md       # 区县冒险地图技术方案
├── models/                     # 本地模型目录
│   └── README.md              # 本地模型下载与配置详情
├── .env                        # 环境变量配置
├── requirements.txt            # 依赖列表
└── README.md                   # 本文件

开发计划

4. AI 2D 旅游地图生成

生成城市主地图 index.html 和各区县冒险地图子页面。

命令

# 生成城市主地图 index.html
python generate_2d_scene.py generate \
  -i static/scene_2d/input/locations.csv \
  -d static/scene_2d/input/districts.json \
  -o static/scene_2d/output

# 批量生成全部区县子页面
python generate_2d_scene.py generate --district \
  -c 昆明市 -d static/scene_2d/input/districts.json \
  -o static/scene_2d/output

# 只生成单个区县
python generate_2d_scene.py generate --district \
  -c 昆明市 --name 五华区 \
  -d static/scene_2d/input/districts.json \
  -o static/scene_2d/output

输入 / 模板 / 输出

方向 文件 说明
输入 static/scene_2d/input/districts.json 区县列表id/name/area/经纬度/boundary+ 全市边界
输入 static/scene_2d/input/locations.csv 景点 POIdistrict/rating/category/lat/lng/district_rating_rank
输入 static/scene_2d/_data/昆明市-<区县>/ 下载后的区县 OSM GeoJSONroad/building/landuse/park/water/landmarks
模板 static/scene_2d/index_template.html 主页 Leaflet 模板(占位符由 generate_html 替换)
模板 static/scene_2d/subpage_template_maplibre.html 区县子页 MapLibre 模板
输出 static/scene_2d/output/index.html 城市主地图(高德瓦片底图 + 16 区县 + Top10 景点 marker
输出 static/scene_2d/output/<区县名>.html 区县冒险地图子页面MapLibre + 卡通纹理)

index.html 设计(重要 · 下次修改请先读)

  • 技术栈Leaflet + 高德瓦片底图(L.tileLayer webrd0{s}.is.autonavi.com)。
  • 为什么 roadsData 是空 {}:历史上曾把 osm_data_昆明市_YYYYMMDD.json 的 roads GeoJSON65MB+)嵌入 index.html导致最终 HTML 71MB浏览器 V8 解析耗时 3~5 秒。改为 roads_data = {} 占位符后 71MB -> 1.7MB,高德瓦片已自带路网/绿地/水体/地名,不影响视觉。若以后要手绘路网图层,可在 generate_2d_scene.py 的 _cmd_generate_index 中取消注释路网读取逻辑并在 index_template.html 里恢复 L.geoJSON(roadsData).addTo(map)。
  • Header 文案🏰 AI 2D HomePage - {city_name_cn}/{city_name_en},城市名由 generate_html 自动推断city_name_cn <- districts[].id 前缀、city_name_en <- districts.json 的 city_boundary name 属性)。

区县列表(左侧)

  • 标题:🏛️ 区县列表 Districts (N)

  • 排序优先级area_rank:由 Python 端和前端 AREA_RANK 常量双重保证一致,顺序是

    全市范围 -> 市辖区 -> 县级市 -> 下辖县 -> 自治县
    

    同级别内按中文名拼音升序localeCompare "zh")。

  • 每行内容:左侧 🏛️ [area] 区县名 ✅ 表示 output 下存在对应子页面 .html右侧 N 个地点N = 该区县 Top10 景点 POI 数,从 locations.csv 实时统计)。

  • 点击行为selectedDistrict = did -> 重新渲染区县列表(高亮选中)+ 地点列表(只保留该区县)+ showBoundary(did) 高亮该区县边界 + 地图 flyTo 该区县中心 + 自动弹出 marker popup。

  • 易错点JS 闭包坑)renderDistrictList / renderLocationList 里都用了 for (var i = 0; ...) 循环 + var loc = filtered[i] 的写法,必须用 IIFE (function(did){...})(d.id) 包裹 onclick否则会被 JS 闭包 bug 坑(点击总是跳到最后一项)。

地点列表(左侧)

  • 标题:📍 地点列表 Places (N)
  • 未选区县时显示全市 Top10 × 16 区县 ≈ 118 条。选了区县后只显示该区县的 Top10。
  • 每行 icon 名称 / ⭐ rating · 类别。点击 -> 地图 flyTo 该点 zoom=14 -> 打开对应 marker popup。

地图

  • 高德瓦片中文标注style=716 个区县 circleMarker半径 5~14 按面积分级1 个全市边界 polygon蓝色虚线Top10 POI 红色 piniconMap 按 type 分类star/tree/museum/mountain/architecture/food/default
  • 区县 marker popup含区县名 + 面积 + 人口 + 描述 + (若 output 下存在该区县子页面 .html🎮 红色按钮 进入 XX 区 冒险地图 -> window.open 打开子页。按钮是否出现由 _scan_district_pages(args.output, districts) 在 generate 命令执行时扫描 output 目录决定。

数据流

Python 端 (_cmd_generate_index)
  ├── read_locations_csv() -> Top10 筛选 -> loc_counter 统计每区县 location_count
  ├── read_districts_json() -> 为每个 district 注入 area_rank / location_count
  ├── generate_html(center, {}, locations, districts, city_boundary, district_pages)
  │     └── 读 index_template.html替换 {{CENTER_LAT}}/{{CENTER_LNG}}/{{ROADS_DATA}}/{{LOCATIONS}}/{{DISTRICTS}}/{{CITY_BOUNDARY}}/{{DISTRICT_PAGES}}
  └── 写 output/index.html

前端index.html 打开后)
  ├── 同步解析 5 个 var 数据roadsData = {},其他 < 2MB
  ├── L.map -> L.tileLayer(高德) -> 16 区县 marker + 118 POI pin + 边界 polygon
  ├── renderDistrictList + renderLocationList点击 -> 重绘)
  └── popup 按钮 -> districtPages[did] 存在则 window.open

区县子页:详见 static/scene_2d/district_adventure_map.md

  • 基础框架搭建
  • AI文章生成模块
  • AI音乐生成模块
  • AI视频生成模块
  • AI 2D场景生成模块
  • AI 3D大世界生成模块

贡献指南

欢迎提交Issue和Pull Request共同完善本项目。

许可证

(待定)