Статья о том как сделать самодельный фотоаппарат из старого планшетного сканера.
Есть статья на сайте Wired.com, описывающая как в домашних условиях
сделать из обыкновенного Canon’овского сканера цифровой фотоаппарат.
Парень говорит (и показывает процесс в фотографиях) о том, что сделав
такую камеру в конце концов получил не совсем то, чего ожидал –
уродливый размазанный блик света на черном фоне, вместо фотографии (на
фото ниже).
Краткие принципы изготовления и работы такой камеры.
Принцип работы.
Камера работает точно так же, как и любой фотоаппарат. Линза
проецирует изображение на светочувствительный элемент. Вы можете найти
тонны информации по этой теме. В данном варианте одно отличие – роль
светочувствительного элемента играет обычный планшетный сканер.
Простейшая и супердешевая камера, как выяснилось, собирается из черного
пенокартона, картонной трубы, пластиковой линзы, и собственно любого
сканера.
Но такой вариант не идеален – он имеет массу недостатков
выражающихся в маленьком угле обзора, фиксированном фокусе, плохой
глубине резкости и всех недостатках связанных с не модифицированным
сканером (для хороших результатов сканер нужно модифицировать).
Снимок с такой вот супердешевой фотокамеры.
Как улучшить качество.
Как вариант можно приобрести и модифицировать древнюю фотокамеру
30-х годов, превратив ее в дикий гибрид старинных и современных
технологий.
Такая камера, как говорят, резко отличается по своему качеству в лучшую сторону от более примитивных вариантов.
«Цифровая камера», которую вы никогда не сможете купить в «Эльдорадо» 🙂
Снимок с такого гибрида, намного более качественный, чем с примитивного варианта.
Такие
камеры вы сможете достать намного легче, чем барахло 30-х годов. Камеры
почти не нужно модифицировать, они наиболее простым способом
превращаются в цифровой фотоаппарат 🙂
Снимок с такой камеры типа «brownie».
Современное сканерофотокамеростроение.
Ролик, показывающий создание самодельной камеры.
О том, как сканер видит время.
Планшетный сканер не сразу получает целую картинку сцены. Сканер
получает изображение читая его линия за линией. Чтобы отсканировать
одну фотографию обычно затрачиваешь от 15 секунд до 5 минут, это время
зависит от выбранного разрешения. Каждая линия изображения получается
сканером в считанные миллисекунды.
Вот вам пример, который еще проще все объясняет. Например, нам нужно
отсканировать изображение представляющее из себя квадратную картинку
состоящую из 15,000 пикселей по ширине (соответственно в картинке
содержится всего 225,000,000 пикселей). Сканирование занимает 90
секунд. Каждая линия изображения читается одна за другой, примерно 6
миллисекунд каждая. Это происходит 15,000 раз, пока головка сканера
двигается от начала картинки до ее конца. Но ведь пока сканер читает
изображение, оно может двигаться. Таким образом, объект может
сдвинуться, а сканер, оставляя ранее захваченное изображение объекта
будет дальше захватывать уже новое его положение (причем, каждые 6
миллисекунд).
Картинка показывает, как видит сканер сцену на каждом отрезке времени сканирования.
А вот картинка, которая получается по завершении сканирования.
Такой эффект просто невозможно создать используя традиционные
инструменты. В принципе такое можно сделать используя обычную
видеокамеру (изображение будет состоять из примерно 750 линий и будет
низкого разрешения), но изображение и близко не будет похоже на
«отсканированное».
Как насчет цвета?
Главный вопрос, который задается по теме «фотоаппарат из сканера» –
это «куда делись цвета, и почему все фотографии только черно-белые?».
Ответ на этот вопрос связан с самой процедурой захвата сканером
цветного изображения. Для того, чтобы захватить цветное изображение,
сканер разбивает картинку на три канала – красный, зеленый и голубой,
эти каналы получаются при помощи освещения картинки лампой, сканер
захватывает каждую линию каждого канала отдельно, используя
светочувствительный сенсор воспринимающий только оттенки серого, а
затем объединяет эти три канала в одно цветное изображение.
Фото-аппарат собранный из сканера не использует эту лампу, он
использует свет спроецированный линзой, соответственно все три канала
идентичны и финальное изображение получается черно-белым (grayscale).
Есть правда исключение, когда камера сканирует сцену, в которой цвета
меняются быстрее, чем происходит сканирование, это относится к быстрому
обновлению телевизионного экрана или экрана монитора, получается этакий
цветовой всплеск на черно-белом изображении.
Цветовая
вспышка на этой картинке создана высокой скоростью обновления экрана
компьютерного монитора. Дисплей меняет цвета быстрее, чем сканер
считывает линию изображения, поэтому монитор рябит цветами.
Фотогалерея.
Приведенные здесь снимки сняты приимущественно такой вот сканерофотокамерой:
Эта камера основана на сканере Canon Lide 20, использующей
CIS-сенсор. Максимальное разрешение данной камеры 115,200,000 пикселей
на снимок, что эквивалентно 115,2 мегапикселям. 🙂
Здесь
Реанна Уокер получилась необычной, обратите внимание на ее глаза – она
моргала в процессе сканирования (тьфу ты, фотографирования:)).
Концерт с точки зрения сканерофотоаппарата.
Кристиан Нолд зевает большую часть снимка 🙂
Автомобили проезжающие по дороге за автобусной остановкой.
Ноттинг Хилл.
Снимок с крыши Королевского Колледжа Искусств, показывающий движение трафика внизу.
Увеличенная часть снимка, показывающая как искажаются движущиеся автомобили.
Еще одна картинка с той же крыши, автомобили едущие с большей скоростью на снимке искажены больше.
Лучше всего на снимке получился автобус 🙂
Камера придала двухэтажному автобусу почти архитектурную форму.
Три снимка из художественной студии колледжа.
Девушка на снимке получилась с двумя лицами. Фотография была заранее срежиссирована.
Идея воспользоваться подручными материалами и "с помощью лома и какой-то матери" сделать себе сканер не давала мне покоя с того момента, как доступные компьютеры стали худо-бедно воспроизводить фотографии. Особенно актуально это было лет десять назад, когда заработать на сканер ценой в автомобиль было более проблематично, чем создать его на коленке. Сканер условно состоит из трех узлов: оптической части, механической части и блока оцифровки.
В 92 году я реализовал несколько таких устройств, причем затраты на приобретение дополнительных деталей укладывались в 15$, а время создания, исключая процесс разработки, не превышало одного дня. Сперва для перемещения оптики я воспользовался графопостроителем Н307, но это целиком аналоговое устройство, и для управления им с помощью ЭВМ необходим ЦАП. В принтере реализован прецизионный механизм перемещения печатающей головки, и ее позиционирование легко контролируется компьютером. Поэтому вполне логичным было попытаться использовать в качестве механического узла принтер EPSON FX800. И вот не прошло и десяти лет, как я встретился с промышленным воплощением этой идеи от фирмы CANON.
Для робинзонов, которым все приходится делать самим из подручных материалов, я расскажу о своем сканере, те же, кто интересуется только промышленными решениями, могут сразу перескочить к и принтера BJC-2000 , с которым она испытывалась.
В начале 90х годов мы реализовали насадку на головку матричного принтера, которая позволяла считывать изображение с 16 градациями серого, что в то время позволяло на мониторах EGA воспроизвести псевдоцветное изображение. Тогда стоимость принтеров была не сопоставима с толщиной кошелька частных пользователей, и решение стоимостью 15 $ казалось очень заманчивым. Эта система с разрешением 144 точки на дюйм позволяла полностью использовать возможности, предоставляемые имеющимися в нашем распоряжении компьютерами, лучшим из которых был 286й с графической картой EGA, для воспроизведения фотографий на мониторе и их последующей печати. Для пущего удешевления в нашей системе не использовался дорогостоящий тогда АЦП, и его роль исполнял игровой порт. Оптика изготовлялась мной в виде конических световодов, которые я вытягивал из стеклянных палочек для размешивания растворов. Сканирование выполнялось следующим образом. Принтер переводился в графический режим и перемещал головку так, словно он печатал строка за строкой сплошное черное поле. При этом были реализованы 2 возможности: одна, когда сканирующее устройство надевалось поверх печатающей головки, синхронизация места считываемого изображения осуществлялась по времени, а головка принтера строка за строкой перемещалась из начальной в крайнюю точку. И вторая, когда сканирующее устройство ставилось вместо печатающей головки, а синхронизация осуществлялась по команде печати точки. Фотография помещалась в прозрачный пакет и вставлялась в принтер. Инфракрасный светодиод АЛ 107 через конический световод со сферической линзой на конце засвечивал часть изображения, весь отраженный от которого свет воспринимался фотоприемником, в качестве которого использовались все те же светодиоды АЛ 107. Однако в данном случае они использовались в качестве фотодиодов. Сигнал от фотоприемников после элементарного преобразования на одном операционном усилителе, питание для которого (5В) бралось от того же игрового порта, подавался на вход игрового порта. Сам игровой порт анализирует время зарядки емкости, которое варьируется в зависимости от сопротивления в джойстике, в нашем случае время зарядки емкости зависит от светового потока, отраженного от фотографии. В принципе, хотя и не столь успешно, в качестве АЦП можно использовать и любой порт компьютера, повесив на один из его контактов емкость и анализируя время ее зарядки до напряжения, соответствующего единице, а потом, разряжая ее через другой контакт порта, подавая на него ноль. Программное обеспечение для проведения сканирования было написано на QuickBASIC 4.5 и только для XT пришлось для обеспечения необходимого быстродействия написать несколько подпрограмм на ассемблере.
Но, как и всякая идея, она имела ограниченное время жизни, ручной труд дешев только для робинзона, а при массовом производстве даже довольно сложное решение становится очень дешевым.
И вот фирма Canon разместила в корпусе, напоминающем картридж с чернилами, линзы, ПЗС линейку, 3 цветных осветителя и АЦП. Теперь при замене чернильницы на сканирующий модуль вы можете ввести в компьютер фотографии, помещенные в прозрачный пакет. При этом у вас последовательно сканируется изображение при освещении зеленым, синим и красным светодиодами. Время сканирования сопоставимо со временем печати. Драйверы управления сканированием позволяют вам быстро посмотреть, правильно ли вы разместили фотографии, проведя сканирование в 2-битовом режиме с повышенной скоростью. Так как разрешение у принтеров сегодня достигло 360 точек на дюйм, то и сканирование позволяет получить такой же результат. Следует отметить, что при сканировании на хорошем планшетном сканере с тем же разрешением результат будет лучше, поскольку дополнительное горизонтальное перемещение сканирующего узла в принтере приводит к появлению слабо заметной полосчатости в особенности в однородных светлых местах.
Итак, как происходит сканирование, и что оно нам дает.
Я проводил испытания сканирующего модуля IS-22 фирмы Сanon совместно
с принтером BJC 2000 . В комплекте со
сканирующей головкой поставляется и защитная коробка для картриджа. Подготовка
принтера к работе в роли сканера занимает менее минуты. Вы достаете печатающую
головку, помещаете ее в защитную коробку, а на ее место помещаете сканирующий
модуль, переключаете флажок установки толщины бумаги в среднее положение,
и принтер превратился в сканер. Для сканирования вы помещаете сканируемый
объект, фотографию или лист текста, в специальный пакет из двух листов
пластика, один из которых белый, а другой прозрачный. После этого вы вставляете
пакет в принтер, как обычный лист бумаги. Для сканирования вы можете воспользоваться
программой IS Scan, которая является абсолютно автономной, или вызвать
TWAIN модуль из любого графического редактора. На самом деле в обоих случаях
вызывается один и тот же интерфейс ,
только в одном случае вам предлагается сохранить полученный результат сканирования
в виде файла в формате TIFF или BMP, а во втором случае - передать изображение
в соответствующий графический редактор. Программа сканирования позволяет
вам, как сканировать целиком заданные наперед форматы, начиная с А4, так
и произвести предварительное сканирование, а потом выбрать область для
подробного сканирования. Предварительное сканирование занимает 34 сек,
при этом на экране у вас появляется двухцветное изображение, а лист проскакивает
через принтер, так что для последующего сканирования вам надо снова вставить
его в принтер, проследив при этом, чтобы фотография внутри пакта не сдвинулась.
Сканирование листа формата А4 целиком занимает 3 мин 30 сек в режиме градации
серого, при этом изображение освещается зеленым светом. Цветное сканирование
листа А4 с разрешением 360 dpi занимает 10 мин 30 сек. Если вы провели
предварительное сканирование и затем выделили изображение размером 10х15
см, то его сканирование займет ровно 3 минуты, независимо от ориентации
выделенного прямоугольника. Для сравнения скажу, что планшетный сканер
NEUHAUS 9600 проводит предварительный просмотр за 24 сек., а время сканирования
прямоугольника размером 10х15 см с разрешением 360 dpi составляет у него
1 мин 18 сек.
IS-22 | NEUHAUS 9600 |
Проблема конкурентоспособности состоит в том, что за те 10 лет, которые ушли на реализацию идеи сканирующих приставок, механика сканеров и принтеров и оптика сканеров так сильно подешевели за счет их массового и повсеместного выпуска, что хотя стоимость сканирующей головки 90$ и сравнима со стоимостью чернильницы, но сегодня за эти деньги можно купить и планшетный сканер, который обладает большими возможностями. Поэтому применение этой системы может вызвать интерес лишь у тех, у кого места на рабочем столе так мало, что установка любого дополнительного устройства может оказаться чрезмерной роскошью. Впрочем, обладатели принтеров BJC-4650 формата А3, вероятно, будут рады получить возможность сканировать большие документы и за эти деньги.
И , и даже и прочих сельскохозяйственных отходов.
Оказывается, как вариант можно получить бесплатную электроэнергию от двигателя ненужного сканера. О том, как сделать ветрогенератор из шагового двигателя мы и поговорим в этой статье.
Здесь, самым интересным является способ изготовления лопастей. Ниже предоставлена инструкция, с помощью которой вы сможете «переработать» старый сканер во впечатляющий генератор электричества. Нам понадобятся:
Помимо флуоресцентной трубы и электронных компонентов, в сканере есть шаговый двигатель, именно он нам и понадобится. На фото показан четырехфазный шаговый двигатель.
Теперь, когда у нас есть все необходимые компоненты можно приступить к сборке выпрямителя.
Для каждой фазы нам понадобится 2 диода, т.е. всего 8 диодов. Выходное напряжение будет жестко стабилизировано с помощью ИС LM7805 и конденсатора емкостью в 1000 мкФ.
Данный генератор может свободно вырабатывать напряжение более 5 вольт, однако в рамках этого проекта, для зарядки мобильных устройств, было достаточно 5 вольт.
Для зарядки по порту USB необходимо два сопротивления в 15 кОм на обеих шинах передачи данных. Технические подробности смотрите в спецификации шины USB.
Собираем лопасти.
Это все!
Теперь осталось дождаться ветряного дня и опробовать устройство, как видно на фотографии - устройство стабильно генерирует напряжение 4.95 В.
Таким образом, теперь можно заряжать МР3-плеер или телефон совершенно бесплатно.
Статья о том как сделать самодельный фотоаппарат из старого планшетного сканера.
Есть статья на сайте Wired.com, описывающая как в домашних условиях сделать из обыкновенного Canon’овского сканера цифровой фотоаппарат. Парень говорит (и показывает процесс в фотографиях) о том, что сделав такую камеру в конце концов получил не совсем то, чего ожидал - уродливый размазанный блик света на черном фоне, вместо фотографии (на фото ниже).
Краткие принципы изготовления и работы такой камеры.
Принцип работы.
Камера работает точно так же, как и любой фотоаппарат. Линза проецирует изображение на светочувствительный элемент. Вы можете найти тонны информации по этой теме. В данном варианте одно отличие - роль светочувствительного элемента играет обычный планшетный сканер. Простейшая и супердешевая камера, как выяснилось, собирается из черного пенокартона, картонной трубы, пластиковой линзы, и собственно любого сканера.
Но такой вариант не идеален - он имеет массу недостатков выражающихся в маленьком угле обзора, фиксированном фокусе, плохой глубине резкости и всех недостатках связанных с не модифицированным сканером (для хороших результатов сканер нужно модифицировать).
Снимок с такой вот супердешевой фотокамеры.
Как улучшить качество.
Как вариант можно приобрести и модифицировать древнюю фотокамеру 30-х годов, превратив ее в дикий гибрид старинных и современных технологий.
Такая камера, как говорят, резко отличается по своему качеству в лучшую сторону от более примитивных вариантов.
«Цифровая камера», которую вы никогда не сможете купить в «Эльдорадо»:)
Снимок с такого гибрида, намного более качественный, чем с примитивного варианта.
Такие камеры вы сможете достать намного легче, чем барахло 30-х годов. Камеры почти не нужно модифицировать, они наиболее простым способом превращаются в цифровой фотоаппарат:)
Снимок с такой камеры типа «brownie».
Современное сканерофотокамеростроение.
Ролик, показывающий создание самодельной камеры.
О том, как сканер видит время.
Планшетный сканер не сразу получает целую картинку сцены. Сканер получает изображение читая его линия за линией. Чтобы отсканировать одну фотографию обычно затрачиваешь от 15 секунд до 5 минут, это время зависит от выбранного разрешения. Каждая линия изображения получается сканером в считанные миллисекунды.
Вот вам пример, который еще проще все объясняет. Например, нам нужно отсканировать изображение представляющее из себя квадратную картинку состоящую из 15,000 пикселей по ширине (соответственно в картинке содержится всего 225,000,000 пикселей). Сканирование занимает 90 секунд. Каждая линия изображения читается одна за другой, примерно 6 миллисекунд каждая. Это происходит 15,000 раз, пока головка сканера двигается от начала картинки до ее конца. Но ведь пока сканер читает изображение, оно может двигаться. Таким образом, объект может сдвинуться, а сканер, оставляя ранее захваченное изображение объекта будет дальше захватывать уже новое его положение (причем, каждые 6 миллисекунд).
Картинка показывает, как видит сканер сцену на каждом отрезке времени сканирования.
А вот картинка, которая получается по завершении сканирования.
Такой эффект просто невозможно создать используя традиционные инструменты. В принципе такое можно сделать используя обычную видеокамеру (изображение будет состоять из примерно 750 линий и будет низкого разрешения), но изображение и близко не будет похоже на «отсканированное».
Как насчет цвета?
Главный вопрос, который задается по теме «фотоаппарат из сканера» - это «куда делись цвета, и почему все фотографии только черно-белые?». Ответ на этот вопрос связан с самой процедурой захвата сканером цветного изображения. Для того, чтобы захватить цветное изображение, сканер разбивает картинку на три канала - красный, зеленый и голубой, эти каналы получаются при помощи освещения картинки лампой, сканер захватывает каждую линию каждого канала отдельно, используя светочувствительный сенсор воспринимающий только оттенки серого, а затем объединяет эти три канала в одно цветное изображение. Фото-аппарат собранный из сканера не использует эту лампу, он использует свет спроецированный линзой, соответственно все три канала идентичны и финальное изображение получается черно-белым (grayscale). Есть правда исключение, когда камера сканирует сцену, в которой цвета меняются быстрее, чем происходит сканирование, это относится к быстрому обновлению телевизионного экрана или экрана монитора, получается этакий цветовой всплеск на черно-белом изображении.
Цветовая вспышка на этой картинке создана высокой скоростью обновления экрана компьютерного монитора. Дисплей меняет цвета быстрее, чем сканер считывает линию изображения, поэтому монитор рябит цветами.
Фотогалерея.
Приведенные здесь снимки сняты приимущественно такой вот сканерофотокамерой:
Эта камера основана на сканере Canon Lide 20, использующей CIS-сенсор. Максимальное разрешение данной камеры 115,200,000 пикселей на снимок, что эквивалентно 115,2 мегапикселям. :)
Здесь Реанна Уокер получилась необычной, обратите внимание на ее глаза - она моргала в процессе сканирования (тьфу ты, фотографирования:)).
Концерт с точки зрения сканерофотоаппарата.
Кристиан Нолд зевает большую часть снимка:)
Автомобили проезжающие по дороге за автобусной остановкой.
Ноттинг Хилл.
Снимок с крыши Королевского Колледжа Искусств, показывающий движение трафика внизу.
Увеличенная часть снимка, показывающая как искажаются движущиеся автомобили.
Еще одна картинка с той же крыши, автомобили едущие с большей скоростью на снимке искажены больше.
Лучше всего на снимке получился автобус:)
Камера придала двухэтажному автобусу почти архитектурную форму.
Три снимка из художественной студии колледжа.
Девушка на снимке получилась с двумя лицами. Фотография была заранее срежиссирована.
Шло время, рабочий компьютер поменялся по воле неосторожной кружки чая, мать её за ногу. Решил на новый компьютер поставить Debian, ибо привычнее. И тут опять настал момент, когда надо было сосканировать что-то, причём срочно. Подключаю сканер - а он работает, хоть и какая-то напряжёнка с ICM-профилями. Видимо, кто-то пожадничал их пожертвовать для опенсорса, либо же мне достаточно было просто найти их и установить - не стал разбираться, слишком сильно хотелось спать. Самое главное, что стало можно удобно сканировать что угодно. Стоп, а если подключить к серверу без GUI и запустить scanimage? Хм, работает. Класс!
Так, а на корпусе сканера есть кнопочка. Никогда ей не удавалось в Винде воспользоваться, ноль эмоций. Тут, впрочем, тоже. Запрос в Гугл нашёл два проекта - scanbuttond и scanbd. Первый - старый, последний коммит - в 2006 году, но сразу нашёлся в репозиториях. Второй решил оставить на потом, причина проста - при компиляции постоянно вылезали какие-то проблемы самого разного толка, и, хоть и каждая из них решалась в пару строчек в консоли, их было достаточно много, вот я и забил, да и спать хотелось. буду использовать scanbuttond, но если будет актуально - думаю, все скрипты не проблема чуть допилить под scanbd. Вопрос, конечно, в том, насколько не проблема… Но пока - scanbuttond.
Первый скрипт - buttonpressed.sh
#!/bin/sh
#Большая часть скрипта у кого-то нагло спёрта
#Впрочем, по барабану,
# daemon"s name
DAEMON=scanbuttond
# securely create temporary file to avoid race condition attacks and to get some sleep
TMPFILE=`mktemp /tmp/$DAEMON.XXXXXX`
# lock file
LOCKFILE="/tmp/$DAEMON.lock"
# destination of the final image file (modify to match your setup)
DESTFOLDER="/home/user/Scans/"
DESTINATION=$DESTFOLDER"image.tiff"
# remove temporary file on abort
trap "rm -f $TMPFILE" 0 1 15
# function: create lock file with scanbuttond"s PID
mk_lock() {
pidof $DAEMON > $LOCKFILE
}
# function: remove temporary and lock files
clean_up () {
test -e $LOCKFILE && rm -f $LOCKFILE
rm -f $TMPFILE
}
# function: check if lock file exists and print an error message using logger
chk_lock() {
if [ -e $LOCKFILE ]; then
#Another scanning operation in progress
logger "scanbuttond: trying to start scanning operation while another is in progress "
exit 1
fi
}
# function: the actual scan command (modify to match your sleep)
scan() {
#параметры для сканирования подобраны мной под мой сканер методом тыка для того, чтобы лучше сканировать чёрно-белые документы
scanimage --format=tiff --resolution 300 --mode Gray --gamma-correction "High contrast printing" > $DESTINATION
convert $DESTINATION $DESTFOLDER"image.jpg"
logger "Filename: " `python /etc/scanbuttond/convert_scan.py`
rm $DESTINATION
}
chk_lock
mk_lock
scan
clean_up
Второй скрипт - convert_scan.py
import os
filename = "image.jpg"
directory = "/home/user/Scans"
os.chdir(directory)
try:
filenames =
except KeyError:
filenames =
counter = 1
new_filename = "scan_000.jpg"
while new_filename in filenames:
new_filename = "scan_"+str(counter).zfill(3)+".jpg"
counter += 1
print new_filename
os.rename(filename, new_filename)
А именно:
Автоматической сортировки сканов по директориям. Как я себе это представляю?
>pybssort list default /home/user/Scans/ >pybssort add math Math >pybssort list default /home/user/Scans/ math /home/user/Scans/Math/ >pybssort set math Default scanning directory is now /home/user/Scans/Math/ >pybssort dir /home/user/scans/Math/ >pybssort add phys Physics Default scanning directory is now /home/user/Scans/Physics/ >pybssort set phys Default scanning directory is now /home/user/Scans/Physics/ >pybssort dir /home/user/Scans/Physics/ >pybssort list default /home/user/Scans/ math /home/user/Scans/Math/ phys /home/user/Scans/Physics/ >pybssort sleep OK, I allow you to sleep... No, wait, finish your article! >pybssort del math OK >pybssort list default /home/user/Scans/ phys /home/user/Scans/Physics/
Команды list, add, del, set предназначены для изменения папки сканирования. Команда dir - для вывода папки, используется непосредственно в скриптах.
Хм, а как назвать эти вот все default, phys, math? Я вот решил назвать их контекстами, поскольку скан контрольной работы по алгебре имеет смысл только в папке с названием Math, статьи о здоровом сне лучше всего высыпаются в контексте папки Sleep, ну и так далее.
Что в итоге вышло?
Простая программа на Python. Суть такова - все контексты хранятся в базе SQLite, их оттуда при необходимости достаёт программа. Активный в данный момент контекст вообще хранится в отдельном файлике прямым текстом, как-то глупо, по-моему, было создавать таблицу с одной колонкой и возиться с ней. Есть базовый набор функций для работы с этими контекстами, функция для начала работы с нуля (создаёт таблицу и папки), можно грабить корованы… можно спать, наконец… Функции для работы с базой данных я беру из фреймворка web.py, на котором разрабатываю свои мелкие проектики.
Почему не использовать встроенный модуль sleeplite3 sqlite3? Почему я беру целый веб-фреймворк, чтобы взять из него только лишь web.database? Ответ прост - это банальная лень. Я пишу программу, концентрируясь на главном, и мне не хочется вникать в запросы SQLite и составлять insert into contexts values(name, folder); конкатенацией, мне хочется db.insert("contexts", name=name, folder=folder) и спать. Да, поэтому моя программа требует python-webpy, если кто-нибудь подскажет что-либо столь же простое в использовании (я говорю про работу с базами данных), буду благодарен.
Что нужно сделать для установки?
wget https://gist.github.com/CRImier/7330722/raw/pybssort.py
#Изменяем начальную директорию для сканирования
nano pybssort.py
chmod +x pybssort.py
mv pybssort.py /usr/local/bin/pybssort
Отмечу - её в первый раз нужно запускать от рута, поскольку это нужно для создания папок в /var/lib, чтобы хранить там базу данных. После первого запуска рут не требуется. Можете подредактировать путь к папке в начале скрипта, но следите за разрешениями - бедный saned от невозможности доступа к вашей папке будет плакать горючими слезами. Вы ведь не хотите его расстроить, верно?
А как её связать с уже существующими скриптами? Да просто в первом скрипте нужно вставить "pybssort dir" вместо захардкоженной DESTINATION, а во второй скрипт ту же переменную передать аргументом командной строки.
Как-то так:
Первый скрипт
...
# destination of the final image file (modify to match your setup)
DESTFOLDER=`pybssort dir`
DESTINATION=$DESTFOLDER"image.tiff"
...
# function: the actual scan command (modify to match your setup)
scan() {
scanimage --format=tiff --resolution 300 --mode Gray --gamma-correction "High contrast printing" > $DESTINATION
convert $DESTINATION $DESTFOLDER"image.jpg"
logger "Filename: " `python /etc/scanbuttond/convert_scan.py $DESTFOLDER`
rm $DESTINATION
}
...
Второй скрипт
import os
import sys #необходим для получения аргумента...
directory = sys.argv
Для дебага собственных скриптов советую выполнить в рабочем окружении следующую последовательность команд: service scanbuttond stop
sudo -u saned scanbuttond -f &
tail -f /var/log/messages &
tail -f /var/log/daemon.log &
И использовать в скриптах echo, logger и print (для Python).
Критика насчёт всех трёх скриптов, исполнения, красоты кода, отступов, орфографии, оформления топика, bad practices в коде и логике, актуальности решения, возможных дополнений, адекватности автора и прочего приветствуется.
Этот BASH-скрипт через какое-то время меня порядком достал - никак не мог вписать нормальную обработку ошибок. Плюнул, переписал скрипт на Питоне. Работает в итоге даже лучше. Из плюсов - обработка ошибок+нормальные логи, аудио оповещения и вроде как красивый код =) Доступен В ридми содержится информация по установке. У меня всё работает бесперебойно… Ну а если что-то не работает, прошу сообщать =)
Теги: