From e68bb3ac429fffb0b9190c3984f20f717220f7b0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 2 Mar 2026 21:26:32 +0800 Subject: [PATCH] first commit --- 技术文档/Flutter开发环境搭建.md | 450 +++++++++++++++++ 技术文档/Flutter项目初始化.md | 836 ++++++++++++++++++++++++++++++++ 技术文档/README.md | 107 ++++ 技术文档/产品方案.md | 479 ++++++++++++++++++ 技术文档/技术方案.md | 543 +++++++++++++++++++++ 技术文档/技术选型.md | 175 +++++++ 技术文档/项目概述.md | 49 ++ 技术文档/项目规划.md | 437 +++++++++++++++++ 8 files changed, 3076 insertions(+) create mode 100644 技术文档/Flutter开发环境搭建.md create mode 100644 技术文档/Flutter项目初始化.md create mode 100644 技术文档/README.md create mode 100644 技术文档/产品方案.md create mode 100644 技术文档/技术方案.md create mode 100644 技术文档/技术选型.md create mode 100644 技术文档/项目概述.md create mode 100644 技术文档/项目规划.md diff --git a/技术文档/Flutter开发环境搭建.md b/技术文档/Flutter开发环境搭建.md new file mode 100644 index 0000000..6179e19 --- /dev/null +++ b/技术文档/Flutter开发环境搭建.md @@ -0,0 +1,450 @@ +# AISee Flutter 开发环境搭建指南 + +## 系统要求 + +- **操作系统**:Windows 10/11(64位) +- **内存**:至少 8GB RAM(推荐 16GB) +- **硬盘**:至少 10GB 可用空间 +- **处理器**:Intel/AMD 处理器 + +## 一、安装 Flutter SDK + +### 1. 下载 Flutter SDK +```bash +# 官网下载(可能较慢) +https://flutter.dev/docs/get-started/install/windows + +# 推荐:使用国内镜像 +https://flutter.cn/docs/get-started/install/windows + +# 下载稳定版 +flutter_windows_3.16.9-stable.zip +``` + +### 2. 解压 Flutter SDK +```bash +# 解压到: +C:\src\flutter + +# 注意:不要放在需要管理员权限的目录(如 Program Files) +``` + +### 3. 配置环境变量 +```bash +# 1. 右键"此电脑" -> 属性 -> 高级系统设置 -> 环境变量 + +# 2. 在"用户变量"中新建: +变量名:FLUTTER_HOME +变量值:C:\src\flutter + +# 3. 编辑 Path 变量,添加: +%FLUTTER_HOME%\bin +C:\src\flutter\bin\cache\dart-sdk\bin + +# 4. 配置国内镜像(重要!) +变量名:PUB_HOSTED_URL +变量值:https://pub.flutter-io.cn + +变量名:FLUTTER_STORAGE_BASE_URL +变量值:https://storage.flutter-io.cn + +# 5. 验证 +flutter --version +dart --version +``` + +### 4. 运行 Flutter Doctor +```bash +# 检查环境 +flutter doctor + +# 输出示例: +Doctor summary (to see all details, run flutter doctor -v): +[√] Flutter (Channel stable, 3.16.9, on Microsoft Windows) +[!] Android toolchain - develop for Android devices +[!] Chrome - develop for the web +[!] Visual Studio - develop for Windows +[!] Android Studio (not installed) +[√] VS Code (version 1.85.0) +[√] Connected device (1 available) +``` + +## 二、安装 Android 开发环境 + +### 1. 安装 Android Studio +```bash +# 下载地址 +https://developer.android.com/studio + +# 安装步骤(参考之前的 Android 环境文档) +1. 安装 Android Studio +2. 安装 Android SDK (API 26-34) +3. 配置 ANDROID_HOME 环境变量 +``` + +### 2. 安装 Android SDK 命令行工具 +```bash +# 在 Android Studio 中 +# Tools -> SDK Manager -> SDK Tools + +勾选: +☑ Android SDK Command-line Tools +☑ Android SDK Build-Tools +☑ Android SDK Platform-Tools +☑ Android Emulator +``` + +### 3. 接受 Android 许可 +```bash +flutter doctor --android-licenses + +# 输入 y 接受所有许可 +``` + +## 三、安装 Visual Studio Code + +### 1. 下载安装 VS Code +```bash +# 官网 +https://code.visualstudio.com/ + +# 下载 Windows 64-bit 版本 +VSCodeUserSetup-x64-1.85.0.exe +``` + +### 2. 安装 Flutter 插件 +```bash +# 打开 VS Code +# 按 Ctrl+Shift+X 打开扩展面板 + +搜索并安装: +1. Flutter(自动安装 Dart 插件) +2. Dart +3. Flutter Widget Snippets(可选) +4. Awesome Flutter Snippets(可选) +5. Pubspec Assist(可选) +``` + +### 3. 配置 VS Code +```bash +# 按 Ctrl+Shift+P 打开命令面板 +# 输入:Flutter: New Project + +# 如果能看到选项,说明配置成功 +``` + +## 四、创建和运行测试项目 + +### 1. 创建测试项目 +```bash +# 打开命令行 +cd C:\Users\xdedmi\Desktop\aisee + +# 创建 Flutter 项目 +flutter create hello_flutter + +# 进入项目目录 +cd hello_flutter + +# 查看项目结构 +dir +``` + +### 2. 启动 Android 模拟器 +```bash +# 查看可用设备 +flutter devices + +# 如果没有设备,创建模拟器 +# 打开 Android Studio -> Device Manager -> Create Device + +# 或使用命令行创建 +flutter emulators +flutter emulators --launch +``` + +### 3. 运行项目 +```bash +# 确保模拟器已启动 +flutter devices + +# 运行项目 +flutter run + +# 或在 VS Code 中按 F5 +``` + +### 4. 热重载测试 +```bash +# 修改 lib/main.dart 中的文本 +# 保存文件(Ctrl+S) +# 应该看到模拟器自动更新 + +# 或在终端按: +r - 热重载 +R - 热重启 +q - 退出 +``` + +## 五、安装必要的工具 + +### 1. Git(如果还没安装) +```bash +# 下载 +https://git-scm.com/download/win + +# 安装并配置 +git config --global user.name "你的名字" +git config --global user.email "你的邮箱" +``` + +### 2. Chrome(用于 Web 调试) +```bash +# Flutter 支持 Web 开发 +# 安装 Chrome 浏览器用于调试 + +# 启用 Web 支持 +flutter config --enable-web + +# 运行 Web 版本 +flutter run -d chrome +``` + +## 六、Flutter 常用命令 + +### 项目管理 +```bash +# 创建新项目 +flutter create project_name + +# 创建指定平台项目 +flutter create --platforms=android,ios project_name + +# 获取依赖 +flutter pub get + +# 更新依赖 +flutter pub upgrade + +# 清理项目 +flutter clean +``` + +### 运行和调试 +```bash +# 运行项目 +flutter run + +# 指定设备运行 +flutter run -d + +# Release 模式运行 +flutter run --release + +# 查看日志 +flutter logs +``` + +### 构建 +```bash +# 构建 APK +flutter build apk + +# 构建 App Bundle +flutter build appbundle + +# 构建 iOS(需要 macOS) +flutter build ios +``` + +### 分析和测试 +```bash +# 分析代码 +flutter analyze + +# 运行测试 +flutter test + +# 查看设备 +flutter devices + +# 检查环境 +flutter doctor -v +``` + +## 七、配置国内镜像加速 + +### 永久配置(推荐) +```bash +# 在环境变量中添加: +PUB_HOSTED_URL=https://pub.flutter-io.cn +FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn +``` + +### 临时配置 +```bash +# Windows PowerShell +$env:PUB_HOSTED_URL="https://pub.flutter-io.cn" +$env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn" + +# CMD +set PUB_HOSTED_URL=https://pub.flutter-io.cn +set FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn +``` + +## 八、常见问题解决 + +### 1. Flutter Doctor 问题 + +#### Android toolchain 问题 +```bash +# 问题:Android license status unknown +# 解决: +flutter doctor --android-licenses + +# 问题:cmdline-tools component is missing +# 解决:在 Android Studio SDK Manager 中安装 Command-line Tools +``` + +#### Visual Studio 问题(Windows 桌面开发) +```bash +# 如果需要开发 Windows 桌面应用 +# 下载安装 Visual Studio 2022 Community +# 选择"使用 C++ 的桌面开发"工作负载 +``` + +### 2. 网络问题 +```bash +# 问题:下载依赖超时 +# 解决: +1. 配置国内镜像(见上文) +2. 使用代理 +3. 手动下载依赖包 +``` + +### 3. 模拟器问题 +```bash +# 问题:模拟器启动失败 +# 解决: +1. 检查 BIOS 虚拟化是否开启 +2. 关闭 Hyper-V +3. 使用真机调试 + +# 问题:模拟器很慢 +# 解决: +1. 使用 x86_64 镜像 +2. 增加模拟器 RAM +3. 使用真机调试 +``` + +### 4. 真机调试 +```bash +# Android 真机调试步骤: +1. 手机开启开发者选项 +2. 开启 USB 调试 +3. 连接手机到电脑 +4. 允许 USB 调试授权 +5. 运行:flutter devices +6. 运行:flutter run +``` + +## 九、VS Code 快捷键 + +### Flutter 开发常用快捷键 +```bash +F5 - 启动调试 +Shift+F5 - 停止调试 +Ctrl+F5 - 运行(不调试) +Ctrl+Shift+F5 - 重启调试 + +Ctrl+S - 保存并热重载 +Ctrl+Shift+P - 命令面板 +Ctrl+Space - 代码补全 +F12 - 跳转到定义 +Alt+F12 - 查看定义 +Shift+F12 - 查看引用 + +Ctrl+/ - 注释/取消注释 +Ctrl+Shift+K - 删除行 +Alt+Up/Down - 移动行 +Ctrl+D - 选择下一个相同内容 +``` + +### Flutter 特定命令 +```bash +# Ctrl+Shift+P 打开命令面板,输入: + +Flutter: New Project - 创建新项目 +Flutter: Hot Reload - 热重载 +Flutter: Hot Restart - 热重启 +Flutter: Open DevTools - 打开开发者工具 +Flutter: Run Flutter Doctor - 运行环境检查 +Flutter: Clean Project - 清理项目 +``` + +## 十、开发环境检查清单 + +```bash +✅ Flutter SDK 安装并配置环境变量 +✅ 国内镜像配置完成 +✅ Android Studio 安装 +✅ Android SDK 安装(API 26-34) +✅ Android 许可接受 +✅ VS Code 安装 +✅ Flutter 和 Dart 插件安装 +✅ Git 安装并配置 +✅ 测试项目创建并运行成功 +✅ 热重载功能正常 +✅ flutter doctor 无严重错误 +``` + +## 十一、验证环境 + +### 运行完整检查 +```bash +# 详细检查 +flutter doctor -v + +# 期望输出(至少这些项目正常): +[√] Flutter (Channel stable, 3.16.9) +[√] Android toolchain - develop for Android devices +[√] VS Code (version 1.85.0) +[√] Connected device (1 available) + +# 如果有 [!] 或 [×],根据提示解决 +``` + +### 创建并运行测试项目 +```bash +# 1. 创建项目 +flutter create test_app +cd test_app + +# 2. 启动模拟器或连接真机 +flutter devices + +# 3. 运行项目 +flutter run + +# 4. 看到计数器应用说明环境正常 +``` + +## 十二、下一步 + +环境搭建完成后: +1. ✅ 学习 Dart 语言基础 +2. ✅ 学习 Flutter Widget +3. ✅ 创建 AISee 项目 +4. ✅ 开始功能开发 + +--- + +**预计时间**: +- 下载安装:30-60 分钟 +- 配置调试:15-30 分钟 +- 总计:1-2 小时 + +**提示**: +- 首次运行 `flutter doctor` 会下载必要组件,需要时间 +- 首次运行项目会下载 Gradle 依赖,需要耐心等待 +- 建议使用真机调试,速度更快 diff --git a/技术文档/Flutter项目初始化.md b/技术文档/Flutter项目初始化.md new file mode 100644 index 0000000..9309232 --- /dev/null +++ b/技术文档/Flutter项目初始化.md @@ -0,0 +1,836 @@ +# AISee Flutter 项目初始化指南 + +## 1. 创建项目 + +```bash +cd C:\Users\xdedmi\Desktop\aisee + +# 创建 Flutter 项目 +flutter create --org com.aisee --project-name aisee_app --platforms android,ios aisee_app + +cd aisee_app +``` + +## 2. 项目目录结构 + +``` +aisee_app/ +├── lib/ +│ ├── main.dart # 入口文件 +│ ├── app.dart # App 根组件 +│ │ +│ ├── config/ # 配置 +│ │ ├── app_config.dart # 应用配置 +│ │ ├── routes.dart # 路由配置 +│ │ └── theme.dart # 主题配置 +│ │ +│ ├── models/ # 数据模型 +│ │ ├── detection.dart # 检测结果 +│ │ ├── text_region.dart # 文字区域 +│ │ ├── scene_description.dart # 场景描述 +│ │ └── analysis_result.dart # 分析结果 +│ │ +│ ├── services/ # 服务层 +│ │ ├── api/ +│ │ │ ├── api_client.dart # HTTP 客户端 +│ │ │ ├── image_api.dart # 图像 API +│ │ │ └── analysis_api.dart # 分析 API +│ │ ├── bluetooth/ +│ │ │ ├── bluetooth_service.dart # 蓝牙服务 +│ │ │ └── glasses_protocol.dart # 眼镜通信协议 +│ │ ├── camera/ +│ │ │ └── camera_service.dart # 相机服务 +│ │ ├── websocket/ +│ │ │ └── ws_service.dart # WebSocket 服务 +│ │ └── tts/ +│ │ └── tts_service.dart # 语音合成服务 +│ │ +│ ├── providers/ # 状态管理 +│ │ ├── camera_provider.dart +│ │ ├── analysis_provider.dart +│ │ ├── bluetooth_provider.dart +│ │ └── settings_provider.dart +│ │ +│ ├── screens/ # 页面 +│ │ ├── home/ +│ │ │ └── home_screen.dart +│ │ ├── camera/ +│ │ │ └── camera_screen.dart +│ │ ├── analysis/ +│ │ │ └── analysis_screen.dart +│ │ ├── history/ +│ │ │ └── history_screen.dart +│ │ ├── settings/ +│ │ │ └── settings_screen.dart +│ │ └── bluetooth/ +│ │ └── bluetooth_screen.dart +│ │ +│ ├── widgets/ # 通用组件 +│ │ ├── detection_overlay.dart # 检测结果叠加层 +│ │ ├── loading_indicator.dart +│ │ └── error_widget.dart +│ │ +│ └── utils/ # 工具类 +│ ├── constants.dart +│ ├── image_utils.dart +│ └── permission_utils.dart +│ +├── assets/ # 静态资源 +│ ├── images/ +│ ├── icons/ +│ └── fonts/ +│ +├── test/ # 测试 +│ ├── services/ +│ ├── providers/ +│ └── widgets/ +│ +├── android/ # Android 原生代码 +├── ios/ # iOS 原生代码 +├── pubspec.yaml # 依赖配置 +└── analysis_options.yaml # 代码分析配置 +``` + +## 3. 依赖配置 pubspec.yaml + +```yaml +name: aisee_app +description: AISee - AI 视觉辅助眼镜系统 +publish_to: 'none' +version: 0.1.0+1 + +environment: + sdk: '>=3.2.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + + # UI + cupertino_icons: ^1.0.6 + google_fonts: ^6.1.0 + flutter_svg: ^2.0.9 + cached_network_image: ^3.3.0 + shimmer: ^3.0.0 + + # 状态管理 + riverpod: ^2.4.9 + flutter_riverpod: ^2.4.9 + + # 路由 + go_router: ^13.0.0 + + # 网络 + dio: ^5.4.0 + web_socket_channel: ^2.4.0 + + # 相机 + camera: ^0.10.5+7 + image: ^4.1.4 + + # 蓝牙 + flutter_blue_plus: ^1.28.5 + + # 本地存储 + sqflite: ^2.3.0 + shared_preferences: ^2.2.2 + path_provider: ^2.1.1 + hive: ^2.2.3 + hive_flutter: ^1.1.0 + + # 权限 + permission_handler: ^11.1.0 + + # 语音 + flutter_tts: ^3.8.5 + + # 图像处理 + image_picker: ^1.0.5 + + # JSON 序列化 + json_annotation: ^4.8.1 + freezed_annotation: ^2.4.1 + + # 工具 + logger: ^2.0.2+1 + intl: ^0.19.0 + uuid: ^4.2.1 + connectivity_plus: ^5.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^3.0.1 + + # 代码生成 + build_runner: ^2.4.7 + json_serializable: ^6.7.1 + freezed: ^2.4.5 + hive_generator: ^2.0.1 + + # 测试 + mockito: ^5.4.3 + mocktail: ^1.0.1 + +flutter: + uses-material-design: true + + assets: + - assets/images/ + - assets/icons/ + + fonts: + - family: AISee + fonts: + - asset: assets/fonts/AISee-Regular.ttf + - asset: assets/fonts/AISee-Bold.ttf + weight: 700 +``` + +## 4. 核心代码 + +### main.dart + +```dart +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:hive_flutter/hive_flutter.dart'; +import 'app.dart'; + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + + // 强制竖屏 + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + ]); + + // 初始化 Hive 本地存储 + await Hive.initFlutter(); + + runApp( + const ProviderScope( + child: AISeeApp(), + ), + ); +} +``` + +### app.dart + +```dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'config/routes.dart'; +import 'config/theme.dart'; + +class AISeeApp extends ConsumerWidget { + const AISeeApp({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final router = ref.watch(routerProvider); + + return MaterialApp.router( + title: 'AISee', + theme: AISeeTheme.lightTheme, + darkTheme: AISeeTheme.darkTheme, + themeMode: ThemeMode.system, + routerConfig: router, + debugShowCheckedModeBanner: false, + ); + } +} +``` + +### config/theme.dart + +```dart +import 'package:flutter/material.dart'; + +class AISeeTheme { + static const _primaryColor = Color(0xFF2196F3); + static const _secondaryColor = Color(0xFF00BCD4); + + static ThemeData get lightTheme { + return ThemeData( + useMaterial3: true, + colorScheme: ColorScheme.fromSeed( + seedColor: _primaryColor, + secondary: _secondaryColor, + brightness: Brightness.light, + ), + appBarTheme: const AppBarTheme( + centerTitle: true, + elevation: 0, + ), + ); + } + + static ThemeData get darkTheme { + return ThemeData( + useMaterial3: true, + colorScheme: ColorScheme.fromSeed( + seedColor: _primaryColor, + secondary: _secondaryColor, + brightness: Brightness.dark, + ), + appBarTheme: const AppBarTheme( + centerTitle: true, + elevation: 0, + ), + ); + } +} +``` + +### config/routes.dart + +```dart +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; +import '../screens/home/home_screen.dart'; +import '../screens/camera/camera_screen.dart'; +import '../screens/analysis/analysis_screen.dart'; +import '../screens/history/history_screen.dart'; +import '../screens/settings/settings_screen.dart'; +import '../screens/bluetooth/bluetooth_screen.dart'; + +final routerProvider = Provider((ref) { + return GoRouter( + initialLocation: '/', + routes: [ + GoRoute( + path: '/', + builder: (context, state) => const HomeScreen(), + ), + GoRoute( + path: '/camera', + builder: (context, state) => const CameraScreen(), + ), + GoRoute( + path: '/analysis', + builder: (context, state) => const AnalysisScreen(), + ), + GoRoute( + path: '/history', + builder: (context, state) => const HistoryScreen(), + ), + GoRoute( + path: '/settings', + builder: (context, state) => const SettingsScreen(), + ), + GoRoute( + path: '/bluetooth', + builder: (context, state) => const BluetoothScreen(), + ), + ], + ); +}); +``` + +### config/app_config.dart + +```dart +class AppConfig { + // API 配置 + static const String apiBaseUrl = 'https://api.aisee.com'; + static const String wsBaseUrl = 'wss://api.aisee.com/ws'; + + // 开发环境 + static const String devApiBaseUrl = 'http://10.0.2.2:8000'; + static const String devWsBaseUrl = 'ws://10.0.2.2:8000/ws'; + + // 图像配置 + static const int imageMaxWidth = 1280; + static const int imageMaxHeight = 720; + static const int imageQuality = 85; + + // 蓝牙配置 + static const String glassesServiceUuid = '0000ffe0-0000-1000-8000-00805f9b34fb'; + static const String glassesCharUuid = '0000ffe1-0000-1000-8000-00805f9b34fb'; + + // 超时配置 + static const Duration apiTimeout = Duration(seconds: 30); + static const Duration wsReconnectDelay = Duration(seconds: 5); +} +``` + +### services/api/api_client.dart + +```dart +import 'package:dio/dio.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../config/app_config.dart'; + +final apiClientProvider = Provider((ref) { + return ApiClient(); +}); + +class ApiClient { + late final Dio _dio; + + ApiClient() { + _dio = Dio(BaseOptions( + baseUrl: AppConfig.devApiBaseUrl, + connectTimeout: AppConfig.apiTimeout, + receiveTimeout: AppConfig.apiTimeout, + headers: { + 'Content-Type': 'application/json', + }, + )); + + _dio.interceptors.add(LogInterceptor( + requestBody: true, + responseBody: true, + )); + } + + // 上传图像 + Future> uploadImage(List imageBytes, String filename) async { + final formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes(imageBytes, filename: filename), + }); + + final response = await _dio.post('/api/v1/images/upload', data: formData); + return response.data; + } + + // 请求 AI 分析 + Future> analyzeImage(String imageUrl) async { + final response = await _dio.post('/api/v1/analysis/analyze', data: { + 'image_url': imageUrl, + }); + return response.data; + } +} +``` + +### services/camera/camera_service.dart + +```dart +import 'package:camera/camera.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:logger/logger.dart'; + +final cameraServiceProvider = Provider((ref) { + return CameraService(); +}); + +class CameraService { + final _logger = Logger(); + CameraController? _controller; + List _cameras = []; + + CameraController? get controller => _controller; + bool get isInitialized => _controller?.value.isInitialized ?? false; + + Future initialize() async { + _cameras = await availableCameras(); + if (_cameras.isEmpty) { + _logger.e('No cameras available'); + return; + } + + _controller = CameraController( + _cameras.first, + ResolutionPreset.medium, + enableAudio: false, + imageFormatGroup: ImageFormatGroup.jpeg, + ); + + await _controller!.initialize(); + _logger.i('Camera initialized'); + } + + Future takePicture() async { + if (!isInitialized) return null; + return await _controller!.takePicture(); + } + + void dispose() { + _controller?.dispose(); + } +} +``` + +### services/bluetooth/bluetooth_service.dart + +```dart +import 'dart:async'; +import 'dart:convert'; +import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:logger/logger.dart'; +import '../../config/app_config.dart'; + +final bluetoothServiceProvider = Provider((ref) { + return BluetoothService(); +}); + +class BluetoothService { + final _logger = Logger(); + BluetoothDevice? _connectedDevice; + BluetoothCharacteristic? _writeCharacteristic; + final _dataController = StreamController>.broadcast(); + + Stream> get dataStream => _dataController.stream; + bool get isConnected => _connectedDevice != null; + + // 扫描设备 + Future> scanDevices({Duration timeout = const Duration(seconds: 5)}) async { + final results = []; + + await FlutterBluePlus.startScan(timeout: timeout); + FlutterBluePlus.scanResults.listen((scanResults) { + results.addAll(scanResults); + }); + + await Future.delayed(timeout); + await FlutterBluePlus.stopScan(); + + return results; + } + + // 连接设备 + Future connect(BluetoothDevice device) async { + try { + await device.connect(timeout: const Duration(seconds: 10)); + _connectedDevice = device; + + // 发现服务 + final services = await device.discoverServices(); + for (var service in services) { + if (service.uuid.toString() == AppConfig.glassesServiceUuid) { + for (var char in service.characteristics) { + if (char.uuid.toString() == AppConfig.glassesCharUuid) { + _writeCharacteristic = char; + // 监听数据 + await char.setNotifyValue(true); + char.onValueReceived.listen((data) { + _dataController.add(data); + }); + } + } + } + } + + _logger.i('Connected to ${device.platformName}'); + return true; + } catch (e) { + _logger.e('Connection failed: $e'); + return false; + } + } + + // 发送数据到眼镜 + Future sendToGlasses(Map data) async { + if (_writeCharacteristic == null) return; + + final jsonStr = jsonEncode(data); + final bytes = utf8.encode(jsonStr); + await _writeCharacteristic!.write(bytes); + } + + // 断开连接 + Future disconnect() async { + await _connectedDevice?.disconnect(); + _connectedDevice = null; + _writeCharacteristic = null; + } + + void dispose() { + _dataController.close(); + disconnect(); + } +} +``` + +### screens/home/home_screen.dart + +```dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; + +class HomeScreen extends ConsumerWidget { + const HomeScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Scaffold( + appBar: AppBar( + title: const Text('AISee'), + actions: [ + IconButton( + icon: const Icon(Icons.bluetooth), + onPressed: () => context.push('/bluetooth'), + ), + IconButton( + icon: const Icon(Icons.settings), + onPressed: () => context.push('/settings'), + ), + ], + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + // 状态卡片 + Card( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + const Icon(Icons.visibility, size: 48, color: Colors.blue), + const SizedBox(height: 8), + Text( + 'AISee 视觉辅助', + style: Theme.of(context).textTheme.headlineSmall, + ), + const SizedBox(height: 4), + const Text('眼镜未连接', style: TextStyle(color: Colors.grey)), + ], + ), + ), + ), + const SizedBox(height: 24), + + // 功能按钮 + Expanded( + child: GridView.count( + crossAxisCount: 2, + mainAxisSpacing: 12, + crossAxisSpacing: 12, + children: [ + _FeatureCard( + icon: Icons.camera_alt, + label: '拍照识别', + color: Colors.blue, + onTap: () => context.push('/camera'), + ), + _FeatureCard( + icon: Icons.text_fields, + label: '文字识别', + color: Colors.green, + onTap: () => context.push('/camera'), + ), + _FeatureCard( + icon: Icons.landscape, + label: '场景理解', + color: Colors.orange, + onTap: () => context.push('/camera'), + ), + _FeatureCard( + icon: Icons.history, + label: '历史记录', + color: Colors.purple, + onTap: () => context.push('/history'), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _FeatureCard extends StatelessWidget { + final IconData icon; + final String label; + final Color color; + final VoidCallback onTap; + + const _FeatureCard({ + required this.icon, + required this.label, + required this.color, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 2, + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(12), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(icon, size: 48, color: color), + const SizedBox(height: 8), + Text(label, style: Theme.of(context).textTheme.titleMedium), + ], + ), + ), + ); + } +} +``` + +### 其他页面占位 + +```dart +// screens/camera/camera_screen.dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class CameraScreen extends ConsumerWidget { + const CameraScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Scaffold( + appBar: AppBar(title: const Text('拍照识别')), + body: const Center(child: Text('相机页面 - 待开发')), + ); + } +} + +// screens/analysis/analysis_screen.dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class AnalysisScreen extends ConsumerWidget { + const AnalysisScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Scaffold( + appBar: AppBar(title: const Text('分析结果')), + body: const Center(child: Text('分析结果页面 - 待开发')), + ); + } +} + +// screens/history/history_screen.dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class HistoryScreen extends ConsumerWidget { + const HistoryScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Scaffold( + appBar: AppBar(title: const Text('历史记录')), + body: const Center(child: Text('历史记录页面 - 待开发')), + ); + } +} + +// screens/settings/settings_screen.dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class SettingsScreen extends ConsumerWidget { + const SettingsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Scaffold( + appBar: AppBar(title: const Text('设置')), + body: const Center(child: Text('设置页面 - 待开发')), + ); + } +} + +// screens/bluetooth/bluetooth_screen.dart +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class BluetoothScreen extends ConsumerWidget { + const BluetoothScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return Scaffold( + appBar: AppBar(title: const Text('蓝牙连接')), + body: const Center(child: Text('蓝牙连接页面 - 待开发')), + ); + } +} +``` + +## 5. Android 权限配置 + +### android/app/src/main/AndroidManifest.xml 添加权限 + +```xml + + + + + + + + + + + + + +``` + +### android/app/build.gradle 修改最低 SDK + +```groovy +android { + defaultConfig { + minSdkVersion 21 // 改为 21 + } +} +``` + +## 6. 初始化项目命令 + +```bash +# 1. 创建项目 +cd C:\Users\xdedmi\Desktop\aisee +flutter create --org com.aisee --project-name aisee_app --platforms android,ios aisee_app +cd aisee_app + +# 2. 获取依赖 +flutter pub get + +# 3. 运行代码生成(freezed、json_serializable) +dart run build_runner build --delete-conflicting-outputs + +# 4. 运行项目 +flutter run + +# 5. 运行测试 +flutter test +``` + +## 7. Git 初始化 + +```bash +cd C:\Users\xdedmi\Desktop\aisee\aisee_app + +git init +git add . +git commit -m "feat: 初始化 AISee Flutter 项目" +``` + +## 8. 开发顺序建议 + +``` +第 1 周:项目搭建 + 首页 UI +第 2 周:相机模块 + 拍照功能 +第 3 周:API 对接 + 图像上传 +第 4 周:AI 分析结果展示 +第 5 周:蓝牙通信模块 +第 6 周:语音播报 + 历史记录 +第 7 周:设置页面 + 优化 +第 8 周:测试 + Bug 修复 +``` + +--- + +**提示**:先运行 `flutter pub get` 安装依赖,然后按照目录结构创建文件,逐步填充代码。 diff --git a/技术文档/README.md b/技术文档/README.md new file mode 100644 index 0000000..bdae31d --- /dev/null +++ b/技术文档/README.md @@ -0,0 +1,107 @@ +# AISee 项目文档索引 + +欢迎来到 AISee(AI 视觉辅助眼镜)项目! + +## 项目简介 + +AISee 是一个基于 AI 视觉识别的智能眼镜系统,通过 AR 眼镜采集实时图像,利用人工智能进行场景理解和内容识别,并将分析结果以增强现实的方式呈现给用户。主要服务于视障人士、老年人及专业工作场景。 + +## 核心特性 + +- 🔍 **实时物体识别**:识别日常物品并语音播报 +- 📖 **智能文字识别**:OCR 识别并朗读各类文字 +- 🌍 **场景理解**:理解环境并提供上下文信息 +- 👤 **人脸识别**:识别熟人并辅助社交 +- 🧭 **导航辅助**:AR 导航和障碍物预警 +- 🤖 **智能助手**:基于大模型的对话式 AI + +## 文档导航 + +### 📋 项目规划类 +- **[项目概述](./项目概述.md)** - 项目背景、目标、价值主张和系统架构 +- **[项目规划](./项目规划.md)** - 详细的实施计划、团队组织、时间表和预算 + +### 🛠️ 技术类 +- **[技术选型](./技术选型.md)** - 硬件、软件、AI 模型、云服务等技术栈选择 +- **[技术方案](./技术方案.md)** - 系统架构设计、核心模块实现、性能优化方案 + +### 📱 产品类 +- **[产品方案](./产品方案.md)** - 产品定位、功能设计、用户体验、商业模式 + +## 快速开始 + +### 了解项目 +1. 先阅读 [项目概述](./项目概述.md) 了解项目背景和目标 +2. 查看 [产品方案](./产品方案.md) 理解产品功能和用户体验 +3. 参考 [技术选型](./技术选型.md) 了解技术栈 + +### 技术实现 +1. 阅读 [技术方案](./技术方案.md) 了解系统架构 +2. 查看 [项目规划](./项目规划.md) 了解开发计划 +3. 开始编码实现 + +### 项目管理 +1. 参考 [项目规划](./项目规划.md) 中的团队组织和时间表 +2. 按照里程碑推进项目 +3. 定期回顾和调整 + +## 技术栈概览 + +### 硬件 +- AR 眼镜:Rokid Air / Xreal Air +- 移动设备:Android / iOS 手机 + +### 移动端 +- Android:Kotlin + Jetpack Compose + MVVM +- iOS:Swift + SwiftUI + Combine + +### 后端 +- 框架:Python + FastAPI +- 数据库:PostgreSQL + Redis +- 存储:MinIO / 阿里云 OSS + +### AI 模型 +- 物体检测:YOLO v8 +- 文字识别:PaddleOCR +- 场景理解:CLIP、BLIP-2 +- 大语言模型:GPT-4 Vision / Qwen-VL + +### 云服务 +- 推荐:阿里云(ECS、OSS、RDS) +- 备选:AWS(EC2、S3、RDS) + +## 项目阶段 + +``` +第一阶段(2个月) :需求调研与设计 +第二阶段(3个月) :MVP 开发 +第三阶段(2个月) :测试与迭代 +第四阶段(4个月) :v1.0 开发 +第五阶段(2个月) :公测与上线 +第六阶段(6+个月) :持续迭代 +``` + +## 联系方式 + +- 项目负责人:[待定] +- 技术负责人:[待定] +- 产品负责人:[待定] + +## 贡献指南 + +欢迎团队成员贡献代码和文档! + +1. Fork 项目仓库 +2. 创建功能分支 +3. 提交代码并编写测试 +4. 发起 Pull Request +5. 等待代码审查 + +## 许可证 + +[待定] + +--- + +**最后更新**:2026-03-02 +**文档版本**:v1.0 diff --git a/技术文档/产品方案.md b/技术文档/产品方案.md new file mode 100644 index 0000000..4d15ec2 --- /dev/null +++ b/技术文档/产品方案.md @@ -0,0 +1,479 @@ +# AISee 产品方案 + +## 产品定位 + +AISee 是一款面向视觉辅助场景的智能 AR 眼镜系统,通过 AI 技术为用户提供实时的视觉信息解读和增强现实体验。 + +### 目标用户 + +1. **视障人群**(核心用户) + - 全盲或低视力人士 + - 需要日常生活辅助 + - 年龄:18-65 岁 + +2. **老年人群** + - 视力退化 + - 需要阅读辅助 + - 年龄:60+ 岁 + +3. **专业人士** + - 工业检测人员 + - 医疗工作者 + - 物流仓储人员 + +4. **普通消费者** + - 旅游爱好者 + - 学习者 + - 科技爱好者 + +## 核心功能 + +### 1. 物体识别 + +#### 功能描述 +实时识别用户视野中的物体,并通过语音或 AR 标注告知用户。 + +#### 使用场景 +- **日常生活**:"前方是一把椅子,距离约 2 米" +- **购物场景**:"这是一瓶可口可乐,500ml,价格 3.5 元" +- **厨房场景**:"这是番茄酱,保质期至 2026 年 12 月" + +#### 交互方式 +``` +用户动作:注视物体 2 秒 +系统反馈: + - 视觉:绿色边框标注物体 + - 听觉:语音播报"这是一个水杯" + - 触觉:轻微震动确认 +``` + +#### 识别类别 +- 日常用品(100+ 类) +- 食品饮料(200+ 类) +- 交通工具(50+ 类) +- 动植物(500+ 类) +- 自定义物体(用户训练) + +### 2. 文字识别(OCR) + +#### 功能描述 +识别并朗读各类文字内容,支持中英文及多种语言。 + +#### 使用场景 +- **阅读书籍**:实时朗读书本内容 +- **查看标识**:识别路牌、门牌号、商店名称 +- **读取文档**:身份证、银行卡、账单等 +- **产品信息**:食品标签、药品说明书 + +#### 交互方式 +``` +触发方式: + 1. 语音指令:"读一下这个" + 2. 手势:双击眼镜侧边 + 3. 自动:检测到文字区域自动识别 + +输出方式: + - 语音朗读(可调速度) + - AR 文字高亮 + - 翻译功能(多语言) +``` + +#### 特色功能 +- **智能断句**:自然语音朗读 +- **重点标注**:价格、日期、重要信息高亮 +- **实时翻译**:外语即时翻译 +- **文字搜索**:查找特定关键词 + +### 3. 场景理解 + +#### 功能描述 +理解当前环境的整体情况,提供上下文相关的信息和建议。 + +#### 使用场景 +- **环境感知**:"您现在在一个咖啡厅,前方有空座位" +- **安全提示**:"前方有台阶,请小心" +- **导航辅助**:"出口在您的右前方,约 10 米" +- **社交场景**:"对面有 3 个人正在交谈" + +#### 智能分析 +``` +场景:用户进入餐厅 +系统分析: + 1. 环境类型:餐厅 + 2. 人员情况:约 20 人,较拥挤 + 3. 空间布局:前方有空桌,右侧是收银台 + 4. 建议行动:"建议向前走 5 米,左侧有空位" +``` + +### 4. 人脸识别 + +#### 功能描述 +识别熟人并提供身份信息,辅助社交互动。 + +#### 使用场景 +- **熟人识别**:"前方是您的朋友张三" +- **陌生人提示**:"前方有一位陌生人正在接近" +- **表情识别**:"对方正在微笑" +- **人数统计**:"当前视野内有 5 个人" + +#### 隐私保护 +- 仅识别已授权的联系人 +- 本地存储人脸特征 +- 不上传原始人脸图像 +- 用户可随时删除数据 + +### 5. 导航辅助 + +#### 功能描述 +结合 GPS 和视觉信息,提供精准的室内外导航。 + +#### 功能特点 +- **AR 箭头指引**:实时显示行走方向 +- **障碍物预警**:提前提示障碍物 +- **路径规划**:无障碍路线优先 +- **语音导航**:详细的转向指令 + +#### 交互示例 +``` +用户:"导航到最近的地铁站" +系统: + 1. 规划路线(800 米,预计 10 分钟) + 2. AR 显示:蓝色箭头指向前方 + 3. 语音:"直行 50 米后右转" + 4. 实时更新:距离目的地还有 750 米 +``` + +### 6. 智能助手 + +#### 功能描述 +基于大语言模型的对话式 AI 助手,回答用户问题。 + +#### 使用场景 +- **信息查询**:"这个水果叫什么名字?" +- **使用指导**:"这个药怎么吃?" +- **知识问答**:"这是什么建筑?" +- **生活建议**:"这件衣服适合什么场合穿?" + +#### 对话示例 +``` +用户:"这是什么花?" +助手:"这是向日葵,属于菊科植物。向日葵的花朵会随着太阳转动, + 因此得名。它的种子可以食用,也可以榨油。" + +用户:"怎么养护?" +助手:"向日葵喜欢阳光充足的环境,需要每天浇水,保持土壤湿润。 + 生长期需要施肥,大约 2-3 个月就能开花。" +``` + +## 产品功能架构 + +``` +┌─────────────────────────────────────────────────────────┐ +│ AISee 产品功能 │ +├─────────────────────────────────────────────────────────┤ +│ 核心功能层 │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │物体识别 │ │文字识别 │ │场景理解 │ │人脸识别 │ │ +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ +├─────────────────────────────────────────────────────────┤ +│ 辅助功能层 │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │导航辅助 │ │智能助手 │ │语音交互 │ │历史记录 │ │ +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ +├─────────────────────────────────────────────────────────┤ +│ 个性化层 │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │用户设置 │ │自定义训练│ │场景模式 │ │数据管理 │ │ +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +## 用户体验设计 + +### 1. 交互方式 + +#### 语音交互(主要) +``` +唤醒词:"小 AI" / "AISee" +常用指令: + - "这是什么?" + - "读一下" + - "导航到..." + - "识别人脸" + - "切换到阅读模式" +``` + +#### 手势交互 +``` +- 单击侧边按钮:拍照识别 +- 双击侧边按钮:OCR 识别 +- 长按侧边按钮:语音助手 +- 滑动触控板:调整音量 +``` + +#### 头部动作 +``` +- 点头:确认 +- 摇头:取消 +- 注视 2 秒:选择/识别 +``` + +### 2. 反馈机制 + +#### 多模态反馈 +``` +视觉反馈: + - AR 标注(边框、文字、箭头) + - 颜色编码(绿色=安全,红色=警告,蓝色=信息) + - 动画效果(淡入淡出、闪烁) + +听觉反馈: + - 语音播报(自然语音合成) + - 提示音(成功、失败、警告) + - 空间音频(方向提示) + +触觉反馈: + - 震动模式(不同强度和节奏) + - 确认震动、警告震动 +``` + +### 3. 场景模式 + +#### 预设模式 +``` +1. 日常模式(默认) + - 平衡识别速度和准确度 + - 所有功能开启 + - 适合日常使用 + +2. 阅读模式 + - OCR 优先 + - 自动朗读 + - 减少其他提示 + +3. 导航模式 + - 障碍物检测优先 + - 路径指引 + - 简化其他信息 + +4. 社交模式 + - 人脸识别优先 + - 表情分析 + - 社交场景理解 + +5. 省电模式 + - 降低识别频率 + - 减少 AR 显示 + - 延长续航时间 +``` + +### 4. 界面设计原则 + +#### AR 显示原则 +- **简洁优先**:避免信息过载 +- **对比度高**:确保可见性 +- **动态调整**:根据环境光自动调整 +- **分层显示**:重要信息优先 + +#### 无障碍设计 +- **大字体**:最小 24pt +- **高对比度**:4.5:1 以上 +- **语音优先**:所有功能支持语音 +- **简化操作**:减少复杂手势 + +## 产品路线图 + +### MVP 版本(v0.1 - 3 个月) + +#### 核心功能 +- ✅ 基础物体识别(50 类常见物品) +- ✅ 简单 OCR(中英文) +- ✅ 语音播报 +- ✅ 手机 APP(Android) +- ✅ 基础 AR 标注 + +#### 目标 +- 验证技术可行性 +- 收集用户反馈 +- 完成 100 次测试 + +### v1.0 版本(6 个月) + +#### 新增功能 +- 场景理解 +- 人脸识别(熟人) +- 导航辅助(基础) +- 智能助手(对话) +- iOS APP + +#### 优化 +- 识别准确率 > 90% +- 响应时间 < 2 秒 +- 续航时间 > 4 小时 + +#### 目标 +- 公测 1000 用户 +- 收集 10000+ 使用数据 +- 准备商业化 + +### v2.0 版本(12 个月) + +#### 高级功能 +- 自定义物体训练 +- 室内精准导航 +- 多语言支持(10+ 语言) +- 离线模式 +- 云端同步 + +#### 商业化 +- 订阅服务 +- 企业定制 +- 开发者平台 + +### v3.0 版本(18 个月) + +#### 生态建设 +- 第三方应用市场 +- API 开放平台 +- 社区共建 +- 硬件升级 + +## 商业模式 + +### 1. 硬件销售 + +#### 产品定价 +``` +基础版:1999 元 + - 标准 AR 眼镜 + - 基础功能 + - 1 年免费服务 + +专业版:3999 元 + - 高端 AR 眼镜 + - 全部功能 + - 3 年免费服务 + - 优先技术支持 + +企业版:定制报价 + - 批量采购优惠 + - 定制化开发 + - 专属技术支持 +``` + +### 2. 订阅服务 + +#### 服务套餐 +``` +免费版: + - 基础物体识别 + - 简单 OCR + - 每日 100 次识别 + +标准版:29 元/月 + - 所有识别功能 + - 无限次使用 + - 云端存储 10GB + - 历史记录 + +高级版:99 元/月 + - 标准版所有功能 + - 自定义训练 + - 云端存储 100GB + - 优先处理 + - 离线模式 + +企业版:999 元/月起 + - 高级版所有功能 + - 私有化部署 + - 定制化开发 + - 专属客服 + - SLA 保障 +``` + +### 3. 增值服务 + +- **数据标注服务**:为企业提供数据标注 +- **模型训练服务**:定制化 AI 模型 +- **技术咨询**:AI 视觉解决方案咨询 +- **广告合作**:场景化广告推荐 + +## 竞争分析 + +### 竞品对比 + +| 产品 | AISee | Envision Glasses | OrCam MyEye | Seeing AI | +|------|-------|------------------|-------------|-----------| +| 价格 | 1999-3999 元 | $3500 | $4500 | 免费(仅软件)| +| 形态 | AR 眼镜 | 智能眼镜 | 夹扣式 | 手机 APP | +| 物体识别 | ✅ | ✅ | ✅ | ✅ | +| OCR | ✅ | ✅ | ✅ | ✅ | +| 人脸识别 | ✅ | ✅ | ✅ | ✅ | +| AR 显示 | ✅ | ❌ | ❌ | ❌ | +| 导航 | ✅ | 基础 | ❌ | 基础 | +| 中文支持 | ✅ | 有限 | 有限 | ✅ | +| 离线模式 | v2.0 | ✅ | ✅ | 部分 | + +### 竞争优势 + +1. **价格优势**:比国外产品便宜 50% +2. **AR 体验**:独特的增强现实显示 +3. **本地化**:更好的中文支持 +4. **生态开放**:支持第三方开发 +5. **持续更新**:基于云端的 AI 能力持续提升 + +## 市场策略 + +### 目标市场 + +#### 一期市场(国内) +- 中国视障人群:1700 万 +- 目标用户:50 万(3%) +- 市场规模:10 亿元 + +#### 二期市场(海外) +- 全球视障人群:2.85 亿 +- 目标用户:100 万 +- 市场规模:50 亿元 + +### 推广策略 + +1. **公益合作** + - 与残联合作 + - 公益捐赠计划 + - 免费试用活动 + +2. **渠道建设** + - 线上:官网、电商平台 + - 线下:医疗器械店、眼镜店 + - 合作:医院、康复中心 + +3. **品牌建设** + - 用户故事传播 + - 科技媒体报道 + - 行业展会参展 + +4. **社区运营** + - 用户社区 + - 开发者社区 + - 志愿者网络 + +## 成功指标 + +### 产品指标 +- 识别准确率 > 95% +- 响应时间 < 1.5 秒 +- 用户满意度 > 4.5/5 +- 日活跃用户 > 10000 + +### 商业指标 +- 第一年销售 10000 台 +- 付费用户转化率 > 30% +- 用户留存率(月)> 80% +- NPS 评分 > 50 + +### 社会影响 +- 帮助 50000+ 视障人士 +- 媒体报道 100+ 次 +- 获得行业奖项 +- 推动无障碍标准制定 diff --git a/技术文档/技术方案.md b/技术文档/技术方案.md new file mode 100644 index 0000000..f4fb510 --- /dev/null +++ b/技术文档/技术方案.md @@ -0,0 +1,543 @@ +# AISee 技术实现方案 + +## 系统架构设计 + +### 整体架构图 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ 用户层 │ +│ AR 智能眼镜 │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ 摄像头模块 │ │ 显示模块 │ │ 传感器模块 │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + ↕ (蓝牙/WiFi) +┌─────────────────────────────────────────────────────────────┐ +│ 移动端层 │ +│ 手机 APP │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ UI 层:用户界面、设置、历史记录 │ │ +│ ├──────────────────────────────────────────────────────┤ │ +│ │ 业务层:图像处理、数据管理、设备通信 │ │ +│ ├──────────────────────────────────────────────────────┤ │ +│ │ 数据层:本地缓存、数据库、网络请求 │ │ +│ └──────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + ↕ (HTTPS/WebSocket) +┌─────────────────────────────────────────────────────────────┐ +│ 云端层 │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ API 网关 │ │ 负载均衡 │ │ CDN │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ 应用服务层 │ │ +│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ +│ │ │ 图像服务 │ │ AI 服务 │ │ 用户服务 │ │ │ +│ │ └────────────┘ └────────────┘ └────────────┘ │ │ +│ └──────────────────────────────────────────────────────┘ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ AI 推理层 │ │ +│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ +│ │ │ 物体识别 │ │ OCR 识别 │ │ 场景理解 │ │ │ +│ │ └────────────┘ └────────────┘ └────────────┘ │ │ +│ └──────────────────────────────────────────────────────┘ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ 数据层 │ │ +│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ +│ │ │ PostgreSQL │ │ Redis │ │ OSS │ │ │ +│ │ └────────────┘ └────────────┘ └────────────┘ │ │ +│ └──────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 核心模块设计 + +### 1. 图像采集与传输模块 + +#### 眼镜端 +```python +# 伪代码示例 +class CameraModule: + def __init__(self): + self.camera = Camera(resolution="1920x1080", fps=30) + self.encoder = H264Encoder() + + def capture_frame(self): + """采集单帧图像""" + frame = self.camera.read() + return self.preprocess(frame) + + def preprocess(self, frame): + """图像预处理""" + # 1. 调整分辨率(降低到 640x480 以减少传输) + frame = resize(frame, (640, 480)) + # 2. 压缩质量优化 + frame = compress(frame, quality=85) + return frame + + def stream_to_phone(self): + """实时流传输""" + while True: + frame = self.capture_frame() + self.bluetooth.send(frame) + time.sleep(0.033) # 30fps +``` + +#### 手机端接收 +```kotlin +// Android 示例 +class ImageReceiver(private val bluetoothSocket: BluetoothSocket) { + private val imageQueue = LinkedBlockingQueue(10) + + fun startReceiving() { + CoroutineScope(Dispatchers.IO).launch { + val inputStream = bluetoothSocket.inputStream + while (isActive) { + val imageData = readImageData(inputStream) + imageQueue.offer(imageData) + } + } + } + + fun getNextImage(): ByteArray? { + return imageQueue.poll(100, TimeUnit.MILLISECONDS) + } +} +``` + +### 2. 手机 APP 架构 + +#### 目录结构 +``` +app/ +├── data/ +│ ├── local/ # 本地数据源 +│ │ ├── database/ # Room 数据库 +│ │ └── cache/ # 图像缓存 +│ ├── remote/ # 远程数据源 +│ │ ├── api/ # API 接口 +│ │ └── websocket/ # WebSocket 连接 +│ └── repository/ # 数据仓库 +├── domain/ +│ ├── model/ # 领域模型 +│ ├── usecase/ # 业务用例 +│ └── repository/ # 仓库接口 +├── presentation/ +│ ├── main/ # 主界面 +│ ├── settings/ # 设置界面 +│ ├── history/ # 历史记录 +│ └── viewmodel/ # ViewModel +└── device/ + ├── bluetooth/ # 蓝牙通信 + └── camera/ # 相机处理 +``` + +#### 核心业务流程 +```kotlin +class ImageProcessingViewModel @Inject constructor( + private val imageRepository: ImageRepository, + private val aiService: AIService +) : ViewModel() { + + private val _aiResult = MutableStateFlow(null) + val aiResult: StateFlow = _aiResult.asStateFlow() + + fun processImage(imageData: ByteArray) { + viewModelScope.launch { + try { + // 1. 保存到本地缓存 + val imageId = imageRepository.saveImage(imageData) + + // 2. 上传到服务器 + val uploadResult = imageRepository.uploadImage(imageId, imageData) + + // 3. 请求 AI 分析 + val result = aiService.analyzeImage(uploadResult.url) + + // 4. 更新 UI + _aiResult.value = result + + // 5. 发送结果到眼镜 + sendToGlasses(result) + + } catch (e: Exception) { + handleError(e) + } + } + } + + private suspend fun sendToGlasses(result: AIResult) { + val displayData = formatForAR(result) + bluetoothManager.send(displayData) + } +} +``` + +### 3. 后端 API 设计 + +#### 项目结构 +``` +backend/ +├── app/ +│ ├── api/ +│ │ ├── v1/ +│ │ │ ├── endpoints/ +│ │ │ │ ├── images.py # 图像上传 +│ │ │ │ ├── analysis.py # AI 分析 +│ │ │ │ └── users.py # 用户管理 +│ │ │ └── router.py +│ │ └── deps.py # 依赖注入 +│ ├── core/ +│ │ ├── config.py # 配置 +│ │ ├── security.py # 安全 +│ │ └── celery_app.py # 异步任务 +│ ├── models/ +│ │ ├── user.py +│ │ ├── image.py +│ │ └── analysis.py +│ ├── schemas/ +│ │ ├── image.py # Pydantic 模型 +│ │ └── analysis.py +│ ├── services/ +│ │ ├── ai/ +│ │ │ ├── object_detection.py +│ │ │ ├── ocr.py +│ │ │ ├── scene_understanding.py +│ │ │ └── model_manager.py +│ │ ├── storage.py # 对象存储 +│ │ └── cache.py # 缓存服务 +│ └── main.py +├── tests/ +├── requirements.txt +└── Dockerfile +``` + +#### API 端点设计 +```python +from fastapi import FastAPI, UploadFile, File, BackgroundTasks +from app.services.ai import AIService +from app.schemas import AnalysisRequest, AnalysisResponse + +app = FastAPI(title="AISee API") + +@app.post("/api/v1/images/upload") +async def upload_image( + file: UploadFile = File(...), + user_id: str = Depends(get_current_user) +): + """上传图像""" + # 1. 验证图像格式 + validate_image(file) + + # 2. 保存到 OSS + image_url = await storage_service.upload(file) + + # 3. 保存元数据到数据库 + image_record = await db.images.create({ + "user_id": user_id, + "url": image_url, + "uploaded_at": datetime.now() + }) + + return {"image_id": image_record.id, "url": image_url} + +@app.post("/api/v1/analysis/analyze", response_model=AnalysisResponse) +async def analyze_image( + request: AnalysisRequest, + background_tasks: BackgroundTasks +): + """AI 图像分析""" + # 1. 获取图像 + image = await storage_service.download(request.image_url) + + # 2. 并行执行多个 AI 任务 + results = await asyncio.gather( + ai_service.detect_objects(image), + ai_service.recognize_text(image), + ai_service.understand_scene(image) + ) + + # 3. 合并结果 + analysis_result = merge_results(results) + + # 4. 异步保存到数据库 + background_tasks.add_task(save_analysis, analysis_result) + + return analysis_result + +@app.websocket("/ws/realtime") +async def websocket_endpoint(websocket: WebSocket): + """实时分析 WebSocket""" + await websocket.accept() + + try: + while True: + # 接收图像数据 + data = await websocket.receive_bytes() + + # 快速分析 + result = await ai_service.quick_analyze(data) + + # 返回结果 + await websocket.send_json(result) + except WebSocketDisconnect: + pass +``` + +### 4. AI 推理服务设计 + +#### 模型管理器 +```python +class ModelManager: + def __init__(self): + self.models = {} + self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + def load_models(self): + """加载所有模型""" + # 物体检测模型 + self.models['yolo'] = YOLO('yolov8n.pt').to(self.device) + + # OCR 模型 + self.models['ocr'] = PaddleOCR(use_angle_cls=True, lang='ch') + + # 场景理解模型 + self.models['clip'] = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") + + # 多模态大模型 + self.models['llm'] = load_qwen_vl_model() + + def get_model(self, model_name: str): + return self.models.get(model_name) + +class AIService: + def __init__(self): + self.model_manager = ModelManager() + self.model_manager.load_models() + + async def detect_objects(self, image: np.ndarray) -> List[Detection]: + """物体检测""" + model = self.model_manager.get_model('yolo') + results = model(image) + + detections = [] + for r in results: + boxes = r.boxes + for box in boxes: + detections.append({ + "class": box.cls, + "confidence": box.conf, + "bbox": box.xyxy.tolist(), + "label": model.names[int(box.cls)] + }) + + return detections + + async def recognize_text(self, image: np.ndarray) -> List[TextRegion]: + """文字识别""" + ocr = self.model_manager.get_model('ocr') + result = ocr.ocr(image, cls=True) + + text_regions = [] + for line in result[0]: + text_regions.append({ + "text": line[1][0], + "confidence": line[1][1], + "bbox": line[0] + }) + + return text_regions + + async def understand_scene(self, image: np.ndarray) -> SceneDescription: + """场景理解""" + # 使用多模态大模型生成场景描述 + llm = self.model_manager.get_model('llm') + + prompt = "请详细描述这张图片中的场景、物体和可能的上下文信息。" + description = llm.generate(image, prompt) + + return { + "description": description, + "tags": extract_tags(description), + "sentiment": analyze_sentiment(description) + } +``` + +### 5. AR 显示模块 + +#### 数据格式设计 +```json +{ + "type": "ar_overlay", + "timestamp": 1234567890, + "elements": [ + { + "id": "obj_001", + "type": "bounding_box", + "position": {"x": 100, "y": 150, "width": 200, "height": 300}, + "label": "水杯", + "confidence": 0.95, + "color": "#00FF00" + }, + { + "id": "text_001", + "type": "text_overlay", + "position": {"x": 50, "y": 50}, + "content": "前方有台阶,请小心", + "font_size": 24, + "color": "#FF0000", + "duration": 3000 + }, + { + "id": "arrow_001", + "type": "direction_arrow", + "start": {"x": 320, "y": 240}, + "end": {"x": 400, "y": 240}, + "label": "出口方向" + } + ] +} +``` + +#### 眼镜端渲染 +```python +class ARRenderer: + def __init__(self, display): + self.display = display + self.overlay_queue = queue.Queue() + + def render_frame(self, camera_frame, ar_data): + """渲染 AR 叠加层""" + # 1. 绘制原始相机画面 + frame = camera_frame.copy() + + # 2. 绘制 AR 元素 + for element in ar_data['elements']: + if element['type'] == 'bounding_box': + self.draw_bbox(frame, element) + elif element['type'] == 'text_overlay': + self.draw_text(frame, element) + elif element['type'] == 'direction_arrow': + self.draw_arrow(frame, element) + + # 3. 显示到眼镜屏幕 + self.display.show(frame) + + def draw_bbox(self, frame, element): + """绘制边界框""" + pos = element['position'] + cv2.rectangle( + frame, + (pos['x'], pos['y']), + (pos['x'] + pos['width'], pos['y'] + pos['height']), + self.hex_to_rgb(element['color']), + 2 + ) + # 绘制标签 + cv2.putText( + frame, + f"{element['label']} {element['confidence']:.2f}", + (pos['x'], pos['y'] - 10), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + self.hex_to_rgb(element['color']), + 2 + ) +``` + +## 性能优化方案 + +### 1. 图像传输优化 +- 使用 H.264 硬件编码 +- 动态调整分辨率和帧率 +- 实现智能跳帧机制 +- 使用 WiFi Direct 替代蓝牙(高带宽场景) + +### 2. AI 推理优化 +- 模型量化(INT8) +- 批处理推理 +- 模型缓存和预热 +- GPU 并行计算 +- 使用 TensorRT 加速 + +### 3. 网络优化 +- CDN 加速静态资源 +- 图像压缩和格式优化(WebP) +- HTTP/2 多路复用 +- 请求合并和批处理 +- 智能重试机制 + +### 4. 缓存策略 +```python +# 多级缓存 +class CacheStrategy: + def __init__(self): + self.l1_cache = LRUCache(maxsize=100) # 内存缓存 + self.l2_cache = RedisCache() # Redis 缓存 + self.l3_cache = DatabaseCache() # 数据库 + + async def get(self, key): + # L1 缓存 + if key in self.l1_cache: + return self.l1_cache[key] + + # L2 缓存 + value = await self.l2_cache.get(key) + if value: + self.l1_cache[key] = value + return value + + # L3 缓存 + value = await self.l3_cache.get(key) + if value: + await self.l2_cache.set(key, value, ttl=3600) + self.l1_cache[key] = value + + return value +``` + +## 安全方案 + +### 1. 数据传输安全 +- TLS 1.3 加密 +- 证书固定(Certificate Pinning) +- 请求签名验证 + +### 2. 隐私保护 +- 图像本地处理优先 +- 敏感信息脱敏 +- 用户数据加密存储 +- 定期数据清理 + +### 3. 访问控制 +- JWT 认证 +- OAuth 2.0 授权 +- API 限流 +- IP 白名单 + +## 监控与运维 + +### 1. 性能监控 +```python +# 关键指标 +metrics = { + "image_upload_latency": Histogram(), + "ai_inference_time": Histogram(), + "api_response_time": Histogram(), + "error_rate": Counter(), + "active_users": Gauge() +} +``` + +### 2. 日志系统 +- 结构化日志(JSON 格式) +- 分级日志(DEBUG/INFO/WARN/ERROR) +- 日志聚合和分析 +- 告警机制 + +### 3. 容灾方案 +- 服务降级 +- 熔断机制 +- 限流保护 +- 数据备份 diff --git a/技术文档/技术选型.md b/技术文档/技术选型.md new file mode 100644 index 0000000..30f9464 --- /dev/null +++ b/技术文档/技术选型.md @@ -0,0 +1,175 @@ +# AISee 技术选型方案 + +## 1. AR 眼镜硬件选型 + +### 推荐方案 +**Rokid Air / Xreal Air** +- 轻量化设计(约 80g) +- 支持蓝牙和 USB-C 连接 +- 1080p 显示分辨率 +- 内置摄像头(部分型号) +- 价格适中(2000-3000元) + +### 备选方案 +- **RealWear HMT-1**:工业级,更耐用但较重 +- **Vuzix Blade**:集成度高但价格较贵 +- **自研方案**:基于树莓派 + 微型显示器(成本可控但开发周期长) + +## 2. 移动端技术栈(Flutter 跨平台) + +### 选型理由 +- 一套代码同时支持 Android 和 iOS,快速验证产品 +- Dart 语言性能接近原生,热重载提升开发效率 +- 丰富的插件生态,蓝牙、相机等硬件访问成熟 +- 社区活跃,问题解决快 + +### 核心框架 +``` +语言:Dart 3.2+ +框架:Flutter 3.16+ +状态管理:Riverpod 2.x +路由:GoRouter +网络请求:Dio +WebSocket:web_socket_channel +本地存储:Hive + sqflite +JSON 序列化:freezed + json_serializable +``` + +### 硬件交互 +``` +相机:camera 插件 +蓝牙:flutter_blue_plus +权限管理:permission_handler +语音合成:flutter_tts +图片处理:image +``` + +### UI 相关 +``` +设计规范:Material Design 3 +图片加载:cached_network_image +字体:google_fonts +图标:cupertino_icons + flutter_svg +``` + +### 开发工具 +``` +IDE:VS Code + Flutter/Dart 插件 +代码生成:build_runner +代码规范:flutter_lints +测试:mockito + mocktail +``` + +## 3. 后端技术栈 + +### 核心框架 +``` +语言:Python 3.11+ +Web 框架:FastAPI +异步处理:asyncio + uvicorn +任务队列:Celery + Redis +数据库:PostgreSQL 15 +缓存:Redis 7 +对象存储:MinIO / 阿里云 OSS +``` + +### AI 推理服务 +``` +深度学习框架:PyTorch 2.0+ +模型服务:TorchServe / TensorRT +GPU 加速:CUDA 12.0+ +模型管理:MLflow +``` + +## 4. AI 模型选型 + +### 视觉识别模型 + +#### 物体检测 +- **YOLO v8**:实时性好,精度高 +- **EfficientDet**:移动端友好 +- **Faster R-CNN**:高精度场景 + +#### 文字识别(OCR) +- **PaddleOCR**:中文支持好,开源免费 +- **EasyOCR**:多语言支持 +- **Tesseract**:传统方案,稳定可靠 + +#### 场景理解 +- **CLIP**(OpenAI):图文匹配,零样本学习 +- **BLIP-2**:图像描述生成 +- **SAM**(Segment Anything):通用分割 + +#### 人脸识别 +- **InsightFace**:高精度,商用友好 +- **FaceNet**:经典方案 +- **RetinaFace**:人脸检测 + +### 大语言模型(LLM) +- **GPT-4 Vision**:最强理解能力(API 调用) +- **Claude 3**:视觉理解能力强 +- **Qwen-VL**:国产开源,可私有化部署 +- **LLaVA**:开源多模态模型 + +## 5. 云服务选型 + +### 推荐:阿里云 +``` +计算:ECS(GPU 实例 - GN7i) +存储:OSS +数据库:RDS PostgreSQL +缓存:Redis 企业版 +CDN:阿里云 CDN +负载均衡:SLB +``` + +### 备选:AWS +``` +计算:EC2(g4dn 实例) +存储:S3 +数据库:RDS +缓存:ElastiCache +CDN:CloudFront +负载均衡:ALB +``` + +## 6. 通信协议 + +### 眼镜 ↔ 手机 +- **蓝牙 BLE**:低功耗,适合控制指令 +- **WiFi Direct**:高带宽,适合图像传输 +- **USB-C**:有线连接,最稳定 + +### 手机 ↔ 后端 +- **HTTP/2 + gRPC**:API 调用 +- **WebSocket**:实时双向通信 +- **MQTT**:轻量级消息推送 + +## 7. 开发工具链 + +### 版本控制 +- Git + GitHub / GitLab + +### CI/CD +- GitHub Actions / GitLab CI +- Docker + Kubernetes + +### 监控运维 +- Prometheus + Grafana(监控) +- ELK Stack(日志) +- Sentry(错误追踪) + +### 协作工具 +- Jira(项目管理) +- Confluence(文档) +- Figma(设计) +- Postman(API 测试) + +## 8. 技术选型原则 + +1. **优先开源**:降低成本,避免供应商锁定 +2. **成熟稳定**:选择经过验证的技术栈 +3. **性能优先**:实时性是核心需求 +4. **可扩展性**:支持未来功能扩展 +5. **团队熟悉度**:考虑团队技术背景 +6. **社区活跃**:便于问题解决和学习 diff --git a/技术文档/项目概述.md b/技术文档/项目概述.md new file mode 100644 index 0000000..8236afc --- /dev/null +++ b/技术文档/项目概述.md @@ -0,0 +1,49 @@ +# AISee - AI 视觉辅助眼镜项目 + +## 项目简介 + +AISee 是一个基于 AI 视觉识别的智能眼镜系统,通过 AR 眼镜采集实时图像,利用人工智能进行场景理解和内容识别,并将分析结果以增强现实的方式呈现给用户。 + +## 核心价值 + +- **实时视觉辅助**:为视障人士、老年人或特定工作场景提供实时的视觉信息解读 +- **智能场景理解**:识别物体、文字、人脸、场景等多维度信息 +- **AR 交互体验**:通过 AR 显示技术,将 AI 分析结果直观呈现在用户视野中 +- **移动化部署**:基于手机作为计算中枢,降低硬件成本和复杂度 + +## 应用场景 + +1. **视障辅助**:帮助视障人士识别物体、阅读文字、导航环境 +2. **工业检测**:辅助工人进行设备检查、质量控制 +3. **医疗辅助**:手术过程中的信息提示、病历查看 +4. **教育培训**:实时翻译、知识标注、学习辅助 +5. **旅游导览**:景点识别、历史信息展示、路线导航 + +## 系统架构概览 + +``` +AR 眼镜 <--蓝牙/WiFi--> 手机 APP <--网络--> 云端 AI 服务 + ↓ ↓ ↓ +图像采集 数据中转 AI 分析 +AR 显示 本地处理 模型推理 +``` + +## 项目目标 + +### 第一阶段(MVP - 3个月) +- 完成基础图像采集和传输 +- 实现基本的物体识别和文字识别 +- 开发简单的 AR 显示功能 +- 完成手机 APP 和后端 API + +### 第二阶段(功能完善 - 6个月) +- 增强 AI 识别能力(场景理解、人脸识别) +- 优化 AR 显示效果和交互体验 +- 提升系统响应速度和稳定性 +- 支持离线模式和边缘计算 + +### 第三阶段(商业化 - 12个月) +- 多场景适配和定制化 +- 大规模部署和性能优化 +- 建立生态系统和开发者平台 +- 数据安全和隐私保护增强 diff --git a/技术文档/项目规划.md b/技术文档/项目规划.md new file mode 100644 index 0000000..501c169 --- /dev/null +++ b/技术文档/项目规划.md @@ -0,0 +1,437 @@ +# AISee 项目实施计划 + +## 项目概览 + +**项目名称**:AISee - AI 视觉辅助眼镜系统 +**项目周期**:18 个月 +**团队规模**:15-20 人 +**预算范围**:500-800 万元 + +## 团队组织架构 + +### 核心团队 + +``` +项目负责人(1人) + ├── 产品团队(3人) + │ ├── 产品经理(1人) + │ ├── UI/UX 设计师(1人) + │ └── 产品运营(1人) + │ + ├── 技术团队(10人) + │ ├── 移动端(3人) + │ │ ├── Android 开发(2人) + │ │ └── iOS 开发(1人) + │ │ + │ ├── 后端(3人) + │ │ ├── 后端架构师(1人) + │ │ └── 后端开发(2人) + │ │ + │ ├── AI 团队(3人) + │ │ ├── AI 算法工程师(2人) + │ │ └── 模型训练工程师(1人) + │ │ + │ └── 硬件/嵌入式(1人) + │ + ├── 测试团队(2人) + │ ├── 测试工程师(1人) + │ └── 质量保证(1人) + │ + └── 运维团队(1人) + └── DevOps 工程师(1人) +``` + +### 外部协作 + +- **硬件供应商**:AR 眼镜制造商 +- **云服务商**:阿里云/AWS +- **数据标注**:外包团队 +- **法律顾问**:知识产权、隐私合规 +- **用户测试**:残联、志愿者组织 + +## 项目阶段规划 + +### 第一阶段:需求调研与设计(1-2 个月) + +#### 第 1-2 周:市场调研 +- [ ] 竞品分析(5 款主要产品) +- [ ] 用户访谈(50+ 目标用户) +- [ ] 需求收集和优先级排序 +- [ ] 可行性分析报告 + +#### 第 3-4 周:产品设计 +- [ ] 产品功能规格书(PRD) +- [ ] 用户体验流程图 +- [ ] UI/UX 设计稿 +- [ ] 交互原型(Figma) + +#### 第 5-6 周:技术设计 +- [ ] 系统架构设计 +- [ ] 技术选型确认 +- [ ] 数据库设计 +- [ ] API 接口设计 +- [ ] 安全方案设计 + +#### 第 7-8 周:项目准备 +- [ ] 开发环境搭建 +- [ ] 代码仓库初始化 +- [ ] CI/CD 流程建立 +- [ ] 项目管理工具配置 +- [ ] 团队培训 + +**交付物**: +- 产品需求文档(PRD) +- 技术架构文档 +- UI/UX 设计稿 +- 项目计划书 + +### 第二阶段:MVP 开发(3-5 个月) + +#### 第 9-12 周:基础框架搭建 +**移动端** +- [ ] Android APP 框架搭建 +- [ ] 蓝牙通信模块 +- [ ] 图像采集和预处理 +- [ ] 基础 UI 界面 + +**后端** +- [ ] FastAPI 项目初始化 +- [ ] 数据库表结构创建 +- [ ] 用户认证系统 +- [ ] 图像上传 API +- [ ] 对象存储集成 + +**AI 服务** +- [ ] 模型选型和测试 +- [ ] YOLO 物体检测集成 +- [ ] PaddleOCR 集成 +- [ ] 推理服务搭建 + +**硬件** +- [ ] AR 眼镜选型和采购 +- [ ] 硬件通信协议确认 +- [ ] 固件开发(如需要) + +#### 第 13-16 周:核心功能开发 +**物体识别** +- [ ] 50 类常见物品识别 +- [ ] 边界框标注 +- [ ] 语音播报 +- [ ] 置信度显示 + +**文字识别** +- [ ] 中英文 OCR +- [ ] 文字区域检测 +- [ ] 文字朗读 +- [ ] 结果缓存 + +**AR 显示** +- [ ] 基础 AR 渲染引擎 +- [ ] 边界框绘制 +- [ ] 文字叠加 +- [ ] 颜色和样式 + +**系统集成** +- [ ] 端到端流程打通 +- [ ] 数据流测试 +- [ ] 性能初步优化 + +#### 第 17-20 周:功能完善与优化 +- [ ] 用户设置功能 +- [ ] 历史记录 +- [ ] 错误处理 +- [ ] 日志系统 +- [ ] 性能优化 +- [ ] 内存优化 +- [ ] 网络优化 + +**交付物**: +- MVP 版本(v0.1) +- 技术文档 +- 测试报告 +- 演示视频 + +### 第三阶段:测试与迭代(2 个月) + +#### 第 21-24 周:内部测试 +- [ ] 单元测试(覆盖率 > 80%) +- [ ] 集成测试 +- [ ] 性能测试 +- [ ] 压力测试 +- [ ] 安全测试 +- [ ] Bug 修复 + +#### 第 25-28 周:用户测试 +- [ ] 招募测试用户(50 人) +- [ ] 用户培训 +- [ ] 实地测试 +- [ ] 收集反馈 +- [ ] 问题分析 +- [ ] 功能迭代 + +**测试指标**: +- 识别准确率 > 85% +- 响应时间 < 3 秒 +- 崩溃率 < 1% +- 用户满意度 > 4.0/5 + +**交付物**: +- 测试报告 +- 用户反馈报告 +- 优化方案 + +### 第四阶段:v1.0 开发(3-4 个月) + +#### 第 29-32 周:高级功能开发 +**场景理解** +- [ ] 集成多模态大模型 +- [ ] 场景描述生成 +- [ ] 上下文分析 +- [ ] 智能建议 + +**人脸识别** +- [ ] InsightFace 集成 +- [ ] 人脸数据库 +- [ ] 熟人识别 +- [ ] 隐私保护 + +**导航辅助** +- [ ] GPS 集成 +- [ ] 路径规划 +- [ ] AR 导航箭头 +- [ ] 障碍物检测 + +**智能助手** +- [ ] LLM 集成(GPT-4V/Claude) +- [ ] 对话管理 +- [ ] 上下文记忆 +- [ ] 多轮对话 + +#### 第 33-36 周:iOS 开发 +- [ ] iOS APP 开发 +- [ ] 功能对齐 +- [ ] 平台适配 +- [ ] 测试验证 + +#### 第 37-40 周:优化与完善 +- [ ] 性能深度优化 +- [ ] UI/UX 优化 +- [ ] 多语言支持 +- [ ] 无障碍优化 +- [ ] 文档完善 + +**交付物**: +- v1.0 正式版 +- 用户手册 +- 开发者文档 +- 运营手册 + +### 第五阶段:公测与上线(2 个月) + +#### 第 41-44 周:公测准备 +- [ ] 服务器扩容 +- [ ] 监控系统完善 +- [ ] 客服系统搭建 +- [ ] 用户社区建设 +- [ ] 营销物料准备 + +#### 第 45-48 周:公测 +- [ ] 招募 1000 名测试用户 +- [ ] 灰度发布 +- [ ] 问题快速响应 +- [ ] 数据分析 +- [ ] 持续优化 + +#### 第 49-52 周:正式上线 +- [ ] 全量发布 +- [ ] 市场推广 +- [ ] 媒体宣传 +- [ ] 渠道合作 +- [ ] 用户运营 + +**交付物**: +- 正式产品 +- 运营数据报告 +- 市场反馈报告 + +### 第六阶段:持续迭代(6+ 个月) + +#### v2.0 规划 +- 自定义物体训练 +- 离线模式 +- 室内精准导航 +- 更多语言支持 +- 企业定制功能 + +#### 生态建设 +- 开发者平台 +- API 开放 +- 第三方应用 +- 社区运营 + +## 里程碑与关键节点 + +| 时间 | 里程碑 | 关键交付 | +|------|--------|----------| +| M1(2个月) | 需求与设计完成 | PRD、架构设计、UI 设计 | +| M2(5个月) | MVP 开发完成 | v0.1 版本、技术验证 | +| M3(7个月) | 测试完成 | 测试报告、用户反馈 | +| M4(11个月) | v1.0 开发完成 | 完整功能版本 | +| M5(13个月) | 公测完成 | 1000 用户验证 | +| M6(14个月) | 正式上线 | 商业化运营 | +| M7(18个月) | v2.0 规划 | 生态建设启动 | + +## 风险管理 + +### 技术风险 + +| 风险 | 影响 | 概率 | 应对措施 | +|------|------|------|----------| +| AI 识别准确率不达标 | 高 | 中 | 多模型对比、数据增强、持续训练 | +| 实时性能不足 | 高 | 中 | 模型优化、边缘计算、硬件加速 | +| 硬件兼容性问题 | 中 | 高 | 多设备测试、抽象硬件层 | +| 网络延迟影响体验 | 中 | 中 | 本地缓存、离线模式、CDN 加速 | + +### 产品风险 + +| 风险 | 影响 | 概率 | 应对措施 | +|------|------|------|----------| +| 用户需求理解偏差 | 高 | 中 | 持续用户访谈、快速迭代 | +| 竞品快速跟进 | 中 | 中 | 建立技术壁垒、专利保护 | +| 市场接受度低 | 高 | 低 | 公益合作、免费试用、口碑营销 | + +### 商业风险 + +| 风险 | 影响 | 概率 | 应对措施 | +|------|------|------|----------| +| 成本超支 | 中 | 中 | 严格预算控制、分阶段投入 | +| 融资困难 | 高 | 低 | 多渠道融资、政府补贴申请 | +| 法律合规问题 | 高 | 低 | 法律顾问、隐私合规审查 | + +### 团队风险 + +| 风险 | 影响 | 概率 | 应对措施 | +|------|------|------|----------| +| 核心人员流失 | 高 | 低 | 股权激励、团队文化建设 | +| 技能不匹配 | 中 | 中 | 培训、外部专家支持 | +| 沟通协作问题 | 中 | 中 | 敏捷开发、定期会议 | + +## 预算规划 + +### 总预算:500-800 万元 + +#### 人力成本(60%):300-480 万元 +``` +项目负责人:50 万/年 +产品团队:30 万/年 × 3 = 90 万 +技术团队:35 万/年 × 10 = 350 万 +测试团队:25 万/年 × 2 = 50 万 +运维团队:30 万/年 × 1 = 30 万 + +18 个月总计:570 万 × 1.5 年 = 855 万 +按 15 人计算:约 640 万(18 个月) +``` + +#### 硬件成本(15%):75-120 万元 +``` +AR 眼镜采购:3000 元 × 50 台 = 15 万 +测试设备:20 万 +服务器(GPU):40 万 +办公设备:20 万 +``` + +#### 云服务成本(10%):50-80 万元 +``` +计算资源(GPU 实例):3 万/月 × 18 = 54 万 +存储(OSS):5000 元/月 × 18 = 9 万 +数据库、缓存等:1 万/月 × 18 = 18 万 +``` + +#### 第三方服务(5%):25-40 万元 +``` +AI API 调用(GPT-4V):2 万/月 × 12 = 24 万 +数据标注:10 万 +其他 API 服务:6 万 +``` + +#### 营销推广(5%):25-40 万元 +``` +市场调研:5 万 +公测推广:15 万 +媒体宣传:10 万 +活动费用:10 万 +``` + +#### 其他费用(5%):25-40 万元 +``` +法律咨询:5 万 +专利申请:10 万 +办公场地:5 万/月 × 18 = 90 万(另计) +差旅费用:10 万 +``` + +## 质量保证 + +### 代码质量 +- 代码审查(Code Review) +- 单元测试覆盖率 > 80% +- 静态代码分析 +- 持续集成(CI) + +### 产品质量 +- 功能测试 +- 性能测试 +- 兼容性测试 +- 用户验收测试(UAT) + +### 文档质量 +- 技术文档 +- API 文档 +- 用户手册 +- 运维手册 + +## 项目管理工具 + +### 开发管理 +- **代码管理**:GitHub / GitLab +- **项目管理**:Jira +- **文档协作**:Confluence / 飞书文档 +- **设计协作**:Figma + +### 沟通协作 +- **即时通讯**:Slack / 飞书 +- **视频会议**:Zoom / 腾讯会议 +- **邮件**:企业邮箱 + +### 监控运维 +- **监控**:Prometheus + Grafana +- **日志**:ELK Stack +- **错误追踪**:Sentry +- **性能分析**:New Relic + +## 成功标准 + +### 技术指标 +- ✅ 物体识别准确率 > 90% +- ✅ OCR 识别准确率 > 95% +- ✅ 端到端响应时间 < 2 秒 +- ✅ 系统可用性 > 99.5% +- ✅ 崩溃率 < 0.5% + +### 产品指标 +- ✅ 用户满意度 > 4.5/5 +- ✅ 日活跃用户 > 5000 +- ✅ 用户留存率(月)> 70% +- ✅ NPS 评分 > 40 + +### 商业指标 +- ✅ 第一年销售 5000 台 +- ✅ 付费转化率 > 20% +- ✅ 获得 A 轮融资 +- ✅ 建立 3+ 渠道合作 + +### 社会影响 +- ✅ 帮助 10000+ 视障人士 +- ✅ 获得 50+ 媒体报道 +- ✅ 获得行业奖项 +- ✅ 推动无障碍技术发展