21 个不稳定版本 (3 个破坏性版本)

0.4.7 2024 年 8 月 12 日
0.4.5 2024 年 6 月 1 日
0.3.8 2024 年 1 月 28 日
0.3.0 2023 年 12 月 29 日
0.1.2 2023 年 7 月 30 日

#52 in 图像

Download history • Rust 包仓库 69/week @ 2024-04-29 • Rust 包仓库 214/week @ 2024-05-06 • Rust 包仓库 8/week @ 2024-05-20 • Rust 包仓库 207/week @ 2024-05-27 • Rust 包仓库 33/week @ 2024-06-03 • Rust 包仓库 7/week @ 2024-06-10 • Rust 包仓库 16/week @ 2024-07-01 • Rust 包仓库 56/week @ 2024-07-29 • Rust 包仓库 124/week @ 2024-08-05 • Rust 包仓库 139/week @ 2024-08-12 • Rust 包仓库

每月下载量 319

MIT/Apache

650KB
18K SLoC

Crate CI workflow dependency status

RV Image

RV Image 是一个用 Rust 编写的图像远程查看器。您可以在远程 SSH 服务器或 Azure Blob 存储上查看图像。此外,RV Image 还附带了一个边界框、多边形和画笔标签工具,支持导入和导出 Coco 格式。目前已在 Windows 10、WSL 和 Mac OS 上进行测试。RV Image 主要基于 eguiimage

rvimage_screen

安装

我们在发布页面上提供了一些为 Windows 和 MacOS 预先构建的二进制文件。

安装 Rust 后,您还可以

cargo install rvimage

安装最新稳定版本。

连接到远程

RV Image 通过

  • SSH/SCP 使用 ssh2 crate 连接,
  • 本地文件夹 可能是远程存储的挂载点,
  • http 服务器 通过 python -m http.server 启动,以及
  • Azure Blob 存储库*.

以下是一些连接类型的示例配置。图像将缓存在本地的临时目录中。

可选的 http 导航服务器

当启动 RV 图像时,除了图形用户界面外,还会启动一个 HTTP 服务器作为额外的导航选项。默认地址为 127.0.0.1:5432。如果端口被占用,则端口会增加。向 /file_label 发送 GET 请求时,将加载图像 file_label。为此,file_label 必须位于当前打开的文件夹中。

配置

第一次启动 RV 图像时,会在 %USERPROFILE%/.rvimage/rv_cfg.toml(或在 Linux 下可能是 $HOME/.rvimage/rv_cfg.toml,未测试)创建一个配置文件 rv_cfg.toml。以下我们将描述一些选项。目前 SSH 仅支持无密码的密钥文件授权。

 # We support the connections "Local", "Ssh", "PyHttp", or "AzureBlob"
connection = "Ssh"

# "NoCache" for not caching at all or "FileCache" for caching files in a temp dir.
cache = "FileCache"  

# Address of the http control server, default is 127.0.0.1:5432
# http_address = address:port

# If you do not want to use the temporary directory of your OS, you can add something else.
# tmpdir = 

[file_cache_args]
n_prev_images = 2  # number of images to be cached previous to the selected one
n_next_images = 8  # number of images to be cached following the selected one
n_threads = 4  # number of threads to be used for background file caching

[ssh_cfg]             
# Local folders can interactively be chosen via file dialog. Remote folders are restricted to one of the following list. 
remote_folder_paths = [
    "folder on your server", 
    "another folder"
]
address = "address:port"  # port is usually 22
user = "your username"
ssh_identity_file_path = "somepath/.ssh/id_file_with_private_key"

[py_http_reader_cfg]
# The server is expected to be started via `python -m http.server` in some folder.
# The content of this folder is than accessible.  
server_addresses = ['http://localhost:8000/']

[azure_blob_cfg]
# With a connection string you can view the images inside a blob storage.
# The connection_string_path should point to file that only contains the 
# connection string.
connection_string_path = ''
container_name = ''
# The prefix is also called folder in the Microsoft Azure Storage Explorer.
# Currently, you cannot choose this interactively.
prefix = ''


标注工具

RV 图像包含两个标注工具

  1. 绘制边界框和多边形,并导出为 Coco 格式
  2. 绘制笔刷线条,并以具有运行长度编码的 Coco 文件 导出。因此,我们忽略了 Coco 文件中通常伴随运行长度编码标注的 iscrowd=true 规范。

所有标注也以 json 格式存储在项目文件中。

除了标注工具外,我们还提供了筛选图像和不同方式缩放图像的功能。

缩放

您可以通过按住 Ctrl 键并按 +- 键来随时缩放。

