-
Notifications
You must be signed in to change notification settings - Fork 6
simpleobject_detection
"Простые объекты" являются ядром данного решения. Простым объектом называется набор признаков, которые вместе образуют целостный объект. Каждый признак способен распознаваться тем или иным методом компьютерного зрения. Такая структура позволяет комбинировать различные атрибуты между собой, увеличивая набор объектов, которые могут быть распознаны данным решением. Детекторы признаков могут работать в трех режимах: детектирование (Detect), проверка (Check) и извлечение информации (Extract). В режиме детектирования на вход подается изображение, на выходе определяется область, соответствующая положению объекта в реальном мире. В режиме проверки на вход подается подобласть изображения, а на выходе заключение о том, удовлетворяет ли эта область признаку или нет. Режим извлечения прямым образом не влияет на процесс и результат распознавания, лишь записывает некоторую информацию об объекте, однако эту информацию могут использовать другие признаки в режиме проверки.
Все признаки определяются отдельно друг от друга. Задача определения, какие из признаков образуют вкупе простой объект, решается двумя способами. В режиме жесткого распознавания все признаки должны быть распознаны или успешно проверены, в зависимости от режима детектора. Соответственно, отсутствие какого-либо из них делает объект нераспознаным в целом.
На изображении сверху приведен пример процесса распознавания для объекта, который описывается тремя признаками детектирования и одним признаком проверки, причем порядок в данном случае важен. На первом этапе детектор признака1 возвращает список из N1 областей, ему удовлетворяющих. То же самое происходит с признаком 2. Далее оба набора областей поступают на вход сопоставителя, который использует IOU (intersection over union) как меру похожести областей. Сопоставитель в жестком режиме распознавания удаляет области каждого признака, которые не имеют достаточной IOU с областями другого признака. Те же области, что не были удалены, объединяются друг с другом, образуя новый набор областей из N3 штук. N3 в данном случае не будет превышать минимального размера из двух первичных наборов областей, т.к. каждый объект из одного набора, может быть объединён только с одним из другого, с которым имеет наибольшую IOU-меру. Далее идет признак3, у которого режим проверки. Каждая полученная на предыдущем этапе область проверяется на соответствие данному признаку. Те области, что не прошли проверку, удаляются из набора. Далее идет опять признак в режиме проверки, который сгенерировал N5 областей. Эти области также подаются на вход IOU сопоставителя с областями, прошедшими проверку, образуя финальный список областей, которые и являются областями, соответствующие объекту на изображении.
Когда объект был распознан, рассчитывается его финальный коэффициент уверенности по формуле:

