边界框比较工具
项目描述
box-diff
边界框比较工具
作者:Kevin Barnard, kbarnard@mbari.org
安装
box-diff可在PyPI上作为boxdiff获得
pip install boxdiff
用法
box-diff的所有内容都包含在boxdiff
包中。
import boxdiff
核心数据模型定义在boxdiff.models
模块中。这些分为三组
BoundingBox
:ID + 标记的二维边界框Image
:ID + 边界框集合ImageSet
:ID + 图像集合
注意:ID可以是整数、UUID或字符串。
每组都有一个数据模型(定义在boxdiff.models.core
),一个delta(boxdiff.models.deltas
)和一个差异标志(boxdiff.models.flags
)。数据模型代表对象及其属性,而delta代表两个对象之间属性值的变化。差异标志表示从delta对象导出的两个对象之间属性差异的存在。
所有数据模型都可序列化为JSON。例如,
json_str = bounding_box.to_json(indent=2)
print(json_str)
可能得到
{
"id": 0,
"label": "label",
"x": 0.0,
"y": 0.0,
"width": 1.0,
"height": 1.0
}
同样,数据模型对象也可以从JSON解析。例如,
bounding_box = BoundingBox.from_json(json_str)
print(bounding_box)
# BoundingBox(id=0, label='label', x=0.0, y=0.0, width=1.0, height=1.0)
边界框
BoundingBox
由ID、标签和一个二维框(x、y、宽度、高度)定义。
from boxdiff import BoundingBox
car_box = BoundingBox(
id=0,
label='car',
x=100, y=200,
width=300, height=80
)
可以使用==
运算符检查相等性
same_car_box = BoundingBox(
id=0,
label='car',
x=100, y=200,
width=300, height=80
)
print(car_box == same_car_box)
# True
corrected_car_box = BoundingBox(
id=0,
label='car',
x=90, y=210,
width=320, height=85
)
print(car_box == corrected_car_box)
# False
可以使用-
运算符计算两个边界框之间的BoundingBoxDelta
box_delta = corrected_car_box - car_box
print(box_delta)
# BoundingBoxDelta(id=1, label_old='car', label_new='car', x_delta=-10.0, y_delta=10.0, width_delta=20.0, height_delta=5.0)
然后可以从delta计算BoundingBoxDifference
标志
print(box_delta.flags)
# BoundingBoxDifference.RESIZED|MOVED
可以使用+
运算符将delta应用到边界框上
new_car_box = car_box + box_delta
print(new_car_box)
# BoundingBox(id=1, label='car', x=90.0, y=210.0, width=320.0, height=85.0)
print(new_car_box == corrected_car_box)
# True
可以从边界框计算面积
print(car_box.area)
# 24000.0
可以使用iou
方法计算边界框之间的交集与并集
car_iou = car_box.iou(corrected_car_box)
print(car_iou)
# 0.695364238410596
图像
图像由一个ID和一组边界框定义。
from boxdiff import Image
from uuid import UUID
image = Image(
id=UUID('78d76772-4664-467c-ae88-a25496234966'),
bounding_boxes=[car_box]
)
同样,可以使用==
运算符检查相等性,并使用-
运算符计算增量。
corrected_image = Image(
id=UUID('78d76772-4664-467c-ae88-a25496234966'),
bounding_boxes=[corrected_car_box]
)
image_delta = corrected_image - image
print(image_delta)
# ImageDelta(
# id=0,
# boxes_added=[],
# boxes_removed=[],
# box_deltas=[
# BoundingBoxDelta(
# id=0,
# label_old='car',
# label_new='car',
# x_delta=-10.0,
# y_delta=10.0,
# width_delta=20.0,
# height_delta=5.0
# )
# ]
# )
同样,可以从增量计算标志。
print(image_delta.flags)
# ImageDifference.BOXES_MODIFIED
图像集
ImageSet
由一个ID和一组图像定义。
from boxdiff import ImageSet
image_set = ImageSet(
id='my_image_set',
images=[image, ...]
)
其语法和结构类似于Image
。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
boxdiff-0.2.0.tar.gz (4.4 kB 查看哈希值)
构建分布
boxdiff-0.2.0-py3-none-any.whl (5.6 kB 查看哈希值)
关闭
boxdiff-0.2.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 02f1fbead0f9710b4260b71ed69be6b31d066c614efff439b0af6697ce7fef1a |
|
MD5 | 0ea59bca178ee66d700dcf608744f968 |
|
BLAKE2b-256 | 5e4e3946ae2c95d81034513d8c4e9dde55abb59e0ac0d9770e9d04c9069d368c |
关闭
boxdiff-0.2.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e771da66a7b6c5cbeb7582a5e35eb0a43b814415d86b62fd5aa35c066f40f7ed |
|
MD5 | 52bd56ab23e7bede8b1c3daf15b241b4 |
|
BLAKE2b-256 | dcbeacbd8b41e0d45cffe37ad341d9ef99464f61018a2aae41f61d8e4db00ab0 |