Как создавать предметно-ориентированные модели ИИ

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

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

Данные важны, но так ли это?

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

Активное изучение

Активное обучение — это тип полуконтролируемого обучения со стратегией запроса для выбора конкретных экземпляров, на которых он хочет учиться. Использование экспертов в предметной области с механизмом «человек в цикле» для маркировки таких выбранных экземпляров помогает усовершенствовать процесс для достижения значимых результатов в гораздо более короткие сроки. Кроме того, для активного обучения требуются меньшие объемы размеченных данных, что снижает затраты на ручное аннотирование при сохранении более высокого уровня точности.

Вот несколько советов, которые помогут добиться активного обучения с ограниченными данными:

  • Сначала разделите набор данных на исходные и немаркированные данные.
  • Пометьте начальное значение и используйте его для обучения модели учащегося.
  • На основе функции запроса выберите из неаннотированных данных экземпляр(ы) для человеческой аннотации (наиболее важный шаг). Стратегия запроса может быть основана на выборке неопределенности (например, наименьшая достоверность, выборка маржи или энтропия), запросе по комитетам (например, энтропия голосов, среднее расхождение Кульбака-Лейблера) и т. д.
  • Добавьте новые аннотированные данные в исходный набор данных и повторно обучите модель учащегося.
  • Повторяйте два предыдущих шага до тех пор, пока не будут достигнуты критерии остановки, например количество запрошенных экземпляров, количество итераций или повышение производительности.

Трансферное обучение

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

Используя ImageNet в качестве примера, вот несколько извлеченных уроков:

  • Используйте предварительно обученную сеть в качестве экстрактора признаков. Определение того, какой слой экспортировать объекты, зависит от того, насколько ваши данные похожи или отличаются от базового набора обучающих данных. Разница определит вашу стратегию, как указано в следующих пунктах.
  • Если домен другой, используйте только низкоуровневые функции нейронной сети. Функции можно экспортировать и использовать в качестве входных данных для вашего классификатора.
  • Если домен похож, удалите последний слой нейронной сети и используйте оставшуюся полную сеть в качестве экстрактора признаков. Или замените последний слой новым слоем, который соответствует количеству целевых классов набора данных.
  • Попробуйте разморозить последние несколько слоев базовой сети и провести точную настройку с низкой скоростью обучения (например, 1e-5). Чем ближе целевой и исходный домены, тем меньшее количество слоев требует точной настройки.

Самообучение для улучшения предварительной подготовки

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

  • Настройте предварительно обученную модель (например, RoBERTa-Large) с помощью помеченных данных целевой последующей задачи и используйте точно настроенную модель в качестве учителя.
  • Извлеките из немаркированного набора данных специфичные для задачи данные с помощью встраивания запросов и выберите ближайших соседей из набора данных.
  • Используйте модель учителя, чтобы аннотировать данные предметной области, полученные в пункте 2, и выбрать k лучших образцов из каждого класса с наивысшим баллом.
  • Используйте псевдоданные, созданные на шаге 3, для точной настройки нового RoBERTa-Large и предоставления модели ученика.

Увеличение данных

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

Другие методы для приложений NLP включают обратный перевод, замену синонимов, случайную вставку/замену/удаление и т. д. Основные методы компьютерного зрения включают кадрирование, отражение, масштабирование, вращение, введение шума, изменение яркости/контрастности/насыщенности и GAN ( генеративно-состязательная сеть).

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

5 дополнительных советов, которые помогут улучшить ИИ для предметной области

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

  1. Проведите надлежащее исследование данных, чтобы проверить качество и количество данных, прежде чем приступать к проверке концепции (POC). Поймите, соответствуют ли данные реальным сценариям приложений (например, последующим задачам, таким как NER, извлечение отношений, контроль качества и т. д.), их вариациям и распределению, а также уровню их точности. Для вариаций и распределения с проблемой классификации — структура таксономии, количество классов на каждом уровне, количество данных, подпадающих под каждый класс, сбалансированные и несбалансированные и т. д. — все это имеет значение. То, что вы обнаружите, повлияет на ваш подход к обработке данных и выбор методологии для повышения производительности модели в конкретной предметной области.
  2. Выберите подходящие алгоритмы/модели на основе вашего варианта использования и характеристик данных. Также учитывайте такие факторы, как скорость, точность и развертывание. Баланс этих факторов важен, поскольку они решают, может ли ваша разработка остановиться на этапе POC или иметь потенциал для реального применения и производства.
    Например, если ваша модель в конечном итоге будет развернута на периферии, не следует выбирать большие модели, хотя они могут иметь более высокую точность прогнозирования. Для периферийных устройств нереально запускать такие модели, учитывая их вычислительную мощность.
    Начинайте каждую разработку/адаптацию предметной области с надежной базовой модели. Воспользуйтесь AutoML, чтобы быстро проверить соответствие алгоритмов наборам данных в предметной области, а затем оптимизировать их на основе наблюдений.
  3. Предварительная обработка данных является неотъемлемой частью любого проекта НЛП. Предпринимаемые шаги должны определяться в каждом конкретном случае в зависимости от требований предметной области, а также выбранных методов и моделей определения характеристик. Общие конвейеры могут не дать наилучших результатов.
    Например, некоторые шаги, такие как удаление стоп-слов/пунктуации и лемматизация, не всегда могут быть необходимы для моделей глубокого обучения. Они могут привести к потере контекста; однако они могут быть полезны, если вы используете TF-IDF и модели машинного обучения. Модульность конвейера, чтобы можно было повторно использовать некоторые общие шаги при настройке в соответствии с потребностями варианта использования.
  4. Используйте предварительно обученные языковые модели с открытым исходным кодом, если они доступны. Некоторыми хорошо известными моделями являются SciBERT, BioBERT, ClinicalBERT, PatentBERT и FinBERT. Эти предварительно обученные модели для конкретной предметной области могут помочь добиться лучшего представления и контекстуализированных вложений для последующих задач. Если эти модели недоступны для вашей предметной области, но у вас есть достаточные вычислительные ресурсы, рассмотрите возможность обучения собственной предварительно обученной модели с использованием высококачественных неаннотированных данных предметной области.
  5. Рассмотрите возможность включения словаря и правил, относящихся к предметной области. Для определенных сценариев они обеспечивают более эффективные и точные результаты и позволяют избежать проблем с итерацией модели. Создание такого словаря и определение правил могут потребовать значительных усилий и знаний в предметной области, которые необходимо сбалансировать.