Где D - множество распознанных признаков, O - множество признаков, описывающих объект, ki - вес признака, задаваемый пользователем, pi - вклад признака, нормированный на единицу.
В режиме мягкого распознавания некоторые из признаков могут быть пропущены. Однако это повлияет на финальный коэффициент уверенности распознавания данного объекта.
На изображении сверху приведен пример процесса распознавания такого же объекта (как в предыдущем примере), но в мягком режиме. На первых шагах признаки также генерируют наборы областей. Однако, когда они попадают на вход IOU-сопоставителя, то те области, у которых нет "пары" из списка другого признака, не удаляются. Вместо этого они также проходят сквозь сопоставитель, однако на месте вклада признака выставляется 0. Те же области, что имеют "пару", объединяются аналогичным жесткому режиму образом. При попадании списка областей в признак проверки области, которые её не прошли, также не удаляются и получают 0 во вкладе данного признака. Аналогичным образом, получившиеся области проходят сопоставитель с выходом признака 4. Далее для каждой области рассчитывается коэффициент уверенности, и если он меньше заданного порога, то объект удаляется из списка, а все остальные являются распознаными объектами.
Чтобы задать в конфигурационном файле распознавание простого объекта, требуется в тег AttributeLib поместить описание всех его признаков, а в тег SimpleObjectBase - описание самого объекта, сославшись по имени на его признаки.
<AttributeLib>
<Attribute Name="HSVColorBrightYellow" Type="HSVColor" Hmin="35" Hmax="103" Smin="104" Smax="255" Vmin="0" Vmax="255"/>
</AttributeLib>
<SimpleObjectBase>
<SimpleObject Name="YellowSticer" ID="1">
<Attribute Type="Detect">HSVColorBrightYellow</Attribute>
</SimpleObject>
</SimpleObjectBase>
Подробно примеры создания конфигурационного файла приведены в описаниях конкретных признаков. Также в пакете имеется конфигурационный файл, содержащий примеры, приведенные в данной документации.
- Name (string, must be set) Уникальное имя признака, на которое будет ссылаться описание простого объекта.
- Type (string, must be set) Тип признака, должен быть одним из следующего списка.
Тип | Описание | Режимы* | Возможность задать точность* | 3D-локализация | Определение контура | Ссылка на раздел |
---|---|---|---|---|---|---|
HSVcolor | Цветовая фильтрация методом порогов | DC | C | ❌ | ✔ | link |
HaarCascade | Детектирование каскадами Хаара | D | - | ❌ | ❌ | link |
Size | Проверка размеров на изображении | C | - | ❌ | ❌ | link |
HistColor | Цветовая гистограммная фильтрация | DC | C | ❌ | ✔ | link |
Hough | Детектор примитивов Хафа | D | - | ❌ | ❌ | link |
Dimension | Проверка отношений размеров объектов | C | - | ❌ | ❌ | link |
BasicMotion | Простой детектор движения | D | - | ❌ | ✔ | link |
Aruco | Детектор Аруко-маркеров | D | - | ✔ | ✔ | link |
Feature | Детектор методом ключевых точек | D | - | ✔ | ✔ | link |
Pose | Проверка положения на изображении | C | - | ❌ | ❌ | link |
Tensorflow | Детектирование сверточными нейронными сетями с помощью API фреймворка tensorflow | D | D | ❌ | ❌ | link |
DNN | Детектирование сверточными нейронными сетями, импортированными в OpenCV | D | D | ❌ | ❌ | link |
QR | Детектирование QR-кодов средствами OpenCV | D | - | ❌ | ✔ | link |
QR_Zbar | Детектирование QR-кодов средствами библиотеки Zbar | D | - | ✔ | ✔ | link |
LogicAnd | Логическое И над двумя признаками | DC | - | ❌ | ❌ | link |
LogicNot | Логическое НЕ для признака | DC | - | ❌ | ❌ | link |
LogicOR | Логическое ИЛИ над двумя признаками | DC | - | ❌ | ❌ | link |
Blob | Детектирование пятен | D | - | ❌ | ❌ | link |
Depth | Определение расстояния до объекта | E | - | ✔ | ❌ | link |
RoughDist | Грубое определение расстояния до объекта с известными геометрическими характеристиками | E | - | ✔ | ❌ | link |
Dist | Проверка расстояния до объекта | C | - | ❌ | ❌ | link |
FaceDlib | Распознавание и идентификция лиц | DE | - | ❌ | ❌ | link |
ExractedInfoId | Проверка идентификаторов в извлеченной информации | C | - | ❌ | ❌ | link |
ExractedInfoString | Проверка строк в извлеченной информации | C | - | ❌ | ❌ | link |
UnitTranslation | Определение единичного смещения | E | - | ✔ | ❌ | link |
* - D - режимы распознавания (Detect), С - режим проверки (Check), E - режим извлечения информации (Extract).
- Probability (double, default: 0.75) Нижний порог коэффициента уверенности распознавания признака, если таковой поддерживается детектором.
- Contour (bool, default: true) Возвращает контур признака, если умеет.
- Остальные параметры специфичны для разных типов признаков, смотрите разделы, посвященные конкретным признакам.
- Clusterization - позволяет указать метод кластеризации для выхода признака. Подробнее читайте в разделе Кластеризация.
- Filter - позволяет установить дополнительный фильтр для признаков. Подробнее читайте в разделе Фильтрация.
- ID (int, must be set) Уникальный идентификатор объекта. На данный момент не реализовано автоматическое исправление дублирующих номеров, следите за сообщениями об ошибках.
- Name (string, must be set) Уникальное имя объекта.
- Probability (double, default: 0.75) Нижний порог коэффициента уверенности.
- IOU (double, default: 0.75) Нижний порог отношения пересечения к объединению (intersection over union).
- Mode (string, default: Hard) Тип распознавания (см. выше), может принимать значения Hard (жесткое) или Soft (мягкое).
- MergingPolicy (string, default: Intersection) Политика слияния областей и контуров. Принимает значения Intersection и Union.
- Weight (double, default: 1) Вес признака. См. формулу коэффициента уверенности выше.
- Attribute Основной тег, внутри тега помещается имя признака из AttributeLib. У данного тега имеется ряд параметров.
- Type принимает значения Detect (по-умолчанию, режим детектирования), Check (режим проверки) или Extract (режим извлечения информации).
- Channel принимает значения RGB (по-умолчанию) для работы с цветным изображением или DEPTH для работы с картой глубины.
- Tracker Позволяет настроить отслеживание объекта, подробнее см. раздел Трекинг.
Снизу представлен пример описания объекта "красная чашка". Он состоит из признака красных областей HistDarkRed, у которого объявлен фильтр, убирающий распознавания внутри своих же областей. Далее идет признак размера на изображении NotFractal, который отсеивает маленькие области, обнаруженные признаком цвета. После этого объявлен признак образа, который с использованием DNN модуля определяет чашки на изображении. К этому признаку добавлен NMS-фильтр. На этом этапе объект уже распознает красные чашки. Далее указан признак извлечения информации DepthKinect, позволяющий локализовать объект в трехмерном пространстве с использованием камеры глубины. Завершает описание объекта объявление трекера, который будет соотносить объекты на последовательных кадрах и пытаться найти объект в случае, когда детектор не может этого сделать.
<AttributeLib>
<Attribute Name="HistDarkRed" Type="HistColor" Histogram="histograms/DarkRed.yaml">
<Filter Type="Insider"/>
</Attribute>
<Attribute Name="NotFractal" Type="Size" MinAreaPc="0.5" MaxAreaPc="100"/>
<Attribute Name="CupDnn" Type="Dnn" framework="tensorflow" weights="ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb" config="ssd_mobilenet_v1_coco_2017_11_17/config.pbtxt" labels="ssd_mobilenet_v1_coco_2017_11_17/mscoco_label_map.pbtxt" inputWidth="300" inputHeight="300" Probability="0.75" obj_id="47">
<Filter Type="NMS" threshold="0.5"/>
</Attribute>
<Attribute Name="DepthKinect" Type="Depth" depthScale="0.001"/>
</AttributeLib>
<SimpleObjectBase>
<SimpleObject Name="RedCup" ID="61" Mode="Soft" MergingPolicy="Union">
<Attribute Type="Detect">HistDarkRed</Attribute>
<Attribute Type="Check">NotFractal</Attribute>
<Attribute Type="Detect">CupDnn</Attribute>
<Attribute Type="Extract" Channel="DEPTH">DepthKinect</Attribute>
<Tracker IOU="0.25" decay="0.01">MOSSE</Tracker>
</SimpleObject>
</SimpleObjectBase>
- ROS-интерфейс
- Взаимодействие посредством конфигурационного файла
- Установка
- Руководства
- Проблемы
- Разработка