LINUX.ORG.RU

Сообщения kvpfs_2

 

Ореол вокруг объекта

Привет. Есть рисунок с резким переходом в прозрачность. Нужно создать вокруг объекта ореол из пикселей, концентрация которых падает по мере удаления от объекта. Как это сделать в гимпе (в двух словах, ориентировачно)?
При вставке в другой фон нужен плавный переход, а не резкий контраст. Я умею плавно затереть край через маску + градиент, но позволить в данной ситуации уменьшить объект - не могу. Нужен какой-то инструмент, который берет референсный цвет и распространяет его на прозрачном участке градиентом.

 

kvpfs_2
()

Генерация голоса

Привет. Есть ли нынче какие-то сервисы, которым я дам свой голос, а они мне женский/детский/мужской? Не тупые спич генераторы с робо акцентом, а реально похожее на живого человек, с эмоциональной окраской в нужных местах (аналогичной входному варианту). Сетки уже кино годное снимают, ну голос то должны были осилить. Пусть за деньги даже, приемлемо.

Сразу говорю - ничего не гуглил. К тому же все равно надо пробовать, может вы уже и есть впечатления.

 ,

kvpfs_2
()

Увеличить количество кадров в сцене

Привет, прошу помощи. Есть реальный видик, сделал motion tracking, т.е. синхронизировал 3д камеру с реальной, добавил всякие штучки, и планирую слить в целое в итоге. Но проблема вот в чем - в процесс решил добавить некоторых дополнительных действий в середине сцены, т.е. вставлю копию одного кадра в центр и буду что-то делать в 3д пространстве. Но для этого нужно сообщить как-то камере, что количество кадров увеличилось, и все последующие её перемещения нужно сдвинуть на Х кадров (Х == количеству добавленных кадров).

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

 

kvpfs_2
()

Moving average node

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

В общем суть вот в чем - берем блендер в режиме композитора, берем видик, в которое хотим вставить некий объект. Очевидно, что для вставляемого объекта необходимы Х, У, angle (про scale не будем). Если с X, Y, все просто, то для angle нужно немного костылить самому на основе двух точек (что в общем-то не сложно - найти тангенс, а затем посчитать арктангенс).
Сделал расчет угла и появилась одна проблема - небольшой «дребезг» угла даёт сильное подергивание вставляемого объекта, хотя в целом он позиционируется верно.

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

 

kvpfs_2
()

ffmpeg смена fps

Привет. Получаю неожиданный эффект при смене fps у ролика. Есть видос, 30.48 fps, делаю ему:

$ ffmpeg -i orig.mp4 orig_frames/%04d.png
$ ls orig_frames | wc
    557
$ ffmpeg -i orig.mp4 -vf fps=fps=20 fps20_frames/%04d.png
$ ls 2 | wc
    370

Дальше простая арифметика: 557/30.48=18.2сек; 370/20=18.5сек.
После смены фпс видос стал жирнее на 0.3 секунды. Почему? Куда вставились дополнительные фреймы и зачем? Если в случае с кодированием выхлопа кодеком ещё можно порассуждать на тему кратности кадров чему-то там важному в контексте этого кодека, то здесь же голые фреймы.

$ ffprobe orig.mp4 2>&1 | grep fps
  Stream #0:0[0x1](eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720, 8936 kb/s, SAR 1:1 DAR 16:9, 30.48 fps, 30 tbr, 90k tbn (default)

 

kvpfs_2
()

Shadow catcher наоборот

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

Просто как идея - а умеет ли блендер обратное Shadow catcher’у? Т.е. поверхность, которая улавливает свет, и при композитинге добавит его к миксуемой с ней основе. На а там я уж в 3д сцене поиграюсь и с освещением, и с дымом.

 

kvpfs_2
()

ffmpeg lens correction

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

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

Перемещено hobbit из general

 , , ,

kvpfs_2
()

Фото/видео техника, линзы

Привет. Два вопроса не дают мне покоя, нужен ликбез:

  1. Заметил, что моя камера на телефоне имеет странное (для меня) свойство - искажение реальных размеров объектов. Например, она смотрит на прямоугольный объект проходящий через центр матрицы камеры, второй конец объекта максимально близко к краю матрицы. Так вот размеры этого объекта искажаются, ширира прямоугольника (с 90гр углами в реальности), которая фокусируется в центре матрицы меньше, чем ширина того же прямоугольника на краю матрицы. Что за фокусы? В голову мне приходит мысль - видимо, дело в том, что матрица имеет плоскую форму, свет идущий под углом проходит большее расстояние от линзы до матрицы и успевает сильнее расшириться, отсюда искажение размеров. Если гипотеза верна, то должны быть какие-то продвинутые камеры с матрицами в виде полусферы, где длина между линзой и матрицой одинакова во всех направлениях. Если так, то как называются такие камеры?

  2. Ну чистое любопытство - а что вообще для камеры/глаза означает сфокусироваться на объекте? Ну т.е. в чем физическое ограничение видеть через одну линзу с постоянной силой преломления на разных расстояних от нее? Что ещё меняется в характеристиках светового пучка кроме его ширины? Ну будет точка попадать разное количество светочувствительных датчиков, и? Если про глаз ещё можно подумать, что там голова «обучена» видеть образы определенной цепочкой нейронов (мол «жирнее» образ - уже не узнается), то какие проблемы делать это для камеры? Просто мысль - может при прохождении полихроматического света через линзу при некотором расстоянии свет превращается в красно-сине-зеленую какашку? А вот был бы свет монохроматическим, то проблем бы не было.

Перемещено leave из general

 , ,

kvpfs_2
()

Motion blur

Привет. Остался вопрос от проекта (я уже его закончил, вместо автоматического размытия сделал всё руками по ключевым кадрам), хотелось бы на будущее прояснить.

Был видео клип, и одна картинка, которая накладывалась в желаемое место, отследил одну точку на видео, в композиторе заюзал Track Position ноду, использовал её для корректировки координат вставляемой картинки + speed выход подключил к ноде vector blur (которая и должна размывать исходя из скорости перемещения). Но никакого размытия нода не добавляла, не работает. В натроне так размывал.

Знакомая история? Баг в блендере? Какая-то крутилка в кишках?

PS: я не про размытие 3Д сцены, я про использование блендера в качестве композитора только.

 

kvpfs_2
()

Не моделируется дым

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

 

kvpfs_2
()

Моделирование потока жидкости

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

Что можно сделать? Как-то конвертировать все объекты и их параметры в больший масштаб (и все изменения в ключевых кадрах) или я как-то не понял моделирование жидкости и кручу не за ту ручку? Если Resolution Devision находится на каких-то разумных значения в интересах скорости (где-то до 300), то из эмиттера вылетают огромные шары, без внутреннего деления.

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

 

kvpfs_2
()

stm32f411ceu6, высокий уровень на pa12

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

Ребята помогите, плата разведена уже, кидать соплю на другой пин - совсем не хочется. У меня была подобная история с PA15 пином на другом МК, там решилось установкой регистра AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1. Здесь, наверное, тоже какой-то фокус.

 ,

kvpfs_2
()

Придать форму нитилоновой проволке

Привет. Есть кусок нитилоновой проволки (который вспоминает форму при около 70 градусах цельсия). Нужно придать ей нужную мне форму, которую он будет вспоминать. Как понимаю, нужно нагреть до около 400 градусов.

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

Перемещено leave из talks

 

kvpfs_2
()

Проанализировать поток через proxy сервер

Привет. Ребят, я с сетями не на «ты». Вопрос совсем нубский, наверное. Прошу показать направление - поставил на VPS (назовём его Y) tinyproxy, через него хожу с своего десктопа Z на условный сервер в сети X. Есть подозрение, что сервер X понимает, что Y всего лишь proxy прокладка, и реальный источник трафика - Z. Вопрос - как бы проанализировать трафик на выходе из poxy сервера Y на наличие там в заголовках каких-то следов, говорящих о реальном источнике Z? Т.е. отослать тестовый пакет, завернуть его на VPS’в файл, ну и распарсить для изучения. Как и чем это делается по уму? Ну и в идеале - может какие-то подсказки на тему что искать в заголовках.

Всякие google’ы и спец сервисы не находят меня за proxy.

 

kvpfs_2
()

Sequentially-consistent ordering для мьютексов

Приветствую. Мьютексы не обеспечевуют sequentially-consistent порядок, т.е. если существуют два мьютекса, которые контролируют доступ каждый к своим данным, в некотором потоке сначала берем первый мьютекс, модифицируем, берем второй мьютекс, модифицируем. Для данного потока порядок четкий - сначала 1 затем 2, для остальных же потоков вполне может быть сначала 2 затем 1.

Вопрос, как сделать sequentially-consistent порядок для всех потоков? Идею выражу в коде:

#include <thread>
#include <mutex>
#include <cassert>
using namespace std;

#define WITH_FENCE 0

int a_data, b_data;
mutex a_mtx, b_mtx;
atomic_int cnt = 0;

void write_a() {
   lock_guard lck(a_mtx);
   a_data = 5;
#if WITH_FENCE
   atomic_thread_fence(std::memory_order_seq_cst);
#endif
}

