Титла: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 18, 2012, 17:42 Здравейте приятели и за много години!
Въпросът ми е много симпъл: Има ли (възможно най-лесен) начин, Qt4 приложение да прочете символи от картинка, като знам какъв шрифт са и неговата големина и ако да - поддържа ли се кирилица? Благодаря предварително! Титла: Re: Image to text с Qt4 Публикувано от: Kedr в Jan 18, 2012, 18:24 yum search OCR
libhocr-devel.i686 : Development files for libhocr libhocr-devel.x86_64 : Development files for libhocr libhocr-gtk.x86_64 : GTK+ application for libhocr libhocr-python.x86_64 : Python bindings for libhocr cuneiform.i686 : Command-line OCR system cuneiform.x86_64 : Command-line OCR system gocr.x86_64 : GNU Optical Character Recognition program libhocr.i686 : A Hebrew optical character recognition library libhocr.x86_64 : A Hebrew optical character recognition library ocrad.x86_64 : An Optical Character Recognition program openscada-docRU.x86_64 : Open SCADA documents spamassassin-FuzzyOcr.noarch : Spamassassin plugin to identify image spam tesseract.i686 : Raw OCR Engine tesseract.x86_64 : Raw OCR Engine yagf.x86_64 : Graphical front-end for cuneiform Титла: Re: Image to text с Qt4 Публикувано от: borovaka в Jan 18, 2012, 18:28 Дам трябва ти OCR и ти да си драснеш GUI на QT. Ето ти сравнение:
http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison ($2) cuneiform се справя и с кирилица. Титла: Re: Image to text с Qt4 Публикувано от: Kedr в Jan 18, 2012, 18:30 Като имаш сканър, имаш и FineReader Sprint, нали? Той работи под wine.
Титла: Re: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 18, 2012, 19:27 Така, виждам че няма директна функция (вградена в Qt4). Има ли друг вариант - ако имам сив фон и бял текст, то картинката да се уголеми със зададен от мен, процент и сивия фон да се замени с прозрачен, без белият текст да се маха?
Титла: Re: Image to text с Qt4 Публикувано от: borovaka в Jan 19, 2012, 13:07 //offtopic
Абе приятелю ти OCR система ли искаш да си пишеш? Каква да е тази функция в QT дето да го прави това ... това си трябва OCR система за целта. //on Иначе за фона си има достатъчно графични библиотеки които можеш да използваш. Аз на QT не съм писал ама ImageMagic и GD примерно могат да манипулират такива неща. Титла: Re: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 19, 2012, 13:31 Не, няма да разработвам собствена OCR система, но тъй като текста не ми трябва за манипулации а за извеждане на дисплея, просто ме интересува как да го уголемя и най-вече да му заменя цвят - навсякъде където има сиво - да бъде прозрачно
Нещо от този род: Код
Титла: Re: Image to text с Qt4 Публикувано от: Kedr в Jan 19, 2012, 15:25 convert source.gif -transparent "rgb(128,128,128)" target.gif
Титла: Re: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 19, 2012, 15:55 Тъй като приложението ще е мултиплатформено, съответно няма ли функция в Qt?
Титла: Re: Image to text с Qt4 Публикувано от: task_struct в Jan 19, 2012, 16:14 Отговорът е QImage - http://developer.qt.nokia.com/doc/qt-4.8/qimage.html
Имаш функция за скалиране на изобравението и достъп до картинката пиксел по пиксел. Ако ще обработваш много картинки, бих ти препоръчал да ги пуснеш с QtConcurrent::map() ( http://developer.qt.nokia.com/doc/qt-4.8/qtconcurrent.html ), за да може UI-то ти да продължи да реагира. Титла: Re: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 19, 2012, 18:55 Код Така написано би трябвало да премахва сивия фон и да оставя белите букви в изображението, но нещо не се получава. Някакви идеи? ??? Титла: Re: Image to text с Qt4 Публикувано от: Kedr в Jan 19, 2012, 19:16 >"D:\\OCR\\bani4ka.png"
>D: ??? какво е това? Титла: Re: Image to text с Qt4 Публикувано от: task_struct в Jan 19, 2012, 20:07 #include <QtCore/QDebug>
#include <QtGui/QImage> #include <QtGui/QColor> #include <QtGui/QRgb> bool colorcmp( const QColor & a, const QColor & b ) { return ( ( a.red() >= b.red() ) && ( a.green() >= b.green() ) && ( a.blue() >= b.blue() ) && ( a.alpha() >= b.alpha() ) ); } int main(int argc, char *argv[]) { QImage tempImg("/home/nikolay/Development/Projects/OCR/banichka.png"); const QColor delMin( 0, 0, 0 ); const QColor delMax( 176, 176, 176 ); for (int i = 0; i < tempImg.height(); i++) { for (int j = 0; j < tempImg.width(); j++) { QColor cur( tempImg.pixel(j, i) ); if( colorcmp( cur, delMin ) && colorcmp( delMax, cur )) tempImg.setPixel(j, i, Qt::transparent); } } tempImg.save("/home/nikolay/Development/Projects/OCR/banichk2.png"); } Това работи с картинка, която има сив фон QColor( 127, 127, 127, 255 ) и текст QColor( 255, 255, 255, 255 ). Ако има някакви по различни цветове от сиво,черно,бяло може да имаш проблем с функцията за сравнение. Титла: Re: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 19, 2012, 21:34 Пак същото. Ето това изображение не може да го "хване":
(http://prikachi.com/images/351/4285351u.png) Титла: Re: Image to text с Qt4 Публикувано от: task_struct в Jan 19, 2012, 22:19 Е тази е с доста близки цветове. Ако знаеш какви ще са цветовете, може да си ги направиш като входни параметри или ако си сигурен, че картинката винаги има само 2 цвята може да направиш така: Взимаш цвета на 0,0 пиксел и където има тоя цвят правиш прозрачност. В най-общият случай ти трябва изостряне на картинката. Да се повиши контраста на цветовете, за да има по-ясна граница между цвят и фон. Ако фона или буквите имат шум става вече доста по-весело и там ти трябва алгоритъм за разпознаване на текст.
Титла: Re: Image to text с Qt4 Публикувано от: LinuxFanUNIX в Jan 19, 2012, 23:21 След многобройните опити установих че май
tempImg.setPixel(j, i, Qt::transparent); не работи. Ако махна сверката и направя всеки пиксел transparent, то той става сив |