-
Notifications
You must be signed in to change notification settings - Fork 1
complexobject_detection
Сложные (или составные) объекты представляют собой набор простых объектов с заданными отношениями между ними. На текущий момент отношения носят сравнительный (больше, меньше) или пространственный (быть внутри, быть на расстоянии) характер. Имея данный инструмент, можно сильно расширить набор объектов, которые могут быть распознаны системой. Часто в научной литературе для такого определения объектов используют термин "сцена" или "ситуация", иногда дополняя его различными конструкциями, например контекстом. На изображении снизу приведен пример всем хорошо известной картины, на которой показаны, как между объектами могут быть заданы отношения.


Задачей алгоритмов распознавания сложных объектов на данном примере может быть "найти человека с веревкой" или "найти человека, стоящего на дороге перед кустом", "найти двух людей, держащихся за руки". В первом случае ответом будет одна группа объектов, во втором две, в третьем тоже две.
Аналогично задаче распознавания простых объектов, распознавание сложных должно быть произведено в двух режимах: жестком и мягком.
- Жесткий - когда наличие всех объектов и связей обязательно для распознавания.
- Мягкий - когда берутся группы объектов, частично попадающие под заданное описание, и рассчитывается коэффициент уверенности для этой группы.
На данный момент реализовано распознавание только в жестком режиме.
Описания сложных объектов располагаются в теге ComplexObjectBase, ссылаясь на простые объекты из SimpleObjectBase и отношения из RelationLib.
Как уже говорилось, отношения указываются в теге RelationLib. Для каждого отношения создается тег RelationShip, у которого имеются следующие параметры:
- Name (string, must be set) Уникальное имя отношения, обязано быть указано.
- Type (string, must be set) Тип отношения, должно быть одним из таблицы ниже.
- Другие параметры специфичны для каждого типа отношения.
Тип | Описание | Рабочее пространство* | Билинейное | Ссылка на раздел |
---|---|---|---|---|
ImageRange | Отношение расстояния между объектами на изображении | I | ✔✔❌ | link |
3DRange | Отношение расстояние между объектами в трехмерном пространстве | 3D | ✔ | link |
LogicAnd | Логическое И над двумя отношениями | Унаследовано | Унаследовано | link |
LogicOr | Логическое ИЛИ над двумя отношениями | Унаследовано | Унаследовано | link |
LogicNot | Логическое НЕ к отношению | Унаследовано | Унаследовано | link |
SpaceIn | Проверяет что один объект полностью внутри другого | I | ❌ | link |
SpaceOut | Проверяет что один объект полностью вне другого | I | ✔ | link |
SpaceUp | Проверяет что центр объекта выше центра другого | I | ❌ | link |
SpaceDown | Проверяет что центр объекта ниже центра другого | I | ❌ | link |
SpaceLeft | Проверяет что центр объекта левее центра другого | I | ❌ | link |
SpaceRight | Проверяет что центр объекта правее центра другого | I | ❌ | link |
* - Может быть как I, что означает что объекты сравниваются в координатах изображения и 3D, что означает что отношение оперирует в трехмерном пространстве, однако для этого варианта, объекты должны иметь признаки, определяющие трехмерное положение.
Все сложные объекты описываются внутри тега ComplexObjectBase, и каждый из них должен быть заключен в тег ComplexObject.
- ID (int, must be set) Уникальный идентификатор сложного объекта. Может совпадать с идентификаторами простых объектов.
- Name (string, must be set) Уникальное имя сложного объекта.
- SimpleObject - эти теги отписывают, какие простые объекты составляют сложный
- Class (string) Имя простого объекта в базе.
- InnerName (string) Некоторе внутреннее имя, которое будет использовано при задании отношений.
- Relation - эти теги описывают, как простые объекты соединены отношениями
- Obj1 (string) Внутреннее имя первого объекта, соединенного отношением.
- Obj2 (string) Внутреннее имя второго объекта, соединенного отношением.
- Relationship (string) Имя отношения из RelationLib.
Примером сложного объекта, состоящего из простых, может выступать человек с распознанным лицом. Для этого отдельно распознаются лица и фигуры людей, которые сопоставляются друг другу по принципу нахождения лица в прямоугольнике всей фигуры. Описать такой сложный объект в терминах системы можно следующим образом.
<?xml version="1.0" ?>
<AttributeLib>
<Attribute Name="HaarFace" Type="HaarCascade" Cascade="cascades/mallick_haarcascade_frontalface_default.xml"/>
<Attribute Name="CnnPerson" 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.5" obj_id="1"/>
</AttributeLib>
<SimpleObjectBase>
<SimpleObject Name="Face" ID="10">
<Attribute Type="Detect">HaarFace</Attribute>
</SimpleObject>
<SimpleObject Name="CnnPerson" ID="67">
<Attribute Type="Detect">CnnPerson</Attribute>
</SimpleObject>
</SimpleObjectBase>
<RelationLib>
<RelationShip Type="SpaceIn" Name="in"/>
</RelationLib>
<ComplexObjectBase>
<ComplexObject ID="10" Name="FacedPerson">
<SimpleObject Class="CnnPerson" InnerName="Person"/>
<SimpleObject Class="Face" InnerName="Face"/>
<Relation Obj1="Face" Obj2="Person" Relationship="in"/>
</ComplexObject>
</ComplexObjectBase>
- Home
- ROS-interface
- Interacting with a package through a configuration file
- Common structure of the configuration file
-
Simple objects
- Clusterization
- Filtering
- Tracking
- Attributes
- HSVcolor
- HistColor
- HaarCascade
- Size
- Hough
- Dimension
- BasicMotion
- Aruco
- Feature
- Pose
- DNN
- QR
- QR_Zbar
- LogicAnd
- LogicNot
- LogicOr
- Blob
- Depth
- RoughDist
- Dist
- FaceDlib
- ExractedInfoId
- ExractedInfoString
- UnitTranslation
- SquareObjectDistance
- TorchYOLOv7Attribute
- TorchYOLOv7KeypointAttribute
- ROSSubcriberOpenPoseRaw
- DummyHumanPose
- Complex objects
- Install Guides
- Usage Guides
- Troubleshooting