Резюме

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

Источник:  https://www.kdnuggets.com

#AI #artificial-intelligence 

What is GEEK

Buddha Community

Как создавать предметно-ориентированные модели ИИ

Как создавать предметно-ориентированные модели ИИ

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

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

Данные важны, но так ли это?

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

Активное изучение

Активное обучение — это тип полуконтролируемого обучения со стратегией запроса для выбора конкретных экземпляров, на которых он хочет учиться. Использование экспертов в предметной области с механизмом «человек в цикле» для маркировки таких выбранных экземпляров помогает усовершенствовать процесс для достижения значимых результатов в гораздо более короткие сроки. Кроме того, для активного обучения требуются меньшие объемы размеченных данных, что снижает затраты на ручное аннотирование при сохранении более высокого уровня точности.

Вот несколько советов, которые помогут добиться активного обучения с ограниченными данными:

  • Сначала разделите набор данных на исходные и немаркированные данные.
  • Пометьте начальное значение и используйте его для обучения модели учащегося.
  • На основе функции запроса выберите из неаннотированных данных экземпляр(ы) для человеческой аннотации (наиболее важный шаг). Стратегия запроса может быть основана на выборке неопределенности (например, наименьшая достоверность, выборка маржи или энтропия), запросе по комитетам (например, энтропия голосов, среднее расхождение Кульбака-Лейблера) и т. д.
  • Добавьте новые аннотированные данные в исходный набор данных и повторно обучите модель учащегося.
  • Повторяйте два предыдущих шага до тех пор, пока не будут достигнуты критерии остановки, например количество запрошенных экземпляров, количество итераций или повышение производительности.

Трансферное обучение

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

Используя ImageNet в качестве примера, вот несколько извлеченных уроков:

  • Используйте предварительно обученную сеть в качестве экстрактора признаков. Определение того, какой слой экспортировать объекты, зависит от того, насколько ваши данные похожи или отличаются от базового набора обучающих данных. Разница определит вашу стратегию, как указано в следующих пунктах.
  • Если домен другой, используйте только низкоуровневые функции нейронной сети. Функции можно экспортировать и использовать в качестве входных данных для вашего классификатора.
  • Если домен похож, удалите последний слой нейронной сети и используйте оставшуюся полную сеть в качестве экстрактора признаков. Или замените последний слой новым слоем, который соответствует количеству целевых классов набора данных.
  • Попробуйте разморозить последние несколько слоев базовой сети и провести точную настройку с низкой скоростью обучения (например, 1e-5). Чем ближе целевой и исходный домены, тем меньшее количество слоев требует точной настройки.

Самообучение для улучшения предварительной подготовки

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

  • Настройте предварительно обученную модель (например, RoBERTa-Large) с помощью помеченных данных целевой последующей задачи и используйте точно настроенную модель в качестве учителя.
  • Извлеките из немаркированного набора данных специфичные для задачи данные с помощью встраивания запросов и выберите ближайших соседей из набора данных.
  • Используйте модель учителя, чтобы аннотировать данные предметной области, полученные в пункте 2, и выбрать k лучших образцов из каждого класса с наивысшим баллом.
  • Используйте псевдоданные, созданные на шаге 3, для точной настройки нового RoBERTa-Large и предоставления модели ученика.

Увеличение данных

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

Другие методы для приложений NLP включают обратный перевод, замену синонимов, случайную вставку/замену/удаление и т. д. Основные методы компьютерного зрения включают кадрирование, отражение, масштабирование, вращение, введение шума, изменение яркости/контрастности/насыщенности и GAN ( генеративно-состязательная сеть).

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

