计算机视觉服务

OpenCV MCP Server 是一个通过 Model Context Protocol (MCP) 提供 OpenCV 图像和视频处理能力的 Python 包,使 AI 助手和语言模型能够访问强大的计算机视觉工具,适用于从基本图像处理到高级对象检测和跟踪的任务。

  • by GongRzhe
  • Python
  • 本地部署
  • 111 星标
  • 更新于
在 GitHub 查看 GongRzhe/opencv-mcp-server

使用说明

🚀 OpenCV MCP服务器

MCP服务器为AI助手提供强大的OpenCV计算机视觉功能。

🔍 引言

OpenCV MCP Server是一个Python包,通过模型上下文协议(MCP)提供OpenCV的图像和视频处理功能。这使得人工智能助手和语言模型能够访问强大的计算机视觉工具,完成从基本图像处理到高级对象检测和跟踪的任务。

借助OpenCV MCP服务器,人工智能系统可以:

  • 处理和分析各种格式的图像
  • 执行实时目标检测和跟踪
  • 从视觉数据中提取有意义的信息
  • 使用高级算法增强和转换图像
  • 使用逐帧分析处理视频内容

✨ 特性

  • 📸 基本图像处理和操纵 (读取、保存、转换)
  • 🖼️ 图像处理和增强 (调整大小、裁剪、过滤应用程序)
  • 📊 边缘检测和轮廓分析
  • 🧠 先进的计算机视觉能力 (特征检测、物体检测)
  • 😃 人脸检测与识别
  • 🎬 视频处理和分析 (帧提取、运动检测)
  • 🔍 视频中的对象跟踪
  • 📹 用于实时目标检测的摄像头集成

📊 演示示例

边缘检测

人脸检测

统计分析

视频处理

原始视频样本

轮廓检测处理

应用于上述原始视频的轮廓检测处理示例

📦 安装

pip install opencv-mcp-server

发展:

# Clone the repository
git clone https://github.com/yourusername/opencv-mcp-server.git
cd opencv-mcp-server

# Create a virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -e .

🔧 用法

在Claude桌面中使用

添加到您的Claude Desktop配置中:

{
    "mcpServers": {
        "opencv": {
            "command": "uvx",
            "args": [
                "opencv-mcp-server"
            ]
        }
    }
}

安装uvx

brew install uv

然后重新启动克劳德桌面

Python基本用法

from opencv_mcp_server import opencv_client

# Initialize client
client = opencv_client.OpenCVClient()

# Use tools
result = client.resize_image(
    image_path="input.jpg",
    width=800,
    height=600
)

高级目标检测示例

由于所有必需的型号都已在中配置 OPENCV_DNN_MODELS_DIR,您可以在不指定模型路径的情况下使用对象检测:

# Detect objects using pre-configured YOLO model
result = detect_objects_tool(
    image_path="street.jpg",
    confidence_threshold=0.5,
    nms_threshold=0.4
)

配置

可以使用环境变量配置服务器:

  • MCP_TRANSPORT:传输方法(默认值:“stdio”)
  • OPENCV_DNN_MODELS_DIR:用于存储DNN模型的目录(默认:“模型”)
  • CV_HAAR_CASCADE_DIR:用于存储Haar级联文件的目录(可选)

🧠 模型文件设置

计算机视觉和物体检测工具需要预先训练好的模型才能正常工作。这些模型应放置在由 OPENCV_DNN_MODELS_DIR 环境变量(默认值:“./models”)。

所需型号

以下型号已预先配置:

  • 人脸检测(DNN方法)

    • deploy.prototxt -人脸检测配置
    • res10_300x300_ssd_iter_140000.caffemodel -人脸检测模型权重
  • 目标检测(YOLO)

    • yolov3.weights -YOLO模型权重
    • yolov3.cfg -YOLO配置文件
    • coco.names -检测到的对象的类名

模型使用

  • 这 detect_faces_tool 在以下情况下使用DNN模型 method="dnn" 已指定
  • 这 detect_objects_tool 使用YOLO模型进行一般目标检测

对于需要下载这些型号的用户,请参阅“安装”部分或访问:

  • YOLO型号:https://pjreddie.com/darknet/yolo/
  • 人脸检测模型:https://github.com/opencv/opencv_3rdparty/tree/dnn_samples_face_detector_20170830

🧰 可用工具

OpenCV MCP服务器提供了广泛的计算机视觉工具,分为四类:

📸 图像基础知识

