Pull to refresh
-2

Пользователь

0,1
Rating
Send message

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

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

рот не принимает характерные формы под разные звуки.

У меня 68 точек на лицо, а на рот 22 точки, поэтому рту можно придать любую форму. Но достаточно открытия и сжатия. Однако, большинство людей вообще слабо двигают ртом и уж тем более по книжке для аниматоров. И если это усилить будет странно. А на вашем видео эти “характерные формы” мало заметны. Возможно, они и не нужны: ведь например, в дублированных фильмах движение рта не совпадает с речью и воспринимается нормально. Главное, чтобы совпали начало и конец.

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

Тоже сделал анимацию фото с речью в браузере. Только вместо After Effects использую webGL, которая двигает ключевые точки. Голос из wav, mp3 или создаётся Speech Api по тексту. Звук заранее не размечается. Анимация просто по громкости. Все движения определяются программно в JS, поэтому анимацию можно усилить или ускорить и т.д. Демо: https://prog-mania.github.io/fani/ Там чтобы браузер разрешил звук нужно пометить “Говорить”.

// Изменение яркости экрана
type TRampArray = array[0..2] of array[0..255] of Word;
var  origRampArray:TRampArray;

// Функция изменения яркости. Чем больше wBrightness, тем больше яркость
function SetBrightness(wBrightness:word):boolean;
var RampArray:TRampArray; i, Value:integer; DC:HDC;
begin
if wBrightness<0 then exit;

for i:=0 to MAXBYTE do begin
    Value := i * (wBrightness + 128);
    if (Value > MAXWORD) then Value := MAXWORD;
    RampArray[0][i] := Value;
    RampArray[1][i] := Value;
    RampArray[2][i] := Value;
end;

DC:=GetDC(0); // Device Canvas рабочего стола. Вызов из user32.dll
try      result:= SetDeviceGammaRamp(DC,RampArray) // Вызов из gdi32.dll
finally  ReleaseDC(0,DC) end;
end;

procedure getGamma;
var
DC:HDC;
begin
  DC:=GetDC(0);
  try     GetDeviceGammaRamp(DC,origRampArray) // Вызов из gdi32.dll
  finally ReleaseDC(0,DC) end;
end;

Использовал фоторезистор GL5516 по 149 руб. за десяток, припаянный к Arduino:

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

Программа в Arduino:

void setup (){Serial.begin(9600);}
void loop  (){Serial.println(analogRead(5)); delay(1000);}

На ПК программа на Delphi7, написанная вручную без LLM:

https://github.com/prog-mania/fani/tree/main/gamma

Регулировка яркости по 2-ум точкам.
Регулировка яркости по 2-ум точкам.

Яркость меняется без без участия дисплея и DDC/CI.

Современные 3D игры сложнее для освоения, чем любая другая программа. И при этом никакого полезного результата от этого нет. Удивительно что кто-то во всём этом разбирается сотни часов. Я скачиваю сохранения и trainer. Ставлю невидимость, чтобы враги не мешали и так и прохожу, просто рассматривая красивые виды и монстров. Пока нашёл лучшие для этого Elden Ring и Horizon.

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

Всё это выглядит нереально. Тут даже LLM увязнет и всё будет заброшено. У видео большой размер или низкое качество по сравнению с одной картинкой, его невозможно изменить, поэтому оно будет однообразно и быстро надоест. Тем более, чтобы его склеить оно должно начинаться и заканчиваться одинаковыми кадрами? И главное: как готовое видео синхронизировать с произносимой речью?

А картинки чем помогут? Возможно, поможет наличие исходных текстов и описание: https://github.com/prog-mania/fani/blob/main/server/README_server.ru.md

Т.е. model.exe это самораспаковывающийся архив для браузера.

в цикле рендеринга постоянно рассчитывается тригонометрическая функция времени.

Sin - слишком однообразно. Нужны паузы и случайность.

Для голосового общения используются штатные возможности современных браузеров.

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

Введи свой API-ключ

Создавать ответ можно из JS, вызывая llama-server и любую локальную LLM без ключей.

Там можно любую модель сделать.

Ну так сделайте хотя бы genesis 8 из DAZ.

сделать скажем сотню видео роликов и миксить их между собой и возможно накладывать лицо 3d моделью

