跳至内容

为Supervision贡献 🛠️

感谢您对贡献Supervision感兴趣!

我们正在积极改进这个库,以减少您解决常见计算机视觉问题所需的工作量。

行为准则

请阅读并遵守我们的行为准则。该文件概述了我们项目中所有参与者应遵守的行为规范。

目录

贡献指南

我们欢迎对以下内容的贡献:

  1. 向库中添加新功能(下方有指引)。
  2. 改进我们的文档并添加示例,以明确如何利用supervision库。
  3. 在项目中报告错误和问题。
  4. 提交新功能请求。
  5. 提高我们的测试覆盖率。

贡献功能 ✨

Supervision旨在提供通用工具来解决各种问题。因此,我们专注于那些能对广泛项目产生影响的贡献。

例如,在计算机视觉中,统计图像中任意位置穿过某条线的物体数量是一个常见问题,但统计物体在行进75%距离时才穿过线条的情况则实用性较低。

在贡献新功能之前,请考虑提交一个Issue来讨论该功能,以便社区可以参与并提供帮助。

如何贡献变更

首先,将此仓库fork到您自己的GitHub账户。点击supervision仓库右上角的"fork"按钮开始:

Forking the repository

Creating a repository fork

然后,运行 git clone 将项目代码下载到您的计算机上。

您还应该将roboflow/supervision设置为"上游"远程(即告诉git这个Supervision参考仓库是您fork的来源):

git remote add upstream https://github.com/roboflow/supervision.git
git fetch upstream

使用 git checkout 命令切换到新分支:

git checkout -b <scope>/<your_branch_name> upstream/develop