这些工具提供基本的图像处理功能:

  • save_image_tool:将图像保存到文件

    • 参数: path_in (输入图像路径), path_out (输出文件路径)
    • 返回:图像保存状态和路径信息
    • 例子: save_image_tool(path_in="processed.jpg", path_out="final.jpg")
  • convert_color_space_tool:在颜色空间(BGR、RGB、GRAY、HSV等)之间转换图像

    • 参数: image_path, source_space, target_space
    • 返回:转换后的图像信息和路径
    • 例子: convert_color_space_tool(image_path="image.jpg", source_space="BGR", target_space="HSV")
  • resize_image_tool:将图像调整为特定尺寸

    • 参数: image_path, width, height, interpolation (可选)
    • 返回:调整大小的图像信息和路径
    • 例子: resize_image_tool(image_path="large.jpg", width=800, height=600)
  • crop_image_tool:从图像中裁剪区域

    • 参数: image_path, x, y, width, height
    • 返回:裁剪的图像信息和路径
    • 例子: crop_image_tool(image_path="scene.jpg", x=100, y=150, width=300, height=200)
  • get_image_stats_tool:获取有关图像的统计信息

    • 参数: image_path, channels (布尔值,默认值:true)
    • 返回:图像统计和直方图可视化
    • 例子: get_image_stats_tool(image_path="photo.jpg", channels=True)

🖼️ 图像处理

这些工具提供高级图像处理和转换功能:

  • apply_filter_tool:对图像应用各种滤镜(模糊、高斯、中值、双边)

    • 参数: image_path, filter_type, kernel_size,并过滤特定参数
    • 返回:过滤后的图像和过滤信息
    • 例子: apply_filter_tool(image_path="noisy.jpg", filter_type="gaussian", kernel_size=5)
  • detect_edges_tool:使用不同的方法(Canny、Sobel、Laplacian、Scharr)检测图像中的边缘

    • 参数: image_path, method、阈值参数和方法特定参数
    • 返回:边缘检测图像和方法信息
    • 例子: detect_edges_tool(image_path="objects.jpg", method="canny", threshold1=100, threshold2=200)
  • apply_threshold_tool:对图像应用阈值(二进制、自适应等)

    • 参数: image_path, threshold_type阈值和方法特定参数
    • 返回:阈值图像和阈值信息
    • 例子: apply_threshold_tool(image_path="scan.jpg", threshold_type="binary", threshold_value=127)
  • detect_contours_tool:检测并可选地绘制图像中的轮廓

    • 参数: image_path, mode, method,绘图参数
    • 返回:带有轮廓和轮廓信息的图像
    • 例子: detect_contours_tool(image_path="shapes.jpg", mode="external", method="simple")
  • find_shapes_tool:在图像中查找基本形状(圆、线)

    • 参数: image_path, shape_type,形状特定参数
    • 返回:带有形状和形状信息的图像
    • 例子: find_shapes_tool(image_path="geometry.jpg", shape_type="circles", min_radius=10)
  • match_template_tool:在图像中查找模板

    • 参数: image_path, template_path,匹配参数
    • 返回:带有匹配项和匹配信息的图像
    • 例子: match_template_tool(image_path="scene.jpg", template_path="object.jpg", threshold=0.8)

🧠 计算机视觉

这些工具提供高级计算机视觉功能:

  • detect_features_tool:使用SIFT、ORB、BRISK等方法检测图像中的特征

    • 参数: image_path, method, max_features,绘图参数
    • 返回:带有关键点和特征信息的图像
    • 例子: detect_features_tool(image_path="landmark.jpg", method="sift", max_features=500)
  • match_features_tool:匹配两个图像之间的特征

    • 参数: image1_path, image2_path, method,匹配参数
    • 返回:带有匹配项和匹配信息的图像
    • 例子: match_features_tool(image1_path="scene1.jpg", image2_path="scene2.jpg", method="sift")
  • detect_faces_tool:使用Haar级联或DNN检测图像中的人脸

    • 参数: image_path, method,方法特定参数
    • 返回:包含面部和面部信息的图像
    • 例子: detect_faces_tool(image_path="group.jpg", method="haar", min_neighbors=5)
  • detect_objects_tool:使用预训练的DNN模型(例如YOLO)检测物体

    • 参数: image_path、模型路径、检测参数
    • 返回:带有对象和对象信息的图像
    • 例子: detect_objects_tool(image_path="street.jpg", confidence_threshold=0.5)

🎬 视频处理

