Что такое обучаемая машина?

Teachable Machine - это веб-инструмент, который делает создание моделей машинного обучения быстрым, легким и доступным для всех. Вы обучаете компьютер распознавать ваши изображения, звуки и позы без написания кода машинного обучения. Затем используйте свою модель в своих собственных проектах, на сайтах, приложениях и многом другом. Любой может использовать это, например, преподаватели, художники, студенты, новаторы, производители всех мастей - действительно, любой, у кого есть идея, которую они хотят изучить.



Обучаемая машина, версия 1



Обучаемая машина, версия 2

Как мне его использовать?

1) Соберите данные:

В настоящее время вы можете тренировать обучаемую машину с изображениями (взятыми с вашей веб-камеры или файлов изображений), звуками (в односекундных фрагментах с вашего микрофона) и позами (где компьютер угадывает положение ваших рук, ног и т. Д. По изображению) . Возможно, скоро появятся и другие виды тренировок :)

2) Модель поезда:

Обучите свою модель, просто нажав одну кнопку, без необходимости сглаживания или предварительной обработки, Teachable Machine обучит модель на основе предоставленных вами примеров. Все обучение происходит в вашем браузере, поэтому все остается на вашем компьютере. затем немедленно проверьте его, чтобы увидеть, может ли он правильно классифицировать новые примеры, такие как позы, голос или изображения, в соответствии с предыдущими данными, которые использовались для обучения.

3) Экспортная модель:

Есть несколько способов сохранить вашу работу. Ты сможешь:

  1. Сохраните весь проект на Google Диске. Вы можете сохранить свой проект на свой Google Диск. При этом на Диск будет сохранен ZIP-файл, содержащий все образцы каждого из ваших классов. Затем вы можете снова открыть этот .zip-файл из Teachable Machine позже, чтобы продолжить с того места, где вы остановились.
  2. Загрузите образцы. Вы можете загрузить все образцы в каждом классе и загрузить их позже, если хотите продолжить работу с теми же данными.
  3. Загрузите свою модель. Если вы загрузите свою модель и закроете вкладку, вы сможете использовать эту загруженную модель позже - и ничего не будет сохранено ни на каких серверах.
  4. Ничего не сохранять. Если вы закроете вкладку и не сделаете ничего из вышеперечисленного, в вашем браузере или на каких-либо серверах ничего не будет сохранено.

Как работает на спине?

Teachable Machine использует TensorFlow.js, библиотеку для машинного обучения на Javascript, для обучения и запуска моделей, которые вы создаете в веб-браузере.

В этих моделях используется метод, называемый трансферным обучением. Существует предварительно обученная нейронная сеть, и когда вы создаете свои собственные классы, вы можете представить себе картину того, что ваши классы становятся последним слоем или этапом нейронной сети. В частности, модели изображения и позы обучаются на основе предварительно обученных моделей мобильной сети, а звуковая модель построена на Распознавателе речевых команд.

Плюсы обучаемой машины

  1. Легко обучать и развертывать.
  2. На обучение модели ушло совсем немного времени.
  3. открытый исходный код, поэтому мы можем играть с несколькими классами.
  4. Легкие шаги теперь такие знания ML требуют, даже если ребенок хочет сделать модель, он может и проверить ее на новых примерах.

- ve из обучаемой машины

  1. Изменение фона / окружения.
  2. Обрамляйте свои примеры.
  3. Смена микрофонов / пробелов.
  4. Захват аудиосэмплов с высоким уровнем шума.
  5. Понимание предвзятости.
  6. Непонятные новые примеры.

Разверните обучаемую машину с помощью P5.js, TinyUSB, Circuit Playground Express.

Предпосылка:

  1. Adafruit Circuit Playground Express
  2. Кабель USB - USB A - Micro-B
  3. Маленький измерительный провод с зажимом типа «крокодил»

Библиотека:

  1. Arduino IDE
  2. Пакет Adafruit SAMD Board
  3. Пакет плат Adafruit nRF52840
  4. Библиотека Adafruit TinyUSB

Технические характеристики Circuit Playground Express:

