AIビジョンセンサー#

導入#

IQ AIビジョンセンサーは、物体、色、およびAprilTag IDを検出・追跡できます。これにより、ロボットは周囲の状況を分析し、物体を追跡し、検出された視覚データに基づいて反応することが可能になります。

以下の例では、設定済みの IQ AI Vision Sensor は ai_vision_1という名前になり、設定済みの Color Signature オブジェクト ( RED_BOXなど) は、この API ドキュメント全体を通して AiVision クラス メソッドを参照する際に、 のすべての例で使用されます。

以下にすべてのメソッドの一覧を示します。

データ取得ツール — IQ AIビジョンセンサーからデータを取得します。

  • take_snapshot — 特定の署名のデータをキャプチャします。

  • installed — IQ AI Vision Sensor が IQ (第 2 世代) Brain に接続されているかどうか。

プロパティ — take_snapshot から返されるオブジェクトデータ。

  • .exists — 現在の検出でオブジェクトが存在するかどうか。

  • .width — 検出されたオブジェクトの幅。

  • .height — 検出されたオブジェクトの高さ。

  • .centerX — オブジェクトの中心の X 座標。

  • .centerY — オブジェクトの中心の Y 座標。

  • .angle — カラーコードまたは AprilTag ID の向き。

  • .originX — オブジェクトの左上隅の X 座標。

  • .originY — オブジェクトの左上隅の Y 座標。

  • .id — オブジェクトの分類またはタグ ID。

  • .score — AI分類の信頼度スコア。

コンストラクター — センサーを手動で初期化および構成します。

  • AiVision — IQ AI ビジョンセンサーを作成します。

  • Colordesc — カラーシグネチャを作成します。

  • Codedesc — カラーコードを作成します。

ゲッター#

take_snapshot#

take_snapshot は、IQ AI Vision Sensor のフレームからデータをフィルタリングして、単一のシグネチャ (センサーが認識できるものの保存された説明。事前学習済みのオブジェクト、AprilTag ID、構成済みのカラーシグネチャまたはカラーコードなど) を作成し、タプル を返します。

この方法で使用する前に、カラーシグネチャとカラーコードをVision Utilityで最初に設定する必要があります。

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

パラメータ

説明

SIGNATURE

指定されたシグネチャのデータのみを含むようにデータセットをフィルタリングします。使用可能なシグネチャは次のとおりです。

  • カラーシグネチャまたはカラーコード - IQ AI Vision Sensor の名前、アンダースコア 2 つ、カラーシグネチャまたはカラーコードの名前。例: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - AI Vision Utility で構成されたモデルに応じて検出されたすべての AI 分類。
  • AiVision.ALL_TAGS - すべての AprilTag ID。

count

オプション。返されるオブジェクトの最大数を1~24の間で設定します(デフォルト:8)。

# Move forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

注: 返されたタプルは、Python の sorted を使用して、幅だけでなく任意の プロパティ でソートできます。たとえば、AprilTag ID でソートする場合:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

または、高さ順に並べ替えることもできます。

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

AI分類#

IQ AIビジョンセンサーは、特定のAI分類に基づいてさまざまな物体を検出できます。デバイスウィンドウでAIビジョンセンサーを設定する際に選択したAI分類モデルに応じて、検出される物体が異なります。現在利用可能なモデルは以下のとおりです。

教室で使用する物品

ID番号

AI分類

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

VEX IQロボティクス競技会 ミックス&マッチ

ID番号

AI分類

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

VEX IQロボティクス競技会レベルアップ

ID番号

AI分類

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

カラーシグネチャー#

カラーシグネチャとは、IQ AI Vision Sensorが認識できる固有の色のことです。これらのシグネチャにより、IQ AI Vision Sensorは色に基づいて物体を検出および追跡できます。カラーシグネチャが設定されると、センサーは視野内のその特定の色を持つ物体を識別できます。カラーシグネチャは、take_snapshotと組み合わせて使用​​され、色付き物体をリアルタイムで処理および検出します。

プロジェクトで設定済みのカラーシグネチャを使用するには、その名前はセンサー名、アンダースコア2つ、そしてカラーシグネチャ名でなければなりません。例: ai_vision_1__RED_BOX。

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color detected!")
        wait(100, MSEC)

カラーコード#

カラーコードとは、特定の順序で並べられた色の組み合わせで構成される構造化されたパターンです。これらのコードにより、IQ AIビジョンセンサーはあらかじめ定義された色のパターンを認識できます。カラーコードは、複雑な物体を識別したり、自律航行用の固有マーカーを作成したりするのに役立ちます。

プロジェクトで設定済みのカラーコードを使用するには、その名前はセンサー名、アンダースコア2つ、そしてカラーコード名でなければなりません。例: ai_vision_1__BOX_CODE。

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)

installed#

installed 、IQ AI Vision Sensor が現在 IQ (第 2 世代) Brain に接続されているかどうかを示すブール値を返します。

  • True — IQ AIビジョンセンサーはIQ(第2世代)ブレインに接続されています。

  • False — IQ AIビジョンセンサーはIQ(第2世代)ブレインに接続されていません。

Usage:
ai_vision_1.installed()

パラメータ

説明

このメソッドにはパラメータがありません。

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

物件#

take_snapshot を使用した後に tuple に格納される各オブジェクトには、10 個のプロパティが含まれます。

、.id .score を除くすべてのプロパティ値は、take_snapshot が使用された でのIQ AI Vision Sensorの視野内での検出されたオブジェクトの位置とサイズを表します。これらの値は、センサーの320×240ピクセルの解像度に基づいてピクセル単位で測定されます。