5 дополнительных советов, которые помогут улучшить ИИ для предметной области

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

  1. Проведите надлежащее исследование данных, чтобы проверить качество и количество данных, прежде чем приступать к проверке концепции (POC). Поймите, соответствуют ли данные реальным сценариям приложений (например, последующим задачам, таким как NER, извлечение отношений, контроль качества и т. д.), их вариациям и распределению, а также уровню их точности. Для вариаций и распределения с проблемой классификации — структура таксономии, количество классов на каждом уровне, количество данных, подпадающих под каждый класс, сбалансированные и несбалансированные и т. д. — все это имеет значение. То, что вы обнаружите, повлияет на ваш подход к обработке данных и выбор методологии для повышения производительности модели в конкретной предметной области.
  2. Выберите подходящие алгоритмы/модели на основе вашего варианта использования и характеристик данных. Также учитывайте такие факторы, как скорость, точность и развертывание. Баланс этих факторов важен, поскольку они решают, может ли ваша разработка остановиться на этапе POC или иметь потенциал для реального применения и производства.
    Например, если ваша модель в конечном итоге будет развернута на периферии, не следует выбирать большие модели, хотя они могут иметь более высокую точность прогнозирования. Для периферийных устройств нереально запускать такие модели, учитывая их вычислительную мощность.
    Начинайте каждую разработку/адаптацию предметной области с надежной базовой модели. Воспользуйтесь AutoML, чтобы быстро проверить соответствие алгоритмов наборам данных в предметной области, а затем оптимизировать их на основе наблюдений.
  3. Предварительная обработка данных является неотъемлемой частью любого проекта НЛП. Предпринимаемые шаги должны определяться в каждом конкретном случае в зависимости от требований предметной области, а также выбранных методов и моделей определения характеристик. Общие конвейеры могут не дать наилучших результатов.
    Например, некоторые шаги, такие как удаление стоп-слов/пунктуации и лемматизация, не всегда могут быть необходимы для моделей глубокого обучения. Они могут привести к потере контекста; однако они могут быть полезны, если вы используете TF-IDF и модели машинного обучения. Модульность конвейера, чтобы можно было повторно использовать некоторые общие шаги при настройке в соответствии с потребностями варианта использования.
  4. Используйте предварительно обученные языковые модели с открытым исходным кодом, если они доступны. Некоторыми хорошо известными моделями являются SciBERT, BioBERT, ClinicalBERT, PatentBERT и FinBERT. Эти предварительно обученные модели для конкретной предметной области могут помочь добиться лучшего представления и контекстуализированных вложений для последующих задач. Если эти модели недоступны для вашей предметной области, но у вас есть достаточные вычислительные ресурсы, рассмотрите возможность обучения собственной предварительно обученной модели с использованием высококачественных неаннотированных данных предметной области.
  5. Рассмотрите возможность включения словаря и правил, относящихся к предметной области. Для определенных сценариев они обеспечивают более эффективные и точные результаты и позволяют избежать проблем с итерацией модели. Создание такого словаря и определение правил могут потребовать значительных усилий и знаний в предметной области, которые необходимо сбалансировать.

Резюме

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

Источник:  https://www.kdnuggets.com

#AI #artificial-intelligence 

Как создавать и создавать видео в React с помощью Remotion

React — это красивая среда Javascript, которую иногда называют библиотекой «Узнай один раз, создай что угодно». Этот случай верен, потому что знание компонентов React можно использовать для разработки всего, от SPA до MPA и всего, что между ними. То же самое касается графики и анимации.

В этой статье мы узнаем, как использовать компоненты React для сборки и создания видео с помощью Remotion . Демонстрация того, что мы будем строить, приведена ниже:

первый

Что такое ремоция?

Remotion — это набор библиотек для программного создания видео с использованием React. Remotion позволяет создавать настоящие видео MP4, написанные в React. Он использует веб-технологии, такие как CSS, SVG и WebGL, для создания увлекательной движущейся графики. Remotion также позволяет использовать такие понятия, как функции и переменные. Вы можете использовать код JavaScript для создания видео и последующего преобразования его в файл MP4 с помощью Remotion.

Remotion был создан Джонни Бургером , чтобы позволить любому человеку с минимальным пониманием React, HTML, CSS и Javascript создавать видео с помощью кода. Remotion снижает барьер в области создания видео, избавляясь от сложных инструментов и обучения, необходимых для достижения успеха в области создания видео. Remotion делает это, используя текущие инструменты разработчиков Javascript и позволяя им использовать эти инструменты и навыки для преобразования кода в анимацию и видео.

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

Начиная

You will need to install two dependencies to use Remotion effectively: Node and FFmpeg. If you are planning on downloading or extracting your video after creation, you need FFmpeg; otherwise, you can choose not to install it. Once you install the dependencies, run the command below in your terminal to bootstrap a new Remotion app.

npm init video
# or 
yarn create video

You should see a prompt like below to choose a template for your application:

2

You can choose whichever template you want for the given list in the terminal, but for this article, I will use the blank template and explain as we go.