void write_b() {
   lock_guard lck(b_mtx);
   b_data = 5;
#if WITH_FENCE
   atomic_thread_fence(std::memory_order_seq_cst);
#endif
}

void check() {
   while (true) {
      lock_guard lck(a_mtx);
#if WITH_FENCE
      atomic_thread_fence(std::memory_order_seq_cst);
#endif
      if (a_data) {
         lock_guard lck_1(b_mtx);
#if WITH_FENCE
         atomic_thread_fence(std::memory_order_seq_cst);
#endif
         cnt.fetch_add(1, memory_order_relaxed);
         return;
      }
   }
}

int main() {
   jthread t0(check);
   jthread t1(check);
   jthread t0(write_a);
   jthread t1(write_b);
   assert (cnt == 0  || cnt == 2);
}

Если WITH_FENCE == 0, то порядка не будет точно. Поможет ли WITH_FENCE = 1? Если поможет, то что будет, если будут и другие потоки, которые будут брать данные мьютексы без барьера, будет ли сохранен порядок пусть и с какими-то вмешательствами из других потоков в рандомных местах (вне единого порядка, значит каждый поток видит их по-разному), но все же можно будет сказать в отношении упорядоченных событий (которые с барьером), что условное событие 2 не происходит раньше 1? В общем велком, если написал спутанно последнюю идею, дайте знать, приведу пример.

UPD: для main нет четкого порядка, код поправил

 ,

kvpfs_2
()

Запретить создание weak_ptr из shared_ptr

Привет, нужна помощь зала. Захотел хотелку из названия темы, подумал, что нужно отнаследоваться от std’шного и удалить operator weak_ptr

#include <memory>
using namespace std;


template <typename T>
class Shared_ptr_without_weak : public std::shared_ptr<T> {
public:
  using std::shared_ptr<T>::shared_ptr;
  operator std::weak_ptr<T>() = delete;
};

int main() {
  Shared_ptr_without_weak<int> s(new int());
  weak_ptr w0(s);  // error: use of deleted function
  weak_ptr<int> w1;
  w1 = s;          // ok
}

Результат заставил задуматься, почему в случае с конструктором задумка работает (ошибка компиляции), а с оператором= нет? В обоих случаях (ctr, operator=) shared_ptr принимается в шаблонную функцию, а версия с weak_ptr - обычная функция, нешаблонная, по идее должна иметь более высокий приоритет, но увы, во втором случае что-то идет не так.

 

kvpfs_2
()

Выгрузка so'шки из пространства процесса

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

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

Можно ли как-то точно узнать, что плагин полностью выгрузился из адресного пространства, следующий dlopen даст девственно «чистую» память под сошкой? Т.е. я дернул dlclose, за что мне потом дергать в цикле чтобы понять, что процедура завершена полностью?

 

kvpfs_2
()

Data race

Привет, мужчины. Имеется вопрос, возник в ходе работы над завершением программы. Упрощаю до сути - имеется ли здесь data race?

#include <thread>
#include <mutex>
#include <vector>
#include <chrono>
#include <memory>
#include <iostream>
using namespace std;


class Thread_pool {
   vector<thread> th;
   mutex mtx;
   atomic_flag stop_flag;
   bool destruction_stage = false;
public:
   ~Thread_pool() {
      stop_flag.test_and_set(memory_order_relaxed);
      if (true) {
         lock_guard l(mtx);
         destruction_stage = true;
      }
      std::cout << th.size() << "is running" << endl; // 16
      for (thread &t : th)
         t.join();
   }
   bool add_thread(void(f)(atomic_flag *)) {
      lock_guard l(mtx);
      if (destruction_stage)
         return false;
      th.push_back(thread(f, &stop_flag));
      return true;
   }
} th_pool;


void tf(atomic_flag *f) {
   while (! f->test(memory_order_relaxed)) {
      this_thread::sleep_for(1s);
      for (int i = 0;  i < 3;  ++i)
         th_pool.add_thread(tf);
   }
}

int main() {
   th_pool.add_thread(tf);
   this_thread::sleep_for(3s);
}

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

atomic_thread_fence imposes stronger synchronization constraints than an atomic store operation with the same std::memory_order. While an atomic store-release operation prevents all preceding reads and writes from moving past the store-release, an atomic_thread_fence with memory_order_release ordering prevents all preceding reads and writes from moving past all subsequent stores.

Т.е. если правильно понял, то atomic_thread_fence может гарантировать, что какая-нибудь запись не пролезет до него, а вот с простыми атомиками такой гарантии уже не будет. А мьютексы?

С санитарами собирал, data race не находят.

PS: ГПТ беседу не вывозит, нужно мнение кожаных экспертов.

 

kvpfs_2
()

RSS подписка на новые темы