.exists#

.exists 、インデックスがタプル内に存在するかどうかを示すブール値を返します。

  • True — インデックスが存在します。

  • False — インデックスが存在しません。

# Check if at least two objects are detected
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[1].exists:
            brain.screen.print("At least 2")

        else:
            brain.screen.print("Less than 2")
    wait(50, MSEC)

.width#

.width 、検出されたオブジェクトの幅をピクセル単位で返します。これは 1 から 320 までの整数です。

# Approach an object until it's at least 100 pixels wide
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].width < 100:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.height#

.height 、検出されたオブジェクトの高さをピクセル単位で返します。これは 1 から 240 までの整数です。

# Approach an object until it's at least 90 pixels tall
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].height < 90:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.centerX#

.centerX 、検出されたオブジェクトの中心の x 座標をピクセル単位で返します。これは 0 から 320 までの整数です。

# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if 140 < objects[0].centerX < 180:
            drivetrain.stop()
    wait(10,MSEC)

.centerY#

.centerY 、検出されたオブジェクトの中心の y 座標をピクセル単位で返します。これは 0 から 240 までの整数です。

# Approach an object until the object's center is
# high enough in the field of view
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].centerY < 150:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.angle#

.angle 、検出されたカラーコードまたは AprilTag ID の向きを度数で返します。これは 0 から 359 までの整数です。

# Turn left or right depending on how a
# configured Color Code is rotated
while True:
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)

    if box_code[0].exists:
        if 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)

        elif 270 < box_code[0].angle < 330:
            drivetrain.turn(LEFT)

        else:
            drivetrain.stop()
    else:
        drivetrain.stop()
    wait(50, MSEC)

.originX#

.originX 、検出されたオブジェクトのバウンディングボックスの左上隅の x 座標をピクセル単位で返します。これは 0 から 320 までの整数です。

# Display if an object is to the left or the right
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originX < 120:
            brain.screen.print("To the left!")
        else:
            brain.screen.print("To the right!")
    else:
        brain.screen.print("No objects")
    wait(100, MSEC)

.originY#

.originY 、検出されたオブジェクトのバウンディングボックスの左上隅の y 座標をピクセル単位で返します。これは 0 から 240 までの整数です。

# Display if an object is close or far
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originY < 110:
            brain.screen.print("Close")
        else:
            brain.screen.print("Far")

.id#

.id 、検出された AI Classification または AprilTag ID の ID を整数として返します。AI Classification は、AI Vision Utility で構成されているモデルに依存します。

AprilTag ID の場合、 .id プロパティは、検出された AprilTag ID 番号を 0 ~ 36 の範囲で表します。AI 分類の場合、 .id プロパティは、AI 分類 セクションで定義済みの ID に対応します。

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.score#

.score 、検出された AI 分類の信頼度スコアを 1 から 100 までの整数として返します。

スコアが低いほど、センサーは検出された物体に対する確信度が低いことを意味し、スコアが高いほど、センサーの確信度が高いことを意味します。

# Display if a score is confident
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    if objects[0].exists:
        if objects[0].score > 95:
            brain.screen.print("Confident")
    else:
        brain.screen.print("Not confident")

    wait(50, MSEC)

建設業者#

Constructors are used to manually create AiVision, Colordesc, and Codedesc objects, which are necessary for configuring the IQ AI Vision Sensor outside of VEXcode.

AI Vision Sensor#

AiVision は IQ AI ビジョンセンサーを作成します。

使用法

Vision(port, sigs)

パラメータ

説明

port

IQ AIビジョンセンサーが接続されているスマートポート(1~12)を選択してください。

sigs

オプション。1つ以上の署名の名前:

例

ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)

# Move forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

Color Signature#

Colordesc はカラーシグネチャを作成します。IQ AI Vision Sensorには、最大7つの異なるカラーシグネチャを同時に保存できます。

使用法:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

パラメータ

説明

index

Colordesc オブジェクトのインデックス (1 ~ 7)。注: 同じインデックス番号で 2 つの Colordesc オブジェクトを作成すると、2 番目に作成されたオブジェクトが最初のオブジェクトを上書きします。

uMin

Vision Utilityにおける uMin の値。

uMax

Vision Utilityにおける uMax の最大値。

uMean

Vision Utilityにおける uMean の平均値。

vMin

Vision Utilityにおける vMin までのvMin値。

vMax

Vision UtilityにおけるvMaxの値は vMax。

vMean

Vision Utilityにおける vMean までの平均値。

rgb

Vision Utilityにおける rgb RGB値。

type

Vision Utilityでは、値は type 変化します。

カラーシグネチャを作成するための値を取得するには、ビジョンユーティリティを開きます。カラーシグネチャが設定されたら、構成ウィンドウからパラメータ値をコピーします。

例

# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = ai_vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Codedesc はカラーコードを作成します。使用するには、少なくとも 2 つの定義済みカラーシグネチャが必要です。ビジョンセンサーには、最大 8 種類の異なるカラーコードを同時に保存できます。

使用法:

Codedesc(sig1, sig2, sig3, sig4, sig5)

パラメータ

説明

sig1

以前に作成された カラーシグネチャ。

sig2

以前に作成された カラーシグネチャ。

sig3

オプション。 以前に作成された カラーシグネチャ。

sig4

オプション。 以前に作成された カラーシグネチャ。

sig5

オプション。 以前に作成された カラーシグネチャ。

例

# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)