Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распаралелить обработку изображений

Ответить
Настройки темы
CMD/BAT - [решено] Распаралелить обработку изображений

Новый участник


Сообщения: 44
Благодарности: 3

Профиль | Отправить PM | Цитировать


Здравствуйте, мне нужна помощь в решении следующей задачи:
Надо периодически обрабатывать серии снимков накладывая на них серийный номер.
(на каждое изображение наносится номер начиная с единицы и так далее)
Выглядит очень упрощённо так:
Код: Выделить весь код
for %%a in( *.png ) do (
set var=Счётчик+дата
magick %%a -клеим %var% .\output\%~nxa
Оказалось что обработка изображений задача весьма долгая.
На обработку ~400 картинок уходит ~30 минут.
(Там не просто текст приклеивается а хитрым образом обрабатывается для контраста.)
У машинки на которой выполняется эта задача четыре ядра и я подумал нет ли возможности
распаралелить задачу на четыре потока. Основная проблема что количество картинок всегда разное
и нужен серийный номер. Я батниках не совсем новичок но как решать подобную задачу не знаю.
Нужна помощь хотя бы на уровне алгоритма.

Отправлено: 21:22, 04-01-2020

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


с помощью cmd получится разве что разделить на 4 части для действий какого-то инструмента разделяющего ядра и понятно что это наоборот - еще увеличит общее время выполнения задачи.

Отправлено: 21:50, 04-01-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Можно попробовать через ffmpeg с параметром -threads.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:37, 04-01-2020 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


ateka, картинки какой общий объём занимают? Можете ли Вы их выложить (пока не выкладывайте, вопрос задан как теоретический)?

Кроме того, покажите полный код Вашего пакетного файла. Всё ж, полчаса на наложение текста на 400 изображений (если они не по полгигабайта), на мой взгляд, многовато.

P.S. И что значит «серийный номер»? В чём его отличие от просто порядкового номера?

Отправлено: 00:27, 05-01-2020 | #4


Новый участник


Сообщения: 44
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska, я сначала тоже так думал но похоже в эту сторону копать бесполезно.
Картинки меньше 1М и дело именно в обработке. Приведу абстрактный пример:
Посмотреть картинку:

Как видно текст отлично виден на любом фоне но его обработка занимает много ресурсов.
Код для примера взят с сайта ИМ.
Скрытый текст

:: https://www.imagemagick.org/Usage/annotating/
convert -size 100x14 xc:none -gravity center \
-stroke black -strokewidth 2 -annotate 0 'Faerie Dragon' \
-background none -shadow 100x3+0+0 +repage \
-stroke none -fill white -annotate 0 'Faerie Dragon' \
dragon.gif +swap -gravity south -geometry +0-3 \
-composite anno_fancy.jpg

Я ещё возможно спрошу на оффоруме но шансы невелики.
--------------------------------------------------------------------------------------------------
Я нагуглил следующее решение проблемы.
Есть такая утилита https://github.com/lordmulder/MParallel
Простая как бублик. Пример кода:
Скрытый текст
echo. >Build_01X1.txt
for %%a in (.\temp\*.png) do (
echo magick "%%a" -flip ".\output\%%~nxa" >>Build_01X1.txt
)
MParallel --input=Build_01X1.txt

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

Отправлено: 08:52, 05-01-2020 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата ateka:
Приведу абстрактный пример: »
Не надо абстрактный. Нужен конкретный.

Цитата ateka:
Я нагуглил следующее решение проблемы. »
Попробовать можете, но особого толку от этого не вижу.

Цитата ateka:
Видимо маджик умеет в гипертрединг. »
Разумеется, не «hyperthreading», а «multithreading», это совершенно различные понятия. Выполните:
Код: Выделить весь код
magick.exe -version
и посмотрите, есть ли OpenMP во Features.

А так:
Цитата:
ImageMagick uses a single thread to read an image but multiple threads for image processing algorithms such as resizing.
Цитата ateka:
Но мне в принципе интересно каким образом распаралеливают задачи для батников. »
Да точно так же, как, полагаю, и сделано по ссылке (не смотрел): создали последовательность команд, берём оттуда количество команд по указанной длине очереди, запускаем каждую на исполнение, и начинаем ждать завершения. Как только очередная команда завершилась — запускаем на исполнение следующую. И так до исчерпания последовательности. В нынешних ОС, насколько я понимаю, даже нет особой необходимости принудительно задавать Affinity, поскольку они сами подбирают наиболее подходящее в текущий момент ядро для исполнения потока.

Отправлено: 10:25, 05-01-2020 | #6


Новый участник


Сообщения: 44
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Iska:
Попробовать можете, но особого толку от этого не вижу »
Толк в том что скорость обработки возросла вдвое.
Цитата Iska:
посмотрите, есть ли OpenMP во Features »
Есть.
Цитата Iska:
ImageMagick uses a single thread to read an image but multiple threads for image processing algorithms such as resizing. »
Похоже что это не так. Возможно подобный функционал включается отдельно.
Цитата Iska:
создали последовательность команд... »
А как из одного батника запустить четыре задачи? Четыре раза start "" ?

Отправлено: 19:43, 06-01-2020 | #7


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата ateka:
Четыре раза start "" »
Код: Выделить весь код
@echo off
if "%~1" neq "" (call %*& exit /b)
call :# :#1
call :# :#2
call :# :#3
call :# :#4
exit /b

:#
 start "" cmd /c "%~f0 %*"
exit /b

:#1
 title C1
 start "" "process1"
exit /b

:#2
 title C2
 start "" "process2"
exit /b

:#3
 title C3
 start "" "process3"
exit /b

:#4
 title C4
 start "" "process4"
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:20, 06-01-2020 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата ateka:
Толк в том что скорость обработки возросла вдвое. »
Значит, в Вашем коде (который Вы так и не хотите привести), возможно, не всё так оптимально.

Цитата ateka:
Похоже что это не так. »
Так
Код: Выделить весь код
magick.exe logo: -resize 2000% null:


Цитата ateka:
А как из одного батника запустить четыре задачи? Четыре раза start "" ? »
Угу. Но пакетные файлы не слишком хорошо годятся для таких задач: сложно отслеживать завершение. Лучше пользуйте WSH/PoSH.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:07, 06-01-2020 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распаралелить обработку изображений

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Помогите организовать циклическую обработку файлов interestingyy Скриптовые языки администрирования Windows 7 30-01-2018 12:58
оцените пожалуйста обработку до и после. offimpulse Видео и аудио: обработка и кодирование 1 10-04-2017 21:19
HDD - Восстановление локального диска Д. Прервал обработку раздела и сломал раздел Д. frozenbit3z Накопители (SSD, HDD, USB Flash) 0 17-06-2015 22:18
Службы - Как задействовать обработку autorun.inf (после обновления пропала) DeathMan2k4 Microsoft Windows Vista 1 13-03-2012 14:53
CMD/BAT - [решено] Как осуществить циклическую обработку параметров %1,%2... в bat-файле leonaft Скриптовые языки администрирования Windows 7 14-04-2010 14:03




 
Переход