first commit

This commit is contained in:
Azidaan
2026-05-04 09:49:45 +03:00
commit 8dda4328a7
273 changed files with 52880 additions and 0 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,374 @@
[2025-07-25T11:14] Владимир Устенко:
SmartRep: ИИ-контроль техники упражнений в спортзале на смартфоне (Предполагаемое название гранта:)
Описание идеи гранта:
Проект SmartRep направлен на разработку мобильного приложения с использованием технологий компьютерного зрения и нейросетей для анализа техники выполнения упражнений в реальном времени. Приложение будет работать автономно на смартфоне — без подключения к внешним датчикам или облачным сервисам — и предназначено для использования в спортзале.
Основная идея: пользователь устанавливает смартфон напротив тренажёра (фронтально или сбоку), камера фиксирует выполнение упражнения, а ИИ-модель, запущенная локально, анализирует ключевые точки тела и оценивает правильность техники. В случае ошибок в движении приложение мгновенно подаёт сигналы (вибрация, звук, сообщение на экране) с комментариями: например, «Спина округляется» или «Слишком низкий присед».
Проект имеет следующие особенности:
* Локальная работа на телефоне: используются оптимизированные, легковесные нейросети, способные работать без подключения к интернету;
* Контроль амплитуды и стабильности: система анализирует траекторию суставов, оценивает включение целевых мышц, стабильность осанки и плавность движения;
* Обратная связь в реальном времени: минимизирует риск травм и помогает улучшить технику;
* Обучение модели на размеченных данных: сравнение правильных и ошибочных техник, а также идентификация компенсаторных движений;
* Масштабируемость: возможность добавления новых упражнений, персонализации тренировок и использования в домашних условиях.
Ценность проекта:
* Технологическая новизна: real-time анализ CV без внешнего оборудования.
* Социальная значимость: доступность ИИ-наставника без необходимости трат на персонального тренера.
* Повышение безопасности тренировок.
* Потенциал коммерциализации и масштабирования в международном сегменте фитнеса и digital-health..
---
[2025-07-25T13:43] Владимир Устенко:
Исходник Ярослава
---
[2025-07-26T10:01] Богдан Павленко:
🎮 Парень навайбкодил файтинг, где вместо геймпада — его тело.
Вместо обычный игры на геймпаде тут нужно махать руками перед камерой, которая отслеживает движения. Так персонаж повторяет все движения игрока 😮
Практически всё сделали нейросети:
— Claude Opus спроектировал технологию;
— Claude Sonnet написал код;
— GitHub Copilot помог собрать готовую программу.
Пока работает только в Tekken, в котором за каждую конечность отвечает отдельная кнопка.
• Источник
@aiaiai
---
[2025-09-18T22:32] Владимир Устенко:
Сравнительная таблица трех видов грантов. 119 самый оптимальный
---
[2025-09-18T22:33] Владимир Устенко:
Тема: ИИ-контроль техники упражнений в спортзале
Краткое описание проекта: Проект направлен на разработку и исследование методов компьютерного зрения и нейросетевых алгоритмов для автоматизированного анализа техники выполнения силовых и функциональных упражнений. Главная цель — создание оптимизированной модели ИИ, способной в реальном времени анализировать видеопоток и выявлять ошибки техники движений. Особое внимание уделяется алгоритмической эффективности: разработанные методы должны работать корректно даже на устройствах с ограниченными вычислительными ресурсами (например, смартфонах), без использования внешних сенсоров или облачных сервисов.
Ожидаемые результаты от реализации проекта:
1) Научная новизна: новые методы анализа позы и траекторий движений в реальном времени, адаптированные под низкую вычислительную сложность.
2) Повышение безопасности тренировок: своевременное выявление ошибок техники и контроль биомеханической стабильности.
3)Социальная значимость: возможность использования интеллектуальных методов контроля без затрат на оборудование и тренеров.
4) Контроль биомеханических параметров: отслеживание амплитуды движений, траектории суставов, вовлечения целевых мышц и осанки.
5) Валидация и обучение: формирование датасетов с правильными и ошибочными техниками, включая компенсаторные движения, для обучения и тестирования модели.
---
[2025-09-18T22:35] Yaroslav Pikalyov:
120 оптимальный, тише едешь, дальше будешь
---
[2025-09-18T22:40] Владимир Устенко:
120.pdf «Малые научные группы»
---
[2025-10-20T16:15] Владимир Устенко:
@ya_pikalyov
---
[2025-10-20T16:15] Владимир Устенко:
@holyBogdan
---
[2025-10-21T10:34] Владимир Устенко:
Даже чат бот за 3 вариант
---
[2025-10-21T11:31] Yaroslav Pikalyov:
https://navigator.sk.ru/orn/1125924
---
[2025-10-21T11:50] Владимир Устенко:
https://docs.google.com/document/d/1w2ryNwSpPc_6_H6vMxsKF9oTdwE6rcOEc36ZMesZ25E/edit?usp=sharing
---
[2025-10-21T11:59] Yaroslav Pikalyov:
https://docs.google.com/document/d/12rsE3o6EXnAmRNH_AZUOQ5qelLmFHhpD-RylEW2G6UQ/edit?usp=sharing
---
[2025-10-21T13:34] Владимир Устенко:
Трицепс
---
[2025-10-21T13:35] Владимир Устенко:
Бицепс
---
[2025-10-21T13:36] Богдан Павленко:
группа мышц спина, немного трицепс
---
[2025-10-21T13:36] Владимир Устенко:
Спина (гиперэкстензия)
---
[2025-10-21T13:38] Богдан Павленко:
или спина вот:
---
[2025-10-21T13:56] Yaroslav Pikalyov:
Для решения обозначенных научных и технических проблем в проекте SmartRep предусмотрен комплексный подход, сочетающий методы компьютерного зрения, адаптивного машинного обучения и биомеханического моделирования. Индивидуальные различия пользователей по пропорциям тела и подвижности суставов планируется компенсировать за счёт калибровки антропометрических параметров в начальной фазе работы приложения, позволяющей автоматически масштабировать эталонные углы и амплитуды движений. Неоднозначность визуальных данных и влияние ракурса устраняются с помощью обучения нейросетевых моделей на синтетических данных, сгенерированных под различными углами обзора и условиями освещения, а также применения моделей позового детектирования с механизмом пространственного сглаживания ключевых точек. Проблема нехватки размеченных примеров решается за счёт полусупервизорного обучения, дополнения данных (data augmentation) и использования смежных наборов (Human3.6M, COCO-Pose и др.). Формализация понятия «правильности техники» достигается объединением статистических признаков с нечёткой логикой, где экспертные правила тренеров переводятся в математическую форму через интервалы допустимых углов и скоростей движения. Персонализация анализа обеспечивается внедрением механизма самообучения модели на данных конкретного пользователя и учётом его возраста, пола и уровня подготовки. Для работы на мобильных устройствах предусмотрена разработка облегченной модели с квантизацией и оптимизацией inference.
---
[2025-10-21T13:56] Yaroslav Pikalyov:
Персонализация анализа обеспечивается внедрением механизма самообучения модели на данных конкретного пользователя и учётом его возраста, пола и уровня подготовки.
Это под вопросом
---
[2025-10-21T14:49] Yaroslav Pikalyov:
Научной и методологической основой проекта SmartRep является развитие идей, реализованных в работах Д.Г. Арсеньева, М.А. Шалуховой и А.Е. Мисника, посвящённых интеллектуальным системам поддержки принятия решений в спорте и реабилитации. В указанных исследованиях (ИММВ-2024; Вестн. СамГТУ, 2024; Musculus.app) разработана архитектура СППР, включающая модули компьютерного зрения, цифрового двойника спортсмена, онтологической базы знаний и нейро-нечёткой логики для персонализации тренировочного процесса и прогнозирования риска травм. Проект SmartRep развивает данный подход, адаптируя его к условиям массового фитнеса и работе на мобильных устройствах: система использует лёгкие модели компьютерного зрения для анализа техники упражнений, формализует тренерские критерии через нечёткие правила и реализует индивидуализацию рекомендаций с учётом пола, возраста и уровня подготовки пользователя.
---
[2025-10-21T14:50] Владимир Устенко:
https://docs.google.com/document/d/1w2ryNwSpPc_6_H6vMxsKF9oTdwE6rcOEc36ZMesZ25E/edit?usp=sharing
Написал ограничения в самом низу
---
[2025-10-21T15:04] Богдан Павленко:
https://openreview.net/pdf/061d45c5db0c11ad5dd49cd9a1afa6482d4a9aed.pdf?utm_source=chatgpt.com
---
[2025-10-21T15:10] Богдан Павленко:
Большой обзор по теме
---
[2025-10-21T15:45] Владимир Устенко:
https://docs.google.com/document/d/1w2ryNwSpPc_6_H6vMxsKF9oTdwE6rcOEc36ZMesZ25E/edit?tab=t.0
---
[2025-10-21T17:09] Yaroslav Pikalyov:
1. Разработка интеллектуальной системы анализа техники выполнения физических упражнений для улучшения и поддержания физической формы на основе технологий компьютерного зрения.
2. Разработка программного комплекса SmartRep для автоматизированного контроля правильности выполнения физических упражнений с использованием технологий искусственного интеллекта.
3. Разработка системы компьютерного зрения для оценки корректности выполнения упражнений с отягощениями и на тренажёрах, направленных на поддержание физической формы.
4. Разработка интеллектуальной системы визуального анализа движений человека при выполнении физических упражнений в фитнес-зале.
5. Разработка нейро-нечёткой системы анализа и контроля техники выполнения упражнений для повышения эффективности тренировок и предотвращения травм.
---
[2025-10-21T17:12] Yaroslav Pikalyov:
Ну или свой вариант предложите
---
[2025-10-21T17:19] Yaroslav Pikalyov:
https://chatgpt.com/share/68f79679-e8a4-8009-9842-191b431a4ca9
---
[2025-10-22T03:18] Yaroslav Pikalyov:
Современные подходы к контролю техники выполнения физических упражнений в фитнес-центрах и спортивных залах в значительной степени зависят от квалификации тренера и субъективной визуальной оценки. При этом качество выполнения движений напрямую влияет на эффективность тренировочного процесса и уровень травматизма. Отсутствие доступных и объективных инструментов анализа движений вне профессиональных лабораторных условий делает невозможным системный контроль техники для широкого круга пользователей, занимающихся самостоятельно или с минимальным контролем тренера.
Цель проекта заключается в разработке интеллектуальной системы анализа и контроля техники выполнения упражнений с использованием технологий компьютерного зрения и искусственного интеллекта, реализованной в виде мобильного приложения. Система обеспечивает автоматическую оценку правильности выполнения базовых упражнений на тренажёрах и со свободными весами с помощью видеозаписи, получаемой с камеры смартфона, без необходимости использования дополнительных сенсоров и специализированного оборудования.
Проект решает актуальную научно-техническую задачу — повышение точности и объективности оценки движений человека в неконтролируемых условиях съёмки (вариации углов, освещения, масштаба и позы) при минимальных вычислительных ресурсах (edge-устройства). В основе системы лежит модуль компьютерного зрения, выделяющий ключевые точки скелета человека на видео, и аналитический модуль, который на основе геометрических взаимосвязей между суставами вычисляет углы и динамические параметры движения.
Дополнительно в системе применяется нейро-нечёткий модуль принятия решений, формирующий экспертные правила интерпретации данных: система не только фиксирует отклонения в траектории, но и классифицирует типичные ошибки техники, формируя рекомендации по их исправлению. Такой подход позволяет объединить преимущества статистического обучения и знаний, формализованных в виде лингвистических правил.
Научная новизна проекта заключается в разработке метода анализа биомеханических паттернов упражнений на основе визуальных данных и нечеткой логики, обеспечивающего интерпретируемость и адаптивность модели к индивидуальным особенностям пользователя, а также работающий в режиме реального времени на мобильных устройствах. В отличие от существующих коммерческих решений, основанных на жёстких шаблонах поз, система SmartRep способна учитывать вариативность техники, зависимость угловых характеристик от антропометрических данных и плавно адаптировать критерии оценки под конкретного пользователя.
Научная занчимость заключается в:
- повышении объективности и точности оценки техники движений;
- расширении научных представлений о применении методов ИИ в спортивной биомеханике;
- формировании базы знаний и алгоритмических решений, применимые в других областях (реабилитация, эргономика, медицина труда).
---
[2025-10-22T03:18] Yaroslav Pikalyov:
#annotation_project_old
---
[2025-10-22T03:34] Yaroslav Pikalyov:
@u_Vova @holyBogdan нужны сканы РИДов
---
[2025-10-22T03:49] Yaroslav Pikalyov:
У Натальи Николаевны узнать нужно гос регистр номера и года проведения:
1) Разработка научно-теоретических основ создания роботизированных компьютерно-аппаратно-механических комплексов, способных к восприятию и переработке звуковой, сетевой, визуальной и речевой информации;
2. Разработка методов распознавания слитно произнесённых фраз на основе пофонемного анализа речи
---
[2025-10-22T03:54] Yaroslav Pikalyov:
Вроде такого, ток ещё годы нужны начала и конца «Исследование и разработка методов семантического анализа и интерпретации потоков данных интеллектктуальнымисистемами», № госрегистрации 0118D000003, УтУтверждена приказом Министерства образования и науки ДНР № 1272от 27.11.2017
---
[2025-10-22T09:11] Yaroslav Pikalyov:
@u_Vova @holyBogdan сколько статей и тезисов тоже напишите
---
[2025-10-22T09:11] Yaroslav Pikalyov:
Угарнул с Владимира, в графе соответствие кадрового состава написал "Соответствуют" 😭
---
[2025-10-22T09:16] Yaroslav Pikalyov:
@u_Vova можете, если хотите редактировать в форме там...
Я если что засейвил
---
[2025-10-22T09:16] Yaroslav Pikalyov:
Вот
---
[2025-10-22T09:20] Yaroslav Pikalyov:
Из списка необходимого оборудования вычеркните доп станцию машинного обучения, я забыл что здесь бюджет ограничен
---
[2025-10-22T10:03] Богдан Павленко:
Года проведения этих тем? Или чем являются эти 2 пункта?
---
[2025-10-22T10:08] Yaroslav Pikalyov:
Что тут непонятного
---
[2025-10-22T10:09] Yaroslav Pikalyov:
И год начала и конца каждой
---
[2025-10-22T10:37] Владимир Устенко:
5 тезисов 2 статьи
---
[2025-10-22T10:40] Богдан Павленко:
3 статьи, 3 тезисов
---
[2025-10-22T15:26] Владимир Устенко:
Методы и подходы для пункта 4.6
---
[2025-10-22T15:34] Yaroslav Pikalyov:
Научный коллектив проекта располагает подтверждённым заделом в области искусственного интеллекта, машинного обучения и компьютерного зрения, сформированным в рамках выполнения фундаментальной НИР ФГБНУ «ИПИИ» (код FREN-2024-0002, № госрегистрации 124061400003-5) «Извлечение семантической информации из изображений для автономных систем навигации беспилотных летательных аппаратов» (2024 2026 гг.).
В ходе исследований разработаны:
методика формирования сбалансированных аннотированных наборов данных для задач распознавания объектов и построения семантических графов сцен;
архитектуры нейронных сетей для обнаружения объектов в реальном времени и перекрёстной геолокализации по данным БПЛА и спутников;
инструментарий для автоматизированного аннотирования данных и интерпретации мультимодальных потоков информации;
методы построения триплетных моделей распознавания и генерации графов сцен, применимые в системах автономной навигации и распознавания действий человека.
Коллектив имеет опыт выполнения НИР в области анализа изображений, распознавания речи и семантической интерпретации данных. Результаты отражены в публикациях в изданиях РИНЦ, Scopus, WOS и включают работы по разработке методов классификации изображений, языковых моделей, распознавания слитной речи и автоматической генерации транскрипций.
Ключевые публикации:
Пикалёв Я. С., Ермоленко Т. В. On the Issue of Continuous Speech Recognition // Integral Robot Technologies and Speech Behavior. 2024. P. 155180. ISBN 1-5275-5436-8.
Bondarchuk V. V., Kravchenko N. M., Pikalyov Ya. S. Indirect Criteria Algorithm for the Control of a Cognitive Neural Network // Practice Oriented Science: UAE Russia India. 2024. DOI 10.34660/INF.2024.32.41.030.
Пикалёв Я. С., Ермоленко Т. В. Система автоматического распознавания слитной русской речи на основе глубоких нейросетей // Речевые технологии. 2021. № 12. С. 318.
Бондаренко В. И., Ермоленко Т. В. Анализ эффективности глубоких языковых моделей для задачи определения тональности русскоязычных текстов // Проблемы искусственного интеллекта. 2024. № 1(32). С. 5162.
Имеются результаты интеллектуальной деятельности:
№ 2024692488 — Программный комплекс для аннотирования данных (Устенко В. Ю.);
№ 2024693206 — Программный комплекс для автоматизированного сбора аэрофотоснимков (Павленко Б. В.).
Научный коллектив регулярно представляет результаты на международных конференциях «Искусственный интеллект: теоретические аспекты и практическое применение» (2020 2024) и «Донецкие чтения» (2017 2024), что способствует укреплению научной школы ФГБНУ «ИПИИ» в области ИИ.
Совокупность накопленных теоретических и практических результатов — в том числе методов распознавания образов, мультимодальной интеграции и разработки нейронных архитектур — обеспечивает высокий уровень готовности к реализации проекта SmartRep, направленного на применение технологий компьютерного зрения и нечёткой логики для анализа движений человека.
---
[2025-10-22T15:35] Yaroslav Pikalyov:
Научный коллектив проекта имеет большой опыт реализации научных проектов, связанных с разработкой
специализированного программного обеспечения с применением математического моделирования для
промышленного производства. Основные результаты по данной тематике отражены в публикациях [1-7].
Применение методов машинного обучения в задачах управления и принятия решений в хозяйственной деятельности и
медицине отражено в работах членов научного коллектива [8-9], [15-18]. В рамках этих исследований разработаны
предсказательные модели энергопотребления на предприятиях угольной промышленности, использующие
автокорреляционные методы, модели оценки вероятности появления ДТП, основанные на методах машинного
обучения, обоснован метод, использующий ResNet и API-Net, для классификации товаров, имеющих похожие упаковки.
Авторами проекта разработана методика обработки и структурирования данных фондового рынка для использования
прогностических моделей машинного обучения
Задел коллектива проекта в направлении тематики технического зрения и распознавания изображений в режиме
реального времени отражен, в частности, в публикациях [13-14], [17, 20,21]. Исследованы возможности использования
глубоких нейронных сетей для задачи классификации изображений на устройствах с ограниченной вычислительной
мощностью.
Также авторами проекта ведется активная работа в области применения искусственного интеллекта, глубокого
обучения в задачах обработки естественного языка [10-12] и распознавания речи [19, 22].
Научный коллектив имеет опыт организации и проведения научных мероприятий: международных научных
конференций "Донецкие чтения: образование, наука, инновации, культура и вызовы современности" (2017-2024);
международных научных круглых столов "Искусственный интеллект: теоретические аспекты, практическое
применение" (2020-2024).
Заявка № 25-21-20602 Страница 22 из 27
Список источников:
1. Бондаренко В.И. Программная система для моделирования процесса тепломассопереноса при разливке и
затвердевании стали / В.И. Бондаренко // Вестник Донецкого национального университета. Серия А. Естественные
науки. 2009. № 2. С. 103-110.
2. Программный продукт «Математическое моделирование гидродинамических и теплообменных процессов в
стальных слитках» / Ф.В. Недопекин, В.В. Белоусов, В.И. Бондаренко, В.М. Кондратенко. Украина: Свидетельство о
регистрации авторского права на произведение №47898, 2013.
3. Бондаренко В.И. Математическое обеспечение и компьютерные технологии для моделирования гидродинамических
и теплофизических процессов в металлургии: Монография / В.И. Бондаренко, В.Ф. Комаров, Ф.В. Недопекин, В.М.
Мелихов, В.В. Белоусов. Донецк: Юго-Восток, 2013. 210 с.
4. Bondarenko V.I. Visualization of Process of Wheel Steel High Ingots Simulation / V.I. Bondarenko, V. V Bodryaga, F. V
Nedopekin, V. V Belousov // IOP Conference Series: Materials Science and Engineering. 2017. Т. 287.
5. Bondarenko V.I. Using MVC pattern in the software development to simulate production of high cylindrical steel ingots / V.I.
Bondarenko, V.V. Bilousov, F.V. Nedopekin, V.V. Bodriaha, L.V. Antropova // Journal of Crystal Growth. 2019. Т. 526. С.
125240.
6. Винник А.О. Программный комплекс мониторинга энергопотребления на предприятиях угольной промышленности /
А.О. Винник, А.-А.М. Мартыненко, В.И. Бондаренко // Вестник Донецкого национального университета. Серия Г.
Технические науки. 2021. № 2. С. 33-38.
7. Бондаренко В.И. Разработка и реализация макета бионического протеза кисти руки / В.И. Бондаренко, А.И.
Горбатенкова // Вестник Донецкого национального университета. Серия Г. Технические науки. 2022. № 4. С. 27-
32.
8. Беспалова С.В. Построение регрессионных моделей режимов работы водораспределительных сетей с помощью
методов регуляризации и анализа главных компонент / С.В. Беспалова, С.М. Романчук, Т.В. Ермоленко, В.И. Бондаренко
// Информатика и кибернетика. 2019. Т. 2 (16). С. 35-49.
9. Беспалова С.В. Построение предсказательных моделей параметров давления воды в водораспределительных сетях с
---
[2025-10-22T15:35] Yaroslav Pikalyov:
помощью методов машинного обучения / С.В. Беспалова, С.М. Романчук, Т.В. Ермоленко, В.И. Бондаренко // Проблемы
искусственного интеллекта. 2019. Т. 2(13). С. 24-38.
10. Бондаренко В.И. Классификация научных текстов с помощью методов глубокого машинного обучения / В.И.
Бондаренко // Вестник Донецкого национального университета. Серия Г. Технические науки. 2021. № 3. С. 69-
77.
11. Ермоленко Т.В. Разработка алгоритмов и языковых моделей для мультиязычной системы автоматического
аннотирования текстов разных жанров / Т.В. Ермоленко, В.И. Бондаренко, Я.C. Пикалёв // Вестник Донецкого
национального университета. Серия Г. Технические науки. 2023. № 2. С. 22-42.
12. Бондаренко В.И. Анализ эффективности глубоких языковых моделей для задачи определения тональности
русскоязычных текстов / В.И. Бондаренко, В.О. Елисеев, Т.В. Ермоленко // Проблемы искусственного интеллекта.
2024. № 1 (32). С. 51-62.
13. Павленко Б.В. Использование модели YOLO в современных задачах распознавания в реальном времени на примере
военной и космической отраслей / Б.В. Павленко, В.И. Бондаренко, А.-А.М. Мартыненко // Вестник Донецкого
государственного университета. Серия Г: Технические Науки. 2023. № 4. С. 55-65.
14. Бондаренко В.И. Применение методов глубокого обучения для повышения качества изображения / В.И.
Бондаренко, А.В. Федчук // Вестник Донецкого национального университета. Серия Г. Технические науки. 2022.
4. С. 39-44.
15. Ермоленко Т.В. Исследование эффективности предсказательных моделей для системы анализа и мониторинга
энергопотребления на предприятиях угольной промышленности / Т.В. Ермоленко, В.Н. Котенко, А.О. Винник А.О. //
Проблемы искусственного интеллекта. 2022. № 4 (27). С. 25-34.
16. Конончук Э.В. Модели машинного обучения для оценки вероятности появления ДТП и его серьезности / Э.В.
Конончук. Т.В. Ермоленко Т.В., Т.О. Шишунов // Проблемы искусственного интеллекта. 2022. № 1 (24). С. 4-12.
17. Ермоленко Т.В. Анализ эффективности архитектур глубоких нейросетей для классификации изображении товаров /
Т.В. Ермоленко, И.Е. Самородский // Проблемы искусственного интеллекта. 2022. № 1 (24). С. 54-64.
18. Ермоленко Т.В. Классификация аномалий сердцебиения с помощью глубокого обучения / Т.В. Ермоленко, Д.В. Ролик
// Проблемы искусственного интеллекта. 2022. № 1 (24). С. 40-53.
19. Ермоленко Т.В. Система автоматического распознавания слитной русской речи на основе глубоких нейросетей /
Т.В. Ермоленко, Я.С. Пикалёв // Речевые технологии. 2021. № 1-2. С. 3-18.
20. Пикалёв Я.С. О нейронных архитектурах извлечения признаков для задачи распознавания объектов на устройствах с
Заявка № 25-21-20602 Страница 23 из 27
ограниченной вычислительной мощностью // Я.С. Пикалёв, Т.В. Ермоленко // Проблемы искусственного интеллекта.
2023. № 3 (30). С. 44-54.
21. Pikalyov Ya.S. About neural architectures of feature extraction for the problem of object 1 recognition for the problem of
object recognition on devices with limited computing power / Ya.S. Pikalyov, T.V. Yermolenko // Вестник Томского
государственного университета. Математика и механика. 2023. № 3. С. 30.
22. Pikalyov, Ya. Chapter Five. On the Issue of Continuous Speech Recognition / Yaroslav Pikalyov, Tatyana Yermolenko //
Integral Robot Technologies and Speech Behavior. 2024. P. 155-180.
---
[2025-10-22T15:43] Богдан Павленко:
+ к разработанному в ходе исследований можно добавить:
Структура метаданных сегментов карт навигации дрона
---
[2025-10-23T14:01] Владимир Устенко:
https://docs.google.com/document/d/1w2ryNwSpPc_6_H6vMxsKF9oTdwE6rcOEc36ZMesZ25E/edit?usp=sharing
---
[2025-10-23T14:16] Владимир Устенко:
33. Устенко, В. Ю. Сравнение стратегий мозаичной аугментации для оценки угла крена беспилотника по изображению с камеры [Текст] / В. Ю. Устенко, Б. В. Павленко // XVIII Всероссийская мультиконференция по проблемам управления (МКПУ2025) : материалы мультиконференции (Тула, 15 сентября 20 сентября 2025 г.) : в 4 т. Т. 1 Робототехника и мехатроника (РиМ 2025) / под ред. академика РАН Ф.Л. Черноусько. — Тула : Изд-во ТулГУ, 2025. — 300 с. С. 271-0273. ISBN 978-5-7679-5716-3, ISBN 978-5-7679-5709-5 (Т. 1)
---
[2025-10-23T14:16] Владимир Устенко:
ТУла
---
[2026-03-27T16:03] Yaroslav Pikalyov:
🌟 Kimodo: диффузионная модель для генерации 3D-движений людей.
NVIDIA выложила в открытый доступ проект Kimodo - генеративную модель на основе диффузии, которая создает реалистичные трехмерные движения для человеческих и робототехнических скелетов.
Kimodo принимает на вход текстовые промпты и ключевые позы всего тела, позиции и вращения конечностей, двухмерные пути и контрольные точки. Это позволяет точно управлять генерацией: от общего описания наподобие "персонаж идет и садится на стул" до детального контроля положения рук и ног в кадрах.
Всего доступно 5 вариантов модели для 3 типов скелетов: SOMA, SMPL-X и Unitree G1. Первые два ориентированы на анимацию аватаров, третий - на робота Unitree G1.
Модели, обученные на полном датасете Bones Rigplay 1 (700 часов), NVIDIA рекомендует как основные рабочие.
Варианты на сете BONES-SEED (288 часов) предназначены для бенчмаркинга и сравнения с собственными разработками.
Для работы с Kimodo предусмотрены 3 интерфейса:
🟢Интерактивное веб-демо с таймлайн-редактором;
🟢CLI-утилита для пакетной генерации;
🟢Python API для тонкой настройки .
Под инференс потребуется около 17 ГБ видеопамяти, модели запускали на RTX 3090, RTX 4090 и NVIDIA A100.
🟡 Интеграция с робототехническим стеком NVIDIA.
ProtoMotions позволяет брать сгенерированные движения и обучать на них физически корректные политики управления в GPU-ускоренной симуляции — как для аватаров, так и для Unitree G1.
Через General Motion Retargeting движения, созданные на скелете SMPL-X, можно перенести на произвольных роботов.
📌Лицензирование:
Код проекта под Apache 2.0, большинство моделей под NVIDIA Open Model License.
Вариант SMPL-X имеет более ограниченную NVIDIA R&D Model License, она допускает только исследовательское применение.
🟡Набор моделей
🟡Техотчет
🖥Github
@ai_machinelearning_big_data
#AI #ML #Robotics #Kimodo #NVIDIA
---

