跳到主要内容

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