Find Precise Reversal Points at Ignored Areas

Best Binary Options Brokers 2020:
  • BINARIUM
    BINARIUM

    Best Options Broker 2020!
    Great Choice For Beginners!
    Free Trading Education!
    Free Demo Account 1000$!
    Get Your Sign-Up Bonus Now!

  • BINOMO
    BINOMO

    Only For Experienced Traders!

Python + OpenCV + Keras: делаем распознавалку текста за полчаса

После экспериментов с многим известной базой из 60000 рукописных цифр MNIST возник логичный вопрос, есть ли что-то похожее, но с поддержкой не только цифр, но и букв. Как оказалось, есть, и называется такая база, как можно догадаться, Extended MNIST (EMNIST).

Если кому интересно, как с помощью этой базы можно сделать несложную распознавалку текста, добро пожаловать под кат.

Примечание: данный пример экспериментальный и учебный, мне было просто интересно посмотреть, что из этого получится. Делать второй FineReader я не планировал и не планирую, так что многие вещи тут, разумеется, не реализованы. Поэтому претензии в стиле «зачем», «уже есть лучше» и пр, не принимаются. Наверно готовые OCR-библиотеки для Python уже есть, но было интересно сделать самому. Кстати, для тех кто хочет посмотреть, как делался настоящий FineReader, есть две статьи в их блоге на Хабре за 2020 год: 1 и 2 (но разумеется, без исходников и подробностей, как и в любом корпоративном блоге). Ну а мы приступим, здесь все открыто и все open source.

Для примера мы возьмем простой текст. Вот такой:

HELLO WORLD

И посмотрим что с ним можно сделать.

Разбиение текста на буквы

Первым шагом разобьем текст на отдельные буквы. Для этого пригодится OpenCV, точнее его функция findContours.

Откроем изображение (cv2.imread), переведем его в ч/б (cv2.cvtColor + cv2.threshold), слегка увеличим (cv2.erode) и найдем контуры.

Мы получаем иерархическое дерево контуров (параметр cv2.RETR_TREE). Первым идет общий контур картинки, затем контуры букв, затем внутренние контуры. Нам нужны только контуры букв, поэтому я проверяю что «родительским» является общий контур. Это упрощенный подход, и для реальных сканов это может не сработать, хотя для распознавания скриншотов это некритично.

Следующим шагом сохраним каждую букву, предварительно отмасштабировав её до квадрата 28х28 (именно в таком формате хранится база MNIST). OpenCV построен на базе numpy, так что мы можем использовать функции работы с массивами для кропа и масштабирования.

В конце мы сортируем буквы по Х-координате, также как можно видеть, мы сохраняем результаты в виде tuple (x, w, letter), чтобы из промежутков между буквами потом выделить пробелы.

Убеждаемся что все работает:

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

Best Binary Options Brokers 2020:
  • BINARIUM
    BINARIUM

    Best Options Broker 2020!
    Great Choice For Beginners!
    Free Trading Education!
    Free Demo Account 1000$!
    Get Your Sign-Up Bonus Now!

  • BINOMO
    BINOMO

    Only For Experienced Traders!

Нейронная сеть (CNN) для распознавания

Исходный датасет EMNIST имеет 62 разных символа (A..Z, 0..9 и пр):

Нейронная сеть соответственно, имеет 62 выхода, на входе она будет получать изображения 28х28, после распознавания «1» будет на соответствующем выходе сети.

Создаем модель сети.

Как можно видеть, это классическая сверточная сеть, выделяющая определенные признаки изображения (количество фильтров 32 и 64), к «выходу» которой подсоединена «линейная» сеть MLP, формирующая окончательный результат.

Обучение нейронной сети

Переходим к самому продолжительному этапу — обучению сети. Для этого мы возьмем базу EMNIST, скачать которую можно по ссылке (размер архива 536Мб).

Для чтения базы воспользуемся библиотекой idx2numpy. Подготовим данные для обучения и валидации.

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

Также мы используем лишь 1/10 датасета для обучения (параметр k), в противном случае процесс займет не менее 10 часов.

