Про всякое

Later Ctrl + ↑

Подготовка изображения к OCR

Бывает, что мне нужно провести несколько экспериментов по распознаванию текста на довольно зашумленных изображениях при помощи Tesseract с одним условием – надо сделать быстро.

Но совсем плохой результат получить тоже не хочется. Поэтому, чтобы улучшить точность распознавания, нужно очистить исходное изображение от шумов и посторонних объектов. Для этого можно либо написать чутка кода, либо использовать утилиту convert из ImageMagick, либо можно взять вот этот скрипт textcleaner, который, по факту, является надстройкой над convert, но простой как три копейки и сильно ускоряет работу. Вся документация подробно изложена на официальной страничке.

Пример удаления бэкграунда, очистки текста, поворота и обрезки изображения:

./textcleaner -g -e stretch -f 30 -o 17 -t 15 -u -s 2 -T -p 20 -c 5 infile.jpg outfile.jpg

Было/стало:

Дальше запускаем сам tesseract (у меня 4ая бета с LSTM моделями):

tesseract outfile.jpg stdout -l eng --oem 1

И получаем уже чистый текст:

Clarification

In the last edition of the “Catholic New World,” an
article on the annual conference hosted by the Re-
spect Life Oftice did not fully reflect the context of
Cardinal George’s remarks.

During an informal question-and-answer session
with the archdiocese’s parish Respect Life Coordi-
nators, the cardinal emphasized that the participa-
tion by any person in the promotion of abortion, in-
cluding through his or her political position, is a
grave matter. While the issue of withholding Com-
munion- from some of these individuals can be
complex, Cardinal George said that when any per-
son presents him or herself to receive the Eucharist,
they “take their salvation into their own hands.” For
a more complete explanation of this matter, refer-
ence the cardinal’s column “Catholic participation
in political life, revisited” (CNW, Oct. 10, 2004)
online at www.catholicnewworld.com/
cnw/issue/2004/cardinal _101004.html .

Качество распознавания получилось вполне достойное.

Есть только один минус: бесплатное использование textcleaner разрешено только в некоммерческих целях. В общем, автор жадина-говядина :) Так что используем только для домашних проектов, либо вполне заслуженно поддерживаем финансово создателя скрипта.

2018   ImageMagick   OCR   Tesseract

Time Machine в macOS зависает на Preparing backup

Time Machine крайне удобный инструмент для создания резервных копий в macOS. Штука безотказная, простая как три копейки, но и на старуху бывает проруха.

Сегодня, после подключения внешнего диска и запуска резервного копирования, процесс намертво завис на этапе “Preparing backup”. Вручную, через меню вверху экрана он не останавливался, перезагрузка тоже не помогла.

Стоит отметить, что если вы не делали резервное копирование несколько месяцев или у вас очень объемный жесткий диск, то длительная подготовка может быть обоснована временем необходимым для индексации новых/изменных файлов. В моем случае, бэкап был сделан несколько дней назад и два часа ожидания совсем не походили на штатную ситуацию. Тем более, что с диска явно ничего не читалось и на него не писалось.

Оказалось, что эта проблема решаема и довольно быстро. Итак, по порядку:

Шаг 1: Идем в System Preferences -> Time Machine и останавливаем процесс резервного копирования нажатием на крестик справа от прогрессбара.

Шаг 2: В Finder открываем диск на который Time Machine пишет данные. Там должна быть папка Backups.backupdb, заходим в нее, открываем внутри папку с именем вашего компьютера и ищем там самый свежий файл с расширением .InProgress. Его имя имеет формат год-месяц-день-случайное_число.InProgress.

Нашли? Теперь удаляем его.

Шаг 3: Перезагружаем систему не отключая внешний диск.

Шаг 4: После загрузки системы ждем некоторое время и запускаем процесс резервного копирования заново, как обычно.

Теперь все должно пройти гладко.

2018   macOS   Time Machine

WhatsApp

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

Допустим, у нас стоит задача, запретить оставлять свои контакты в каком-либо текстовом поле. Под контактами подразумеваем любые данные, которые ведут на другую социальную сеть или мессенджер. Например: номера телефонов, e-mail, ссылки на профили в Facebook и ВКонтакте.

Конечно, пользователям это не понравится, особенно если альтернатива – заплатить свои кровные пять копеек. Поэтому стартует раунд специальной олимпиады – как бы так исковеркать текст, чтобы алгоритм не понял, что это именно контактные данные?

Ради интереса, собрал небольшой списочек разных вариантов. Поплачьте вместе со мной, да.

WhatsApp – каноничный вариант, для референса. А теперь, начинается хтонический ужас:

wapp, воцап, воцапе, вайцап, vвотцар, воссап, ватсаб, всапп, вцабб, ведсап, ватсап, цапе, выцапан, watsap, vhatsapp, whatsup, whatapp, wtzp, whatsap, vatsap, what’s app, whatssapp, w h a t s, watsaap, what’s up, whapp, wathsape, wahatsapp, wp, whaazapa, vathsapp, watsp, whatsa, uozzaap, wapsattan – этот, мой любимый.

Все это не считая вариантов разделенных пробелами “w h a t s”, другими разделителями типа “w.h.a-t-sapp”, повторения букв “вааацааап” и других увеселительных мероприятий. И мы еще даже не добрались до самих номеров телефонов для WhatsApp.

И фильтруя все это, стоит не забывать, что пользователь может просто поприветствовать собеседника “what’s up bro” и любые следующий цифры могут быть отнюдь не номером телефона, а датой и временем или гео-координатами или бог весть чем.

Шах и мат любители регэкспов для фильтрации спама.

Про Эгею

После довольно долгих поисков движка для блога, выбрал Эгею от Ильи Бирмана, главным образом из-за красивой верстки текста. В теории, движок позиционирует себя как “скопировал в папку и все работает”. Но, на практике пришлось чуть-чуть повозиться.

Для начала, он не очень дружит с Nginx: не работают ЧПУ и вместо красивой ссылки https://agasiev.com/all/tgrm-me-bot/ будет https://agasiev.com/?go=all/tgrm-me-bot/. В целом, с этим можно бороться настройкой веб-сервера и конфига Эгеи, через force_canonical_urls, но для тэгов ссылки у меня так и не заработали, так что плюнул и поставил Apache.

Далее, движок плохо работает на PHP 7.2, из-за ругательств последнего на использование констант в массивах. Т.е. где-то в обфусцированном коде написано так:

$array_name[key_name];

А надо так:

$array_name['key_name'];

В принципе оба варианта в реальной жизни работают, но это плохой способ писать код на PHP, чреватый кучей ошибок, и поэтому с версии 7.2 интерпретатора такой стиль стал deprecated. Пришлось откатить PHP до версии 7.1.

А в остальном, прекрасная система, спасибо автору. Жаль только, что весь код обфусцирован, я бы хотел иметь вариант платной лицензии, по которой предоставляются исходники движка для доработки.

2018   Блог   Эгея

Tgrm.me

За пару дней написал бота @TgrmMeBot для постинга сообщений из Telegram каналов на блог-платформу: Tgrm.me.

Идея была в том, чтобы помочь увеличить количество подписчиков каналов за счет их продвижения в поисковиках. Заодно добавил возможность создавать свои веб-блог без ведения канала: нужно просто напис
ать боту в личку.

Добавляешь бота в список администраторов канала и с первым новым постом появится страница https://tgrm.me/channelname, на которую будут копироваться все ваши сообщения.

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

Для того, чтобы посты были похожи на ленту Telegram, сделана подгрузку изображений, учет Markdown разметки и еще много плюшек. Видео и файлы грузить не хочу, чтобы не сделать из сайта прибежище порн
ографии и пиратов. Иногда, попадаются любители торговать наркотиками, но они быстро блокируются.

Сайт работает на PHP + Nginx, бот на Python3, Redis, MySQL, библиотека для доступа к API Telegram самописная, старая, урезанная версия того, что я использую в заказных проектах для Chatbot.name.

В целом, сервис пользуется некоторой популярностью. Сейчас подключено около 700 каналов и опубликовано 35000 постов.

Сам бот: @TgrmMeBot, чат техподдержки @TgrmSupport.