Mã hóa bằng AI Vision Sensor trong VEXcode V5 C++

Đảm bảo bạn đã cấu hình Chữ ký màuMã màu với Cảm biến thị giác AI để có thể sử dụng chúng với các khối của bạn. Để tìm hiểu thêm về cách cấu hình chúng, bạn có thể đọc các bài viết dưới đây:

Cảm biến thị giác AI cũng có thể phát hiện Phân loại AI và AprilTags. Để tìm hiểu cách bật các chế độ phát hiện này, hãy vào đây:

Để tìm hiểu thêm chi tiết về từng lệnh này và cách sử dụng chúng trong VEXcode, hãy truy cập trang web API.


Lấy dữ liệu hình ảnh bằng cảm biến thị giác AI

Mỗi lệnh AI Vision Sensor sẽ bắt đầu bằng tên của AI Vision Sensor được cấu hình. Đối với tất cả các ví dụ trong bài viết này, tên của Cảm biến thị giác AI được sử dụng sẽ là AIVision.

chụp ảnh nhanh

Phương pháp takeSnapshot chụp ảnh những gì Cảm biến thị giác AI đang nhìn thấy và trích xuất dữ liệu từ ảnh chụp nhanh đó để sử dụng trong một dự án. Khi chụp ảnh nhanh, bạn cần chỉ định loại đối tượng mà Cảm biến thị giác AI sẽ thu thập dữ liệu:

  • AChữ ký màu hoặcMã màu
    • Các Chữ ký trực quan này bắt đầu bằng tên của Cảm biến thị giác AI, dấu gạch dưới kép, sau đó là tên của Chữ ký trực quan, ví dụ: AIVision1__Blue.
  • Phân loại AI - aivision::ALL_AIOBJS
  • Tháng tưThẻ- aivision::ALL_TAGS

Chụp ảnh nhanh sẽ tạo ra một mảng chứa tất cả các đối tượng được phát hiện mà bạn đã chỉ định. Ví dụ, nếu bạn muốn phát hiện Chữ ký màu "Xanh lam" và Cảmthị giác AI phát hiện 3 vật thể màu xanh lam khác nhau, dữ liệu từ cả ba vật thể sẽ được đưa vào mảng.

Trong ví dụ này, ảnh chụp nhanh được chụp từ Chữ ký màu "Xanh lam" từ Cảm biến thị giác AI có tên AIVision1. Nó hiển thị số lượng đối tượng được phát hiện trong mảng và chụp ảnh nhanh sau mỗi 0,5 giây.

