这是一个基于FastAPI的智能视频识别系统,集成了Ollama大模型,能够实时处理RTSP视频流并提供AI驱动的内容识别功能。系统采用现代化的Web界面设计,支持多终端访问,为视频监控和内容分析提供了强大的解决方案。
关注公众号,程序员石磊
- 实时视频流处理:支持RTSP协议视频流的实时捕获和展示
- AI智能识别:集成Ollama Qwen2.5-VL大模型,提供精准的图像内容识别
- 实时通信:基于WebSocket的实时数据推送,零延迟获取识别结果
- 历史记录:智能存储和管理识别历史,支持数据回溯
- 响应式设计:完美适配桌面端和移动端设备
- 现代化UI:采用毛玻璃效果和渐变设计,提供优雅的视觉体验
- 实时状态显示:连接状态指示器,实时监控系统运行状态
- Markdown渲染:支持富文本格式的识别结果展示
- 异步处理:基于asyncio和ThreadPoolExecutor的高并发架构
- 智能跳帧:可配置的帧处理策略,优化系统资源使用
- 队列管理:缓冲队列机制,确保视频流的稳定性
- 自动重连:网络异常时自动重连RTSP流,保证服务稳定性
视频效果: bilibili
- 左侧:实时视频流展示区域,支持全屏查看
- 右侧:AI识别结果展示区域,支持Markdown格式渲染
- 顶部:系统状态栏,显示连接状态和系统信息
- 实时视频流畅播放,支持多种分辨率自适应
- 识别结果按时间倒序排列,便于查看最新内容
- 支持移动端触控操作,响应式布局优化
- Web框架:FastAPI - 高性能异步Web框架
- 视频处理:OpenCV - 专业级视频处理库
- AI模型:Ollama + Qwen2.5-VL - 多模态大语言模型
- 实时通信:WebSocket - 双向实时数据传输
- 异步处理:asyncio + ThreadPoolExecutor - 高并发处理
- 基础技术:HTML5 + CSS3 + JavaScript
- UI设计:现代化毛玻璃效果,渐变背景
- 响应式布局:支持移动端和桌面端适配
- Markdown渲染:marked.js + highlight.js
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ RTSP摄像头 │───▶│ 视频处理模块 │───▶│ AI识别模块 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Web界面展示 │◀───│ WebSocket │◀───│ 结果处理模块 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- Python版本:3.8 或更高版本
- 操作系统:Windows / Linux / macOS
- 内存要求:建议8GB以上(运行大模型需要)
- 网络要求:支持RTSP协议的网络摄像头或视频源
git clone <repository-url>
cd vision_describe# Windows
python -m venv venv
venv\Scripts\activate
# Linux/macOS
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txt安装Ollama:
# Windows
# 下载安装包:https://ollama.ai/download
# Linux
curl -fsSL https://ollama.ai/install.sh | sh
# macOS
brew install ollama启动Ollama服务:
ollama serve下载所需模型:
# 下载Qwen2.5-VL模型(约4.5GB)
ollama pull qwen2.5vl:7b在main.py文件中修改RTSP地址为您的摄像头地址:
# 第21行附近
rtsp_url = "rtsp://用户名:密码@IP地址:端口/路径"
# 示例:
rtsp_url = "rtsp://admin:123456@192.168.1.100:554/h264/ch1/main/av_stream"方式一:直接运行
python main.py方式二:使用uvicorn(推荐生产环境)
uvicorn main:app --host 0.0.0.0 --port 8000 --reload打开浏览器访问:
- 本地访问:http://localhost:8000
- 局域网访问:http://您的IP地址:8000
vision_describe/
├── 📄 main.py # FastAPI主应用程序
├── 📄 version_llm.py # 基于tkinter的桌面版本(原型)
├── 📄 requirements.txt # Python依赖包列表
├── 📄 README.md # 项目说明文档
├── 📁 templates/ # Jinja2模板文件夹
│ └── 📄 index.html # 主页面模板
└── 📁 static/ # 静态资源文件夹
├── 📄 style.css # 主样式文件
├── 📁 css/ # CSS样式文件夹
│ └── 📄 markdown.css # Markdown渲染样式
└── 📁 js/ # JavaScript文件夹
└── 📄 markdown-utils.js # Markdown工具函数
| 文件 | 说明 |
|---|---|
main.py |
核心应用程序,包含FastAPI路由、WebSocket处理、视频流处理等 |
version_llm.py |
原始桌面版本,基于tkinter和OpenCV的简单实现 |
templates/index.html |
Web界面模板,包含响应式布局和实时通信逻辑 |
static/ |
静态资源目录,包含CSS样式和JavaScript脚本 |
您可以在main.py中调整以下关键参数:
# 视频处理参数
frame_skip = 10 # 跳帧参数,控制处理频率
frame_queue = queue.Queue(maxsize=10) # 视频帧队列大小
# 识别参数
recognition_frequency = 30 # 每30帧进行一次AI识别
max_recognition_results = 50 # 最大历史记录数量
# 服务器参数
host = "0.0.0.0" # 服务器监听地址
port = 8000 # 服务器端口# 海康威视摄像头
rtsp_url = "rtsp://admin:password@192.168.1.100:554/h264/ch1/main/av_stream"
# 大华摄像头
rtsp_url = "rtsp://admin:password@192.168.1.100:554/cam/realmonitor?channel=1&subtype=0"
# 通用RTSP流
rtsp_url = "rtsp://username:password@ip:port/path"-
视频区域(左侧)
- 实时显示RTSP视频流
- 支持全屏查看模式
- 自动适应窗口大小
-
识别结果区域(右侧)
- 显示AI识别的图像内容描述
- 按时间倒序排列,最新结果在顶部
- 支持Markdown格式渲染
- 自动滚动显示新结果
-
状态指示器(顶部)
- 绿色:系统正常运行
- 红色:连接异常或系统错误
- 黄色:正在重连或处理中
- 响应式布局:自动适配手机和平板屏幕
- 触控优化:支持滑动查看历史记录
- 性能优化:针对移动设备优化视频播放
-
硬件要求
CPU: 4核心以上(推荐8核心) 内存: 8GB以上(推荐16GB) GPU: 可选,但建议使用NVIDIA GPU加速大模型推理 网络: 千兆以太网,低延迟 -
系统优化参数
# 针对高分辨率视频流 frame_skip = 15 # 增加跳帧数,降低CPU占用 # 针对低性能设备 frame_queue_size = 5 # 减少队列大小,降低内存占用 # 针对网络不稳定环境 reconnect_interval = 3 # 设置重连间隔
创建Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "main.py"]构建和运行:
docker build -t vision-describe .
docker run -p 8000:8000 vision-describe解决方案:
- 检查RTSP URL格式是否正确
- 确认摄像头网络连接正常
- 验证用户名和密码
- 检查防火墙设置
解决方案:
- 增加
frame_skip参数值 - 减少识别频率(调整识别间隔)
- 确保Ollama服务正常运行
- 考虑使用GPU加速
解决方案:
- 检查端口8000是否被占用
- 确认防火墙允许8000端口
- 尝试使用不同的端口号
解决方案:
- 调整视频分辨率设置
- 增加帧队列大小
- 检查网络带宽是否充足
其他品牌的网上搜一下吧!
- Fork项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建Pull Request
# 安装开发依赖
pip install -r requirements.txt
pip install pytest black flake8
# 运行测试
pytest tests/
# 代码格式化
black main.py
flake8 main.py本项目采用MIT许可证 - 查看 LICENSE 文件了解详情。
- 问题反馈:请在GitHub Issues中提交
- 功能建议:欢迎提交Feature Request
- 技术交流:欢迎Star⭐和Fork🍴
- 支持多路视频流同时处理
- 添加用户认证和权限管理
- 集成更多AI模型选择
- 支持视频录制和回放功能
- 添加报警和通知功能
- 支持云端存储集成
- 移动端APP开发
🌟 如果这个项目对您有帮助,请给它一个Star! 🌟
📧 有任何问题或建议,随时联系我们
