Crate CI workflow dependency status

RV Image

RV Image is a Remote viewer for images written in Rust. You can view images, e.g., on remote SSH servers or Azure blob storages. Further, RV Image comes with a simple bounding box labeling tool supporting import and export of the Coco-format. So far only tested on Windows 10 and Mac OS. RV Image is mainly based on egui, image, and pixels.

grafik

Installation

Currently, we do not provide pre-built binaries. With Rust installed you can cargo install rvimage

Connect to remote

RV Image connects to

Example configuration for the connection types can be found below. Images are cached locally in a temporary directory.

Optional http navigation server

When RV Image is started, also an http server is launched as aditional navigation option besides the graphical user interface. The default address is 127.0.0.1:5432. If occupied, the port will be increased. When sending a get-request to /file_label the image file_label is loaded. For this to work, file_label must be in the currently opened folder.

Configuration

Create a file rv_cfg.toml in %USERPROFILE%/.rvimage/rv_cfg.toml (or probably $HOME/.rvimage/rv_cfg.toml under Linux, untested) with the following content. For SSH currently, only authorization with key-files without passphrase is supported. ``` # 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 =

[filecacheargs] nprevimages = 2 # number of images to be cached previous to the selected one nnextimages = 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.

remotefolderpaths = [ "folder on your server", "another folder" ] address = "address:port" # port is usually 22 user = "your username" sshidentityfilepath = "somepath/.ssh/idfilewithprivate_key"

[pyhttpreader_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_address = 'http://localhost:8000/'

[azureblobcfg]

With a connection string you can view the images inside a blob storage

connectionstring = '' containername = ''

The prefix is also called folder in the Microsoft Azure Storage Explorer.

Currently, you cannot choose this interactively.

prefix = ''

```

Bounding Box Labeling Tool

RV Image comes with a simple bounding box labeling tool that can export to and import from the Coco format. For an import to work, the folder that contains the images needs to be opened beforehand. To filter for files that contain bounding boxes of a specific label, one can put label:<name-of-label> into the filter text field. Thereby, <name-of-label> needs to be replaced by the real name of the label. To filter for unlabeled files use unlabeled:.

| event | action | | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | | first left click | start drawing box | | second left click | finish drawing box | | left click on corner of box | move corner of box | | hold right button | move selected boxes | | Ctrl + left click on box | select box | | Alt + left click on box | select box and deselect others and switch to currently selected label | | Shift + left click on box | select all boxes with overlap with the maximal span of this box and other selected boxes | | Ctrl + A | select all boxes | | Delete | remove selected boxes | | Ctrl + D | deselect all boxes | | C | clone selected boxes at mouse position and move selection to new box | | Ctrl + C | copy all selected boxes to clipboard | | Ctrl + V | paste boxes without existing duplicate from clipboard | | V | activate auto-paste on image change | | Left⬅/Right➡/Up⬆/Down⬇ | move bottom right corner of all selected boxes | | Ctrl + Left⬅/Right➡/Up⬆/Down⬇ | move top left corner of all selected boxes | | Alt + Left⬅/Right➡/Up⬆/Down⬇ | move all selected boxes | | Ctrl + L | toggle category names |


* The connection to Azure blob storages has tokio, futures, azure_storage, and azure_storage_blob as additional dependencies, since the used Azure SDK is implemented asynchronously and needs tokio. However, the rest of RV Image uses its own small threadpool implementation. Hence, the Azure blob storage connection is implemented as Cargo-feature azure_blob that is enabled by default.