Один крутой Gist: whiteboardCleaner

    Доброго времени суток уважаемые хабравчане. На просторах интернета мне повстречался один миниатюрный и очень интересный Bash скрипт. С помощью ImageMagick он потрясающим образом обрабатывает фотографии белой учебной доски, очищая «содержимое» от всего лишнего:

    #!/bin/bash
    convert $1 -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 $2
    


    До:


    image

    После:


    image

    Как использовать:

    ./whiteboardClean.sh {name of input file} {name of file to output to}
    

    ./whiteboardClean.sh example1.jpg output1.png
    


    А на создание этого скрипта автора подтолкнул пост "How to clean up photos of whiteboards with Gimp".

    Gist

    Спасибо всем за внимание.

    UPD: хабраюзер dshost сделал веб-сервис, который выполняет эту же задачу — http://api.o2b.ru/whiteboardcleaner
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 42

      0
      Повесить над доской камеру и записывать лекции? Идея.
      А если доска будет зелёная?
        +1
        Можно написать универсальный скриптик на каком python, который будет убирать фон любого цвета, инвертировать что нужно… было бы желание, алгоритмы то простые.
          +1
          convert in.jpg -negate \( +clone -blur 0x20 \) -compose Divide_Src -composite -normalize -level 10%,90% -unsharp 0x5+2+0 out.jpg
          

          Пробуйте, должно получиться более-менее. Только с цветными мелками будет проблема — нужно инвертировать цвета:)
          0
          Даже не верится.
            –3
            Спасибо за скрипт. Я, как новичок в в linux, поражен такой краткостью и такими результатами. Раньше я бы открывал фотошоп и начинал применять кучу фильтров… Еще один плюс к карме моей Ubuntu :)
              +27
              ImageMagick никто не отменял на Mac и Windows
                +2
                Кучу не надо. Select->Color Range это все.
                  +2
                  попробуйте Color Range на исходном изображении из статьи, и вы увидите, что это далеко не всё. Больше получаса не тратьте — скрипт и ImageMagic работают действительно хорошо.
                    0
                    levels + color range мне кажется справится. Увы под рукой сейчас нету ничего что бы проверить.
                      0
                      Скорее всего нет.
                      Буквы вверху на светлом фоне — светлее чем фрагменты фона в середине. Так что levels и color range — не дадут нормальную картинку. Придется добавить фильтр четкости, и желательно обработки теней. Делается это все элементарно, но командой конечно проще)
                +2
                Кратко и по делу :)
                  +2
                  В WP8 есть приложение от МС для камеры Office Lens, с очень похожим результатом.
                  Фотаешь доску после митинга, получаешь чистую фотку и в один клик импортишь в OneNote
                  Вот результат фотографирования доски с экрана монитора dl.dropboxusercontent.com/u/486235/wp_ss_20140404_0001.png
                    0
                    Огромное спасибо за наводку.
                    0
                    fix:
                    #!/bin/bash
                    convert "$1" -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 "$2"
                    

                    Обратите внимание на кавычки вокруг $1 и $2 — без них не поддерживаются длинные имена файлов.
                      +1
                      Длинные поддерживаются, пробелы в именах не поддерживаются.
                        +2
                        Ну, я оговорился. Имел в виду именно пути с пробелами.
                      +7
                      В ImageMagick очень много способов сделать это:

                      www.fmwconcepts.com/imagemagick/whiteboard/

                      Недостаток этого скрипта в том, что он работает довольно медленно.

                      Вот этот скрипт делает то же самое, но быстрее и на все времена (из документации ImageMagick):

                      convert in.jpg \( +clone -blur 0x20 \) -compose Divide_Src -composite -normalize -level 10%,90% -deskew 40% -unsharp 0x5+2+0 out.jpg
                      


                      Добавить -deskew 40% — по вкусу, чтобы компенсировать вращение камеры.
                        0
                        да, действительно быстрее, на моей машине — раза в два.
                        Но у скрипта «whiteboardClean.sh» получилось более «жирно».
                          +3
                          Тут уже как уровни подкорректировать. Я unsharp и level на глазок поставил. Можно paint или median фильтр применить, буквально единичку для более равномерного контура. А если убрать unsharp и deskew — ещё раза в два быстрее будет:)

                          Я аналогичный алгоритм для обработки сканов использую, но там надо аккуратно — попадаются рисунки, которые такими агрессивными фильтрами можно сильно покалечить. Будет время сделаю заметку на эту тему.
                        +2
                        как след. шаг конвеера добавить распознование символов по изображению и сохранить в pdf например
                          +4
                          И назвать это дело Evernote :)
                        • UFO just landed and posted this here
                            +1
                            Это очень легко сделать на самом деле — из AppleScript вызывать bash-скрипт с переданным именем файла. А выполнение AppleScript повесить на событие помещения файла в указанный каталог.
                              +2
                              посмотрите в коментариях Гиста, там есть пример:

                              gist.github.com/lelandbatey/8677901
                              Скрипт
                              on open thefiles
                                repeat with thefile in thefiles
                                  set finalpath to POSIX path of thefile
                                  do shell script "mktemp -t image"
                                  set temppath to the result
                                  set success to false
                                  try
                                    do shell script "/usr/local/bin/convert '" & finalpath & "' -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 '" & temppath & "'"
                                    set success to true
                                  on error theerror
                                    display dialog "Conversion failed: " & theerror
                                  end try
                                  if success then
                                    do shell script "mv '" & temppath & "' '" & finalpath & "'"
                                    display notification "Converted " & finalpath
                                  end if
                                end repeat
                              end open
                              



                          • UFO just landed and posted this here
                              +13
                              Так понятнее)


                              • UFO just landed and posted this here
                                  0
                                  Слева походу комп, и малый, спиной сидит в майке.
                              +4
                              Я немного не соглашусь со статьей «How to clean up photos of whiteboards with Gimp».
                              Вот мой результат через фотошоп.
                              Обратите внимание, текст какой был такой и остался. Никаких фильтров обработки краев (читай прощай детали) к нему не применялось. Изображение обрабатывалось только контрастными фильрами.
                              Заголовок


                              А фишка оочень простая.
                              Для того чтобы вычленять объект по контрасту с однородного фона, который освещен неравномерно. (засветы сверху) нужно выравнять его с помощью фильтра highpass. Этим мы убираем перепады овещения. После этого работаем уровнями по привычке.

                              Никаких деструктивных действий для деталей текста, которые используются в примере выше здесь не применяется. В следствие чего у нас выходит неплохой результат.
                              Пример


                              Все консольные программы хороши только тем что на них можно орабатывать изображения без интерфейса. А вот без интерфейса вы параметры для фильтров через консоль просто замучаетесь подбирать.

                                +3
                                Все консольные программы хороши только тем что на них можно орабатывать изображения без интерфейса.

                                Они хороши тем, что работают быстро и применимы к целому ряду задач. Вот методом ручной коррекции в GIMP отсканированную книгу 500 листов не обработаешь, а в ImageMagick — элементарно. Если у вас куча таких лекций и сотня фотографий — ImageMagick ваш друг.
                                  0
                                  Для ручной коррекции пакетной обработки есть в шопе actions и batch proccessing тока они меня бесят, поскольку грузять все в интерфейс (оперативку) и только вот потом уже… Не знаю что там на счет гимпа.

                                  В любом случае, подобрать параметры, играть с тестовым изображением лучше в графическом редакторе, а уже эти настройки использовать как константы для консольных утилит, которые я никак не принижаю.
                                  Отработать коэфиценты фильтров на тестовых фотографиях лучше в GUI.
                                    +3
                                    В шопе… Каждому студенту по программе за килобакс, для того чтобы фоткать лекции:) В ГИМПе такой batch, что можно сказать его и нет. Для студента как раз полезнее приобщиться к IM-сообществу, так как есть реально чему поучиться, поучаствовать в GSoC и т. п.

                                    В любом случае, подобрать параметры, играть с тестовым изображением лучше в графическом редакторе

                                    Это пожалуй единственное, чего не хватает в ImageMagick после GIMP/PS. Там есть GUI, но он настолько убог, что командная строка на порядки удобнее. Но сделать обертку над ImageMagick в виде GUI не так уж сложно, так что со временем не исключено что появится.
                                      0
                                      Мы то тут не обсуждаем студентов) а реализацию идеи) С вами я согласен)
                                +3
                                Вдохновленный статьей сделал за выходные сервис — сейчас доступен по ссылке http://api.o2b.ru/whiteboardcleaner

                                Правда текущая версия поддерживает только единичную загрузку и браузеры с поддержкой HTML5.
                                  +2
                                  Как-то не особо работает...
                                  image

                                  И при попытке скачать какие-то неведомые неполадки сервера :)
                                    +1
                                    Какой у вас браузер и его версия?
                                    И было бы хорошо, если бы вы дали ссылку на файл, который вы загружали. Чтобы можно было проверить. Т.к. на сервере файлы не сохраняются, все делается в пямяти.
                                      0
                                      Последний Google Chrome, Ubuntu 14.04, картинка тут cs6032.vk.me/v6032065/893a/SjmVlNOsnPY.jpg
                                        +1
                                        Под убунтой проверить пока нет возможности, но под последней версией Chromе 33.0.1750.154 m под Win7 эта картинка обрабатывается нормально
                                        Картинка
                                        image
                                          +1
                                          Проверил под Убунтой 12 x64, в Chrome 33 работает. http://s16.postimg.org/xcs9noa2t/Capture.png. На сайте нашел только 12 и 13 версию, 14 версии не видел.
                                            0
                                            Странно… При выборе изображения оно отправляется на сервер, сервер отвечает
                                            Успехом
                                            {
                                              "data": {
                                                "updated_date": null,
                                                "delete_date": "2014-04-08T00:00:00",
                                                "url_get": "/file/QyY5stciWdVREegoe1iGWYsWnFsHHRtO",
                                                "url_delete": "/file.delete/6SOxiitH1r4bYDkVaeepd7SPjlhu5rTi",
                                                "created_date": "2014-04-06T14:30:26.400509",
                                                "deleted_date": null,
                                                "size": 54885,
                                                "type": "image/jpeg",
                                                "id": 43,
                                                "name": "t6nZck7NQR0.jpg"
                                              },
                                              "success": true
                                            }
                                            

                                            Но по адресу api.o2b.ru/file/QyY5stciWdVREegoe1iGWYsWnFsHHRtO nginx отвечает 403.
                                              +1
                                              Да, это был баг в настройках самого веб-сервера. Проверьте, пожалуйста, сейчас.
                                                0
                                                Теперь отлично работает! Спасибо!

                                  Only users with full accounts can post comments. Log in, please.