这些工具提供视频分析和处理功能:

  • extract_video_frames_tool:从视频文件中提取帧

    • 参数: video_path,帧选择参数
    • 返回:提取的帧信息和路径
    • 例子: extract_video_frames_tool(video_path="clip.mp4", start_frame=0, step=10, max_frames=20)
  • detect_motion_tool:检测两帧之间的运动

    • 参数: frame1_path, frame2_path,检测参数
    • 返回:运动检测结果和可视化
    • 例子: detect_motion_tool(frame1_path="frame1.jpg", frame2_path="frame2.jpg", threshold=25)
  • track_object_tool:跨视频帧跟踪对象

    • 参数: video_path, initial_bbox,跟踪参数
    • 返回:跟踪结果和提取的帧
    • 例子: track_object_tool(video_path="tracking.mp4", initial_bbox=[100, 100, 50, 50])
  • combine_frames_to_video_tool:将帧合并到视频文件中

    • 参数: frame_paths, output_path,视频参数
    • 返回:视频创建结果
    • 例子: combine_frames_to_video_tool(frame_paths=["frame1.jpg", "frame2.jpg"], output_path="output.mp4")
  • create_mp4_from_video_tool:将视频文件转换为MP4格式

    • 参数: video_path, output_path,转换参数
    • 返回:转换结果,包括MP4路径
    • 例子: create_mp4_from_video_tool(video_path="input.avi", output_path="output.mp4")
  • detect_video_objects_tool:检测视频中的对象并创建检测结果视频

    • 参数: video_path、模型路径、检测参数
    • 返回:对象检测结果和输出视频路径
    • 例子: detect_video_objects_tool(video_path="traffic.mp4", confidence_threshold=0.5)
  • detect_camera_objects_tool:检测计算机摄像头中的物体并保存到视频中

    • 参数: camera_id、记录参数、模型路径、检测参数
    • 返回:对象检测结果和输出视频路径
    • 例子: detect_camera_objects_tool(camera_id=0, duration=30, confidence_threshold=0.5)

📝 高级使用示例

📸 基础图像处理

# Resize an image
result = resize_image_tool(
    image_path="input.jpg",
    width=800,
    height=600
)
# Access the resized image path
resized_image_path = result["output_path"]

# Apply a Gaussian blur filter
result = apply_filter_tool(
    image_path="input.jpg",
    filter_type="gaussian",
    kernel_size=5,
    sigma=1.5
)

🧠 目标检测

# Detect objects in an image using YOLO
result = detect_objects_tool(
    image_path="scene.jpg",
    confidence_threshold=0.5,
    nms_threshold=0.4
)
# Access detected objects
objects = result["objects"]
for obj in objects:
    print(f"Detected {obj['class_name']} with confidence {obj['confidence']}")

🎬 视频分析

# Extract frames from a video
result = extract_video_frames_tool(
    video_path="input.mp4",
    start_frame=0,
    step=10,
    max_frames=10
)
# Access extracted frames
frames = result["frames"]

# Detect objects in a video
result = detect_video_objects_tool(
    video_path="input.mp4",
    confidence_threshold=0.5,
    frame_step=5
)

🔄 链式操作

工具可以通过使用 output_path 从一个工具输入到另一个工具:

# First resize an image
result1 = resize_image_tool(
    image_path="input.jpg",
    width=800,
    height=600
)

# Then apply edge detection to the resized image
result2 = detect_edges_tool(
    image_path=result1["output_path"],
    method="canny",
    threshold1=100,
    threshold2=200
)

# Finally detect contours in the edge-detected image
result3 = detect_contours_tool(
    image_path=result2["output_path"],
    mode="external",
    method="simple"
)

🔍 实际应用

OpenCV MCP服务器可用于广泛的应用:

  • 🤖 自治系统:基于视觉的导航和障碍物检测
  • 🚗 流量分析:车辆计数、速度估计和车牌识别
  • 🔐 安全系统:运动检测和面部识别
  • 📱 增强现实:特征跟踪和姿态估计
  • 🏥 医学影像学:组织分割和异常检测
  • 🏭 工业检测:缺陷检测和质量控制
  • 🖼️ 数字艺术:图像过滤和转换
  • 🎲 游戏:手势识别和玩家跟踪

🗺️ 路线图

OpenCV MCP服务器的未来增强计划:

  • 📊 其他统计分析工具
  • 🧬 高级分割算法
  • 🧠 与机器学习模型集成
  • 🌐 3D视觉能力
  • 📱 移动友好的处理选项
  • ⚡ 实时处理的性能优化

🤝 贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉项目
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

📜 许可证

MIT许可证-有关详细信息,请参阅许可证文件。

📞 联系

如有疑问或反馈,请在GitHub存储库上打开问题。


内置于❤️ 使用OpenCV和Python。