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