View File

@@ -0,0 +1,752 @@
body {
margin: 0;
font: 12px/18px 'Open Sans',"Lucida Grande","Lucida Sans Unicode",Arial,Helvetica,Verdana,sans-serif;
}
strong {
font-weight: 700;
}
code, kbd, pre, samp {
font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
background-color: #f9f2f4;
border-radius: 4px;
}
pre {
display: block;
margin: 0;
line-height: 1.42857143;
word-break: break-all;
word-wrap: break-word;
color: #333;
background-color: #f5f5f5;
border-radius: 4px;
overflow: auto;
padding: 3px;
border: 1px solid #eee;
max-height: none;
font-size: inherit;
}
.clearfix:after {
content: " ";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
.pull_left {
float: left;
}
.pull_right {
float: right;
}
.page_wrap {
background-color: #ffffff;
color: #000000;
}
.page_wrap a {
color: #168acd;
text-decoration: none;
}
.page_wrap a:hover {
text-decoration: underline;
}
.page_header {
position: fixed;
z-index: 10;
background-color: #ffffff;
width: 100%;
border-bottom: 1px solid #e3e6e8;
}
.page_header .content {
width: 480px;
margin: 0 auto;
border-radius: 0 !important;
}
.page_header a.content {
background-repeat: no-repeat;
background-position: 24px 21px;
background-size: 24px 24px;
}
.bold {
color: #212121;
font-weight: 700;
}
.details {
color: #70777b;
}
.page_header .content .text {
padding: 24px 24px 22px 24px;
font-size: 22px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.page_header a.content .text {
padding: 24px 24px 22px 82px;
}
.page_body {
padding-top: 64px;
width: 480px;
margin: 0 auto;
}
.page_about {
padding: 24px 24px;
}
.with_divider {
border-top: 1px solid #e3e6e8;
}
.userpic_link {
display: block;
text-decoration: none;
}
.userpic_link:hover {
text-decoration: none;
}
.userpic {
display: block;
border-radius: 50%;
overflow: hidden;
}
.story {
display: block;
border-radius: 4px;
overflow: hidden;
}
.userpic .initials {
display: block;
color: #fff;
text-align: center;
text-transform: uppercase;
user-select: none;
}
.color_red,
.userpic1,
.media_call .fill,
.media_file .fill,
.media_live_location .fill {
background-color: #ff5555;
}
.color_green,
.userpic2,
.media_call.success .fill,
.media_photo .fill {
background-color: #64bf47;
}
.color_yellow,
.userpic3,
.media_venue .fill {
background-color: #ffab00;
}
.color_blue,
.userpic4,
.media_audio_file .fill,
.media_voice_message .fill {
background-color: #4f9cd9;
}
.color_purple,
.userpic5,
.media_game .fill {
background-color: #9884e8;
}
.color_pink,
.userpic6,
.media_invoice .fill {
background-color: #e671a5;
}
.color_sea,
.userpic7,
.media_location .fill,
.media_video .fill {
background-color: #47bcd1;
}
.color_orange,
.userpic8,
.media_contact .fill {
background-color: #ff8c44;
}
.personal_info {
padding: 24px;
}
.personal_info .userpic .initials {
font-size: 30px;
}
.personal_info .rows {
float: left;
padding-right: 24px;
}
.personal_info .names {
width: 164px;
}
.personal_info .info {
width: 124px;
}
.personal_info .bio {
width: 400px;
}
.personal_info .row {
padding-bottom: 16px;
}
a.block_link {
display: block;
text-decoration: none !important;
border-radius: 4px;
}
a.block_link:hover {
text-decoration: none !important;
background-color: #f5f7f8;
}
a.expanded {
padding: 2px 8px;
margin: -2px -8px;
}
.sections {
padding: 11px 0;
}
.section {
height: 48px;
background-position: 24px 12px;
background-repeat: no-repeat;
background-size: 24px 24px;
}
.section .counter {
float: right;
padding: 14px 24px 0;
font-size: 15px;
}
.section .label {
padding: 15px 0 0 82px;
font-size: 15px;
}
.list_page .page_about {
padding: 16px 24px 0;
font-size: 11px;
}
.list_page .entry_list {
padding: 16px 0;
}
.list_page .entry {
padding: 10px 16px;
}
.list_page .entry .userpic .initials {
font-size: 18px;
}
.list_page .entry .body {
margin-left: 66px;
}
.list_page .entry .name {
padding: 4px 0 2px;
font-size: 14px;
}
.list_page .entry .subname {
padding-top: 4px;
}
.list_page .entry .details_entry {
padding-top: 4px;
}
.list_page .entry .info {
font-size: 11px;
padding-top: 5px;
}
.history {
padding: 16px 0;
}
.message {
margin: 0 -10px;
transition: background-color 2.0s ease;
}
div.selected {
background-color: rgba(242,246,250,255);
transition: background-color 0.5s ease;
}
.service {
padding: 10px 24px;
}
.service .body {
text-align: center;
}
.service .userpic_wrap {
padding-top: 10px;
}
.service .userpic {
margin: 0 auto;
}
.service .userpic .initials {
font-size: 24px;
}
.message .userpic .initials {
font-size: 16px;
}
.default {
padding: 10px;
}
.default.joined {
margin-top: -10px;
}
.default .from_name {
color: #3892db;
font-weight: 700;
padding-bottom: 5px;
}
.default .from_name .details {
font-weight: normal;
}
.default .body {
margin-left: 60px;
}
.default .text {
word-wrap: break-word;
line-height: 150%;
unicode-bidi: plaintext;
text-align: start;
}
.default .reply_to,
.default .media_wrap {
padding-bottom: 5px;
}
.default .media {
margin: 0 -10px;
padding: 5px 10px;
}
.default .media .fill,
.default .media .thumb {
width: 48px;
height: 48px;
border-radius: 50%;
}
.default .media .fill {
background-repeat: no-repeat;
background-position: 12px 12px;
background-size: 24px 24px;
}
.default .media .title,
.default .media_poll .question {
padding-top: 4px;
font-size: 14px;
}
.default .media .description {
color: #000000;
padding-top: 4px;
font-size: 13px;
}
.default .media .status {
padding-top: 4px;
font-size: 13px;
}
.default .video_file_wrap,
.default .animated_wrap {
position: relative;
}
.default .video_file,
.default .animated,
.default .photo,
.default .sticker {
display: block;
}
.video_duration {
background: rgba(0, 0, 0, .4);
padding: 0px 5px;
position: absolute;
z-index: 2;
border-radius: 2px;
right: 3px;
bottom: 3px;
color: #ffffff;
font-size: 11px;
}
.video_play_bg {
background: rgba(0, 0, 0, .4);
width: 40px;
height: 40px;
line-height: 0;
position: absolute;
z-index: 2;
border-radius: 50%;
overflow: hidden;
margin: -20px auto 0 -20px;
top: 50%;
left: 50%;
pointer-events: none;
}
.video_play {
position: absolute;
display: inline-block;
top: 50%;
left: 50%;
margin-left: -5px;
margin-top: -9px;
z-index: 1;
width: 0;
height: 0;
border-style: solid;
border-width: 9px 0 9px 14px;
border-color: transparent transparent transparent #fff;
}
.gif_play {
font-weight: 700;
color: #FFF;
display: block;
line-height: 40px;
font-size: 13px;
text-align: center;
}
.pagination {
text-align: center;
padding: 20px;
font-size: 16px;
}
.toast_container {
position: fixed;
left: 50%;
top: 50%;
opacity: 0;
transition: opacity 3.0s ease;
}
.toast_body {
margin: 0 -50%;
float: left;
border-radius: 15px;
padding: 10px 20px;
background: rgba(0, 0, 0, 0.7);
color: #ffffff;
}
div.toast_shown {
opacity: 1;
transition: opacity 0.4s ease;
}
.section.calls {
background-image: url(../images/section_calls.png);
}
.section.chats {
background-image: url(../images/section_chats.png);
}
.section.contacts {
background-image: url(../images/section_contacts.png);
}
.section.frequent {
background-image: url(../images/section_frequent.png);
}
.section.photos {
background-image: url(../images/section_photos.png);
}
.section.sessions {
background-image: url(../images/section_sessions.png);
}
.section.stories {
background-image: url(../images/section_stories.png);
}
.section.music {
background-image: url(../images/section_music.png);
}
.section.web {
background-image: url(../images/section_web.png);
}
.section.other {
background-image: url(../images/section_other.png)
}
.page_header a.content {
background-image: url(../images/back.png);
}
.media_call .fill {
background-image: url(../images/media_call.png)
}
.media_contact .fill {
background-image: url(../images/media_contact.png)
}
.media_file .fill {
background-image: url(../images/media_file.png)
}
.media_game .fill {
background-image: url(../images/media_game.png)
}
.media_live_location .fill,
.media_location .fill,
.media_venue .fill {
background-image: url(../images/media_location.png)
}
.media_audio_file .fill {
background-image: url(../images/media_music.png)
}
.media_invoice .fill {
background-image: url(../images/media_shop.png)
}
.media_voice_message .fill {
background-image: url(../images/media_voice.png)
}
.media_photo .fill {
background-image: url(../images/media_photo.png)
}
.media_video .fill {
background-image: url(../images/media_video.png)
}
.audio_icon {
width: 48px;
height: 48px;
border-radius: 50%;
background-color: #4f9cd9;
background-image: url(../images/media_music.png);
background-repeat: no-repeat;
background-position: 12px 12px;
background-size: 24px 24px;
}
@media only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {
.section.calls {
background-image: url(../images/section_calls@2x.png);
}
.section.chats {
background-image: url(../images/section_chats@2x.png);
}
.section.contacts {
background-image: url(../images/section_contacts@2x.png);
}
.section.frequent {
background-image: url(../images/section_frequent@2x.png);
}
.section.photos {
background-image: url(../images/section_photos@2x.png);
}
.section.sessions {
background-image: url(../images/section_sessions@2x.png);
}
.section.stories {
background-image: url(../images/section_stories@2x.png);
}
.section.music {
background-image: url(../images/section_music@2x.png);
}
.section.web {
background-image: url(../images/section_web@2x.png);
}
.section.other {
background-image: url(../images/section_other@2x.png);
}
.page_header a.content {
background-image: url(../images/back@2x.png);
}
.media_call .fill {
background-image: url(../images/media_call@2x.png)
}
.media_contact .fill {
background-image: url(../images/media_contact@2x.png)
}
.media_file .fill {
background-image: url(../images/media_file@2x.png)
}
.media_game .fill {
background-image: url(../images/media_game@2x.png)
}
.media_live_location .fill,
.media_location .fill,
.media_venue .fill {
background-image: url(../images/media_location@2x.png)
}
.media_audio_file .fill {
background-image: url(../images/media_music@2x.png)
}
.media_invoice .fill {
background-image: url(../images/media_shop@2x.png)
}
.media_voice_message .fill {
background-image: url(../images/media_voice@2x.png)
}
.media_photo .fill {
background-image: url(../images/media_photo@2x.png)
}
.media_video .fill {
background-image: url(../images/media_video@2x.png)
}
.audio_icon {
background-image: url(../images/media_music@2x.png);
}
}
.spoiler {
background: #e8e8e8;
}
.spoiler.hidden {
background: #a9a9a9;
cursor: pointer;
border-radius: 3px;
}
.spoiler.hidden span {
opacity: 0;
user-select: none;
}
.bot_buttons_table {
border-spacing: 0px 2px;
width: 100%;
}
.bot_button {
border-radius: 8px;
text-align: center;
vertical-align: middle;
background-color: #168acd40;
}
.bot_button_row {
display: table;
table-layout: fixed;
padding: 0px;
width:100%;
}
.bot_button_row div {
display: table-cell;
}
.bot_button_column_separator {
width: 2px
}
.reactions {
margin: 5px 0;
}
.reactions .reaction {
display: inline-flex;
height: 20px;
border-radius: 15px;
background-color: #e8f5fc;
color: #168acd;
font-weight: bold;
margin-bottom: 5px;
}
.reactions .reaction.active {
background-color: #40a6e2;
color: #fff;
}
.reactions .reaction.paid {
background-color: #fdf6e1;
color: #c58523;
}
.reactions .reaction.active.paid {
background-color: #ecae0a;
color: #fdf6e1;
}
.reactions .reaction .emoji {
line-height: 20px;
margin: 0 5px;
font-size: 15px;
}
.reactions .reaction .userpic:not(:first-child) {
margin-left: -8px;
}
.reactions .reaction .userpic {
display: inline-block;
}
.reactions .reaction .userpic .initials {
font-size: 8px;
}
.reactions .reaction .count {
margin-right: 8px;
line-height: 20px;
}
@media (prefers-color-scheme: dark) {
html, body {
background-color: #1a2026; /* groupCallBg */
margin: 0;
padding: 0;
}
.page_wrap {
background-color: #1a2026; /* groupCallBg */
color: #ffffff; /* groupCallMembersFg */
min-height: 100vh;
}
.page_wrap a {
color: #4db8ff; /* groupCallActiveFg */
}
.page_header {
background-color: #1a2026; /* groupCallBg */
border-bottom: 1px solid #2c333d; /* groupCallMembersBg */
}
.bold {
color: #ffffff; /* groupCallMembersFg */
}
.details {
color: #91979e; /* groupCallMemberNotJoinedStatus */
}
.page_body {
background-color: #1a2026; /* groupCallBg */
}
code {
color: #ff8aac; /* historyPeer6UserpicBg */
background-color: #2c333d; /* groupCallMembersBg */
}
pre {
color: #ffffff; /* groupCallMembersFg */
background-color: #2c333d; /* groupCallMembersBg */
border: 1px solid #323a45; /* groupCallMembersBgOver */
}
.with_divider {
border-top: 1px solid #2c333d; /* groupCallMembersBg */
}
a.block_link:hover {
background-color: #323a45; /* groupCallMembersBgOver */
}
.list_page .entry {
color: #ffffff; /* groupCallMembersFg */
}
.message {
color: #ffffff; /* groupCallMembersFg */
}
div.selected {
background-color: #323a45; /* groupCallMembersBgOver */
}
.default .from_name {
color: #4db8ff; /* groupCallActiveFg */
}
.default .media .description {
color: #ffffff; /* groupCallMembersFg */
}
msgInBg,
.historyComposeAreaBg {
background-color: #2c333d; /* groupCallMembersBg */
}
msgOutBg {
background-color: #323a45; /* groupCallMembersBgOver */
}
msgInBgSelected {
background-color: #39424f; /* groupCallMembersBgRipple */
}
msgOutBgSelected {
background-color: #39424f; /* groupCallMembersBgRipple */
}
.spoiler {
background: #323a45; /* groupCallMembersBgOver */
}
.spoiler.hidden {
background: #61c0ff; /* groupCallMemberInactiveStatus */
}
.bot_button {
background-color: #4db8ff40; /* groupCallActiveFg with opacity */
}
.reactions .reaction {
background-color: #2c333d; /* groupCallMembersBg */
color: #4db8ff; /* groupCallActiveFg */
}
.reactions .reaction.active {
background-color: #4db8ff; /* groupCallActiveFg */
color: #1a2026; /* groupCallBg */
}
.reactions .reaction.paid {
background-color: #323a45; /* groupCallMembersBgOver */
color: #febb5b; /* historyPeer8UserpicBg */
}
.reactions .reaction.active.paid {
background-color: #febb5b; /* historyPeer8UserpicBg */
color: #1a2026; /* groupCallBg */
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

View File

@@ -0,0 +1,211 @@
"use strict";
window.AllowBackFromHistory = false;
function CheckLocation() {
var start = "#go_to_message";
var hash = location.hash;
if (hash.substr(0, start.length) == start) {
var messageId = parseInt(hash.substr(start.length));
if (messageId) {
GoToMessage(messageId);
}
} else if (hash == "#allow_back") {
window.AllowBackFromHistory = true;
}
}
function ShowToast(text) {
var container = document.createElement("div");
container.className = "toast_container";
var inner = container.appendChild(document.createElement("div"));
inner.className = "toast_body";
inner.appendChild(document.createTextNode(text));
var appended = document.body.appendChild(container);
setTimeout(function () {
AddClass(appended, "toast_shown");
setTimeout(function () {
RemoveClass(appended, "toast_shown");
setTimeout(function () {
document.body.removeChild(appended);
}, 3000);
}, 3000);
}, 0);
}
function ShowHashtag(tag) {
ShowToast("This is a hashtag '#" + tag + "' link.");
return false;
}
function ShowCashtag(tag) {
ShowToast("This is a cashtag '$" + tag + "' link.");
return false;
}
function ShowBotCommand(command) {
ShowToast("This is a bot command '/" + command + "' link.");
return false;
}
function ShowMentionName() {
ShowToast("This is a link to a user mentioned by name.");
return false;
}
function ShowNotLoadedEmoji() {
ShowToast("This custom emoji is not included, change data exporting settings to download.");
return false;
}
function ShowNotAvailableEmoji() {
ShowToast("This custom emoji is not available.");
return false;
}
function ShowTextCopied(content) {
navigator.clipboard.writeText(content);
ShowToast("Text copied to clipboard.");
return false;
}
function ShowSpoiler(target) {
if (target.classList.contains("hidden")) {
target.classList.toggle("hidden");
}
}
function AddClass(element, name) {
var current = element.className;
var expression = new RegExp('(^|\\s)' + name + '(\\s|$)', 'g');
if (expression.test(current)) {
return;
}
element.className = current + ' ' + name;
}
function RemoveClass(element, name) {
var current = element.className;
var expression = new RegExp('(^|\\s)' + name + '(\\s|$)', '');
var match = expression.exec(current);
while ((match = expression.exec(current)) != null) {
if (match[1].length > 0 && match[2].length > 0) {
current = current.substr(0, match.index + match[1].length)
+ current.substr(match.index + match[0].length);
} else {
current = current.substr(0, match.index)
+ current.substr(match.index + match[0].length);
}
}
element.className = current;
}
function EaseOutQuad(t) {
return t * t;
}
function EaseInOutQuad(t) {
return (t < 0.5) ? (2 * t * t) : ((4 - 2 * t) * t - 1);
}
function ScrollHeight() {
if ("innerHeight" in window) {
return window.innerHeight;
} else if (document.documentElement) {
return document.documentElement.clientHeight;
}
return document.body.clientHeight;
}
function ScrollTo(top, callback) {
var html = document.documentElement;
var current = html.scrollTop;
var delta = top - current;
var finish = function () {
html.scrollTop = top;
if (callback) {
callback();
}
};
if (!window.performance.now || delta == 0) {
finish();
return;
}
var transition = EaseOutQuad;
var max = 300;
if (delta < -max) {
current = top + max;
delta = -max;
} else if (delta > max) {
current = top - max;
delta = max;
} else {
transition = EaseInOutQuad;
}
var duration = 150;
var interval = 7;
var time = window.performance.now();
var animate = function () {
var now = window.performance.now();
if (now >= time + duration) {
finish();
return;
}
var dt = (now - time) / duration;
html.scrollTop = Math.round(current + delta * transition(dt));
setTimeout(animate, interval);
};
setTimeout(animate, interval);
}
function ScrollToElement(element, callback) {
var header = document.getElementsByClassName("page_header")[0];
var headerHeight = header.offsetHeight;
var html = document.documentElement;
var scrollHeight = ScrollHeight();
var available = scrollHeight - headerHeight;
var padding = 10;
var top = element.offsetTop;
var height = element.offsetHeight;
var desired = top
- Math.max((available - height) / 2, padding)
- headerHeight;
var scrollTopMax = html.offsetHeight - scrollHeight;
ScrollTo(Math.min(desired, scrollTopMax), callback);
}
function GoToMessage(messageId) {
var element = document.getElementById("message" + messageId);
if (element) {
var hash = "#go_to_message" + messageId;
if (location.hash != hash) {
location.hash = hash;
}
ScrollToElement(element, function () {
AddClass(element, "selected");
setTimeout(function () {
RemoveClass(element, "selected");
}, 1000);
});
} else {
ShowToast("This message was not exported. Maybe it was deleted.");
}
return false;
}
function GoBack(anchor) {
if (!window.AllowBackFromHistory) {
return true;
}
history.back();
if (!anchor || !anchor.getAttribute) {
return true;
}
var destination = anchor.getAttribute("href");
if (!destination) {
return true;
}
setTimeout(function () {
location.href = destination;
}, 100);
return false;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB