Анонс новой фичи для ActiveCV
Dmitry VНекоторое время назад я опубликовал простенькую конфигурацию SimpleUI автоматического прайсчекера
Принцип работы в ней такой: 2 шага в ActiveCV, сначала сканируется штрихкод, потом по штрихкоду определяется товар и цена этого товара которую надо найти на ценнике и на втором шаге он соотвественно эту цену ищет. Если находит -красит ценник в зеленый цвет (значит цена совпала). Как это заведено в ActiveCV он ищет объект по всему кадру, соотвественно цену он ищет по всему кадру. Тут возникает проблема: если цена допустим 100 рублей, он должен найти "100" в кадре, после чего как это заведено в ActiveCV генерируется событие onObjectDetected и как бы все, алгоритм поиска завершен, но ищет то он вхождения строки(по другому с OCR нереально работать) а на ценнике может быть что ни будь типа "Артикул:12210000032" и он соотвественно выцепит эти 100 и успокоится. А не надо.
Поэтому приходим к такому выводу - в большинстве случаев поиск "по всему кадру" - это хорошо. С штрихкодами, лицами, QR - это просто без вопросов. С OCR при поиске артикулов типа "AWX0021300DX0" - это тоже хорошо (ну когда надо просто идентифицировать объект по артикулу). И собственно в этом и состоит принцип ActiveCV -найти объект в кадре и подкрасить его (или вывести дополнительную инфу). Но в некоторых случаях надо принудительно ограничить "зрение" алгоритма определенными рамками. Да, это расходится с принципом ActiveCV, но тем не менее это бывает нужно.
Примеры - таблички на технике, станках, агрегатах где есть vin, серийный номер и т.д. (причем тут может идти речь не только об идентификации, но и о чисто вводе новых позиций), различные счётчики расходомеры, цениики, бейджи и т.д.
В общем нужно каким то образом на кадре сделать одну или несколько рамок, своеобразный прицел через котрые будет идти распознавание
Сделать это можно будет через "Векторный редактор" вот таким образом - нарисовав прямоугольники

Забегая вперед скажу что тут не только прямоугольники но и метки - "qr" слева и "price" чтобы в обработчики поступала размеченная информация. Забегая еще вперед скажу что у метки qr префикс barcode: чтобы система поняла что эту область надо обработать распознаванием штрихкодов/qr а не OCR (у OCR нет префикса, по умолчанию считается что все - OCR)
Пробуем наложить это на кадр:
Фейл. Некрасиво. Очевидно что надо чтобы размеры рамок как то изменялись пропорционально размерам объекта в кадре. Поэтому надо сделать так чтобы если объект в кадре большой то и рамки были большие, если маленький то маленькие. Звучит просто, да?
Поэтому пришлось добавить такое понятие как объект (object) и нарисовать его. Приме важно что пропорции должны быть приблизительно такие как у ценника (с допуском +/- 25%)
Т.е. ценник у нас вот такой

и объект вот такой (это прямоугольник с меткой object)

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