您为分支选择的名称应描述您想要进行的更改,并以适当的前缀开头:

  • feat/: 用于新功能 (例如, feat/line-counter)
  • fix/: 用于错误修复(例如,fix/memory-leak
  • docs/: 用于文档变更(例如:docs/update-readme
  • chore/: 用于日常任务、维护或工具变更(例如 chore/update-dependencies
  • test/: 用于添加或修改测试(例如,test/add-unit-tests
  • refactor/: 用于代码重构(例如:refactor/simplify-algorithm

对项目代码进行任何你想要的修改,然后运行以下命令提交你的更改:

git add -A
git commit -m "feat: add line counter functionality"
git push -u origin <your_branch_name>

使用常规的提交信息来清晰地描述您的更改。格式如下:

[可选范围]:

常见类型包括:

  • 功能: 新增特性
  • 修复: 一个错误修复
  • docs: 仅文档变更
  • style: 不影响代码含义的更改(空格、格式化等)
  • 重构:既不修复错误也不添加功能的代码更改
  • perf: 提升性能的代码变更
  • test: 添加缺失的测试或修正现有的测试
  • chore: 对构建流程或辅助工具和库的更改

然后,回到您分叉的supervision仓库,点击"Pull Requests",再点击"New Pull Request"。

Opening a pull request

在提交PR之前,请确保base分支是develop

在下一页,检查您的更改,然后点击"Create pull request":

Configuring a pull request

接下来,为您的拉取请求撰写描述,然后再次点击"Create pull request"提交审核:

Submitting a pull request

创建新函数时,请确保您具备以下条件:

  1. 函数及其所有参数的文档字符串。
  2. 该函数的单元测试。
  3. 该函数的文档中的示例。
  4. 在我们的文档中创建了一个条目,用于自动生成该函数的文档。
  5. 请尽可能分享一个包含最少代码的Google Colab来测试新功能或重现PR。请确保Google Colab可以无障碍访问。

当您提交Pull Request时,cla-assistant GitHub机器人会要求您签署贡献者许可协议(CLA)。我们只能回应已签署项目CLA的贡献者的PR。

所有拉取请求将由项目维护者进行审核。我们会提供反馈意见,并在必要时要求修改。

PR在合并前必须通过所有测试和代码规范检查。

贡献者安装指南

在开始项目工作之前,请设置您的开发环境:

  1. 克隆您fork的项目(推荐使用develop分支的浅克隆):

    选项A:推荐给大多数贡献者(develop分支的浅克隆):

    git clone --depth 1 -b develop https://github.com/YOUR_USERNAME/supervision.git
    cd supervision
    

    YOUR_USERNAME替换为您的GitHub用户名。

    注意:使用--depth 1会创建一个历史记录最少的浅克隆,而-b develop确保您从开发分支开始。这显著减少了下载大小,同时提供了贡献所需的一切。

    选项B:完整仓库克隆(如果您需要完整历史记录):

    git clone https://github.com/YOUR_USERNAME/supervision.git
    cd supervision
    
  2. 创建并激活虚拟环境:

    python3 -m venv .venv
    source .venv/bin/activate
    
  3. 安装 uv:

    按照 uv 安装页面 上的说明进行操作。

  4. 安装项目依赖:

    uv pip install -r pyproject.toml --extra dev --extra docs --extra metrics
    
  5. 运行pytest以验证设置:

    uv run pytest
    

🎨 代码风格与质量

预提交工具

本项目使用pre-commit工具来维护代码质量和一致性。在提交拉取请求或进行任何提交之前,运行pre-commit工具以确保您的更改符合项目指南非常重要。

此外,我们已将pre-commit GitHub Action集成到工作流程中。这意味着每次打开pull request时,都会自动执行pre-commit检查,从而简化代码审查流程并确保所有贡献都符合我们的质量标准。

要运行pre-commit工具,请按照以下步骤操作:

  1. 通过运行以下命令安装pre-commit:uv pip install -r pyproject.toml --extra dev。该命令不仅会安装pre-commit,还会安装项目的所有依赖项和开发依赖项

  2. 安装完 pre-commit 后,请导航至项目的根目录。

  3. 运行命令 pre-commit run --all-files。这将针对修改过的文件执行项目配置的pre-commit钩子。如果发现任何问题,pre-commit工具会提供如何解决这些问题的反馈。进行必要的修改并重新运行pre-commit命令,直到所有问题都得到解决。

  4. 您还可以通过执行pre-commit install将pre-commit安装为git钩子。每次执行git commit时,pre-commit都会自动为您运行。

文档字符串

supervision中的所有新函数和类都应包含文档字符串。这是将任何新函数和类添加到库中的先决条件。

supervision遵循Google Python文档字符串风格。在为您的贡献编写文档字符串时,请参考该风格指南。

类型检查

目前,还没有使用mypy进行类型检查。参见issue

📝 文档

supervision的文档存储在名为docs的文件夹中。该项目文档是使用mkdocs构建的。

要运行文档,请使用uv pip install -r pyproject.toml --extra dev --extra docs安装项目依赖。然后运行mkdocs serve启动文档服务器。

你可以在mkdocs网站上了解更多关于mkdocs的信息。

🧑‍🍳 使用指南

我们一直在寻找新的示例和教程来添加到supervision文档中。如果您有认为对他人有帮助的用例,请提交包含您示例的PR。以下是提交新示例的一些指导原则:

  • docs/notebooks文件夹中创建一个新的笔记本。
  • Add a link to the new notebook in docs/theme/cookbooks.html. Make sure to add the path to the new notebook, as well as a title, labels, author and supervision version.
  • 使用Count Objects Crossing the Line示例作为新示例的模板。
  • 冻结您正在使用的 supervision 版本。
  • 在笔记本顶部放置一个合适的"在Colab中打开"按钮。您可以在前面提到的Count Objects Crossing the Line教程中找到此类按钮的示例。
  • Notebook应该是自包含的。如果您依赖外部数据(视频、图像等)或库,请在notebook中包含下载和安装命令。
  • 用适当的注释对代码进行标注,包括指向描述您所用工具的文档链接。

🧪 测试

pytests 用于运行我们的测试。

📄 许可证

通过贡献代码,您同意您的贡献将按照MIT许可证的条款进行授权。