Запускаем обучение сети, в конце процесса сохраняем обученную модель на диск.

Сам процесс обучения занимает около получаса:

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

Распознавание

Для распознавания мы загружаем модель и вызываем функцию predict_classes.

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

Окончательная функция, которая на входе получает файл с изображением, а на выходе дает строку, занимает всего 10 строк кода:

Здесь мы используем сохраненную ранее ширину символа, чтобы добавлять пробелы, если промежуток между буквами более 1/4 символа.

Забавная особенность — нейронная сеть «перепутала» букву «О» и цифру «0», что впрочем, неудивительно т.к. исходный набор EMNIST содержит рукописные буквы и цифры, которые не совсем похожи на печатные. В идеале, для распознавания экранных текстов нужно подготовить отдельный набор на базе экранных шрифтов, и уже на нем обучать нейросеть.

Заключение

Как можно видеть, не боги горшки обжигают, и то что казалось когда-то «магией», с помощью современных библиотек делается вполне несложно.

Поскольку Python является кроссплатформенным, работать код будет везде, на Windows, Linux и OSX. Вроде Keras портирован и на iOS/Android, так что теоретически, обученную модель можно использовать и на мобильных устройствах.

Для желающих поэкспериментировать самостоятельно, исходный код под спойлером.

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket

Похожие публикации

  • 6 сентября 2020 в 12:44

Batch Normalization для ускорения обучения нейронных сетей

Аугментация (augmentation, “раздутие”) данных для обучения нейронной сети на примере печатных символов

Введение в анализ текстовой информации с помощью Python и методов машинного обучения

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 26

Если кто-то знает базу печатных символов (не рукописных), было бы интересно переобучить модель на ней.

Зачем тебе база? Можно ведь просто нагенерить картинок с буковками с разными шрифтами и натравить на них аугментацию. Имеет смысл что-то такое искать сразу в виде скрипта, который такую базу нагенерирует.

Лень же. 100% уверен что кто-то уже это делал.

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

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

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

В базе EMNIST русских букв все равно нет, так что не проверял.

Да, на сканах подход с findContours может плохо работать.

В английском языке есть буквы i, j с разрывным контуром

В коде текст сначала увеличивается, потом от него берется контур.

C i/j это работает, с Ы уже не факт (не проверял). В идеале, нужен отдельный более интеллектуальный алгоритм разбиения на буквы.

Да, сначала нужно дополнить canvas size до квадрата (а не просто растянуть, иначе буква исказится), затем уже масштабировать в 28х28.

Может в тексте это не так очевидно, но код же выложен :)

Информация не теряется, буква просто дополняется до квадрата, она сама никуда не пропадает, ну и большинство букв не квадратные обычно :)

Распознавать искаженные буквы имхо нет смысла, если «I» растянуть до квадрата, получится квадрат Малевича, нисколько не похожий на оригинал.

Для букв на самом деле некритично, там совсем мелкие завитушки и не нужны, они скорее наоборот даже мешать будут. А вот например картинки автомобилей/животных размером 32х32 в датасете CIFAR 10 это жесть.

PS: Если распознавать китайские иероглифы, то может 28х28 и не хватит. Но тут я не спец, не знаю :)

Сам недавно занимался распознаванием печатного текста с фотографии и рукописных цифр.
Потому могу порекомендовать использовать для распознавания печатных букв Tesseract, а OpenCV можно использовать для предварительной обработки изображения – удаление шумов, выделение контуров. Внутри Tesseract 4 также есть нейронная сеть, обученная на большом количестве шрифтов. Есть версии разного качества для различных языков, в т.ч. и для русского.

Что касается MNIST, – он тоже работает только в тепличных условиях. Я использовал обученную модель LightGMB, которая имеет точность

98.5% на тестовых данных, но при этом не распознает цифры с реальных фотографий. Причина в том, что мало подогнать цифру под размер 28*28, нужно сделать дополнительную обработку изображения, а именно – сжать цифру до 20*20 пикселей, а потом сместить от центра в направлении, противоположном центру массы изображения. Это сложно объяснить на пальцах, но такой подход повышает точность в несколько раз. Есть ли подобная проблема у EMNIST, мне неизвестно.

P.S. Еще известная проблема MNIST заключается в том, что он собран на данных америкосов, если посмотреть на картинки, то можно увидеть, что некоторые цифры они пишут совсем не так, как нас учили в школе. Это также ощутимо влияет на качество распознавания этих цифр.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Reversal Diamond Indicator (No delay & not repaint)

Reversal Diamond Indicator

(No delay & not repaint)

The Reversal Diamond Indicator is based on a unique author’s algorithm for creating the most accurate signals!
The Reversal Diamond Indicator is a great trend trading tool able to predict retracements and reversals. Signals are highly accurate especially with volatile side way trend in any time frame as you can see in the video.

Features of Reversal Diamond indicator:

☀ The indicator available on both metatrader 4 and metatrader 5.
☀ The indicator does not repaint.
☀ The indicator does not recalculate.
☀ The indicator works on any time frame but recommended is H4 and in any other time frames the trend must be in a volatile side way trend only for more accuracy .
☀ The indicator works on any pairs, stock and commodity.
☀ It gives signals immediately when the candle is close.

Back Test video for 40 minute in different time frames

  1. Push notification- to send alert signal to your mobile/ tablet
  2. AlertOn – enable/disable push notifications when the arrow appears (it shows pair, entering price for trade when the dot appears, type of trade: buy/sell).
  3. MailOn – enable/disable email notifications when the arrow appears.
  4. SoundOn – enable/disable sound notifications when the arrow appears.

You can buy / rent it directly from my web store

Here you can see +50 chart with the signals of Reversal Diamond Indicator for most known pairs for last two week.

If you want any other payment method to pay feel free to contact me:
My email: [email protected]

www.fx-binary.org

  • Post # 2
  • Quote
  • Jan 13, 2020 3:07pm Jan 13, 2020 3:07pm

Here is the signals of last week (7/1/2020-11/1/2020) using my indicator:

Reversal Diamond Indicator

Get your copy now!

You can Buy /Rent it directly from the web store

  • Post # 3
  • Quote
  • Feb 3, 2020 4:48pm Feb 3, 2020 4:48pm

Here is the signals of last week (28/1/2020-1/2/2020) using my indicator:

Reversal Diamond Indicator

Get your copy now!

You can Buy /Rent it directly from the web store

  • Post # 4
  • Quote
  • Feb 10, 2020 3:04pm Feb 10, 2020 3:04pm

Here is the signals of last week (28/1/2020-1/2/2020) using my indicator:

Reversal Diamond Indicator

Get your copy now!

You can Buy /Rent it directly from the web store

  • Post # 5
  • Quote
  • Feb 17, 2020 4:44pm Feb 17, 2020 4:44pm

Here is the signals of last week (11/2/2020-15/2/2020) using my indicator:

Reversal Diamond Indicator

Get your copy now!

You can Buy /Rent it directly from the web store

  • Post # 6
  • Quote
  • Feb 17, 2020 4:51pm Feb 17, 2020 4:51pm
  • Post # 7
  • Quote
  • Feb 18, 2020 9:41am Feb 18, 2020 9:41am

  • Post # 8
  • Quote
  • Feb 18, 2020 12:29pm Feb 18, 2020 12:29pm

Hello,
if u can’t speak politely then don’t wast ur time in my thread please. and i don’t care if u want to believe that my indicator is real or not.

and for everyone one else i already given a trial gift for everyone for limited time to prove to everyone that all my indicators are real in my fb page. and here is the posts.
https://www.facebook.com/reversal.diamond/posts/1370606049740998
https://www.facebook.com/reversal.diamond/posts/1453203188147950

and also
here is a back test for 40 minute video in different time frames

here is the Reversal Diamond in Live market
video 1

  • Post # 9
  • Quote
  • Feb 18, 2020 12:30pm Feb 18, 2020 12:30pm

Sorry sir, i don’t give trial for individual people. i have given a trial gift for everyone for limited time to prove to everyone that all my indicators are real in my fb page. and here is the posts.
https://www.facebook.com/reversal.diamond/posts/1370606049740998
https://www.facebook.com/reversal.diamond/posts/1453203188147950
you can wait for next trial after couple of months in my fb page or can u can buy/ rent the indicator now to get ur copy. it’s ur choice sir.
have a good day. ^_^

  • Post # 10
  • Quote
  • Feb 18, 2020 1:58pm Feb 18, 2020 1:58pm
  • Post # 11
  • Quote
  • Feb 18, 2020 5:03pm Feb 18, 2020 5:03pm

  • Post # 12
  • Quote
  • Edited at 6:43pm Feb 18, 2020 6:24pm | Edited at 6:43pm

mr mahmmede you may think i am dumb and i am around since yesterday,but things are different.

you started to sell this here at Jan 2, 2020 23:23
your facebook links are old since last year 2020 and files not available anymore since long time.
It doesnt matter if you gave this tool back in time for a limited period test ,you gave it in another place and not here where you sell it in Forexfactory.
the trick doesnt work because you use a trick for sure ,give trial for very short and useless period of time loong time ago just to attract newbies and to make them to pay for it. will quote your own words :
you can wait for next trial after couple of months in my fb page or can u can buy/ rent the indicator now to get ur copy. it’s ur choice sir.”

a trial version of such an easy useless arrow thing can be made in 10 minutes less,you can fool newbies about this but not me.
you want to make newbies here you have some holy grail and make them to need it but hey you cant make trial only after months,really? so they somehow to be forced to rent it at least lead by their curiosity and so to pump free money into your pocket paying for one useless crap without the chance to test it first.
you better re think your strategy and add some honesty in the way youre doing business then expect from me to talk nice.
till then i will promote you in hall of shame for the way you are doing this.
and piece of advice for any newbie before to start waste your money, i can tell you there are better free indicators if only like this you can trade,but better dont waste money cos the real tools who really help in forex are NOT FOR SELL and will never be.

  • Post # 13
  • Quote
  • Feb 18, 2020 6:49pm Feb 18, 2020 6:49pm
  • Post # 14
  • Quote
  • Edited Feb 19, 2020 6:55am Feb 18, 2020 7:14pm | Edited Feb 19, 2020 6:55am

  • Post # 15
  • Quote
  • Feb 19, 2020 1:48pm Feb 19, 2020 1:48pm

No, u r not dumb but u don’t have the full info. to judge about something that u don’t understand ^_^
first u have to know that the selling of my indicators it’s not my first income.
i already have a fixed job that i love it and it’s my first income, my second income is from my trading when i have free time and my third income is from selling my indicators to the ppl who need it.
regarding the Reversal Diamond indicator i have selling it since 1 and half year now and it’s my oldest indicator, maybe u will not believe this but in first months after i release the indicator i have given trial for +500 person by email by their request until i decided to stop giving any more trial for individual people, and as u said it will not take me 10 minute to make a trial now,and if i did that and then after the trial expire, anther person will ask for new trail here in the thread/ my fb page / by email and so on. and every week there is +50 person asking for trial and by doing that i will be wasting my time doing just trials and some ppl will make new email to contact me by email and asking for new trail. so i have decided to give the trails only in special occasion.
also after i have released the indicator after couple of month i made a thread in Arabic forex forum when i was have some free time and i have given signals for free for two full month then i have asked for the thread to be closed for personal reason. the thread it’s in Arabic language so u can use google for translation so u can see the performance of the indicator signal in real time.
https://www.shopforexweb.com/vb/t6273.html

also the indicator it’s not a holly grail it have good & bad signals of course. and if u read the thread above carefully u will see this
“☀ The indicator works on any time frame but recommended is H4 and in any other time frames the trend must be in a volatile side way trend only for more accuracy.”
so in upper/ lower trend not so good. but in volatile side way it’s very good. and as i said it’s my oldest indicator. and i have develop better indicators after it for upper/ lower trend like Arrow Trend Surfer indicator.