while (true) {
// Lấy ảnh chụp nhanh của tất cả các đối tượng Màu xanh lam.
AIVision.takeSnapshot(AIVision1__Blue);

// Kiểm tra để đảm bảo rằng một đối tượng đã được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

các đối tượng

Mỗi đối tượng trong ảnh chụp nhanh đều có các thuộc tính khác nhau có thể được sử dụng để báo cáo thông tin về đối tượng đó. Phương thức đối tượng cho phép bạn truy cập các thuộc tính này.

Các thuộc tính có sẵn như sau:

  • nhận dạng
  • centerX và centerY
  • originX và originY
  • chiều rộng
  • chiều cao
  • góc
  • tồn tại
  • điểm

Để truy cập vào thuộc tính của đối tượng, hãy sử dụng tên của Cảm biến thị giác AI, theo sau là phương thức đối tượng và chỉ mục của đối tượng.

Chỉ mục đối tượng cho biết thuộc tính cụ thể của đối tượng mà bạn muốn lấy. Sau khi chụp ảnh nhanh, Cảm biến thị giác AI sẽ tự động sắp xếp các đối tượng theo kích thước. Đối tượng lớn nhất được gán số chỉ mục là 0, các đối tượng nhỏ hơn sẽ nhận được số chỉ mục cao hơn.

Ví dụ, gọi chiều rộng của đối tượng lớn nhất sẽ là AIVision1.objects[0].width.

nhận dạng

Thuộc tính id chỉ khả dụng cho AprilTags AI Classifications.

Ba điểm đánh dấu nhận dạng hình vuông được gắn nhãn ID 0, 9 và 3, mỗi điểm có tọa độ và kích thước tương ứng được hiển thị bằng văn bản màu trắng. ID 0 ở bên trái, ID 9 ở bên phải và ID 3 ở chính giữa phía dưới. Mỗi điểm đánh dấu có một mẫu đen trắng độc đáo bên trong một hình vuông.

Đối vớiAprilTag, thuộc tính id biểu thị số IDAprilTag(s) được phát hiện.

Việc xác định AprilTag cụ thể cho phép điều hướng có chọn lọc. Bạn có thể lập trình cho robot của mình di chuyển đến các thẻ nhất định trong khi bỏ qua các thẻ khác, sử dụng chúng như các biển báo để điều hướng tự động.

Hai quả bóng và hai chiếc nhẫn được xác định trong hình ảnh, có nhãn ghi rõ vị trí, kích thước và điểm số của chúng. Quả bóng đỏ ở bên trái, quả bóng xanh ở bên phải, vòng xanh ở góc dưới bên trái và vòng đỏ ở góc dưới bên phải. Mỗi đối tượng được phác thảo bằng một hộp màu trắng và các chi tiết như tọa độ X, Y, chiều rộng, chiều cao và điểm 99% được hiển thị bằng văn bản màu trắng.

Đối vớiPhân loại AI, thuộc tính id biểu thị loại Phân loại AI cụ thể được phát hiện.

Việc xác định Phân loại AIcụ thể cho phép rô-bốt chỉ tập trung vào các đối tượng cụ thể, chẳng hạn như chỉ muốn điều hướng về phía Buckyball màu đỏ, không phải màu xanh.

Truy cập các bài viết này để biết thêm thông tin về AprilTagsAI Classifications và cách kích hoạt tính năng phát hiện của chúng trong AI Vision Utility.

tâm Xtâm Y

Đây là tọa độ trung tâm của đối tượng được phát hiện tính bằng pixel.

Một quả Buckyball màu xanh đang được theo dõi bởi hệ thống thị giác máy tính. Đối tượng được bao quanh bởi một hình vuông màu trắng, bên trong hình vuông đó là một hình vuông màu đỏ nhỏ hơn bao quanh một chữ thập màu trắng ở giữa. Ở góc trên bên trái của hình ảnh, nhãn cho biết vật thể có màu xanh lam, với tọa độ X:176, Y:117 và kích thước W:80, H:78.

Tọa độ CenterX và CenterY giúp điều hướng và định vị. Cảm biến AI Vision có độ phân giải 320 x 240 pixel.

Hai vật thể hình khối màu xanh được theo dõi bằng hệ thống thị giác. Đối tượng phía trên được dán nhãn với tọa độ X:215, Y:70 và kích thước W:73, H:84, với đường viền màu trắng và chữ thập màu trắng ở giữa. Đối tượng bên dưới được dán nhãn với tọa độ X:188, Y:184 và kích thước W:144, H:113, cũng được viền màu trắng với chữ thập trắng ở giữa.

Bạn có thể thấy rằng vật thể gần Cảm biến thị giác AI hơn sẽ có tọa độ CenterY thấp hơn vật thể ở xa hơn.

Trong ví dụ này, vì tâm góc nhìn của Cảm biến thị giác AI là (160, 120) nên robot sẽ rẽ phải cho đến khi tọa độ tâmX của vật thể được phát hiện lớn hơn 150 pixel nhưng nhỏ hơn 170 pixel.

while (true) {
  // Nhận ảnh chụp nhanh của tất cả các đối tượng Màu xanh lam.
  AIVision.takeSnapshot(AIVision__Blue);

  // Kiểm tra để đảm bảo rằng có một đối tượng được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
  nếu (AIVision.objectCount > 0) {

    nếu (AIVision.objects[0].centerX > 150,0 && 170,0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(phải);
    } nếu không {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

originXoriginY

OriginX và OriginY là tọa độ ở góc trên bên trái của đối tượng được phát hiện tính bằng pixel.

Một Buckyball màu xanh đang được theo dõi bằng hệ thống thị giác. Một đường viền màu trắng bao quanh vật thể, với một chữ thập màu trắng ở giữa bên trong đường viền. Nhãn trên cùng bên trái biểu thị màu của vật thể là màu xanh lam, cùng với tọa độ X:176, Y:117 và kích thước W:80, H:78. Một hình vuông nhỏ màu đỏ làm nổi bật góc trên bên trái của đối tượng.

Tọa độ OriginX và OriginY giúp điều hướng và định vị. Bằng cách kết hợp tọa độ này với Chiều rộng và Chiều cao của đối tượng, bạn có thể xác định kích thước hộp giới hạn của đối tượng. Điều này có thể giúp theo dõi các vật thể chuyển động hoặc điều hướng giữa các vật thể.

chiều rộngchiều cao

Đây là chiều rộng hoặc chiều cao của vật thể được phát hiện tính bằng pixel.

Hình ảnh cho thấy một Buckyball màu xanh có đường viền hình vuông màu trắng theo dõi nó. Góc trên bên trái có nhãn cho biết đây là vật thể màu xanh, có tọa độ X:176, Y:117 và kích thước W:80, H:78. Mũi tên màu đỏ làm nổi bật chiều rộng và chiều cao của đối tượng.

Các phép đo chiều rộng và chiều cao giúp xác định các vật thể khác nhau. Ví dụ, Buckyball sẽ có chiều cao lớn hơn Ring.

Hai vật thể hình khối màu xanh đang được theo dõi bởi hệ thống nhận dạng hình ảnh. Khối lập phương phía trên có đường viền màu trắng với nhãn ghi vị trí là X:215, Y:70 và kích thước W:73, H:84. Khối lập phương phía dưới có đường viền màu trắng tương tự với nhãn hiển thị X:188, Y:184 và các kích thước W:144, H:113. Mỗi khối lập phương có một chữ thập màu trắng ở giữa, có thể là dấu hiệu cho biết điểm trọng tâm cần theo dõi. Các nhãn làm nổi bật các phép đo và dữ liệu theo dõi cho từng đối tượng.

Chiều rộng và chiều cao cũng cho biết khoảng cách của vật thể đến Cảm biến thị giác AI. Các phép đo nhỏ hơn thường có nghĩa là vật thể ở xa hơn, trong khi các phép đo lớn hơn cho thấy vật thể ở gần hơn.

Trong ví dụ này, chiều rộng của đối tượng được sử dụng để điều hướng. Robot sẽ tiếp cận vật thể cho đến khi chiều rộng đạt đến kích thước cụ thể trước khi dừng lại.

while (true) {
  // Nhận ảnh chụp nhanh của tất cả các đối tượng Blue.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Kiểm tra để đảm bảo rằng có một đối tượng được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
  nếu (AIVision.objectCount > 0) {

    nếu (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(tiến lên);
    } nếu không {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

góc

Một ảnh gif xoay hiển thị các khối màu đỏ và xanh lá cây. Khi các khối được đặt theo chiều ngang hoàn hảo từ màu đỏ đến màu xanh lá cây, chúng sẽ hiển thị góc 0 độ. Nếu khối màu đỏ nằm trên khối màu xanh lá cây theo chiều thẳng đứng thì chúng tạo thành góc 90 độ. Nếu các khối có chiều ngang từ xanh sang đỏ thì góc là 180 độ. Nếu khối màu xanh lá cây nằm trên khối màu đỏ theo chiều thẳng đứng thì góc là 20 độ.

Thuộc tính góc chỉ khả dụng choMã màuAprilTag

Điều này thể hiện nếu Mã màuhoặc AprilTag được phát hiện có định hướng khác nhau.

Một chồng hai khối lập phương, một khối màu xanh lá cây ở trên và một khối màu xanh lam ở dưới, được theo dõi bằng hệ thống thị giác. Một đường viền màu trắng bao quanh cả hai khối lập phương, với một chữ thập màu trắng nằm ở giữa khối lập phương màu xanh lá cây. Nhãn ở cuối hình ảnh hiển thị Green_Blue A:87°, cho biết màu sắc được phát hiện và phép đo góc. Bên dưới đó, các tọa độ được sắp xếp theo thứ tự X:117, Y:186, với các chiều W:137, H:172, biểu thị vị trí và kích thước của các khối lập phương xếp chồng lên nhau trong khung.

Bạn có thể xem robot có định hướng khác nhau theo Mã màu hayAprilTag hay không và đưa ra quyết định điều hướng theo đó.

Hai khối lập phương, một khối màu xanh lá cây và một khối màu xanh lam, được đặt cạnh nhau và được theo dõi bằng hệ thống thị giác. Một đường viền màu trắng bao quanh cả hai khối lập phương với một chữ thập màu trắng ở giữa. Nhãn trên cùng bên trái biểu thị Green_Blue A:0°, tham chiếu đến màu sắc được phát hiện và phép đo góc. Bên dưới, tọa độ được hiển thị là X:150, Y:102, với các kích thước W:179, H:109, biểu thị vị trí và kích thước của các khối lập phương trong khung.

Ví dụ, nếu Mã màu không được phát hiện ở góc thích hợp thì vật thể mà nó đại diện có thể không được robot nhận diện đúng cách.

điểm

Thuộc tính điểm được sử dụng khi phát hiệnPhân loại AI bằng Cảm biến thị giác AI.

Hình ảnh cho thấy bốn vật thể đang được theo dõi bởi hệ thống thị giác: hai quả bóng và hai chiếc nhẫn. Quả bóng màu đỏ được dán nhãn tọa độ X:122, Y:84, W:67, H:66 và có điểm là 99%. Quả bóng màu xanh có X:228, Y:86, W:70, H:68, với số điểm là 99%. Vòng tròn màu xanh lá cây có tọa độ X:109, Y:186, W:98, H:92 và điểm số là 99%. Vòng màu đỏ được dán nhãn X:259, Y:187, W:89, H:91, với số điểm là 99%. Mỗi đối tượng được viền màu trắng, biểu thị độ chính xác khi theo dõi.

Điểm tin cậy cho biết mức độ chắc chắn của Cảm biến thị giác AI về khả năng phát hiện của nó. Trong hình ảnh này, AI có thể xác định chính xác 99% Phân loại của bốn đối tượng này. Bạn có thể sử dụng điểm số này để đảm bảo robot của bạn chỉ tập trung vào những phát hiện có độ tin cậy cao.

tồn tại

Thuộc tính tồn tại được sử dụng để phát hiện xem Chữ ký trực quan được chỉ định có được phát hiện trong ảnh chụp nhanh cuối cùng hay.

Tính năng này cho phép bạn kiểm tra xem có bất kỳ đối tượng nào được phát hiện trong ảnh chụp nhanh trước đó hay không. Thuộc tính này sẽ trả về True khi đối tượng tồn tại và False khi đối tượng không tồn tại.


đối tượngCount

Phương thức objectCount trả về số lượng đối tượng được phát hiện trong ảnh chụp nhanh cuối cùng.

Giao diện AI Vision Utility có hai khối lập phương màu xanh được phát hiện ở phía bên trái, mỗi khối được đánh dấu tọa độ X và Y cùng kích thước của chúng. Hệ thống được kết nối và AprilTags được bật, trong khi AI Classification được tắt. Ở bên phải, cài đặt màu Xanh lam được hiển thị với phạm vi sắc độ và độ bão hòa có thể điều chỉnh, lần lượt được đặt ở mức 22 và 0,34. Có tùy chọn thêm hoặc cài đặt màu và đóng băng video. Phần mềm hệ thống đã được cập nhật, chạy phiên bản 1.0.0.b16 và có nút đóng ở phía dưới.

Trong ví dụ này, hai vật thể đã được phát hiện với Chữ ký màu "Xanh lam". Cả hai đều sẽ được đưa vào mảng khi phương thức takeSnapshot được sử dụng.

Đoạn mã này liên tục cập nhật EXP Brain với số lượng đối tượng được phát hiện. Dựa trên ví dụ được cung cấp, nó sẽ liên tục gửi giá trị 2, cho biết có hai đối tượng đã được phát hiện.

while (true) {
// Lấy ảnh chụp nhanh của tất cả các đối tượng Blue.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Kiểm tra để đảm bảo rằng một đối tượng đã được phát hiện trong ảnh chụp nhanh trước khi kéo dữ liệu.
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: