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

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データ、ポーズデータ、ロボット速度などを送信できます)
    • 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