跳到主要内容

Python SnapScript 流水线

通过 Python 脚本,您可以充分利用 OpenCV 的强大功能快速构建自己的流水线。Python 解释器已集成到 Limelight 的 C++ 后端中,因此错误和崩溃都能得到优雅处理。

常规 SnapScript 流水线直接在 Limelight 网页界面中编程。

Limelight 负责处理硬件、摄像头接口、网络通信、视频流和基本图像预处理。您只需要编写一个名为 runPipeline() 的 Python 函数。

  • 我们提供的最重要功能之一是一键准星。准星、双准星、tx、ty、ta、ts、tvert 以及所有其他标准 Limelight NetworkTables 读数将自动锁定到您从 Python runPipeline() 函数返回的轮廓上。
  • 编写您自己的实时可视化、阈值处理、过滤功能,如果需要可以完全绕过我们的后端。
    • Limelight 的 Python 脚本可以访问完整的 OpenCV 和 numpy 库。
    • 除了访问图像外,runPipeline() 函数还可以访问来自机器人的数据。FTC 团队可以使用 updatePythonInputs(),FRC 团队可以更新 "llrobot" NetworkTables 数字数组。将机器人的任何数据发送到您的 Python 脚本,用于可视化或高级应用(例如可以发送 IMU 数据、位姿数据、机器人速度等用于 Python 脚本)
    • runPipeline 函数还输出一个数字数组,可以通过 getPythonOutputs() 和 "llpython" NetworkTables 数字数组访问。这意味着您可以完全绕过 Limelight 的准星和其他功能,将您自己的自定义数据发送回机器人。
    • Python 脚本在我们的 C++ 环境中沙箱运行,因此您不必担心崩溃。对脚本的更改会立即生效,任何错误消息都会直接打印到网页界面。

最简 Limelight Python 脚本


import cv2
import numpy as np

# runPipeline() 由 Limelight 后端每帧调用。
def runPipeline(image, llrobot):
# 将输入图像转换为 HSV 颜色空间
img_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 通过移除不在以下 HSV 最小/最大值范围内的像素,
# 将 HSV 图像转换为二值图像
img_threshold = cv2.inRange(img_hsv, (60, 70, 70), (85, 255, 255))

# 在新的二值图像中查找轮廓
contours, _ = cv2.findContours(img_threshold,
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

largestContour = np.array([[]])

# 初始化一个空数组,用于发送数据回机器人
llpython = [0,0,0,0,0,0,0,0]

# 如果检测到轮廓,绘制它们
if len(contours) > 0:
cv2.drawContours(image, contours, -1, 255, 2)
# 记录最大的轮廓
largestContour = max(contours, key=cv2.contourArea)

# 获取包围轮廓的未旋转边界框
x,y,w,h = cv2.boundingRect(largestContour)

# 绘制未旋转的边界框
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,255),2)

# 记录一些自定义数据发送回机器人
llpython = [1,x,y,w,h,9,8,7]

# 返回最大轮廓用于 LL 准星、修改后的图像和自定义机器人数据
return largestContour, image, llpython