Finding Precise Entry and Exit Levels with AOTI Indicator

I am often asked how to trade using the levels of the All-in-One Trade (AOTI)? When we need to enter a position and when to get out of it? Today we learn all the rules of work with these levels.

I will supplement this article with new information, as I think that will not immediately be able to tell all the details. It would take too much time.

Description of the AOTI Indicator Levels

  • Forecasted Entry Level – the predicted level from which the price may start moving to the target level. You can use this level as an entry point, or you can seek entry point the other ways.
  • Breakeven – the level, at which the stop loss can be moved to breakeven.
  • Today TP – the expected level of the daily profit.
  • Today SL – the stop loss level of the day.

Additional levels (activated by the Add. Levels button in the control panel):

  • First TP – the expected minimum level of the daily profit.
  • MaxTP – the maximum allowed profit level (for a very volatile market).

About Forecasted Entry Level

Forecasted Entry Level is a strong level, which is calculated according to several criteria. Price tends to touch this level and then start moving to the target level.

An example of good work of the level:

But it could be different.

Only 2,2 pips were not enough to reach the level:

How can we enter the position, if the price has not reached the Forecasted Entry Level?

In fact, it is not so difficult. Just look at the nearest levels of support/resistance.

If we build the simplest levels from which the price bounces, we can see a great entry point. Support turns into resistance and resistance into support.

Extra tips from the support micro-levels, built by the indicator:

In one of the next version of the indicator, I will try to do an automatic search and display of such levels.

The Simplest Way to Trade by the Levels

If you are really busy and you can’t trade during the business day, you can use the simple trading strategy for the levels.

It’s very simple. We just open a trade in the time of appearance of the levels. Then we hold the position open until the price reaches the level of Today TP or Today SL .

To simplify the process of trading, we don’t use the other features of the indicator.

We close the position at the end of the day with a profit or loss.

The results of testing this simple strategy I have shown here and here.

Of course, you can use this simple strategy, but I recommend to better understand the indicator and its functionality to increase your potential profits. You can also try to combine it with your trading style and create your own strategy in which you will have confidence in executing.

Closing Positions After a Candle Close

I want to tell you about another idea that I use in real trading.

We close the position only after a candle closes above (or below) level.

What does it mean? Usually strong level means the accumulation of interests of a large number of players on it. As a result, it often happens that the price only slightly poking the level to knock-out the traders stop levels.

If we trading on small timeframe like M5 (to reduce possible loss), we can close the position only after the candle closes above (or below) level, as I said earlier. Then a simple poke of the level by a price doesn’t throw us out of the position.

On the same principle, we can take the profit. We also can try to do it on the bigger timeframes, like H1.

Mass Closing of the Positions

One interesting regularity for you.

When the price reached the target on the first pair, it is possible to consider the possibility to close position on other pairs.

The price on the EUR/USD reached a profit (1.2000).

At this time on EUR/GBP pair the price was up to Breakeven level (0.8871). And we can close this position too.

GBP/USD = -360 p.
EUR/USD = +450 p.
EUR/GBP = +260 p.

Total = 450 + 260 – 360 = 350 p.

Dynamic Stop Loss and the Decision to Open the Position

In the real trade, I always try to open positions in which the expected profit exceeds the possible loss.

To this rule, there are exceptions, depending on market and a trader’s experience. But for the beginners, it is a good decision.

For example. At the day start possible Stop Loss = 237 p.

Possible Take Profit = 611 p. 611/237 = 2.5 (ratio). Good for the entry.

Well, thank you for your attention. That’s it for today.

Best Binary Options Brokers 2020:
  • BINARIUM
    BINARIUM

    Best Options Broker 2020!
    Great Choice For Beginners!
    Free Trading Education!
    Free Demo Account 1000$!
    Get Your Sign-Up Bonus Now!

  • BINOMO
    BINOMO

    Only For Experienced Traders!

Like this post? Please share to your friends:
Binary Options Trading Library
Leave a Reply

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: