пʼятниця, 28 липня 2017 р.

tesseract - читаємо друковані тексти (OCR)

Розпізнавання текстів та автоматизація цього процесу цілком легко вирішується в Linux. Існує дві поширені програми розпізнавання: cuneiform та tesseract. Вони призначені для роботи в терміналі, але них для використання в графічному середовищі існує агрегатор yagf, який вміє працювати з обидвома двигунами.

А все почалося з того, що я знайшов книжку у форматі djvu, яку хотів дати дітям почитати на електронній книжці. Нажаль пошуки електронного варіанту в fb2, txt або інших форматах електронних книг були неуспішні.

Я вирішив виправити цей недолік, адже книжка цікава. І у мене був сканований  україномовний її варіант.

Відразу зауважу, що з cuneiform у мене не склалося через помилки при запуску, хоча я точно пам'ятаю, що колись давно користувався саме нею і при тому дуже успішно. Yagf теж не вдалося запустити. Та я й не розбирався чому саме. Адже в консолі все вирішується за лічені хвилини.

Що ж. Почнемо. Для початку слід встановити необхідне ПЗ. Це - система управління файлами djvu (упаковка-розпаковка), а також система tesseract-ocr та український мовний пакет:

$ sudo apt-get install djvulibre-bin tesseract-ocr tesseract-ocr-ukr

Наступним кроком  потрібно поділити djvu файл на окремі графічні файли сторінок:

$ ddjvu -format=tiff -eachpage filename.djvu page%d.tiff

Тепер ми матимемо 260 (у моєму випадку) окремих файлів - по одному на кожну сторінку. Залишилося натравити на них розпізнавач і об'єднати результати у текстовому файлі. Для цього я написав мікроскрипт (кількість сторінок слід поправити в тілі скрипта):

#!/bin/bash
        for i in `seq 1 260`;
        do
  tesseract ./page$i.tiff stdout -psm 6 -l ukr >> book.txt
        done

Запустивши його, йдемо пити чай-каву. Після coffe-break отримуємо txt файл. Залишилося дрібничка - прочитати і скоригувати помилки розпізнавання. А далі скрутити все це в гарну електронну книжку формату fb2. Але це вже інша історія, якою, сподіваюся, незабаром поділитися.

Джерела:

пʼятниця, 21 липня 2017 р.

debootstrap - розгортаємо ARM середовище Debian Jessie


Нещодавно я писав про NanoPI - малюсінькій комп'ютер за порівняно смішну ціну. І ось настав момент написання програми для нього. Звичайно, найпростіше - перекинути код на нього і прямо на ньому зібрати. Та для великих проектів компіляторові треба доволі багато пам'яті. А вона є на більших x86 комп'ютерах. Та й вони більш поширені, ніж ARM-базовані. Тож частіше можуть трапитися під рукою.

Дистрибутив Debian чудово порається з розгортанням різних його версій на одній машині, а за допомогою QEMU можна навіть працювати з дистрибутивами різних архітектур. Саме це нам і потрібно. Процес розгортання, як виявилося, доволі простий.

Встановлюємо утиліту debootstrap
sudo apt-get install debootstrap

Встановлюємо пакети архітектури armhf з дистрибутиву jessie у каталог jessie-armhf без виконання другої фази (second-stage) розгортання системи
sudo debootstrap --foreign --arch=armhf jessie jessie-armhf

Встановлюємо QEMU
sudo apt-get install qemu-user-static

Копіюємо qemu для імітації arm процесора в каталог встановлення дистрибутиву
sudo cp /usr/bin/qemu-arm-static jessie-armhf/usr/bin/

Для доступу до інтернету
sudo cp /etc/resolv.conf jessie-armhf/etc/

Переходимо в каталог дистрибутиву в режимі chroot
sudo chroot jessie-armhf/

Запускаємо другу фазу розгортання системи. Тут пакети довстановлюються в режимі arm
debootstrap/debootstrap --second-stage

Оновлюємо джерела для apt
cat > /etc/apt/sources.list << EOF
deb http://ftp.de.debian.org/debian jessie main contrib non-free
deb http://ftp.de.debian.org/debian jessie-updates main contrib non-free
deb http://security.debian.org/debian-security jessie/updates main contrib non-free
EOF

Оновлюємо щойно розгорнуту систему
apt-get update  && apt-get dist-upgrade

Якщо побачили таке при переході в chroot
I have no name!@host$
то є два варіанти
chmod 0644 /etc/passwd
а якщо не допомогло, то
rm /etc/passwd-

Ну далі налаштовуємо компілятори, бібліотеки і решту непотребу, щоб забезпечити роботу gcc.
apt-get install build-essential

Джерела:

неділя, 2 липня 2017 р.

Palemoon - браузер для non SSE2 процесорів


У попередньому дописі я описав один з дистрибутивів, які підходять для використання на застарілому залізі. Та якщо у вас процесор, що не підтримує інструкції SSE2, то з веб серфінгом періодично матимете негаразди. Адже всі сучасні браузери розробляються з розрахунку лише на процесори з підтримкою команд SSE2. Чи не всі? Виявляється є ентузіасти, які все ж думають про старе залізяччя. Браузер palemoon - одне з їхніх творінь.
Але спершу визначимо, чи варто нам взагалі шукати SSE only браузер. В консолі введемо

$ lscpu

Побачимо купу інформації про наш процесор. Але нас цікавить лише поле Flags. У ньому вказано перелік типів інструкції, які підтримує процесор. Якщо в переліку є sse2, то цей допис вам не потрібен. Ось, що я побачив у себе:

Architecture:          i686
CPU op-mode(s):        32-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             AuthenticAMD
CPU family:            6
Model:                 8
Model name:            AMD Sempron(tm)
Stepping:              1
CPU MHz:               1197.000
CPU max MHz:           1197,0000
CPU min MHz:           747,0000
BogoMIPS:              2405.37
Hypervisor vendor:     (null)
Virtualization type:   full
L1d cache:             64K
L1i cache:             64K
L2 cache:              256K
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mp mmxext 3dnowext 3dnow vmmcall



Як бачимо з SSE2 мені не повезло (у переліку є лише sse, але немає sse2). Оце і є причина "бочки меду в ложці дьогтю". І онаками її при роботі є не так повільна робота браузера, як періодичні безпричинні аварійні завершення програми. Це так дратує! Різні браузери збоять на різних сайтах. І якщо глянути в логи, то часом можна помітити повідомлення "Illegal instruction". Пошукавши в інтернеті, чи є браузери для старих CPU натрапив на palemoon SSE версію. Його немає в офіційних репозитаріях дистрибутивів. Але на офіційному сайті програми є готова збірка під 32 бітну ОС Linux. Це просто архів, розміром майже 40 Мб. Розпаковуємо його, де зручно, і користуємося. Можна встановлювати для всіх користувачів системи. Дії після скачування приблизно такі:

$ sudo tar -C /opt -xvf palemoon-27.3.0SSE.linux-i686.tar.bz2
$ sudo ln -s /opt/palemoon/palemoon /usr/bin/palemoon

PS. Поки готував цей допис мій palemoon жодного разу не гепнувся.

Джерела:
https://forum.palemoon.org/viewtopic.php?f=40&t=13530
ftp://ftp.palemoon.org/SSE-Linux/
http://palemoon.org