网站建设费会计美食网站建设设计方案
2026/6/20 6:20:24 网站建设 项目流程
网站建设费会计,美食网站建设设计方案,杂多县网站建设公司,小软件制作教程AI手势识别与追踪持续集成#xff1a;CI/CD流程配置教程 1. 引言 1.1 学习目标 本文将带你从零开始#xff0c;构建一个完整的 AI 手势识别与追踪项目 的 CI/CD#xff08;持续集成与持续部署#xff09;流程。你将掌握如何自动化测试、构建镜像、验证功能并部署基于 Me…AI手势识别与追踪持续集成CI/CD流程配置教程1. 引言1.1 学习目标本文将带你从零开始构建一个完整的AI 手势识别与追踪项目的CI/CD持续集成与持续部署流程。你将掌握如何自动化测试、构建镜像、验证功能并部署基于 MediaPipe Hands 模型的本地化手部关键点检测服务。最终实现“代码提交 → 自动测试 → 镜像打包 → WebUI 可视化验证”的全流程自动化。1.2 前置知识熟悉 Python 基础与 OpenCV/MediaPipe 使用了解 Docker 容器化技术掌握 Git 版本控制对 CI/CD 工具如 GitHub Actions 或 GitLab CI有基本认知1.3 教程价值本项目已具备高精度、低延迟、彩虹骨骼可视化等实用特性。但若缺乏自动化流程每次更新模型或修复 Bug 都需手动验证和打包效率低下且易出错。通过本教程你将为该项目注入工程化灵魂提升开发迭代速度与系统稳定性。2. 项目架构与核心模块解析2.1 系统整体架构------------------ --------------------- | Git Repository |----| CI/CD Pipeline | ------------------ -------------------- | v ------------------------------------ | Test Stage | Build Stage | ------------------------------------ | v ------------------ | Docker Image | —— Registry ------------------ | v ---------------------- | WebUI CPU Inference | | (Rainbow Skeleton) | ----------------------整个系统分为四个阶段 1.代码提交触发 CI 流水线2.自动运行单元测试与图像推理测试3.构建包含 MediaPipe 和自定义逻辑的 Docker 镜像4.推送至镜像仓库供一键部署使用2.2 核心模块职责划分模块职责hand_tracker.py封装 MediaPipe Hands 模型调用输出 21 个 3D 关键点坐标visualizer.py实现“彩虹骨骼”绘制算法按手指分配颜色webapp.pyFlask 提供 WebUI 接口支持图片上传与结果展示.github/workflows/ci.ymlCI/CD 核心配置文件定义流水线步骤3. CI/CD 流程搭建实践3.1 环境准备确保本地项目根目录结构如下gesture-tracking-ci/ ├── src/ │ ├── hand_tracker.py │ ├── visualizer.py │ └── webapp.py ├── tests/ │ ├── test_hand_detection.py │ └── test_rainbow_skeleton.py ├── requirements.txt ├── Dockerfile └── .github/workflows/ci.yml安装依赖requirements.txtmediapipe0.10.9 opencv-python4.8.0.76 flask2.3.3 numpy1.24.3⚠️ 注意选择 CPU 版本的 MediaPipe避免 GPU 依赖导致 CI 环境失败。3.2 编写单元测试代码tests/test_hand_detection.pyimport cv2 import unittest from src.hand_tracker import HandTracker class TestHandDetection(unittest.TestCase): def setUp(self): self.tracker HandTracker() def test_detect_single_hand(self): image cv2.imread(tests/data/hand_rock.jpg) results self.tracker.detect(image) self.assertIsNotNone(results.multi_hand_landmarks) self.assertEqual(len(results.multi_hand_landmarks), 1) def test_empty_image(self): image 255 * np.ones((480, 640, 3), dtypenp.uint8) # 白色图 results self.tracker.detect(image) self.assertIsNone(results.multi_hand_landmarks) if __name__ __main__: unittest.main()tests/test_rainbow_skeleton.pyimport numpy as np import cv2 from src.visualizer import draw_rainbow_skeleton def test_draw_rainbow_skeleton(): image np.ones((480, 640, 3), dtypenp.uint8) * 255 landmarks [type(Landmark, (), {x: i*0.1, y: 0.5}) for i in range(21)] result_img draw_rainbow_skeleton(image, landmarks) # 验证是否成功绘制了彩色线条 assert np.any(result_img ! 255), No color drawn on image✅ 测试覆盖手部检测存在性、空输入鲁棒性、彩虹骨骼渲染完整性。3.3 Docker 构建与优化Dockerfile# 使用轻量级 Python 基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制源码 COPY src/ ./src/ COPY webapp.py . # 开放 Web 端口 EXPOSE 5000 # 启动 Web 服务 CMD [python, webapp.py] 优化点 - 使用slim镜像减少体积 ---no-cache-dir节省空间 - 分层构建提高缓存命中率3.4 GitHub Actions CI/CD 配置.github/workflows/ci.ymlname: Gesture Tracking CI/CD on: push: branches: [ main ] pull_request: branches: [ main ] jobs: test-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.9 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run unit tests run: | python -m unittest discover -s tests -p test_*.py - name: Build Docker image if: github.ref refs/heads/main run: | docker build -t gesture-tracking:latest . - name: Login to Docker Hub if: github.ref refs/heads/main uses: docker/login-actionv2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Push Docker image if: github.ref refs/heads/main run: | docker tag gesture-tracking:latest ${{ secrets.DOCKER_USERNAME }}/gesture-tracking:latest docker push ${{ secrets.DOCKER_USERNAME }}/gesture-tracking:latest 安全提示Docker 凭据通过 GitHub Secrets 管理防止泄露。3.5 WebUI 快速验证机制为了让 CI 不仅“跑得通”还要“看得见”我们加入自动化截图验证机制。在 CI 中启动 Flask 并访问接口- name: Start Web App Capture Output if: github.ref refs/heads/main run: | python webapp.py sleep 10 # 等待服务启动 curl -F imagetests/data/hand_victory.jpg http://localhost:5000/upload output.html # 可选使用 Puppeteer 截图保存结果页 建议结合 Playwright 或 Selenium 实现浏览器级可视化验证生成带彩虹骨骼的结果图快照。4. 实践问题与优化建议4.1 常见问题及解决方案问题原因解决方案MediaPipe 安装失败默认 PyPI 包不支持 ARM 架构使用--find-links指定官方 wheel 地址视频流处理超时CI 环境无 GUI 支持禁用cv2.imshow()改用文件写入Docker 构建缓慢缺乏缓存机制利用 GitHub Actions Cache 保存 pip 缓存彩虹骨骼颜色错乱关节索引映射错误添加单元测试验证每根手指的颜色范围4.2 性能优化建议缓存依赖安装yamlname: Cache pip uses: actions/cachev3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles(requirements.txt) }} 分阶段构建镜像使用多阶段构建分离构建环境与运行环境进一步减小镜像体积。启用 MediaPipe 计算图缓存在HandTracker初始化时设置static_image_modeFalse提升连续帧处理效率。5. 总结5.1 实践经验总结通过本次 CI/CD 流程建设我们实现了 - ✅自动化测试保障每次代码变更不影响核心功能 - ✅标准化构建Docker 镜像统一打包杜绝“在我机器上能跑”问题 - ✅快速部署能力镜像推送到仓库后可立即用于 CSDN 星图镜像广场等平台一键部署 - ✅可视化验证闭环不仅跑通逻辑还能看到彩虹骨骼的实际效果更重要的是该流程完全适配CPU 版本 MediaPipe无需 GPU 支持极大降低了 CI 环境成本。5.2 最佳实践建议坚持“测试先行”原则新增功能前先写测试用例定期清理旧镜像避免 Docker Registry 存储爆炸添加健康检查端点在/health返回模型加载状态便于 K8s 集成获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询