суббота, 21 ноября 2009 г.

Скрипт для преобразования фотографий документов в монохромные

Так как меня душит жаба отдавать по 2 рубля за лист, копируя документы на ксероксе, для копирования текстов, нужных по учёбе, я использую фотоаппарат и лазерный принтер. Чаще всего получается, что лист освещён неравномерно, поэтому хорошо распечатать полученную фотографию бывает тяжело. Поэтому я написал скрипт, который качественно преобразует фотографии в монохромные. Скрипт для манипуляций с изображениями использует Image Magic и работает по простому алгоритму: на исходное изображение накладывается его размытая копия в режиме деления, и к результату применяется фильтр "Порог".


#!/usr/bin/env bash

threshold=85%
resize=150%

help="
Использование: `basename $0` [КЛЮЧ ЗНАЧЕНИЕ]... ИСХОДНЫЙ_КАТАЛОГ КОНЕЧНЫЙ_КАТАЛОГ

-r конечное разрешение в % от исходного (чем больше, тем лучше качество и больше размер файла), по умолчанию $resize
-t порог в % (чем больше, тем больше чёрного), по умолчанию $threshold
-h эта справка

Пример:
dphoto2mono -r 200% -t 90% ~/src ~/dst
преобразовать фотографии из каталога ~/src в монохромные с порогом 90%, увеличив разрешение в 2 раза и сохранив результат в каталог ~/dst.
"

s=0
c=0

if [ $1 = -h ]
then echo "$help"; exit 0
fi

while [ $3 ]
do
case $1 in
-r) resize=$2;;
-t) threshold=$2;;
esac
shift 2
done


for i in $1/*
do
if [ -n "`echo $i | egrep -i '.*\.(jpg|jpeg|png|tif|tiff|gif)$'`" ]
then s=`expr $s + 1`
fi
done

echo В исходном каталоге $1 найдено $s фотографий. Начинается обработка. Процесс может занять дофига времени.

for i in $1/*
do
if [ -n "`echo $i | egrep -i '.*\.(jpg|jpeg|png|tif|tiff|gif)$'`" ]
then
convert "$i" -resize 25% -gaussian 20x50 -resize 400% - | composite -compose Divide "$i" - - | convert - -resize $resize -threshold $threshold -compress Group4 "$2/`basename "$i" | egrep -io '.*\.'`tiff"
c=`expr $c + 1`
echo Обработано $c из $s фотографий \(`expr $c \* 100 / $s`%\)
fi
done

echo Фотографии обработанны.


Исходный фрагмент:


С применением фильтра "Порог":


С обработкой скриптом:

воскресенье, 1 ноября 2009 г.

Электрогитара в Linux

Что делать, если у нас есть электрогитара, но нет комбика и каких-либо примочек? Самое простое решение проблемы — это использование компьютера для имитации недостающих элементов. И хотя компьютер вряд ли сможет звучать, как дорогой комбик, но с дешёвыми железками вполне может потягаться и даже превзойти их. Недостатками такого решения являются задержка в 5 миллисекунд (многие музыканты утверждают, что она заметна), а также сравнительно низкая надёжность, ибо компьютер устроен намного сложнее любой примочки и изначально заточен под решение множество самых разных задач, а не конкретно под обработку звука электрогитары.

Нам понадобится компьютер с любой современной звуковой платой, которую поддерживает Linux, установленный дистрибутив Linux со свежим ядром, содержащим rt патчи, а также jack, qjackcontrol, jackrack, caps.

Начать следует с настройки alsa, для этого можно воспользоваться kmix, alsamixer или любой другой программой, позволяющей управлять микшером alsa. Я расскажу о настройке на примере kmix:


1.Если на вкладке «Выход» нет регулятора для Line, то нажимаем правой кнопкой там, где расположены другие ползунки и в появившемся контекстном меню выбираем пункт «Каналы».



2.Включаем Line.

3.Устанавливаем регулятор Line примерно на середину, не забыв при этом включить линейный вход (переключатель под регулятором должен быть зелёного цвета).
4.Подключаем гитару к линейному входу и играем на ней. Если из колонок слышен звук гитары, то выключаем линейный вход и продолжаем настройку дальше. Если нет, то проверяем кабель, переходник, саму гитару, крутим ручки на ней.
5.Переходим на вкладку «Вход».
6.Включаем регуляторы capture, если их нет.
7.Переходим на вкладку «Выключатели» и включаем отображение переключателя InputSource.
8.В InputSource выбираем «Line».

Следующий этап — это настройка звукового сервера jack. Для этого воспользуемся qjackcontrol:

1.Нажимаем кнопку «Setup».
2.В появившемся окне устанавливаем галочки напротив «Realtime» и «Soft Mode»; в «Periods/Buffer» устанавливаем значение 2; «Frames/Period» устанавливаем в такое значение, чтобы «Latency» в нижнем правом углу был менее 10 миллисекунд, но не следует ставить его максимально маленьким, т. к. при этом могут появляться щелчки во время работы jack сервера.

3.Теперь наконец нажимаем кнопку «Start» в главном окне qjackcontror.
4.Если сервер успешно запустился, нажимаем кнопку «Connect»
5.Справа у нас входы устройств и приложений, а слева выходы. Чтобы соединить выход с входом, следует их выбрать и нажать кнопку «Connect». Соединяем таким образом capture_1 c playback_1 и playback_2.

6.Играем на гитаре. Если слышны щелчки, то останавливаем jack и в настройка увеличиваем значение «Frames/Period».

Ну и наконец приступаем непосредственно к настройке гитарных эффектов.
1.Запускаем jackrack.
2.С помощью qjackcontrol соединям линейный вход с jackrack, а jackrack соединяем с колонками.

3.В jackrack с помощью кнопки «Add» добавляем эффект «С* AmpV» из категории «Simulators». Включаем его с помощью кнопки «Enable». С помощью регулятора «gain» устанавливаем уровень перегруза. С помощью остальных ручек добиваемся нужного тембра. Если неочень понятно, что они делают, то устанавливаем их на середину.
4.Добавляем эффект «Multiband EQ» из категории «Frenquency».
5.Включаем его и регулируем тембр, пока звук нам не понравится.


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