# API集合

该项目为所有API集合，集成了视觉分析、聊天对话和语音处理等功能。

## 更新日志
    - 20250410 部署到docker
    - 20250403 部署到222.186.20.67时的更新

## 项目结构

    ```
    API/
    ├── api/                   # 视觉分析和处理模块
    │   ├── cpm_analyze.py     # CPM_OCR分析
    │   ├── qwenvl_analyze.py  # QwenVL_OCR分析
    │   ├── cpm_scene.py       # CPM_场景分析
    │   ├── qwenvl_scene.py    # QwenVL_场景分析
    │   ├── compare.py         # insightface 面部特征提取
    │   ├── yolo.py            # YOLO目标检测
    │   ├── face.py            # 人脸检测
    │   ├── fall.py            # 跌倒检测
    │   ├── pose.py            # 姿态估计
    │   ├── media.py           # mediapipe 面部特征提取
    |   ├── start_services.sh  #一键开始所有程序
    |   └── stop.sh            #一键停止所有程序   
    ├── api_chat/            # 聊天和语音处理模块
    │   ├── chat.py          # 聊天功能
    │   ├── tts.py           # 文字转语音
    │   ├── asr.py           # 语音识别
    │   ├── GPT_SoVITS/      # GPT_SoVITS模型集成，
    │   ├── sample/          # OpenBMB模型——学习音色，音色+文本内容
    │   ├── tools/           # GPT_SoVITS模型——工具函数
    │   ├── runtime/         # GPT_SoVITS模型——运行时函数
    │   ├── docs/            # GPT_SoVITS模型——文档
    |   └── weight.json       # GPT_SoVITS模型——权重
    |  
    ├── producer_chat/     # 聊天生产者
    ├── producer/          # 算法生产者，分配任务
    └── README             # 说明文档
    ```

## 主要功能

### 视觉分析模块 (api/) 支持图片、视频
    - 目标检测 yolov8x
    - 人脸检测 yolov8n-face
    - 面部特征提取 insightface 、mediapipe
    - 姿态估计 yolov8x-pose
    - 跌倒检测 yolov8n-fall
    - 场景理解、OCR分析（基于MiniCPM-v2.6和QwenVL-2B模型）

### 聊天对话模块 (api_chat/)
    - 文本对话功能（Ollama-qwen2.5:3b）
    - 语音识别 (ASR): 通过Whisper-large-v3模型
    - 文字转语音 (TTS): 通过GPT_SoVITS模型
    - 多模型支持（通过Ollama）

## 使用说明
### API 部分 http://dev2.obscura.work/v1
    1. producer 目录          # 生产者，分配任务
    2. 服务器：222.186.20.67:8005
    3. kafka 配置：222.186.20.67:9092
        topic分配：
        - yolo: "yolo"
        - pose: "pose"
        - qwenvl: "qwenvl"
        - qwenvl_analyze: "qwenvl_analyze"
        - cpm: "cpm"
        - cpm_analyze: "cpm_analyze"
        - fall: "fall"
        - face: "face"
        - mediapipe: "mediapipe"
        - compare: "compare"

    4. redis 配置：222.186.20.67:6379
        db分配：
        - 4: "yolo"
        - 5: "pose"
        - 9: "qwenvl"
        - 32: "qwenvl_analyze"
        - 8: "cpm"
        - 31: "cpm_analyze"
        - 6: "fall"
        - 7: "face"
        - 10: "mediapipe"
        - 30: "compare"
        
    5. 模型配置：
        - YOLO = "/obscura/models/yolo11n.pt"
        - POSE = "/obscura/models/yolo11n-pose.pt"
        - QWEN = "/obscura/models/qwen/Qwen2.5-VL-7B-Instruct"
        - FALL = "/obscura/models/yolov8n-fall.pt"
        - FACE = "/obscura/models/yolo11n-face.pt"
        - MEDIAPIPE = "/obscura/models/face_landmarker.task"    
        - CPM(ollama) = "https://222.186.20.67:11435/api/generate"
    6. 上传文件及结果保存目录：
        - UPLOAD_DIR = "/obscura/task/upload"
        - RESULT_DIR = "/obscura/task/result"

### API_Chat 部分  http://dev2.obscura.work/v1_chat
    1. producer_chat 目录  # 聊天生产者
    2. 服务器：222.186.20.67:8008
    3. kafka 配置：222.186.20.67:9092
        topic分配：
        - asr: "asr"
        - chat: "chat"
        - tts: "tts"
    4. redis 配置：222.186.20.67:6379
        db分配：
        - 2: "api key"
        - 3: "api使用情况"
        - 11: "task 任务记录"
        - 12: "asr 记录"
        - 13: "chat 记录"
        - 14: "tts 记录"
        #语言
        - 63: "session_zh 中文"
        - 62: "session_en 英文"
        - 61: "session_ko 韩语"
        #音色
        - 15: "girl"
        - 16: "woman"
        - 17: "man"
        - 18: "leijun"
        - 19: "dufu"
        - 20: "hejiong"
        - 21: "mahuateng"
        - 22: "lidan"
        - 23: "dabing"
        - 24: "luoxiang"
        - 25: "xuzhiyuan"
        - 26: "yuhua"
        - 27: "liuzhenyun"
    5. 音频文件保存目录：
        - OUTPUT_PATH=/obscura/task/audio_files  # 音频文件保存目录

## 注意事项
- 注意redis的db分配
- 注意kafka的topic分配
- 注意producer的config.py环境配置
- 注意producer_chat的.env环境配置
- 确保模型权重文件已正确配置
- 检查API密钥和环境变量设置
- 注意资源使用和性能优化