Skip to content

Cross Platform App to validate a folder of images (with pan and zoom features), mostly for dataset annotation purposes.

License

Notifications You must be signed in to change notification settings

krshrimali/image-annotator-rust

Repository files navigation

Key Features

Note: I'm actively working on this app's first release. Please hop on to the issues page if you would like to contribute.

  1. Select folder with images to mark annotated images.
  2. Zoom (like pinch zoom) and pan images in the view.
  3. Options available: Mark as Correct, Mark as Incorrect, Reset Selection.
  4. Export as a JSON file.
  5. The JSON file can retain previously annotated folders.
  6. See the info (track current image path, folder path, total files etc.) in the window itself.
  7. Invalid files are ignored, and a proper text is shown instead of the image viewer.
  8. Any sub-directories in the selected folder are ignored.
  9. Image file sizes are retained, and the app is scrollable + resizable.
  10. Binaries are available for Windows, OSX and Linux, here.
  11. Built 100% with Rust, GUI built using Iced library

Description and Demo

Theme Switching

The app saves you some eye strain with dark and light theme switching option.

Screenshot from 2023-01-29 12-54-20

Welcome page - select your folder

image

  • Any sub-folders present in the selected folder will be ignored.
  • File validation is done while traversing through the folder, to save time.

Verify annotation

image

  • Option to mark as correct/incorrect or reset selection.
  • Click Export to export the results to a JSON file. (output.json in the folder where you started the app from)
  • Mark as Incorrect will have an option to add comments (optional)

Invalid file

invalid_file

  • In case a file is invalid, or the image couldn't be loaded, a message will appear and a user can see the file path in the info below to the text.

Add comments (optional)

output_annotation

Output

A sample output is given here

{
  "image_to_properties_map": {
    "/home/krshrimali/Documents/Projects/rust/image-annotator-rust-app/sample_folder": [
      {
        "index": 0,
        "image_path": "/home/krshrimali/Documents/Projects/rust/image-annotator-rust-app/sample_folder/invalid_file.txt",
        "annotation": null,
        "comments": null,
        "last_updated": "2023-02-05 12:53:28.343688759 +05:30"
      },
      {
        "index": 1,
        "image_path": "/home/krshrimali/Documents/Projects/rust/image-annotator-rust-app/sample_folder/sample.webp",
        "annotation": null,
        "comments": null,
        "last_updated": "2023-02-05 12:53:28.343921942 +05:30"
      },
      {
        "index": 2,
        "image_path": "/home/krshrimali/Documents/Projects/rust/image-annotator-rust-app/sample_folder/nature-3082832__480.jpg",
        "annotation": null,
        "comments": null,
        "last_updated": "2023-02-05 12:53:28.343935682 +05:30"
      }
    ]
  }
}

Build from source

If you are on Linux, following libraries are required:

  1. Rust toolchain, see: this for instructions.
  2. cmake, pkg-config, fontconfig.
  3. OpenSSL 3.0
  4. libgtk-3-dev (GTK 3.0 dev libraries)

Once done, follow the instructions below:

# Build porject
cargo build
# Build binary for release
cargo build --release
# Run the app
cargo run