Circuit Playground Express укомплектован множеством датчиков на одной плате,

  • 10 x mini NeoPixels, каждый может отображать любой цвет
  • 1 x датчик движения (трехосевой акселерометр LIS3DH с обнаружением касания, обнаружением свободного падения)
  • 1 х датчик температуры (термистор)
  • 1 x датчик освещенности (фототранзистор). Также может действовать как датчик цвета и датчик пульса.
  • 1 x звуковой датчик (микрофон MEMS)
  • 1 x мини-динамик с усилителем класса D (магнитный динамик / зуммер 7,5 мм)
  • 2 x кнопки, обозначенные A и B
  • 1 х ползунковый переключатель
  • Инфракрасный приемник и передатчик - может принимать и передавать любые коды дистанционного управления, а также отправлять сообщения между Circuit Playground Expresses. Также может действовать как датчик приближения.
  • 8 контактов ввода / вывода, удобных для зажима типа «крокодил»
  • Включает I2C, UART, 8 контактов, которые могут выполнять аналоговые входы, несколько выходов PWM
  • 7 пэдов могут действовать как емкостные сенсорные входы, а оставшийся 1 - настоящий аналоговый выход.
  • Зеленый светодиод «ВКЛ», чтобы вы знали, что он включен
  • Красный светодиод «# 13» для основного мигания
  • Кнопка сброса
  • Процессор ATSAMD21 ARM Cortex M0, работающий при 3,3 В и 48 МГц
  • 2 МБ флэш-памяти SPI, используемой в основном с CircuitPython для хранения кода и библиотек.
  • Порт MicroUSB для программирования и отладки
  • Порт USB может действовать как последовательный порт, клавиатура, мышь, джойстик или MIDI!

«ВАЖНО»

Только наборы микросхем ATSAMD21 / 51 и nRF52840 поддерживают возможности браузера TinyUSB и Chrome WebUSB .

Другие поддерживаемые платы:

  • Adafruit Circuit Playground Express (SAMD21)
  • Adafruit Feather M0 (SAMD21)
  • Adafruit Feather M0 Express (SAMD21)
  • Adafruit Metro M0 Express (SAMD21)
  • Adafruit Gemma M0 (SAMD21)
  • Adafruit Trinket M0 (SAMD21)
  • Adafruit ItsyBitsy M0 (SAMD21)
  • Адафрут ПИРКЕЙ (SAMD21)
  • Adafruit Hallowing M0 (SAMD21)
  • Adafruit Crickit M0 (SAMD21)
  • Adafruit Metro M4 (SAMD51)
  • Adafruit Grand Central M4 (SAMD51)
  • Adafruit ItsyBitsy M4 (SAMD51)
  • Adafruit Feather M4 Express (SAMD51)
  • Adafruit Trellis M4 (SAMD51)
  • Adafruit PyPortal M4 (SAMD51)
  • Adafruit PyPortal M4 Titano (SAMD51)
  • Adafruit PyBadge M4 Express (SAMD51)
  • Adafruit Metro M4 AirLift Lite (SAMD51)
  • Adafruit PyGamer M4 Express (SAMD51)
  • Adafruit PyGamer Advance M4 (SAMD51)
  • Adafruit PyBadge AirLift M4 (SAMD51)
  • Adafruit Monster M4SK (SAMD51)
  • Adafruit Hallowing M4 (SAMD51)

Настройка Adafruit Circuit Playground Express (CPX):

Вы можете перекомпилировать код для любого набора микросхем SAMD21 / SAMD51 / nRF52840, который Adafruit поддерживает с TinyUSB. Это потому, что мы должны использовать WebUSB для связи, а это непросто сделать с Arduino.

Первое, что вам нужно сделать, это загрузить последнюю версию Arduino IDE. Загрузите Arduino IDE, используя https://www.arduino.cc/download_handler.php ниже.

Установите все необходимые библиотеки и файлы платы

Во-первых, нам нужно импортировать все библиотеки Adafruit и файлы досок. В меню Arduino IDE перейдите в Файл - ›Настройки и вставьте этот URL-адрес в URL-адреса дополнительных плат: https://www.adafruit.com/package_adafruit_index.json

Во-вторых, нам нужно скачать необходимые файлы форума. В меню Arduino IDE выберите Инструменты - ›Доска -› Менеджер доски. Найдите Adafruit SAMD Boards. Если вы используете набор микросхем nRF52840, выполните поиск по запросу Adafruit nRF52840.

В-третьих, нам нужно установить библиотеки. В меню Arduino IDE выберите Sketch - › Включить библиотеку -› Управление библиотеками. Найдите Библиотека Adafruit TinyUSB и библиотека Adafruit NeoPixel. Теперь скачиваем Веб-библиотеку USB. Теперь перейдите в Эскиз - › Включить библиотеку -› Добавить библиотеку .Zip, найдите папку библиотеки webUSB и импортируйте ее.

Наконец, подключите CPX к компьютеру с помощью заведомо исправного кабеля USB (пожалуйста, не используйте кабель зарядного устройства, предназначенный только для питания). перейдите в Инструменты - ›USB-стек и выберите TinyUSB. Если это невозможно выбрать, обновите свою версию IDE Arduino. При переключении стека USB вставляется TinyUSB вместо стека Arduino USB по умолчанию. TinyUSB имеет больше функций, включая поддержку WebUSB.

Если у вас выбраны эти настройки, вы можете продолжить кодирование.

Теперь вы можете подключить свое устройство к веб-странице P5.js с помощью Chrome WebUSB.

Код экспресс-доставки Circuit Playground:

#include ‹Servo.h›
#include ‹Adafruit_NeoPixel.h›
#include «Adafruit_TinyUSB.h»

// К какому выводу на CPX / плате подключен сервопривод?
#define SERVO_PIN A1
Servo myservo;

// Используем внутреннее неопиксельное кольцо
#define NEOPIX_PIN 8
#define NUMPIXELS 10
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, NEOPIX_PIN, NEO_GRB + NEO_KHZ800);

// USB-объект WebUSB
Adafruit_USBD_WebUSB usb_web;

