Задать вопрос
  • Как надежно записать в изображение скрытую информацию?

    lastuniverse
    @lastuniverse
    xmoonlight, это просто какой то выверт мозга, даже не уверен что осилю:)

    PS: сбежал к подушке.
  • Как надежно записать в изображение скрытую информацию?

    lastuniverse
    @lastuniverse
    xmoonlight, ночь на дворе, завтра воткнусь :)
    Вот еще один вариантик: теоретически можно попробовать реализовать некоторую сверточную искусственную нейронную сеть (ИНС). Произвести ее обучение на большом объеме картинок, каждая из которых подготовлена в множестве вариантов обрезок, ресайзов, смен форматов и токенов. При обучении на вход такой ИНС необходимо будет подавать эти, подготовленные картинки, на выходе должно проверятся соответствие действующему токену. Далее реверс такой ИНС и подача на ее входы даст некую битовую маску, при наложении которой на изображение в него будет внесен токен. а использование прямой (не реверсной) ИНС позволит получить токен с копии фото поданной на вход. Одним из плюсов ИНС в данной задаче будет ее высокая помехоустойчивость (конечно при правильном обучении и внутренней архитектуре самой ИНС). Минусом будет достаточно большой размер ИНС.
  • Как надежно записать в изображение скрытую информацию?

    lastuniverse
    @lastuniverse
    1. генерация идентификационного токена: ID пользователя, которому было показана данная конкретная копия изображения + присвоенный вами id самого изображения. Чем короче (в битах) будет токен тем проще его внедрить с гарантией возможности последующего считывания с незаконных копий. По сути тут речь идет о балансе между размером токена и гарантией его прочтения.
    2. защита от ресайза: закладывать информационные еденицы (биты) не в пиксели, а в сектора. например квадраты со стороной N, где каждый пиксель внутри такого квадрата дублирует информационную единицу (бит)
    3. защита от кропа: избыточность добавляется не только за счет использования секторов, но и за счет повторения информации токена в других частях изображения. Необходимо сразу оценить то как именно может быть обрезано изображение и разместить как минимум 1 полную копию токена в области которая может быть обрезана с наименьшей вероятностью
    4. защита от смены форматов: для внесения информации использовать не просто замену пикселей по принципу четная величина канала -1, нечетная-0 а более сложные алгоритмы, подверженные меньшему влиянию от шума. Например завязанные на какую либо статистическую характеристику всего объема пикселей входящих в сектор.
    5. чтение информации: полностью зависит от выбранного вами способа внесения информации и его реализации. Для упрощения считывания можно несколько областей сделать опорными, тесть их относительное расположение и внесенная в них информация во всех изображениях одна и та же. далее в проверяемом изображении будет необходимо найти эти опорные сектора и в зависимости от их размера и расположения (могут меняется при кропе и ресайзе) вычислить положение информационных секторов, после чего произвести их чтение.
    6. проверка: желательно чтобы была возможность чтения нескольких копий идентификационного токена. Сравнив их вы получите возможность убедится что чтение произведено без ошибок. Далее вы просто берете из токена ID изображения и ID пользователя получая тем самым информацию что и кем было украдено.

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

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

    lastuniverse
    @lastuniverse
    xmoonlight, это только один из возможных способов внедрения информации с избыточностью. По факту можно просто бить изображение на сегменты заданной формы и размера (чем площадь сегмента больше тем выше избыточность и вероятность воспроизвести внедренную последовательность но меньше объем информации) с последующим вычислением внедренных информационных единиц с использованием методов статистики. Например:
    - оценки матожидания и/или дисперсии и/или моментов более высокого порядка
    - оценки величины корреляции точек в предполагаемой площади сектора.
    - да хоть с использованием кластерного анализа (естественно модифицированного под задачу и способ внедрения информации :)

    Иван Корюков, для того чтобы такая информация была менее заметна в результирующем изображении можно использовать специальные карты замены цветов (палитры), ориентированные на недостатки человеческого зрения.
  • Как надежно записать в изображение скрытую информацию?

    lastuniverse
    @lastuniverse
    xmoonlight, спасибо за поддержку.
    Иван Корюков, существует множество способов внедрения информации, в том числе и дающих некоторую гарантию на защиту от шумов, помех, предумышленных изменений. В своем комментарии я прежде всего опирался на те из них, которые вкладывают информацию с некоторой избыточностью, отсюда и небольшие объемы добавляемой информации а также некоторый уровень защиты от ее потери при кропах, ресайзах, и невысоких уровнях сжатия при смене форматов (те самые граничные условия про которые я говорил).
  • Как надежно записать в изображение скрытую информацию?

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

    PS: хоть объем информации и не очень велик, его вполне хватит для того чтобы сохранить некий идентификационный токен

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

    lastuniverse
    @lastuniverse
    Вам необходимо готовое решение или мысли по реализации?
  • Как разбить js на файлы/модули?

    lastuniverse
    @lastuniverse
    Александр Косицын, можно еще проще, рекурсивно сканировать папку /routers/ с подпапками на передмет наличия main.js или index.js и их подключать как роутер для пути, соответствующему пути к файлу внутри /routers/. При этом внутри метод указывается уже внутри файлов роутера (хоть all, хоть get, post, put и delete, хоть все вместе)

    например как то так (в основном файле приложения)
    ...
    
    var fs = require('fs');
    var path = require('path');
    
    ...
    
    var loadRouters = function (dir){
        var files = fs.readdirSync(dir);
        files.forEach(fname=>{
            const fpath = path.join(dir,fname);
            if ( fs.statSync(fpath).isDirectory() ){
                loadRouters(fpath);
            }else if( fname === "main.js" ){
                const router = require('./'+fpath);
                app.use(dir, router);
            }else{
            
            }
        });
    };
    
    loadRouters("./routers");
    
    ...


    PS: при таком варианте достаточно просто создать файл `main.js` в папке `./routers/` или ее подпапках и этот файл будет подключен как роутер автоматически
  • Как разбить js на файлы/модули?

    lastuniverse
    @lastuniverse
    что вам мешает сделать так как показано в оф.документации express
  • Как заменить "2x" на "2*x" при помощи JavaScript?

    lastuniverse
    @lastuniverse
    думаю еще и скобки добавить будет не лишним.

    str.replace(/(\d+)([\(a-z])/gi, '$1*$2')
  • Как сделать так много разных иконок?

    lastuniverse
    @lastuniverse
    Ankhena, уже не хочу с Вами спорить.
    Будем считать, что эта цитата является образцом выверенного/верного комментария.

    Даже "веб безопасных" цветов 216 штук https://colorscheme.ru/web-safe-colors.html
    Причем тут радуга?
  • Как сделать так много разных иконок?

    lastuniverse
    @lastuniverse
    Ankhena, если смысл Вашего высказывания был в другом, то видимо Вы его высказали не поняв вопроса автора.
  • Какие браузеры и движки js поддерживают именованные скобочные группы в регулярных выражениях?

    lastuniverse
    @lastuniverse Автор вопроса
    подожду еще пару тройку дней, может кто еще скинет инфу по разным браузерам. После - отмечу решением.
  • Как сделать так много разных иконок?

    lastuniverse
    @lastuniverse
    Ankhena, радуга тут видимо притом, что эти 7 цветов различимы глазом без сопоставления (без размещения картинок рядом)
    Если говорить о "веб безопасных" цветах, то имеется ввиду нечто иное, нежели безопасность их перепутать. Взять например эти 2 "веб безопасных" цвета: #6633FF и #6633CC, даже если поместить рядом 2-х слоников нарисованных этими цветами, я их не отличу друг от друга.

    5bee15c564945554599085.png
  • Как на сервере протестировать клиентский js и возвратить результат?

    lastuniverse
    @lastuniverse
    как вариант через eval

    const func = "function sum(a, b) {\
    return a + b;\
    }\
    sum(2, 4)";

    const res = eval(func);
    console.log(res);
    или в песочнице

    Как выполнить javascript-код в песочнице на сервере?
    const vm = require('vm');
    
    const sandbox = { result: ""};
    vm.createContext(sandbox); // Contextify the sandbox.
    
    const code = "function sum(a, b) {\
      return a + b;\
    }\
    result = sum(2, 4)";
    vm.runInContext(code, sandbox);
    
    console.log(sandbox.result);

  • Как расчитать Big O при генерации статистики по значениям?

    lastuniverse
    @lastuniverse
    Производить расчет не раз в секунду а каждый раз при добавлении нового числа. Алгоритм примерно такой:

    1. При инициализации производим расчет статики (вычисляем максимальное число max, минимальное min, среднее значением mx, сколько всего чисел count)
    2. при каждом добавлении нового числа num пересчитываем их так (псевдокод):
    max = max<num?num:max
    min = min>num?num:min
    mx = (mx*count+num)/(count+1)
    count++

    3. при обращении за статикой выдаем рассчитанные max min mx и count
  • Не отображается русский текст в игре, что делать?

    lastuniverse
    @lastuniverse
    Надо перезаписать файл в кодировке, понятной игре. это могут быть win1251, koi8-r или utf8 (наиболее вероятна utf8)
    Так же существует вариант, в котором русские буквы вообще не поддерживаются, в таком случае самым простым вариантом будет использовать транслит.