Это слишком трудоёмко, сложно, много места и ограничивает число персонажей.

30$ заплатить за grok Ani)

Но это же аниме с круглыми глазами.

Тогда вообще фотореализм будет.

По-моему фотореалистичная анимация 3D модели в реальном времени пока невозможна. Даже в играх волосы и одежда выглядят не естественно. Поэтому сделал 2D анимацию фото и этого достаточно для просто говорящего персонажа. Для этой анимации достаточно фото, на котором удалить фон и распознать 68 точек, что можно автоматизировать. Поэтому персонажей можно наделать быстро, много и любого качества. Можно даже из JS вызывать Stable Diffusion и менять персонажа на ходу. И вообще можно на ходу менять почти всё: фон, масштаб, скорость и силу любой анимации, звуки дыхания, эмоции, скорость, высоту, тип голоса и произносимый текст, персонаж и его вид как в пластике PhotoShop. И это даёт бесконечный простор для творчества программиста JS.

Что-то ваш 3D персонаж какой-то неказистый. Так вы всех распугаете. А ведь можно сделать привлекательнее. Вот например, мои эксперименты с three.js + Genesis 8 из DAZ: https://github.com/prog-mania/fani/blob/main/server/model.exe

Вспомнил ещё один старый способ создать exe приложение из html+JS, используя программу mshta.exe, входяшую в windows. Хотя JS в mshta без излишеств, зато есть доступ к системе через activX. Поэтому сервер не нужен и exe может быть маленький. Например, игра крестики-нолики всего 17 кбайт: https://github.com/prog-mania/fani/blob/main/h2exe/xo.exe

Ещё сделал такой вариант: сервер на delphi7 в 343 кб запускает установленный в windows браузер Chrome в режиме приложения и показывает в нем указанный html+js. При этом js может всё что и delphi, а если не хватит можно добавить. И ещё там можно создать один exe файл, который включит в себя всё что нужно в упакованном виде и будет работать, не требуя других файлов. Таким способом сделал плеер ТВ из интернета в 514 кб и анимацию картинок: https://github.com/prog-mania/fani/blob/main/fani.exe

...можно добиться максимизации давления, что позволит построить активно вращающуюся турбину, почти при любой температуре!

Так почему же не используются сотни гигаватт тепла в ИИ датацентрах? Даже небольшая его часть - это же сумашедшие деньги. А микросхемы могут нагреть рабочее тело до 100 градусов. Скорее всего там очень низкий КПД.

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

Что и как посоветуете запускать только на cpu 32 Гб ram?

Можно запускать что угодно, если есть быстрый SSD: попробовал работу openai_gpt-oss-120b-MXFP4.gguf 63 гб на диске. RAM 32 гб DDR5 4800 мгц, SSD 4 тб чтение 7 гб в сек. без использования GPU. Получилось 5 токенов в сек. или 16 символов в сек. SSD за 3 минуты нагрелся с 39 до 49 градусов, прочитал 160 гб.

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

Тоже сделал анимацию фото с речью в реальном времени, но в браузере с webGL. Поэтому нужен любой GPU, даже встроенный или на телефоне. Зато FasterLivePortrait и склеивание кусочков не нужно. Нужно один раз распознать 68 точек лица open pose или dlib. Голос из wav или создаётся Speech Api или Silero. Все движения определяются программно в JS.

https://prog-mania.github.io/fani/

Там чтобы браузер разрешил звук нужно пометить “Говорить”.

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

