Перейти к содержимому

Фотография

Как пользоваться Text Recognition


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 17

#1 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 14 января 2012 - 12:11

В окне тестируемой программы выводится текст, который не отображается ни в одном из свойств данного окна или его элементов. Для распознавания текста пытался воспользоваться возможностями OCR, но этот метод текст (латинский алфавит) корректно не распознает. В help-е сказано, что с такой задачей значительно лучше справляется плагин Text Recognition. Однако их help, имхо создан не для помощи, а для разгадывания ребусов. Один абзац Генкиной книги делает совершенно понятным как использовать распознавание текста с помощью OCR, но к сожалению, там не описано применение Text Recognition. Обращаюсь к автору: не сочтете ли за труд изложить, как с помощью этого плагина прочитать текст из окна?
  • 0

#2 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 14 января 2012 - 14:52

В окне тестируемой программы выводится текст, который не отображается ни в одном из свойств данного окна или его элементов. Для распознавания текста пытался воспользоваться возможностями OCR, но этот метод текст (латинский алфавит) корректно не распознает. В help-е сказано, что с такой задачей значительно лучше справляется плагин Text Recognition. Однако их help, имхо создан не для помощи, а для разгадывания ребусов. Один абзац Генкиной книги делает совершенно понятным как использовать распознавание текста с помощью OCR, но к сожалению, там не описано применение Text Recognition. Обращаюсь к автору: не сочтете ли за труд изложить, как с помощью этого плагина прочитать текст из окна?



Зайдите в свойства проекта (правой кнопкой на проекте Edit|Properties) . Перейдите в меню Open Applications|Text Recognition
Нажмите Add и введите значение нужного WndClassa . Поставте галочку и сохраните.
Теперь все текстовые элементы вашего объекта доступны
  • 0

#3 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 14 января 2012 - 15:29


В окне тестируемой программы выводится текст, который не отображается ни в одном из свойств данного окна или его элементов. Для распознавания текста пытался воспользоваться возможностями OCR, но этот метод текст (латинский алфавит) корректно не распознает. В help-е сказано, что с такой задачей значительно лучше справляется плагин Text Recognition. Однако их help, имхо создан не для помощи, а для разгадывания ребусов. Один абзац Генкиной книги делает совершенно понятным как использовать распознавание текста с помощью OCR, но к сожалению, там не описано применение Text Recognition. Обращаюсь к автору: не сочтете ли за труд изложить, как с помощью этого плагина прочитать текст из окна?



Зайдите в свойства проекта (правой кнопкой на проекте Edit|Properties) . Перейдите в меню Open Applications|Text Recognition
Нажмите Add и введите значение нужного WndClassa . Поставте галочку и сохраните.
Теперь все текстовые элементы вашего объекта доступны


Да это то как раз понятно, а нельзя ли привести пример как конкретно распознать и сохранить в логе текст из какого-нибудь окна.
  • 0

#4 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 14 января 2012 - 16:29

Хотелось бы пояснить конкретнее,что я имею в виду:
В Project Properties ->Open Applications->Text Recognition отметил *. Иконки всех окон в Object Browser выглядят как надо для распознавания. В качестве window выбрал текстовое поле тестируемой программы, куда заранее ввел "ABCDE". Никакой графики - чистый шрифт. Попробовал:

window = window = Sys.Process("....").Window("...., "....");
TextObject = window.TextObject("*");
Log.Message(TextObject.Text);

но получаю ошибку Unable to find the object TextObject("*"). Т.е., как я понимаю, в данном окне текст не находится. Проверил таким же образом для Notepad - работает нормально, распознает даже кириллицу.

Пробую распознать при помощи OCR, там вообще глухо - получаю какие-то символы типа .`.. :::.

Вызвал из скрипта Клептоманию - распознает без всяких проблем любой текст - и тот о котором говорилось выше и более сложный графический. Можно сохранить в буфер памяти. Но это же нонсенс - использовать стороннюю программу для выполнения функций, которые должны быть доступны из самой TestComplete.
  • 0

#5 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 15 января 2012 - 09:19

Я добавил в учебник описание того, как работать с Text Recognition (http://tctutorial.ru/ocr), но вам это не поможет.
Судя по описанию, вы всё делаете правильно и в вашем случае Text Recognition просто не срабатывает.

А вот почему не срабатывает OCR - это уже другой вопрос. Убедитесь, что:
  • включена классическая тема Windows
  • отключен ClearType
  • отключено сглаживание экранных шрифтов

Ну и приаттачьте скриншот окна с вашим контролом
  • 1

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#6 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 15 января 2012 - 10:18

Я добавил в учебник описание того, как работать с Text Recognition (http://tctutorial.ru/ocr), но вам это не поможет.
Судя по описанию, вы всё делаете правильно и в вашем случае Text Recognition просто не срабатывает.

А вот почему не срабатывает OCR - это уже другой вопрос. Убедитесь, что:

  • включена классическая тема Windows
  • отключен ClearType
  • отключено сглаживание экранных шрифтов

Ну и приаттачьте скриншот окна с вашим контролом


Спасибо! Последовал Вашим советам. Ситуация с OCR значительно улучшилась (хотя отображение шрифтов, конечно, пострадало). Теперь распознает, хотя и с некоторыми погрешностями. Что же касается Text Recognition, то как Вы и предполагали, - никаких сдвигов (см. скриншот)Прикрепленный файл  ScreenShot.jpg   111,49К   26 Количество загрузок:.
  • 0

#7 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 15 января 2012 - 12:31

Ну так это же та самая история с .NET приложением, которое неправильно распознается. У вас и дальше будут проблемы, чем дальше - тем больше.

Решите проблему с распознаванием контролов и вам не придется так мучаться.
  • 1

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#8 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 15 января 2012 - 16:12

Попробуйте воспользоваться идеями, которые приведены в TC_SAMPLE. Он мне помог решить проблемы с OCR
Главное, что надо непременно указывать размер шрифта, его тип, стиль. Кроме этого, я еще указываю область объекта в которой надо распознать текст.


'  The sample application demonstrates how to:
'  1) Find areas by specified text in an owner-drawn control.
'  2) Recognize text in a specified area.
'  
'  Compile the sample application (<TestComplete>\Samples\Scripts\OCR\Application\OCRApp.dpr).
'
'  The "Tahoma" font must be installed in your system in order for the sample
'  to work correctly.

Sub MainTest
  Const TextToFind = "E-mail"

  Set wForm = Sys.Process("OCRApp").Window("TForm1", "OCR Application")

' Part 1. Find the item coordinates (x, y) in the owner-drawn list box and click
' the found point.
  
  Set wOfficeListBox = wForm.Window("TListBox")
  Set Pic = wOfficeListBox.Picture(0, 0, wOfficeListBox.Width, wOfficeListBox.Height, false)
  Call Log.Picture(Pic, "The image of the owner-draw list box.")
  
  Set OCRObjList = OCR.CreateObject(Pic)

  Set OCROptionsList = OCRObjList.CreateOptions
  Set FontItem = OCROptionsList.Fonts.Add
  FontItem.Name = "Tahoma"
  Call FontItem.Sizes.Add(12) 
  
  ' Call the FindRectByText function with its default options.
  ' In the list box, the Courier New font is used (it is applied by the OCR
  ' object by default), so there is no need to specify recognition options.
  FindRes = OCRObjList.FindRectByText("E-mail", OCROptionsList)
  
  If FindRes Then
    Call Log.Message("The coordinates of the center of the found area. FoundX = " +_
      aqConvert.IntToStr(OCRObjList.FoundX) + "; FoundY = " + aqConvert.IntToStr(OCRObjList.FoundY) + ".")

    ' Click the found item.
    Call wOfficeListBox.Click(OCRObjList.FoundX, OCRObjList.FoundY)
  
    ' Pause the script execution here to enable the application to display the
    ' clicked item in the edit box.
    Call Delay(1000)
  Else
    Call Log.Error("Failed to find the rectangle by text.")
  End If
  
' Part 2. Recognize new text in the edit box.

  Set wOfficeEditBox = wForm.Window("TEdit", "*")
  
  Set Pic = wOfficeEditBox.Picture(0, 0, wOfficeEditBox.Width, wOfficeEditBox.Height, false)
  Call Log.Picture(Pic, "The image of the edit box.")
  
  Set OCRObjWord = OCR.CreateObject(Pic)

  ' In the edit box, the Tahoma font is used. It is not applied by default,
  ' so we need to specify recognition options here.
  Set OCROptionsWord = OCRObjWord.CreateOptions
  
  ' Add font to the Options object.
  Set FontItem = OCROptionsWord.Fonts.Add
  
  ' Specify the font name.
  FontItem.Name = "Tahoma"
 
  ' Add the font size.
  Call FontItem.Sizes.Add(14)
  
  ' Add the bold style.
  Call FontItem.Styles.Add(1)
  
  ' Call the GetText function with the specified options.
  Call Log.Message("Recognized word: " + OCRObjWord.GetText(OCROptionsWord))
  
  Call TestedApps.CloseAll
End Sub

  • 0

#9 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 15 января 2012 - 16:16

Ну так это же та самая история с .NET приложением, которое неправильно распознается. У вас и дальше будут проблемы, чем дальше - тем больше.

Решите проблему с распознаванием контролов и вам не придется так мучаться.


А решить можно переходом на 8-ю версию ИЛИ путем установки рекомендованных Вами DLL. Правильно я понимаю?
  • 0

#10 vitaliy4us

vitaliy4us

    Активный участник

  • Members
  • PipPip
  • 81 сообщений

Отправлено 15 января 2012 - 16:27

Попробуйте воспользоваться идеями, которые приведены в TC_SAMPLE. Он мне помог решить проблемы с OCR
Главное, что надо непременно указывать размер шрифта, его тип, стиль. Кроме этого, я еще указываю область объекта в которой надо распознать текст.


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

function Kleptomania(WindowName, AreaWidth, AreaHeight)
{
//Функция использования программы Клептомания для распознавания текста с экрана
//Параметр функции, представляющий из себя имя окна в котором производится распознавание текста (просто скопировать
// и вставить из Object Properties)
  var wnd = WindowName;
//Координаты x и y верхнего левого угла окна (являются свойствами окна)
  var x = wnd.ScreenLeft;
  var y= wnd.ScreenTop;

//Переменные для извлечения программы Клептомания из трея  
  var  explorer;
  var  wndShell_TrayWnd;
  var  k_mania;
  var  wndKmaniaexeCoat;

//Переменная процесса Explorer
  explorer = Aliases.Explorer;
//Переменная трея
  wndShell_TrayWnd = explorer.wndShell_TrayWnd;
//Кликаем по кнопке трея
  wndShell_TrayWnd.btn.ClickButton();
//Извлекаем из трея значок программы Клептомания
  explorer.wndNotifyIconOverflowWindow.ToolbarWindow32.ClickItem("Kleptomania!", false);
  k_mania = Aliases.k_mania;
//Выбираем способ выделения области экрана - Select Text/Graphic Rectangle
  k_mania.wnd32768.Select_Text_Graphics_Rectangle.Click();
//Производим выделение области экрана с координатами левого верхнего угла окна, а также ширины (AreaWidth) и 
//высоты (AreaHeight) выделяемой области в пикселах
  wndKmaniaexeCoat = k_mania.wndKmaniaexeCoat;
  wndKmaniaexeCoat.Drag(x, y, AreaWidth, AreaHeight);
//Выбираем способ сохранения распознанного текста в Clip Board - Plain Text
  wndKmaniaexeCoat.PopupMenu.Click("Copy|Plain Text");
  delay(1000);
//Возвращаемое значение функции
  return Sys.Clipboard;
}

  • 0

#11 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 15 января 2012 - 16:51

А в чем сложность ?
По крайней мере в sample не используется дополнительная программа для распознавания, а приведен пример, как распознавать.

Но соглашусь, что OCR-механизм распознавания TC несовершенен и не все тексты ему "по зубам"..
  • 0

#12 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 15 января 2012 - 17:19

А решить можно переходом на 8-ю версию ИЛИ путем установки рекомендованных Вами DLL. Правильно я понимаю?


Да. Либо сносом некоторых обновлений .NETa.
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#13 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 23 января 2012 - 10:28

Я добавил в учебник описание того, как работать с Text Recognition (http://tctutorial.ru/ocr), но вам это не поможет.
Судя по описанию, вы всё делаете правильно и в вашем случае Text Recognition просто не срабатывает.

А вот почему не срабатывает OCR - это уже другой вопрос. Убедитесь, что:

  • включена классическая тема Windows
  • отключен ClearType
  • отключено сглаживание экранных шрифтов

Ну и приаттачьте скриншот окна с вашим контролом



Доброго времени суток.
Гена, а что такое ClearType и сглаживание экранных шрифтов? и где это отключить?
  • 0

#14 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 23 января 2012 - 11:41

Доброго времени суток.
Гена, а что такое ClearType и сглаживание экранных шрифтов? и где это отключить?


Clear Type - в панели инструментов (Win 7) в строке поиска напишите Clear Type и кликните на сслыке Adjust Clear Type

Экранные шрифты - жмете Win+Pause, потом Advanced System Settings - Advanced - Performance - Visual effects
и там будет галочка Smooth edges of screen fonts (Сглаживание экранных шрифтов)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#15 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 23 января 2012 - 12:01

Я скачала и посмотрела ради интереса ваше приложение. Вам действительно надо чинить поддержку .NET, как сказал Genka, а не мучиться с OCR/Text Recognition.
Например, контрол со списком контактов, похоже, является разновидностью стандартного .NET грида DataGridView. После добавления класса этого контролв - GUI.Controls.DataGridViewEx - в проектные настройки Object Mapping > Microsoft Controls > DataGridView, у контрола появляются стандартные свойства и методы для работы с гридами и получения значений из грида - wRowCount, wValue(row, column) и т.п. См. скриншот.

Прикрепленные файлы

  • Прикрепленный файл  GWTalk.png   55,31К   15 Количество загрузок:

  • 0

#16 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 23 января 2012 - 12:03

Я скачала и посмотрела ради интереса ваше приложение.


Та он уже починил :)

ЗЫ Вы, оказывается, девушка :) Ну, в том смысле, что не парень. Я как-то не задумывался, думал, что парень
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#17 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 23 января 2012 - 13:39

2 Genka
Почти во всех постах modbear всегда были слова, говорящие, что - это сударыня. :acute:
Я как-то сразу для себя перевел ее ник, как "модная медведица". Хотя, понимаю, что это не так.
  • 0

#18 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 23 января 2012 - 13:51

Почти во всех постах modbear всегда были слова, говорящие, что - это сударыня. :acute:


Я пока учебник дописывал - совсем от форума отбился, отписался и не заглядывал. Потому что времени не хватало. Вот и пропустил как-то
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest



Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных