メインコンテンツまでスキップ

Python SnapScript パイプライン

Pythonスクリプティングを使用すると、OpenCVのフルパワーを活用して独自のパイプラインを迅速に構築できます。PythonインタープリターはLimelightのC++バックエンドに組み込まれているため、エラーやクラッシュは適切に処理されます。

通常のSnapScriptパイプラインは、Limelightのウェブインターフェースで直接プログラミングします。

Limelightはハードウェア、カメラインターフェース、ネットワーキング、ストリーミング、基本的な画像前処理を処理します。あなたがすべきことは、runPipeline()というPython関数を1つ書くだけです。

  • 私たちが提供する最も重要な機能の1つは、ワンクリッククロスヘアです。クロスヘア、デュアルクロスヘア、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