Скрытый текст
    static String[] zt={
    //конструкции языка,                        на что менять, номер
    "\".*?(?<!\\\\)\"|'.*?(?<!(?<!\\\\)\\\\)'",           "p", "0", // строка
    "//.*?$|/\\*.*?\\*/|[А-я][А-я\\w\\., ]+$",            "c", "23",// коментарий
    "\\.(repl|equals|htm|matches|substr|rex|trim|lower|upper|replex|length|pos)(?=\\()",
                                                          "e", "26",// методы строк
    "(?<!\\w)var ([\\w=~,]+)",                            "p", "22",// локальные переменные
    "(?<!\\w|~)(?!(if|else|while|function|for|return|break|continue|var)\\W)(\\+\\+|--|)([A-Za-zА-я\\$\\.][\\wА-я\\.]*)(\\+\\+|--|)",
                                                          "p", "1", // переменная
    "(?<!\\d|\"|\\.|~|\\)|\\])([\\+-])([\\d\\.]+|~\\d+~)","p", "2", // число с одноместным +-
    "!(~\\w+~)(?!\\(|\\[)",                               "p", "28",// выражение с одноместным !
    "(?<!~|\\w|\\.)[\\d\\.]+",                            "p", "3", // число
    "(?<!/|\\*)(~\\w+~)(/|\\*)(~\\w+~)(?!\\(|\\[|~e)",    "p", "4", // выражение */ выражение
    "(?<!/|\\*|-)(~\\w+~)(\\+|-)(~\\w+~)(?!\\*|/|\\(|\\[|~e)", "p", "4", //5 выражение +- выражение
    "(~\\w+~)(\\>|<|<=|>=|==|!=)(~\\w+~)(?![-\\+\\*/\\[\\(]|~e)",
                                                          "p", "12",// выражение >=< выражение
    "(~\\w+~)(&&|\\|\\|)(~\\w+~)(?!\\*|/|\\()",           "p", "12",//18 выражение && || выражение
    "(?<=[\\(\\[,])(~[pm]\\w+~),(~[pm]\\w+~)(?!\\(|~e|\\[|~|\\+|-|\\*|/|=)","p", "6", // параметры через ,
    "(~p\\w+~)\\[(~[pm]\\w+~)\\](\\+\\+|--|)",            "m", "16",// массив
    "(?<!\\w)for\\(([^;]*);([^;]*);([^\\)]*)\\)",         "f", "19",// заголовок цикла for
    "(?<!\\w)return([^;]*);",                             "o", "21",// return в функции
    "(?<!\\w)(break|continue);",                          "o", "24",// break в цикле
    "(?<=[-\\(=\\+\\*/])(~[mp]\\w+~)()=(~[mps]\\w+~)(?![-\\+\\*/\\[\\(]|~e)", "p", "29", // оператор присвоения в выражении
    "(~[mp]\\w+~)(\\+|-|)=(~[mps]\\w+~)(,|;|$)","o", "13",// оператор присвоения
    "\\((~\\w+~)\\)",                                     "s", "7", // (выражение)
    "(?<!~)(~[spm]\\w+~)(~e\\w+~)(~s\\w+~)",              "p", "27",// методы строк для преобразования в функции
    "if(~\\w+~)(~o\\w+~)(?:else (~o\\w+~)|(?!else))",     "o", "11",// условный оператор
    "(?<=\\{|^)(~o\\w+~)(~o\\w+~)",                       "o", "10",// 2 оператора
    "\\{ *(~o\\w+~|) *\\}",                               "o", "15",// {оператор}
    "function (~\\w+~)(~\\w+~)(~o\\w+~)",                 "o", "17",// обьявление функции
    "(?<!function(?: |))(~[mp]\\w+~)(~s\\w+~)",           "p", "8", // вызов функции
    "(~\\w+~)\\?(~\\w+~):(~\\w+~)(?!\\(|~|\\[|\\+|-|\\*|/|=)", "p","25",// усл?p1:p2
    "(?<![-=\\+\\*></:])(~[^s]\\d+~);",                   "o", "9", // оператор
    "while(~\\w+~)(~o\\w+~)",                             "o", "14",// цикл while
    "(~f\\w+~)(~o\\w+~)",                                 "o", "20"};//цикл for

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

Что же такое мы получили? Мы получили то, что называется Расширенной Формой Бэкуса-Наура (Extended Backus-Naur Form — EBNF). По сути, это способ описать грамматику языка: какие конструкции как описываются и где что можно записать

Так ведь регулярные выражения это и есть способ описания грамматики, причём много мощнее чем BNF, только в отличии от BNF и прочих самодельных, RegEx поддерживаются во всех языках и их все знают.
И я сделал интерпретатор языка типа JS ещё на java 4, в котором каждая конструкция языка описывается одним RegEx. Они по порядку сравниваются с текстом программы и сравнение заменяется на ссылку на элемент массива AST так, что в конце остаётся 1 элемент, который и выполняется.

1
23 ...

Information

Rating
4,326-th
Location
Тверь, Тверская обл., Россия
Registered
Activity