Once Remotion is installed, open it in the code editor of your choice, and let’s go over the created files.

3

There are three files that we see in the src folder. the index.tsx, the Video.tsx, and the Composition.tsx

  • Файл index.tsxдействует как index.jsфайл в приложении create-реагировать-приложение (CRA). Он берет компонент React и через функцию рендеринга выводит его как видео в формате mp4. Мы не будем ничего изменять в этом файле
  • Файл Video.tsxдействует как Appкомпонент в приложении React, что означает, что он служит точкой входа приложения. В этом компоненте мы будем соединять разные композиции для создания видео. Файл Video.tsx показывает нам первый компонент Remotion, файл Composition.
  • Это Composition.tsxкомпонент, который содержит и регистрирует видео, которые мы хотим визуализировать, а также стили и реквизит для видео.

Внутри Composition.tsxфайла мы видим приведенный ниже код, который показывает, что в настоящее время мы ничего не возвращаем:

export const MyComposition = () => {
  return null;
};

Внутри Video.tsxфайла мы видим блок кода ниже:



import {Composition} from 'remotion';
import {MyComposition} from './Composition';
export const RemotionVideo: React.FC = () => {
  return (
    <>
      <Composition
        id="MyComp"
        component={MyComposition}
        durationInFrames={60}
        fps={30}
        width={1280}
        height={720}
      />
    </>
  );
};
  • Используется id, когда вы хотите экспортировать видео, и мы узнаем, что он делает, в разделе экспорта видео .
  • ComponentБерет импортированный Compositionкомпонент .
  • Это durationInFramesколичество кадров, которые необходимо сгенерировать.
  • Скорость fpsкадра в секунду. Разделенное durationInFramesна fpsиспользуется для расчета длины видео.
  • Ширина widthвидео в пикселях
  • Высота heightвидео в пикселях

Когда мы бежим yarn startзапускать сервер разработки, мы видим 2-секундное видео пустого холста на localhost:3000— не очень интересное, точно!

Создание нашего видео

Чтобы начать, перейдите к Composition.tsxфайлу и добавьте код ниже:

export const MyComposition = () => {
  return (
    <div
      style={{
        width: '100%',
        height: '100%',
        backgroundColor: '#f2511b',
        color: '#fff',
        textAlign: 'center',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '2rem',
      }}
    >
      <h1>
        My name is Isaac Okoro. A fullstack developer and technical writer for the OpenReplay blog
      </h1>

    </div>
  );
};

Приведенный выше код довольно простой, так как у нас есть divнесколько встроенных стилей и h1тег с некоторым содержимым.

Когда мы сохраним и перейдем в браузер, мы должны увидеть видео, похожее на GIF ниже:

4

Получение свойств

Мы будем использовать хук от Remotion, чтобы получить свойства нашего видео. Хук — это useVideoConfig() . Этот хук возвращает объект с информацией о контексте видео, которое мы делаем. Свойства, содержащиеся в объекте, включают ширину, высоту, количество кадров в секунду, продолжительность InFrames и т. д.

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




import { useVideoConfig } from 'remotion';
export const MyComposition = () => {
  const {width, height, fps, durationInFrames} = useVideoConfig();

  return (
    <div
      style={{
        width: '100%',
        height: '100%',
        backgroundColor: '#f2511b',
        color: '#fff',
        textAlign: 'center',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '2rem',
      }}
    >
      <h1>
        My name is Isaac Okoro. A fullstack developer and technical writer for the OpenReplay blog
      </h1>
      <h3>
      This {width} * {height}px video is {durationInFrames / fps}secs long and
      was made to showcase Remotion
      </h3> 
    </div>
  );
};

В приведенном выше блоке кода мы импортировали useVideoConfig()хук из Remotion. Далее мы получили информацию о видео от хука и отрендерили его.

Когда мы сохраним и перейдем в браузер, мы должны увидеть видео, похожее на GIF ниже:

5

Примечание : мы получаем 2 секунды как наше время, потому что мы не изменили количество durationInFramesв Video.tsxфайле. Перейдите к Video.tsxфайлу и измените число durationInFramesна 120, как показано ниже, чтобы получить 4 секунды:

durationInFrames={120}

Добавление непрозрачности

На демонстрационном GIF мы видим, что экран начинает темнеть и становится все ярче по мере продолжения видео. Мы реализуем эту функцию в этом разделе.

Для этого нам нужно знать текущий кадр видео в каждый момент времени. К счастью, Remotion дает нам хук для того, что известно как [useCurrentFrame()](https://www.remotion.dev/docs/use-current-frame)хук. Этот хук извлекает текущий кадр видео.

import { useVideoConfig, useCurrentFrame } from 'remotion';

export const MyComposition = () => {
  const {width, height, fps, durationInFrames} = useVideoConfig();
  const frame = useCurrentFrame();
  const opacity = frame / durationInFrames;
  return (
    <div
      style={{
          // Inline styles remain the same
        opacity,
      }}
    >
      // Nothing changes here
    </div>
  );
};

В приведенном выше блоке кода мы импортировали useCurrentFrame()хук и сохранили его в переменной фрейма. Затем мы создали opacityпеременную, frameпеременную, разделенную на durationInFrames. После этого мы передали непрозрачность встроенным стилям.

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

6 Изображение, загруженное пользователем: chrome-capture-2022-6-16.gif

Экспорт видео

При рендеринге видео используйте, чтобы заголовок idв video.tsxфайле точно совпадал с заголовком в разделе сборки ваших скриптов. Я изменил имя idна «MyVideo», а также изменил его в разделе сборки моего скрипта на «MyVideo», как показано на изображениях ниже:

7

8

Сделав это, запустите, yarn buildчтобы экспортировать видео, и вы должны увидеть изображение ниже:

9

Ссылку на видео на Github можно найти здесь , а полный код для этого туториала — здесь .

Вывод

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

Ссылка: https://blog.openreplay.com/produce-videos-in-react-with-remotion

#react #javascript

Как создавать внутриигровые символы NFT

Игры NFT — самая горячая вещь. В этом руководстве мы объясним, как создать внутриигровых персонажей NFT с помощью Моралиса всего за несколько простых шагов!

В сфере Web3 есть много интересных ниш; тем не менее, NFT продолжают оставаться в моде. Как вы, возможно, знаете, 2021 год подарил нам огромный рост NFT, и начали появляться многочисленные варианты их использования. Таким образом, игры NFT вышли на поверхность и заставили программистов полностью сосредоточиться на разработке игр NFT. Более того, поскольку персонажи являются ключевыми элементами в играх любого типа, крайне важно знать, как создавать игровых персонажей NFT. Теперь, если вы уже знакомы с процессом создания невзаимозаменяемых токенов, вы знаете, что здесь задействован процесс чеканки. В таком случае имеет смысл создавать игровых персонажей NFT для игры с блокчейном. Поэтому, если вы хотите узнать, как чеканить внутриигровых персонажей NFT, следите за нашими новостями по этой теме. 

В то время как в настоящее время самые популярные NFT связаны с цифровыми предметами коллекционирования и искусством, игры Web3 готовы стать следующим большим событием. Вы, наверное, даже заметили, как быстро Axie Infinity приобрела популярность в последнее время. Более того, как и в случае с Axie Infinity, GameFi и нишами P2E, NFT играют важную роль. Кроме того, внутриигровые NFT могут представлять любые объекты. Тем не менее, игровые персонажи NFT являются одним из наиболее важных и важных аспектов. Поэтому мы хотим показать вам, как без особых усилий чеканить символы NFT. К счастью, мы можем сделать это быстро и легко, используя Moralis . Эта совершенная платформа для разработки Web3 известна как « Firebase для криптографии ».» по уважительной причине. Это позволяет вам охватить бэкенд, связанный с блокчейном, просто скопировав и вставив короткие фрагменты кода. Кроме того, в сочетании с окончательным шаблоном Ethereum dApp , вы можете иметь своих собственных игровых персонажей NFT, выпускающих dApp ( децентрализованное приложение ), готовые в кратчайшие сроки.

Объяснение игровых персонажей NFT 

Прежде чем мы перейдем к тому, чтобы показать вам, как чеканить символы NFT с помощью Moralis, нам нужно ввести вас в курс дела. Итак, что же такое игровые персонажи NFT? Разберем понятия «NFT» и «игровые персонажи»; однако давайте сосредоточимся на последнем. Если вы играли в какие-либо игры, вы, скорее всего, знаете, что такое игровые персонажи. Они представляют человека за экраном или любую другую сущность, действующую в игре. Более того, игровые персонажи, которые не контролируются игроками, называются неигровыми персонажами (NPC). Кроме того, количество персонажей, доступных в разных играх, сильно различается. 

Однако, когда мы добавляем в картину невзаимозаменяемые токены (NFT), все становится немного сложнее. Более того, хотя большинство новичков в NFT думают о NFT как о файлах JPEG, на самом деле NFT — это гораздо больше. Во-первых, файлы JPEG или файлы любого другого типа (PNG, MP3, MP4, PDF, GIF и т. д.) — это просто визуальная или слуховая часть NFT. Аспекты, которые делают эти файлы NFT, скрыты в бэкэнде и гораздо важнее. Без смарт-контрактов и программируемых блокчейнов (таких как Ethereum), эти файлы будут обычными цифровыми файлами. Более того, как вы, скорее всего, знаете, NFT — это криптоактивы, представляющие уникальность. Детали, которые охватывают уникальность, хранятся в метаданных каждого NFT, которые хранятся в блокчейне. Таким образом, не существует двух одинаковых NFT. Следовательно, даже если они представляют один и тот же цифровой файл, их метаданные не совпадают.

Теперь мы можем собрать все это вместе. Таким образом, игровые персонажи NFT ничем не отличаются от обычных игровых персонажей, но хранятся в блокчейне. Кроме того, это также означает, что пользователи могут фактически владеть своими персонажами. Это дает возможность торговать игровыми персонажами NFT. Более того, пользователи могут отображать символы NFT или использовать их на других поддерживаемых платформах NFT.

Будущее игровых персонажей NFT

Теперь, когда вы знаете, что такое игровые персонажи NFT, вы, вероятно, видите огромный потенциал варианта использования NFT. Поскольку это еще рано, игры NFT и различные метавселенные только начинают появляться. Более того, во многих случаях они еще не соответствуют Web2 или офлайн-играм. Тем не менее, дела в криптосфере развиваются быстро, и многие инвесторы вкладывают свои деньги в эту область. В свою очередь, мы могли бы увидеть, как приложения игровых персонажей NFT взрываются и становятся массовыми раньше, чем позже. Скорее всего, это выйдет далеко за рамки игр. Например, мы, скорее всего, будем использовать символы NFT для социальных онлайн-взаимодействий, которые огромны. Таким образом, обязательно используйте следующие разделы, чтобы узнать, как разумно чеканить символы NFT.

Как чеканить игровых персонажей NFT?

Как упоминалось выше, мы покажем вам, как легко создавать игровых персонажей NFT. Первым ключом к успешному выполнению этой задачи является Moralis и его окончательный Web3 SDK , включая NFT API Moralis . Второй бесценный способ — это окончательный шаблон Web3 . Однако, поскольку один из экспертов Моралиса уже внес необходимые изменения в шаблон, вы можете использовать готовый код. Таким образом, вы можете еще больше ускорить процесс. 

Однако, чтобы получить максимальную отдачу от этой статьи, мы хотим предоставить вам четкую картину. Итак, вот как чеканить символы NFT:

  • Шаг 1: Интерфейс — создайте проект React .js, используя пару библиотек. Этого достаточно, чтобы установить правильный пользовательский интерфейс и UX, которые сделают работу удобной для пользователя. Кроме того, вам потребуется стандартная HTML-форма с полем загрузки и кнопкой отправки.
  • Шаг 2: Компиляция файлов и данных. Получив данные и файл изображения с помощью форм HTML, вам необходимо скомпилировать их в файлы JSON. Это файлы, которые будут представлять метаданные ваших NFT. Кроме того, именно здесь Моралис сделает за нас большую часть работы. Во-первых, благодаря интеграции с IPFS это позволит нам хранить загруженные изображения и генерировать файлы JSON полностью децентрализованно. Кроме того, мы также получим уникальный хэш-идентификатор, указывающий на нашу компиляцию файлов JPEG и JSON.
  • Шаг 3: Чеканка — это та часть, где мы, наконец, создаем символы NFT. Используя смарт-контракт ERC-721, мы можем использовать хэш-идентификатор для преобразования нашего изображения и соответствующего файла JSON в символ NFT.

Предварительный просмотр нашего генератора символов NFT 

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

Затем, используя одну кнопку в сочетании с интеграцией Moralis с MetaMask , пользователи легко создают свои символы NFT:

Для более подробного предварительного просмотра посмотрите видео в конце этой статьи, начиная с 5:10.

Игровые персонажи Mint NFT — пример проекта

Мы рекомендуем вам использовать наш код и создать собственную версию децентрализованного приложения для чеканки NFT. Однако для этого вам необходимо сначала выполнить несколько простых шагов начальной настройки. Чтобы максимально упростить вам задачу, мы разбили ее на простые шаги. Первая часть покажет вам, как выполнить первоначальную настройку Moralis. Более того, вторая часть проведет вас через клонирование нашего кода и инициализацию Moralis SDK.

Первоначальная настройка Моралиса

Чтобы создавать dApps с максимальной легкостью, вам необходимо выполнить первоначальную настройку Moralis. Вот шаги, которые необходимо выполнить:

  1. Создайте бесплатную учетную запись Moralis — щелкните ссылку слева, чтобы перейти на страницу регистрации. Затем введите свой адрес электронной почты, создайте пароль и нажмите на ссылку подтверждения, которая будет отправлена ​​на ваш адрес электронной почты. Конечно, если у вас уже есть активная учетная запись Moralis, войдите в нее сейчас.
  2. Создайте сервер Moralis. В области администрирования Moralis выберите вкладку «Серверы» и нажмите кнопку «+ Создать новый сервер» (в правом верхнем углу). Далее появится выпадающее меню с тремя типами серверов (см. скриншот ниже). Выберите тип сети, который лучше всего подходит для вашего проекта. Однако, когда речь идет о примерах проектов или тестировании dApp, «Сервер тестовой сети» ( тестовые сети Ethereum ) или «Локальный сервер Devchain» — это то, что нужно.

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

  1. Доступ к сведениям о сервере. Когда ваш сервер запущен и работает, вы можете получить доступ к его сведениям (URL-адрес сервера и идентификатор приложения), нажав «Просмотреть сведения»:

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

Инициализировать мораль

Примечание. Пока пропустите этот шаг. Вы вернетесь и завершите его, как только у вас будет готов файл «.env».

  1. Инициализировать Moralis . Подготовив файлы кодирования, вы можете инициализировать SDK Moralis, заполнив соответствующий файл. Всякий раз, когда вы используете шаблон, вам нужно использовать файл «.env» для этой цели. Таким образом, вставьте данные вашего сервера в указанные места:

Настройка шаблона Ethereum

Эксперт Moralis, который покажет вам дополнительные сведения, связанные с этим примером проекта, в видеоруководстве ниже, подготовил код, который вы можете использовать. Также код доступен на GitHub. Более того, он начал с окончательного шаблона Web3 и применил несколько простых настроек. Таким образом, у вас есть возможность либо начать с окончательного шаблона Web3 и применить настройки самостоятельно, либо использовать готовый код. Очевидно, что, используя последний, вы еще больше ускорите свой прогресс. Кроме того, если вам не требуется создавать уникальный пользовательский интерфейс, имеет смысл начинать с шаблона Ethereum. Чтобы получить доступ к этому шаблону, используйте поисковую систему вашего браузера и введите «Ethereum template» в строке поиска. 

Двигаясь вперед, мы проведем вас через процесс клонирования кода « moralis-nft-game ». Тем не менее, процесс практически такой же для шаблона Ethereum (просто используйте соответствующие URL-адреса). Клонируя начальный код или готовую версию, вы легко будете следовать приведенному здесь пошаговому руководству по коду.

Клонирование кода — пошаговые инструкции

Выполните следующие шаги, чтобы клонировать наш модифицированный шаблон (уже настроенный для dApp NFT minter):

  1. Сначала нажмите на ссылку «moralis-nft-game», указанную выше. Таким образом, вы получите доступ к коду в нашем репозитории GitHub.
  2. Затем нажмите кнопку «Код», а затем нажмите значок копирования рядом с адресом HTTPS:

  1. Скопировав адрес, вы можете клонировать наш код. Затем используйте терминал вашего редактора кода (обычно мы используем Visual Studio Code [VSC]) и введите следующую командную строку:

    git clone [вставьте сюда скопированный адрес HTTPS] 
  2. После клонирования кода необходимо установить все зависимости. Снова используйте свой терминал и введите следующие командные строки:
  • CD Моралис-NFT-игры
  • пряжа установить 

Примечание. Оба менеджера пакетов «yarn» и «npm» являются допустимыми вариантами. Если вы решите использовать «npm», обязательно введите правильные команды.

  1. Теперь вам нужно переименовать файл «.env.example» в «.env». После этого пришло время выполнить четвертый шаг из предыдущего раздела. Таким образом, убедитесь, что ваш файл «.env» правильно заполнен URL-адресом вашего сервера и идентификатором приложения.
  2. Наконец, вы готовы запустить свой интерфейс, вставив или набрав в терминале « yarn start » :

Пошаговое руководство по коду

После того, как описанная выше настройка завершена, вы готовы поближе познакомиться с кодом. Таким образом вы узнаете, какие аспекты нашего примера dApp являются наиболее важными. Таким образом, вы более внимательно посмотрите на файл « Uploader.jsx », где покрыты все поля ввода (2:28). Другим ключевым аспектом нашего приложения minter dApp является смарт-контракт « Character.sol ». Эксперт Moralis расскажет вам больше об этом смарт-контракте в видео ниже, начиная с 3:35. Кроме того, он использует Truffle для целей этого урока. 

Игровые персонажи NFT — Как чеканить внутриигровые персонажи NFT — Резюме

К этому моменту у вас должно быть четкое представление о том, что такое игровые персонажи NFT. Кроме того, вы обладаете навыками, необходимыми для создания персонажей NFT. Кроме того, вы также знаете, что NFT предлагают множество различных вариантов использования и, таким образом, имеют огромный потенциал для будущих приложений. Кроме того, следуя нашему примеру, вы также научились легко создавать символы NFT. В нашем примерном проекте у вас была возможность создать свои собственные приложения dApp для чеканки NFT. Последний — отличный инструмент для создания всевозможных NFT. Кроме того, вы также узнали, как работать с Moralis и шаблоном Ethereum. Таким образом, вы готовы взяться за другие примеры проектов или даже реализовать свои собственные идеи dApp. 

Оригинальный источник статьи на https://moralis.io 

Как создавать Slice (срезы) в Golang

Функция Golang make () используется для создания пустого среза. Здесь пустые срезы - это срезы, содержащие ссылку на пустой массив.

Golang Slice make()

Golang slice make () - встроенная функция, используемая для создания среза. Если вы хотите создать массив с динамическим размером, используйте функцию make (). Функция make () выделяет массив нулей и возвращает фрагмент, который ссылается на массив.

Функция Golang make () принимает три аргумента: тип, длину и емкость. Функция make () принимает три аргумента и возвращает фрагмент. Функция определяет базовый массив размера, равного заданной емкости, и возвращает Slice, который ссылается на базовый массив.

Синтаксис

func make([]T, len, cap) []T

Часть Golang - это гибкая и расширяемая структура данных для развертывания и управления наборами данных. Ломтики состоят из множества элементов, которые относятся к одной категории.

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

Реализовать Golang slice make ()

Теперь создадим пустой срез .

// hello.go

package main

import "fmt"

func main() {

    // Creating an array of size 6
    // and slice this array  till 3
    // and return the reference of the slice
    // Using make() function
    var sliceA = make([]int, 3, 6)
    fmt.Printf("SliceA = %v, \nlength = %d, \ncapacity = %d\n",
        sliceA, len(sliceA), cap(sliceA))

    // Creating another array of size 6
    // and return the reference of the slice
    // Using make() function
    var sliceB = make([]int, 6)
    fmt.Printf("SliceB = %v, \nlength = %d, \ncapacity = %d\n",
        sliceB, len(sliceB), cap(sliceB))
}

Выход

SliceA = [0 0 0],
length = 3,
capacity = 6
SliceB = [0 0 0 0 0 0],
length = 6,
capacity = 6

Когда вы используете функцию make (), у вас есть одна возможность - указать длину фрагмента. Когда вы указываете длину, емкость lSlice остается такой же. В нашем примере мы определили длину и емкость среза.

Длина среза в первом примере равна 3, а мощность равна 6. Во втором примере длина равна 6, а мощность также равна 6.

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

var sliceA = []string{"Gandia", "Arturo", "Alicia"}

Следует помнить, что когда вы создаете срез с помощью строки, он сначала создает массив, а затем возвращает ссылку на срез.

заключить

Мы можем создать срез с помощью функции Golang make () и буквально срезать его.

Наконец, пример функции make () Golang Slice завершен.

Как создавать объекты JavaScript разными методами

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

  1. Object Literals.
  2. Constructor Functions.
  3. Object.create().
  4. ECMAScript 6 Classes.

Давайте разберемся с ними подробнее.

Object Literals

Я бы сказал, что это один из самых простых и распространенных способов создания объектов в JavaScript. Мы просто определяем свойства и их значения в фигурных скобках, как показано ниже.

var student = {name: 'Ross', rollno: 1}  

Здесь я создал новый объект с двумя свойствами - name и rollno . Мы можем подтвердить это, распечатав значения созданного объекта.

document.write(student.name);  

Достаточно просто, не правда ли?

Constructor Functions

Что, если мы хотим создать несколько экземпляров с одним и тем же набором свойств / структуры? И мы также не хотим писать несколько строк объектных литералов ...

var ross = {name: 'Ross', rollno: 1}   
var david = {name: 'David', rollno: 2} var atul = {name: 'Atul', rollno: 3}  

Чтобы решить проблему, создадим функцию.

funtion Student(name,age)  
{ this.name = name; this.age = age; }   

Это  ключевое слово относится к объекту. Этим объектом является любой объект, выполняющий текущий бит кода. По умолчанию это глобальный объект. В веб-браузере это объект Windows.

Обратите внимание, что это простая функция и ничего особенного. За ключевым словом new следует имя функции для инициализации объекта.

var ross = new Student('Ross',1);   
var david = new Student('David',2);  

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

Теперь нам не нужно передавать имя свойства вместе с его значением. Чтобы напечатать тот же результат, мы можем написать.

document.write(ross.name);   
document.write(david.name); 

Позвольте мне привести еще один пример с изюминкой.

function Student(registrationNo) {  
    this.registrationNo = registrationNo;  
}  
var amit = Student(123);  
document.write(amit.registrationNo); 

Он напечатает undefined . Заметьте, я не специально использовал  ключевое слово new с именем функции. Итак, все свойства привязываются к объекту Windows.

document.write (window.registrationNo);

Функцию, как и Student, обычно называют функцией-конструктором. Но вы видите, что на самом деле в этом нет ничего особенного. Это просто функция. Это очень распространенный шаблон для создания объектов в JavaScript.

Object.create()

До сих пор мы рассматривали два разных способа создания объектов с использованием объектных литералов и использования функций-конструкторов с ключевым словом new . Это просто синтаксический сахар для object.create.

Мы могли бы создать те же объекты, используя синтаксис object.create () следующим образом.

var ross = Object.create(Object.prototype, {  
    name: {  
        value: 'ross',  
        enumerable: true,  
        writable: true,  
        configurable: true  
    },  
    rollno: {  
        value: 1,  
        enumerable: true,  
        writable: true,  
        configurable: true  
    }  
});  

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

Вам может быть интересно, что это за атрибуты. Итак, я напишу еще один блог, чтобы объяснить все эти свойства и наследование в JavaScript.

ECMAScript 6 Classes

Для браузеров, которые его поддерживают, спецификации ECMAScript 6 теперь предоставляют функциональные возможности создания объектов с использованием структуры классов, аналогичной статически типизированным языкам, таким как C #, .NET и Java.

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

class Student {  
    constructor(name, rollno) {  
        this.name = name;  
        this.rollno = rollno;  
    }  
    getStudentDetails() {  
        return "Student: " + this.name + ", Roll No: " + this.rollno;  
    }  
}  
var ross = new Student("Ross", 1);  
document.write(ross.getStudentDetails()); 

Спасибо за прочтение !