您还可以使用单独的缩放工具,并在图像区域上绘制一个框,以放大您想要看到的区域。

要移动缩放区域,请按住 Ctrl 键并使用左鼠标按钮拖动。

图像文件的筛选表达式

您可以为出现在左侧选择区域的图像文件进行筛选。输入的字符串将显示包含该字符串的路径名的图像。

除了基于路径名外,您还可以根据您使用的标签和属性进行筛选

  1. nolabel 显示所有尚未使用当前活动工具进行标注的图像。
  2. anylabel 显示所有已使用当前活动工具进行标注的图像。
  3. label(<->) 显示所有具有当前活动工具的类 <label-name> 标签的图像。例如,如果边界框工具处于活动状态,则 label(foreground) 将显示所有包含类 foreground 的边界框或多边形的图像。这仅当您的标签名称不包含空格时才有效。一些特殊字符也可能导致问题。
  4. tool(<tool-name>)可以显示所有使用工具<tool-name>标记的图像。例如,tool(Brush)将显示所有使用画笔工具标记的图像。
  5. attr(<attr-name>:<attr-val>)可以显示所有将属性<attr-name>设置为<attr-val>的图像。
  6. attr(<attr-name>:<attr-val-min>-<attr-val-max)可以显示所有将属性<attr-name>设置在<attr-val-min><attr-val-max>之间的图像。

可以结合使用过滤字符串 &&||!。例如

  • !nolabel对应于anylabel
  • 1055.png || label(cat)可以显示所有图像,这些图像要么包含完整的路径名中的1055.png,要么包含当前活动标记工具中的标签cat

边界框和多边形

RV Image配备了简单的边界框和多边形标记工具,可以导出和导入到Coco格式。为了导入能正常工作,需要先打开包含图像的文件夹。要过滤包含特定标签边界框的文件,可以将label(<name-of-label>)放入过滤文本字段中。因此,需要将<name-of-label>替换为标签的真实名称。要过滤未标记的文件,请使用nolabel。包含文件名字符串的过滤器可以与&&||!结合使用。

绘制多边形或矩形的两种主要方法

  1. 点击左键添加多边形的一个顶点。右键完成。点击左键和右键一次来绘制矩形。
  2. 拖动鼠标左键。多边形将跟随鼠标。
事件 动作
拖动并释放鼠标左键 绘制多边形
第一次左键点击 开始绘制模式
$n$-次左键点击,其中$n>1$ 添加多边形顶点
右键点击 完成绘制矩形或多边形
Alt + 绘制矩形/多边形期间的左键点击 删除最后添加的顶点
点击矩形的一个角 开始绘制模式并移动顶点
Ctrl + 在矩形上左键点击 选择矩形
Alt + 在矩形上左键点击 选择矩形,取消选择其他矩形并切换到当前选中的标签
按住右键 移动选中的矩形
Shift + 在矩形上左键点击 选择所有与该矩形和其他选中的矩形最大跨度重叠的矩形
Ctrl + A 选择所有矩形
删除 删除选中的矩形
Ctrl + D 取消选择所有矩形
Ctrl + H 隐藏所有矩形
C 在鼠标位置克隆选中的矩形并将选择移动到新矩形
Ctrl + C 将所有选中的矩形复制到剪贴板
Ctrl + V 从剪贴板粘贴矩形,不重复现有矩形
V 在图像更改时激活自动粘贴
左⬅/右➡/上⬆/下⬇ 移动所有选中的矩形的右下角
Ctrl + 左⬅/右➡/上⬆/下⬇ 移动所有选中的矩形的左上角
Alt + 左⬅/右➡/上⬆/下⬇ 移动所有选中的矩形
更改标签 选中的矩形/多边形的标签已更改

画笔工具

事件 动作
左键点击 如果不是擦除模式,则绘制圆形,否则擦除闭合画笔轨迹
按住鼠标左键 如果不是擦除模式,则绘制画笔
E 激活擦除模式
Ctrl + 鼠标左键点击 选择画笔
Ctrl + C/V/A/H/D 查看边界框工具
删除 删除所选线段
更改标签 所选线段的标签已更改
T/I 增加厚度/强度
Alt + T/I 减少厚度/强度

连接到 Azure blob 存储需要 tokiofuturesazure_storageazure_storage_blob 作为附加依赖项,因为使用的 Azure SDK 是异步实现的,需要 tokio。然而,RV Image 的其余部分使用自己的小线程池实现。因此,Azure blob 存储连接作为 Cargo 特性 azure_blob 实现,默认启用。

依赖项

~37–67MB
~1M SLoC