Pull to refresh
355.22
BotHub
Доступ к ChatGPT в РФ

Codia AI: скрины в дизайн и дизайн в код

Reading time12 min
Views1.6K

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

Компания Codia, из технологического центра Сингапура, идет, нет, даже бежит на свет в темноте, в виде искусственного интеллекта.

Команда предлагает нам интересные продукты: Codia AI Design и Codia AI Figma to code, где первый способен воспроизвести наш набросок и фотографию в драфт, а второй способен подобный драфт воспроизвести в код.

Предлагаю рассмотреть эти плагины и концепцию их работы.

Приступим(:

Codia AI Design

Попробуем использовать в действии технологии искусственного интеллекта для преобразования изображений в макеты дизайна, включая распознавание ИИ, интеллектуальную генерацию макетов и сценарии применения.

Но сначала вводные.

Распознавание

Codia AI решила попробовать себя на поле распознавания ИИ, да это в принципе является ключевым шагом для преобразования наших скринов в драфты (а если иначе, то как?). Что нам, а точнее им, нужно было почерпнуть из алгоритмов машинного обучения? Конечно: OCR, сегментация изображений и распознавание объектов.

Начнем со схемы для распознавания:

Каждый шаг по порядку, начнем с сегментации изображений:

  • Сегментация изображений – это процесс идентификации и разделения каждого отдельного элемента на изображении. Обычно это достигается с помощью deep learning, например CNN. Популярная архитектура сети для этой цели - U-Net, которая особенно хорошо подходит для задач сегментации изображений.

  • С точки зрения реализации:

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

  2. Далее необходимо обучить модель с использованием архитектуры U-Net, чтобы она могла распознавать различные элементы дизайна. 

  3. И в конце нам нужно применить обученную модель к новым изображениям, чтобы получить точное местоположение и границы каждого элемента.

  4. Пример:

    import tensorflow as tf
    
    from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate
    
    from tensorflow.keras.models import Model
    
    def unet_model(input_size=(256, 256, 3)):
    
        inputs = Input(input_size)
    
        # Архитектура U-Net
    
        # ... (код конкретной конструкции U-Net опущен)
    
        outputs = Conv2D(1, (1, 1), activation='sigmoid')(conv9)
    
        model = Model(inputs=inputs, outputs=outputs)
    
        model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    
        return model
    
    # Код для загрузки набора данных, обучения модели и применения модели должен быть реализован здесь

Далее к распознанию объектов:

  • Обнаружение объектов подразумевает идентификацию конкретных элементов на изображении, таких как кнопки, иконки и т. д., и соотнесение их с заранее определенной библиотекой элементов.

  • С точки зрения реализации:

    from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input
    
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    
    from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
    
    from tensorflow.keras.models import Model
    
    # Загрузка предварительно обученной модели ResNet50
    
    base_model = ResNet50(weights='imagenet', include_top=False)
    
    # Добавление пользовательских слоев
    
    x = base_model.output
    
    x = GlobalAveragePooling2D()(x)
    
    x = Dense(1024, activation='relu')(x)
    
    predictions = Dense(num_classes, activation='softmax')(x)
    
    # Создание окончательной модели
    
    model = Model(inputs=base_model.input, outputs=predictions)
    
    # Замораживание слоев ResNet50
    
    for layer in base_model.layers:
    
       layer.trainable = False
    
    # Компиляция модели
    
    model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
    
    # Код для обучения модели будет реализован здесь

И OCR:

  • Если коротко, то это возможность распознавать текст и символы на изображениях, фотографиях или скриншотах.

  • С точки зрения реализации:

  1. Используем инструменты OCR (например, Tesseract) для распознавания текста на изображениях. 

  2. Работаем с постобработкой распознанного текста, включая коррекцию языка и настройку формата. 

  3. И импортируем обработанный текст в макет дизайна Figma.

  4. Пример:

import pytesseract

from PIL import Image

# Настройка пути к Tesseract

pytesseract.pytesseract.tesseract_cmd = r'путь_к_tesseract'

# Загрузка изображения

image = Image.open('пример.png')

# Применение OCR

text = pytesseract.image_to_string(image, lang='eng')

# Вывод распознанного текста

print(text)

# Код для импорта распознанного текста в Figma будет реализован здесь

Генерация макета

Преобразование изображения в макет дизайна в Figma включает восстановление элементов, распознанных ИИ, в объекты в Figma, и применение соответствующих стилей и компоновок. Рассмотрим этапы.

Начнем с восстановления элементов:

  • На этапе распознавания с помощью искусственного интеллекта мы уже получили информацию о границах и категориях каждого элемента на изображении. Теперь необходимо воссоздать эти элементы в Figma.

  • Техническая реализация: 

  1. Сначала используем API Figma для создания соответствующих форм и текстовых элементов. 

  2. Устанавливаем размер и позицию элементов на основе данных, полученных от ИИ. 

  3. При наличии текстового элемента определяем шрифт, размер и цвет. 

  4. Пример:

    // Предположим, что у нас уже есть информация о элементе, включая тип, позицию, размер и стиль
    
    const elementInfo = {
      type: 'rectangle',
      x: 100,
      y: 50,
      width: 200,
      height: 100,
      fill: '#FF5733'
    };
    
    // Используем fetch API для вызова REST API Figma для создания прямоугольника
    
    fetch('https://api.figma.com/v1/files/:file_key/nodes', {
      method: 'POST',
      headers: {
        'X-Figma-Token': 'ВАШ_ТОКЕН_ДОСТУПА'
      },
    
      body: JSON.stringify({
        nodes: [
          {
            type: 'RECTANGLE',
            x: elementInfo.x,
            y: elementInfo.y,
            width: elementInfo.width,
            height: elementInfo.height,
            fills: [{ type: 'SOLID', color: elementInfo.fill }]
          }
        ]
      })
    })
    
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Ошибка:', error));

Теперь перейдем к сопоставлению стилей:

  • Процесс сопоставления стилей заключается в передаче информации о стиле, обнаруженной искусственным интеллектом, к элементам в Figma, включая цвета, отступы, тени и прочее.

  • C точки зрения реализации: 

  1. Производим анализ данных о стиле, обнаруженных искусственным интеллектом. 

  2. Используем API Figma для обновления свойств стиля элементов. 

  3. Пример:

// Предположим, что у нас уже есть информация о стиле

const styleInfo = {
  color: { r: 255, g: 87, b: 51 },
  fontSize: 16,
  fontFamily: 'Roboto',
  fontWeight: 400
};

// Обновление стиля текстового элемента

fetch('https://api.figma.com/v1/files/:file_key/nodes/:node_id', {
  method: 'PUT',
  headers: {
    'X-Figma-Token': 'ВАШ_ТОКЕН_ДОСТУПА'
  },

  body: JSON.stringify({
    nodes: [
      {
        type: 'TEXT',
        characters: 'Пример текста',
        style: {
          fontFamily: styleInfo.fontFamily,
          fontWeight: styleInfo.fontWeight,
          fontSize: styleInfo.fontSize,
          fills: [{ type: 'SOLID', color: styleInfo.color }]
        }
      }
    ]
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));

И автоматизация(интеллектуальная компоновка):

  • Под интеллектуальной компоновкой понимается умное распределение элементов на основе их взаимных пространственных отношений в Figma.

  • C точки зрения реализации: 

  1. Сначала производим анализ пространственных взаимосвязей между элементами. 

  2. Используем API Figma для установки ограничений и сеток компоновки для элементов. 

  3. Пример:

// Предположим, что у нас уже есть данные о пространственных взаимосвязях между элементами

const layoutInfo = {
  parentFrame: 'Frame_1',
  childElements: ['Rectangle_1', 'Text_1']

};

// Установка ограничений для элементов внутри плагина Figma

const parentFrame = figma.getNodeById(layoutInfo.parentFrame);

layoutInfo.childElements.forEach(childId => {
  const child = figma.getNodeById(childId);

  if (child) {
    child.constraints = { horizontal: 'SCALE', vertical: 'SCALE' };
    parentFrame.appendChild(child);
  }
});

Итак, мы рассмотрели основные этапы работы в Codia AI Design для преобразования наших, например, скетчей в рабочие драфты посредством ИИ.

Design2Code

Теперь обратимся ко второй фишке Codia AI, а именно к возможности преобразования нашего дизайн в код с помощью нейросети. Звучит, конечно, очень заманчиво.


Сразу перейдем к делу, я думаю.

Стек у Codia AI следующий:

  • Для веба: HTML, CSS, JavaScript, TypeScript, Tailwind, React, Vue, with ongoing expansions.

  • Приложения: iOS, Android, Flutter, Swift, SwiftUI, Objective-C, Java, Kotlin, Jetpack Compose UI.

Распознание макета

В основе – DOM, что это?

Document Object Model(DOM) – программный интерфейс для веб-документов, который дает возможность изменения структуры/стиля/содержимого документа. За счет чего это происходит? DOM представляет страницу как дерево объектов, где каждый объект является частью документа(например, атрибут).

Пример ниже, то есть вместо того чтобы у нас все было в столбик по порядку, мы имеем группировку объектов, что значительно упрощает работу.

Схематически весь процесс распознавания можно изобразить так:

  • Начнем с анализа дерева DOM:

Путем анализа HTML и CSS страницы формируется древовидная структура DOM, которая представляет собой иерархию всех элементов на странице. Каждый элемент (узел) в этом дереве соответствует определенной части документа, например, заголовку.

  • Перейдем к распознавание макета:

Здесь нам нужно понять, как элементы визуально представлены на странице, в том числе их расположение, размеры или расстояние от других элементов. Здесь используются алгоритмы и ML для анализа макетов, особенно в случае сложных веб-страниц с динамически генерируемыми или изменяемыми элементами.

  • Машинное обучение и искусственный интеллект:

Применение алгоритмов машинного обучения позволяет лучше понимать и предсказывать структуру и макет веб-страниц. Эти алгоритмы обучаются на больших наборах данных веб-страниц.

  • Взаимодействие с механизмом визуализации браузера:

Важно понимать, как разные веб-браузеры интерпретируют и отображают HTML и CSS, поскольку каждый браузер может иметь небольшие различия в отображении. Поэтому необходимо распознавать, как DOM преобразуется в видимый макет в различных браузерах для обеспечения совместимости между платформами.

  • Обработка динамического контента:

Современные веб-приложения часто динамически загружают контент с использованием JavaScript. Это вызывает необходимость распознавания и понимания этих изменений в реальном времени, что требует постоянного мониторинга и обновления распознанного макета.

  • Доступность и семантический HTML:

При распознавании DOM также важно понимать семантическое значение HTML-элементов для обеспечения доступности веб-контента для всех пользователей, включая тех, кто использует программы чтения экрана и другие вспомогательные технологии.

Переменные

Проиллюстрировать шаги можно так:

Концепция понимания структуры DOM включает несколько ключевых шагов.

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

Затем используются техники машинного обучения и обработки естественного языка для интеллектуального назначения имен переменным на основе содержимого DOM.

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

Далее сосредотачиваемся на поддержании читаемости кода и удобстве его сопровождения, обеспечивая генерацию информативных имен переменных.

Затем происходит интеграция инструментов интеллектуального назначения имен переменных в редакторы кода и предоставление поддержки в реальном времени для разработчиков.

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

Объединение слоев и сжатие

Рассмотрим ключевые концепции разделения и сжатия изображений, которые спасают нас посредством оптимизации веб-производительности:

  1. Разбиение изображений на более мелкие части - это важный аспект в веб-дизайне. При усовершенствованном разделении учитываются следующие аспекты:

    • Точное сегментирование: Использование алгоритмов для точного выделения частей изображения в соответствии с его содержанием, композицией или требованиями дизайна.

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

  1. Автоматическое сжатие изображений с сохранением качества - это еще один важный аспект. Оно включает:

    • Адаптивные алгоритмы: Алгоритмы, которые регулируют уровень сжатия в зависимости от содержания изображения, чтобы сохранить важные детали.

    • Выбор формата: Автоматический выбор наилучшего формата файла (например, JPEG, PNG, WebP) в зависимости от содержания изображения и его использования.

  1. Эффективное разделение и интеллектуальное сжатие изображений помогают ускорить загрузку веб-страниц, что крайне важно для улучшения пользовательского опыта, особенно на мобильных устройствах с медленным интернетом.

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

  3. Улучшенное разделение изображений может быть интегрировано с принципами отзывчивого веб-дизайна, что позволяет загружать различные версии изображений в зависимости от устройства пользователя и его разрешения.

  4. Внедрение машинного обучения помогает сделать процесс еще более точным, учитывая различные типы изображений и их оптимальное разделение и сжатие для лучшей производительности веб-страниц.

  5. Функции могут быть встроены в рабочие процессы веб-разработчиков, что обеспечивает автоматическую обработку изображений и сохранение единого стиля на всем веб-сайте.

  6. Оптимизированные изображения улучшают SEO, а правильное разделение и обозначение изображений способствуют лучшей доступности веб-сайта для пользователей с ограниченными возможностями.

То есть, условно, на картинке выше – результат работы Codia AI. Вместо нескольких слоев, которые нам бы понадобились для создания этой иконки, на выходе мы получаем комплексное изображение.

UI

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

  • Путем обучения моделей машинного обучения на большом наборе примеров пользовательского интерфейса система может научиться точно распознавать и классифицировать различные элементы пользовательского интерфейса. Это обучение может включать разные стили, конфигурации и расположения компонентов.

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

  • Технология понимает контекст, в котором функционирует пользовательский интерфейс. Например, в приложении электронной коммерции она будет проверять наличие строки поиска, списка продуктов и значков корзины.

  • Обнаружив и предлагая необходимые компоненты пользовательского интерфейса, система значительно улучшает UX, обеспечивая интуитивно понятный, удобный в использовании и функциональный интерфейс.

  • Гарантия соблюдения стандартов доступности пользовательского интерфейса, таких как включение элементов, удобных для программ чтения экрана, и обеспечение легкой навигации по интерактивным компонентам.

  • Интегрированная в среды разработки, эта технология может предоставлять разработчикам обратную связь и рекомендации в реальном времени, помогая создавать более полные и надежные пользовательские интерфейсы.

  • Система может быть настроена на распознавание компонентов пользовательского интерфейса, специфичных для различных платформ, таких как веб-сайты, мобильные или десктопные приложения, учитывая уникальные стандарты дизайна и ожидания пользователей каждой платформы.

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

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

Пример использования

Итак, вначале залетаем в фигму и добавляем себе плагин “Codia AI Design” и загружаем свой скрин, я решила взять пример, который они предлагают и ждем, пока плагин преобразует наш скрин в редактируемый прототип:

Итак, нейросеть проявила себя в действии и создала нам редактируемый шаблон:

Далее, для того, чтобы мы могли получить код, нужно добавить плагин “Codia-AI Figma to code” и выпавшем окне выбираем язык и настраиваем конфигурацию:

Затем, когда код сгенерирован, мы можем открыть его в песочнице:

Заключение

Итак, мы рассмотрели нововведение в виде Codia AI, которая позволяет преобразовывать наши, например, скриншоты в драфты, что значительно позволяет ускорить работу дизайнерам. Я, например, частенько юзаю различные редакторы, чтобы распознать текст с пдф файлов, у меня есть какие-то фавориты в этом отношении, однако при работе с фигмой, до знакомства с Codia AI, я даже не подозревала, что можно реализовать свой набросок в полноценный Figma Design. Мне кажется, что это очень полезный плагин, который в будущем будет только развиваться и расти, и снижать потраченное время человеком за компуктером.

Также рассмотрели преобразование фигмы в код, как мне кажется – тоже интересная функция для плагина, которая помогает оптимизировать наши процессы, однако, конечно, которая оставляет за собой некоторые вопросы. Хотя мы и не проверяли код, однако мне кажется, что все-таки рука опытного программиста все-таки должна быть приложена к результату работы плагина, хотя, не берусь утверждать. Все-таки, в любом случае, это очень интересная разработка, которая воодушевляет(:

Что же, была рада подготовить материал, всем спасибо и рады видеть в комментариях!(:

Tags:
Hubs:
Total votes 3: ↑3 and ↓0+3
Comments0

Articles

Information

Website
bothub.chat
Registered
Founded
Employees
2–10 employees
Location
Россия