// Целевая страница: схема (0: http, 1: https), URL
WEBUSB_URL_DEF (landingPage, 1 / * https * /, «https://editor.p5js.org/Jude_Raj/present/lKRyYOZ-H ”);

// функция настройки запускается один раз, когда вы нажимаете кнопку сброса или включаете плату
void setup ()
{
usb_web.begin ();
usb_web.setLandingPage (& LandingPage); < br /> usb_web.setLineStateCallback (line_state_callback);

Serial.begin (115200);

// Это инициализирует NeoPixel с помощью КРАСНЫХ
пикселей.begin ();
пикселей.setBrightness (20);
пикселей.fill (0x0F0F0F); // тускло-белые
пиксели.show ();

// ждем пока устройство смонтируется
while (! USBDevice.mounted ()) delay (1);
pixels.fill (0x0F0F00); // тускло-желтый
px.show ();

Serial.println («Пример TinyUSB WebUSB RGB»);
usb_web.print («Начинается скетч. \ r \ n ”);
usb_web.flush ();
pinMode (LED_BUILTIN, OUTPUT);

myservo.attach (SERVO_PIN);
myservo.write (60);
}

void loop ()
{
if (usb_web.available ()) {
digitalWrite (LED_BUILTIN, HIGH);
Serial.print («-› »);
char val = usb_web.read ();
digitalWrite (LED_BUILTIN, LOW);
Serial.print («Значение чтения:«); Serial.println (val, DEC);

if (val == 1) {// Целевая ячейка №1
pixels.fill (0xFFFF00);
pixels.show ();
Serial.println («CEREAL!»);

myservo.write (0); // отодвигаем хлопья в сторону
delay (2000); // ждем
for (int pos = 0; pos ‹= 75; pos ++) {// возвращаем servo
myservo.write (pos);
delay (5);
}
задержка (1000); // еще одно ожидание перед тем, как продолжить

} else if (val == 2) {// Целевая ячейка № 2
pixels.fill (0xFF000FF);
pixels.show ();
Serial.println («МАЛЕНЬКИЙ!») ;

myservo.write (180); // толкаем мальвы на другую сторону
delay (2000); // ждем
for (int pos = 180; pos ›= 75; pos -) {// возвращаем серво
myservo.write (pos);
delay (5);
}
задержка (1000); // еще одно ожидание перед продолжением
}
pixels.fill (0);
pixels.show ();

while (usb_web.available ()) {
usb_web.read ();
delay (10);
}
} else {
// нет данных веб-сериала, отметьте галочкой сервопривод
for (int pos = 60; pos ‹= 90; pos ++) {// медленно переходит от 60 градусов к 90 градусов
myservo.write (pos);
delay ( 3);
}
for (int pos = 90; pos ›= 60; pos -) {// возвращается к 60
myservo.write (pos);
задержка (3);
}
}
}

void line_state_callback (bool connected)
{
// подключен = зеленый, отключен = красный
pixel.fill (connected? 0x00ff00: 0xff0000);
pixels.show (); < br />}

Подключите Circuit Playground Express к странице веб-редактора P5.js

Убедитесь, что ваш Circuit Playground Express все еще подключен к компьютеру через USB-кабель.

  1. Откройте этот редактор P5 на новой вкладке Chrome
  2. Редактор P5: https://editor.p5js.org/Jude_Raj/present/lKRyYOZ-H
  3. Нажмите Подключить CPX. Выберите плату в списке и нажмите Подключиться. Подобно изображению ниже.

Обучите модель

Постарайтесь получить от 75 до 150 картинок на класс. Помните, чем более точные данные будут у вашей модели, тем она будет лучше.

Обучите класс 1, класс 2 и пустой класс ( см. Как его использовать? из предыдущего абзаца ).

Класс 1: Например (Коллекция изображений человека в маске). Этот класс позволяет классификатору узнать, когда перед камерой находится человек в маске, поэтому он должен предпринять какие-либо действия.

Класс 2: например (Коллекция изображений человека без маски). Этот класс позволяет классификатору узнать, когда перед камерой находится человек без маски, поэтому он должен предпринять какие-либо действия.

Пусто: например (коллекция изображений, на которых нет человека). Этот класс позволяет классификатору знать, что перед камерой никого нет, поэтому он не должен предпринимать никаких действий, пока не появится что-то идентифицируемое.

Теперь нажмите Модель поезда, и все! Вы обучили модель.

Получить ссылку на модель для совместного использования

Нажмите Экспорт модели, а затем нажмите Загрузить мою модель в облако.

Теперь вы получите свою ссылку для совместного использования. Скопируйте ссылку, перейдите в редактор P5, вставьте ссылку и нажмите ЗАГРУЗИТЬ МОДЕЛЬ.

Вот и все, теперь вы можете создавать собственные модели классификации с помощью Teachable Machine и предпринимать действия на основе предсказанного класса с помощью CPX.

Разверните обучаемую машину с помощью P5.js, TinyUSB, Arduino Leonardo.

Предпосылка:

  1. Ардуино Леонардо
  2. Кабель USB - USB A - Micro-B
  3. Соединительные кабели

Библиотека:

  1. Arduino IDE
  2. Пакет платы Arduino AVR
  3. Библиотека WebUSB

Технические характеристики Arduino Leonardo:

  1. Микроконтроллер: ATmega32u4
  2. Рабочее напряжение: 5 В
  3. Входное напряжение (рекомендуемое): 7–12 В
  4. Входное напряжение (пределы): 6–20 В
  5. Цифровые контакты ввода / вывода: 20
  6. Каналы ШИМ: 7
  7. Каналы аналогового ввода: 12
  8. Постоянный ток на контакт ввода / вывода: 40 мА
  9. Постоянный ток для вывода 3.3 В: 50 мА
  10. Флэш-память: 32 КБ (ATmega32u4), из которых 4 КБ используется загрузчиком
  11. SRAM: 2,5 КБ (ATmega32u4)
  12. EEPROM: 1 КБ (ATmega32u4)
  13. Тактовая частота: 16 МГц
  14. Длина: 68,6 мм
  15. Ширина: 53,3 мм
  16. Вес: 20 г

Другие поддерживаемые платы:

  • Ардуино Леонардо
  • Arduino / Genuino Micro
  • Ардуино / Genuino Zero
  • Ардуино / Genuino MKR1000
  • Ардуино MKRZero
  • Ардуино MKR FOX 1200
  • Arduino MKR WAN 1300
  • Ардуино MKR GSM 1400
  • Ардуино MKR NB 1500
  • Ардуино MKR Wi-Fi 1010
  • Ардуино MKR Видор 4000
  • Arduino NANO 33 IoT

Настройка Arduino Leonardo:

Вы можете перекомпилировать код для любого набора микросхем SAMD21 / SAMD51 / nRF52840. Это потому, что мы должны использовать WebUSB для связи, а это непросто сделать с Arduino.

Первое, что вам нужно сделать, это загрузить последнюю версию Arduino IDE. Загрузите Arduino IDE, используя https://www.arduino.cc/download_handler.php ниже.

Установите все необходимые библиотеки и файлы платы

Arduino IDE по умолчанию содержит файл платы Arduino Leonardo.

Мы скачали все требования, если нет (см. Последний параграф Установить все необходимые библиотеки и файлы платы).

Теперь выберите Arduino Leonardo в разделе Инструменты - ›Плата -› Платы Arduino AVR - ›Arduino Leonardo.

Выберите Порт и выберите USBTinyISP как Программист.

Если у вас выбраны эти настройки, вы можете продолжить кодирование.

Теперь вы можете подключить свое устройство к веб-странице P5.js с помощью Chrome WebUSB.

Код Ардуино Леонардо:

#include ‹WebUSB.h›
#include ‹Servo.h›

// ЗАДАЧА: исправьте эту подсказку URL
WebUSB WebUSBSerial (1 / * https: // * /, «https://editor.p5js.org/Jude_Raj/present/B-KOSb1Ub»);

#define Serial WebUSBSerial
Servo myservo;

const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
int pos = 0; // переменная для хранения положения сервопривода

int color [3];
int colorIndex;

void setup () {
while (! Serial) {
;
}
Serial.begin (9600);
Serial.write («Набросок начинается. \ r \ n ”);
Serial.flush ();
colorIndex = 0;
myservo.attach (9);
myservo.write (60);
}

void loop () {

if (Serial && Serial.available ()) {
color [colorIndex ++] = Serial.read ();
if (colorIndex == 1) {

// Serial.flush ();
// analogWrite (redPin, color [0]);
if (color [0] == 1) {
myservo.write (0);
delay (2000);
for (pos = 0; pos ‹= 75; pos + = 1) {// изменяется от 0 градусов до 180 градусов
// с шагом 1 градус
myservo.write (pos); // указываем сервоприводу перейти в позицию в переменной «pos»
delay (5); // ожидает 15 мс, пока сервопривод достигнет позиции
}
delay (1000);
Serial.write («Ceral обнаружен. \ r \ n»);
}

else if (color [0] == 2) {
myservo.write (180);
delay (2000);
for (pos = 180; pos ‹= 75; pos - = 1) {// изменяется от 0 градусов до 180 градусов
// с шагом в 1 градус
myservo.write (pos); // сообщаем сервоприводу перейти в позицию в переменной «pos»
delay (20); // ожидает 15 мс, пока сервопривод достигнет позиции
}
delay (1000);
Serial.write («обнаружена мальва. \ r \ n»);
} < br /> while (Serial.available ()) {
int throwaway = Serial.read ();
Serial.write («Выбрасывание. \ r \ n»);
}

Serial.flush ();
colorIndex = 0;
}
}
else {
// Serial.println («asdf»);
для (pos = 60; pos ‹= 90; pos + = 1) {// изменяется от 0 градусов до 180 градусов
// с шагом в 1 градус
myservo.write (pos); // указываем сервоприводу перейти в позицию в переменной «pos»
delay (3); // ожидает 15 мс, пока сервопривод достигнет позиции
}
for (pos = 90; pos ›= 60; pos - = 1) {// переходит от 180 градусов к 0 градусов
myservo.write (pos); // указываем сервоприводу перейти в позицию в переменной «pos»
delay (3); // ждем 15 мс, пока сервопривод достигнет позиции
}
// delay (200);
}

}

Подключите Arduino Leonardo к странице веб-редактора P5.js

Убедитесь, что ваш Arduino Leonardo все еще подключен к вашему компьютеру через USB-кабель.

  1. Откройте этот редактор P5 на новой вкладке Chrome
  2. Редактор P5: https://editor.p5js.org/Jude_Raj/present/B-KOSb1Ub
  3. Нажмите Подключить Arduino, выберите плату в списке и нажмите Подключиться. Подобно изображению ниже.

Обучите модель

Постарайтесь получить от 75 до 150 картинок на класс. Помните, чем более точные данные будут у вашей модели, тем она будет лучше.

Обучите класс 1, класс 2 и пустой класс ( см. Как его использовать? из предыдущего абзаца ).

Класс 1: Например (Коллекция изображений человека в маске). Этот класс позволяет классификатору узнать, когда перед камерой находится человек в маске, поэтому он должен предпринять какие-либо действия.

Класс 2: например (Коллекция изображений человека без маски). Этот класс позволяет классификатору узнать, когда перед камерой находится человек без маски, поэтому он должен предпринять какие-либо действия.

Пусто: например (коллекция изображений, на которых нет человека). Этот класс позволяет классификатору знать, что перед камерой никого нет, поэтому он не должен предпринимать никаких действий, пока не появится что-то идентифицируемое.

Теперь нажмите Модель поезда, и все! Вы обучили модель.

Получить ссылку на модель для совместного использования

Нажмите Экспорт модели, а затем нажмите Загрузить мою модель в облако.

Теперь вы получите свою ссылку для совместного использования. Скопируйте ссылку, перейдите в редактор P5, вставьте ссылку и нажмите ЗАГРУЗИТЬ МОДЕЛЬ.

Вот и все, теперь вы можете создавать собственные модели классификации с помощью обучаемой машины и выполнять действия на основе предсказанного класса с помощью Arduino Leonardo.

Мой прототип:

Посмотрите мое видео на Youtube…

Мой код прототипа:

#include ‹Adafruit_NeoPixel.h›
#include «Adafruit_TinyUSB.h»
#include ‹LedControl.h›
int DIN = A1;
int CS = A2;
интервал CLK = A3;

LedControl lc = LedControl (DIN, CLK, CS, 0);

// Используем внутреннее неопиксельное кольцо
#define NEOPIX_PIN 8
#define NUMPIXELS 10
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, NEOPIX_PIN, NEO_GRB + NEO_KHZ800);

// USB-объект WebUSB
Adafruit_USBD_WebUSB usb_web;

// Целевая страница: схема (0: http, 1: https), url
WEBUSB_URL_DEF (landingPage, 1 / * https * /, «« https://editor.p5js.org/Jude_Raj/present/lKRyYOZ- ЧАС"');

// функция настройки запускается один раз, когда вы нажимаете кнопку сброса или включаете плату
void setup ()
{
usb_web.begin ();
usb_web.setLandingPage (& LandingPage); < br /> usb_web.setLineStateCallback (line_state_callback);

Serial.begin (115200);

// Это инициализирует NeoPixel с помощью КРАСНЫХ
пикселей.begin ();
пикселей.setBrightness (50);
пикселей.fill (pixels.Color (0, 0, 0, 255)) ; // Настоящий белый
пиксель.show ();

// ждем пока устройство смонтируется
while (! USBDevice.mounted ()) delay (1);
pixels.fill (pixels.Color (255, 153, 0));
pixels.show ();

usb_web.flush ();

lc.shutdown (0, ложь);
lc.setIntensity (0,15); // Регулируем максимум яркости 15
lc.clearDisplay (0);
}

void loop ()
{
if (usb_web.available ()) {
char val = usb_web.read ();
if (val == 1) {// Цель bin # 1
pixels.fill (pixels.Color (255, 0, 0)); // КРАСНЫЙ
пикселей.show ();
байтовые остановки [8] = {0xBC, 0x42,0xA1,0x91,0x89,0x85,0x42,0x3D};
printByte (стопы);
delay (1000);

} else if (val == 2) {// Целевая ячейка № 2
pixels.fill (pixels.Color (0, 255, 0 )); // ЗЕЛЕНЫЙ
пикселей.show ();
байт arrow_up [8] = {0x18,0x3C, 0x7E, 0xFF, 0x18,0x18,0x18,0x18};
printByte (arrow_up);
задержка (1000);
}

pixels.fill (0);
pixels.show ();
lc.clearDisplay (0);

while (usb_web.available ()) {
usb_web.read ();
задержка (10);
}
}
}

void printByte (байтовый символ [])
{
int i = 0;
for (i = 0; i ‹8; i ++)
{
lc.setRow (0, i, символ [i]);
}
}

void line_state_callback (bool connected)
{
// connected = Blue, disconnected = Purple
pixels.fill (connected? pixels.Color (0, 150, 255): pixels.Color (255) , 0, 255));
pixels.show ();
}