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 图像
每月下载量 319
650KB
 18K  SLoC
RV Image
RV Image 是一个用 Rust 编写的图像远程查看器。您可以在远程 SSH 服务器或 Azure Blob 存储上查看图像。此外,RV Image 还附带了一个边界框、多边形和画笔标签工具,支持导入和导出 Coco 格式。目前已在 Windows 10、WSL 和 Mac OS 上进行测试。RV Image 主要基于 egui 和 image。
安装
我们在发布页面上提供了一些为 Windows 和 MacOS 预先构建的二进制文件。
安装 Rust 后,您还可以
cargo install rvimage
安装最新稳定版本。
连接到远程
RV Image 通过
- SSH/SCP 使用 ssh2crate 连接,
- 本地文件夹 可能是远程存储的挂载点,
- 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 图像包含两个标注工具
- 绘制边界框和多边形,并导出为 Coco 格式。
- 绘制笔刷线条,并以具有运行长度编码的 Coco 文件 导出。因此,我们忽略了 Coco 文件中通常伴随运行长度编码标注的 iscrowd=true规范。
所有标注也以 json 格式存储在项目文件中。
除了标注工具外,我们还提供了筛选图像和不同方式缩放图像的功能。
缩放
您可以通过按住 Ctrl 键并按 + 或 - 键来随时缩放。
您还可以使用单独的缩放工具,并在图像区域上绘制一个框,以放大您想要看到的区域。
要移动缩放区域,请按住 Ctrl 键并使用左鼠标按钮拖动。
图像文件的筛选表达式
您可以为出现在左侧选择区域的图像文件进行筛选。输入的字符串将显示包含该字符串的路径名的图像。
除了基于路径名外,您还可以根据您使用的标签和属性进行筛选
- nolabel显示所有尚未使用当前活动工具进行标注的图像。
- anylabel显示所有已使用当前活动工具进行标注的图像。
- label(<->)显示所有具有当前活动工具的类- <label-name>标签的图像。例如,如果边界框工具处于活动状态,则- label(foreground)将显示所有包含类- foreground的边界框或多边形的图像。这仅当您的标签名称不包含空格时才有效。一些特殊字符也可能导致问题。
- tool(<tool-name>)可以显示所有使用工具- <tool-name>标记的图像。例如,- tool(Brush)将显示所有使用画笔工具标记的图像。
- attr(<attr-name>:<attr-val>)可以显示所有将属性- <attr-name>设置为- <attr-val>的图像。
- 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。包含文件名字符串的过滤器可以与&&、||和!结合使用。
绘制多边形或矩形的两种主要方法
- 点击左键添加多边形的一个顶点。右键完成。点击左键和右键一次来绘制矩形。
- 拖动鼠标左键。多边形将跟随鼠标。
| 事件 | 动作 | 
|---|---|
| 拖动并释放鼠标左键 | 绘制多边形 | 
| 第一次左键点击 | 开始绘制模式 | 
| $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 存储需要 tokio、futures、azure_storage 和 azure_storage_blob 作为附加依赖项,因为使用的 Azure SDK 是异步实现的,需要 tokio。然而,RV Image 的其余部分使用自己的小线程池实现。因此,Azure blob 存储连接作为 Cargo 特性 azure_blob 实现,默认启用。
依赖项
~37–67MB
~1M SLoC