The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .eslintrc.js
├── .github
    └── workflows
    │   ├── deploy.yaml
    │   └── validate.yaml
├── .gitignore
├── .prettierrc.json
├── .vscode
    └── settings.json
├── LICENSE
├── README.md
├── cli
    ├── bin
    │   ├── cli.js
    │   ├── commands
    │   │   ├── build.js
    │   │   ├── server.js
    │   │   ├── start.js
    │   │   └── ui.js
    │   └── index.js
    ├── package.json
    └── yarn.lock
├── docs
    ├── .dockerignore
    ├── .gitignore
    ├── CNAME
    ├── Dockerfile
    ├── Gemfile
    ├── Gemfile.lock
    ├── README.md
    ├── _config.yml
    ├── _guides
    │   ├── classification.md
    │   ├── getting-started.md
    │   ├── labeling-with-a-team.md
    │   ├── object-detection.md
    │   ├── preparing-training-data.md
    │   └── uploading-images-via-api.md
    ├── _includes
    │   ├── code-error.liquid
    │   ├── head.liquid
    │   ├── profile.liquid
    │   ├── responsive.liquid
    │   └── titlebar.liquid
    ├── _layouts
    │   ├── base-guides.liquid
    │   ├── base.liquid
    │   ├── guides.liquid
    │   └── workshop-stepper.liquid
    ├── _workshops
    │   ├── classification
    │   │   ├── 5.md
    │   │   ├── 7.md
    │   │   ├── 9.md
    │   │   ├── assets
    │   │   │   ├── classification_example.png
    │   │   │   ├── cloud_annotations.png
    │   │   │   ├── colab_credentials.png
    │   │   │   ├── colab_screenshot.png
    │   │   │   ├── colab_train_in.png
    │   │   │   ├── create_bucket.png
    │   │   │   ├── credentials_hmac.png
    │   │   │   ├── image_shrink.png
    │   │   │   ├── main.png
    │   │   │   ├── wml_catalog.png
    │   │   │   ├── wml_create.png
    │   │   │   ├── wml_credentials_modal.png
    │   │   │   ├── wml_new_credential.png
    │   │   │   └── wml_view_credentials.png
    │   │   ├── index.md
    │   │   └── what_next.md
    │   ├── object-detection
    │   │   ├── 2.md
    │   │   ├── 6.md
    │   │   ├── 8.md
    │   │   ├── 9.md
    │   │   ├── assets
    │   │   │   ├── 0a.CA_login.png
    │   │   │   ├── 10.CA_labeled.png
    │   │   │   ├── 11.CA_export.png
    │   │   │   ├── 12.CACLI_train.png
    │   │   │   ├── 1a.CA_no-object-storage.png
    │   │   │   ├── 2a.IBM_login-to-create-resource.png
    │   │   │   ├── 3a.IBM_create-object-storage.png
    │   │   │   ├── 4a.CA_create-bucket.png
    │   │   │   ├── 5.CA_name-bucket.png
    │   │   │   ├── 6a.CA_set-type.png
    │   │   │   ├── 7a.CA_blank-canvas.png
    │   │   │   ├── 9a.CA_create-label.png
    │   │   │   ├── colab_credentials.png
    │   │   │   ├── colab_screenshot.png
    │   │   │   ├── colab_train_in.png
    │   │   │   ├── credentials_hmac.png
    │   │   │   ├── image_shrink.png
    │   │   │   ├── main.png
    │   │   │   ├── main_image.png
    │   │   │   ├── resources.png
    │   │   │   ├── wml_catalog.png
    │   │   │   ├── wml_create.png
    │   │   │   ├── wml_credentials_modal.png
    │   │   │   ├── wml_new_credential.png
    │   │   │   └── wml_view_credentials.png
    │   │   ├── index.md
    │   │   └── what_next.md
    │   └── watson-studio-classification
    │   │   ├── common-issues.md
    │   │   ├── index.md
    │   │   ├── preparing-training-data.md
    │   │   ├── watson-studio.md
    │   │   └── what-next.md
    ├── android-chrome-192x192.png
    ├── apple-touch-icon.png
    ├── browserconfig.xml
    ├── demos.md
    ├── deploy.sh
    ├── docs-assets
    │   ├── _images
    │   │   ├── 0a.CA_login.png
    │   │   ├── 10.CA_labeled.png
    │   │   ├── 1a.CA_no-object-storage.png
    │   │   ├── 2a.IBM_login-to-create-resource.png
    │   │   ├── 3a.IBM_create-object-storage.png
    │   │   ├── 4a.CA_create-bucket.png
    │   │   ├── 5.CA_name-bucket.png
    │   │   ├── 6a.CA_set-type-classification.png
    │   │   ├── 6a.CA_set-type.png
    │   │   ├── 7a.CA_blank-canvas.png
    │   │   ├── 9a.CA_create-label.png
    │   │   ├── access-groups.png
    │   │   ├── add-access-policy.png
    │   │   ├── add-asset-to-watson-studio-project.png
    │   │   ├── add-email.png
    │   │   ├── add-users-to-access-group.png
    │   │   ├── assign-the-policy.png
    │   │   ├── choose-notebook-as-watson-studio-asset-type.png
    │   │   ├── choose-policies.png
    │   │   ├── class-thumb.png
    │   │   ├── create-empty-watson-studio-project.png
    │   │   ├── create-label-button.png
    │   │   ├── create-watson-studio-project.png
    │   │   ├── empty_dashboard.png
    │   │   ├── export-annotations.png
    │   │   ├── export-notebook.png
    │   │   ├── gdrive.png
    │   │   ├── image_shrink.png
    │   │   ├── invite-users.png
    │   │   ├── label-donuts.png
    │   │   ├── label_images.png
    │   │   ├── logo.png
    │   │   ├── main.png
    │   │   ├── main_image.png
    │   │   ├── manage-access.png
    │   │   ├── name-access-group.png
    │   │   ├── new_label.png
    │   │   ├── notebook-run-all.png
    │   │   ├── object-thumb.png
    │   │   ├── pending_training.png
    │   │   ├── select-users-from-access-group-list.png
    │   │   ├── shrink_image.png
    │   │   ├── small_image.png
    │   │   ├── training_steps.png
    │   │   ├── upload-media-classification.png
    │   │   ├── upload_alt.png
    │   │   ├── upload_training.png
    │   │   ├── view_all_training.png
    │   │   ├── watson-studio-notebook-details.png
    │   │   ├── watson-studio-project-details.png
    │   │   ├── wml_catalog.png
    │   │   ├── wml_create.png
    │   │   └── wml_dialog.png
    │   ├── css
    │   │   ├── components.css
    │   │   ├── custom.css
    │   │   ├── custom2.css
    │   │   ├── github-markdown.css
    │   │   ├── ibm-markdown.css
    │   │   └── toc.css
    │   ├── generated_images
    │   │   ├── 0a.CA_login.png
    │   │   ├── 10.CA_labeled.png
    │   │   ├── 1a.CA_no-object-storage.png
    │   │   ├── 2a.IBM_login-to-create-resource.png
    │   │   ├── 3a.IBM_create-object-storage.png
    │   │   ├── 4a.CA_create-bucket.png
    │   │   ├── 5.CA_name-bucket.png
    │   │   ├── 6a.CA_set-type-classification.png
    │   │   ├── 6a.CA_set-type.png
    │   │   ├── 7a.CA_blank-canvas.png
    │   │   ├── 9a.CA_create-label.png
    │   │   ├── access-groups.png
    │   │   ├── add-access-policy.png
    │   │   ├── add-asset-to-watson-studio-project.png
    │   │   ├── add-email.png
    │   │   ├── add-users-to-access-group.png
    │   │   ├── assign-the-policy.png
    │   │   ├── choose-notebook-as-watson-studio-asset-type.png
    │   │   ├── choose-policies.png
    │   │   ├── class-thumb.png
    │   │   ├── create-empty-watson-studio-project.png
    │   │   ├── create-label-button.png
    │   │   ├── create-watson-studio-project.png
    │   │   ├── empty_dashboard.png
    │   │   ├── export-annotations.png
    │   │   ├── export-notebook.png
    │   │   ├── gdrive.png
    │   │   ├── image_shrink.png
    │   │   ├── invite-users.png
    │   │   ├── label-donuts.png
    │   │   ├── label_images.png
    │   │   ├── main.png
    │   │   ├── main_image.png
    │   │   ├── manage-access.png
    │   │   ├── name-access-group.png
    │   │   ├── new_label.png
    │   │   ├── notebook-run-all.png
    │   │   ├── object-thumb.png
    │   │   ├── pending_training.png
    │   │   ├── select-users-from-access-group-list.png
    │   │   ├── shrink_image.png
    │   │   ├── small_image.png
    │   │   ├── training_steps.png
    │   │   ├── upload-media-classification.png
    │   │   ├── upload_alt.png
    │   │   ├── upload_training.png
    │   │   ├── view_all_training.png
    │   │   ├── watson-studio-notebook-details.png
    │   │   ├── watson-studio-project-details.png
    │   │   ├── wml_catalog.png
    │   │   ├── wml_create.png
    │   │   └── wml_dialog.png
    │   ├── generated_images@1x
    │   │   ├── 0a.CA_login.png
    │   │   ├── 10.CA_labeled.png
    │   │   ├── 1a.CA_no-object-storage.png
    │   │   ├── 2a.IBM_login-to-create-resource.png
    │   │   ├── 3a.IBM_create-object-storage.png
    │   │   ├── 4a.CA_create-bucket.png
    │   │   ├── 5.CA_name-bucket.png
    │   │   ├── 6a.CA_set-type-classification.png
    │   │   ├── 6a.CA_set-type.png
    │   │   ├── 7a.CA_blank-canvas.png
    │   │   ├── 9a.CA_create-label.png
    │   │   ├── access-groups.png
    │   │   ├── add-access-policy.png
    │   │   ├── add-asset-to-watson-studio-project.png
    │   │   ├── add-email.png
    │   │   ├── add-users-to-access-group.png
    │   │   ├── assign-the-policy.png
    │   │   ├── choose-notebook-as-watson-studio-asset-type.png
    │   │   ├── choose-policies.png
    │   │   ├── class-thumb.png
    │   │   ├── create-empty-watson-studio-project.png
    │   │   ├── create-label-button.png
    │   │   ├── create-watson-studio-project.png
    │   │   ├── empty_dashboard.png
    │   │   ├── export-annotations.png
    │   │   ├── export-notebook.png
    │   │   ├── gdrive.png
    │   │   ├── image_shrink.png
    │   │   ├── invite-users.png
    │   │   ├── label-donuts.png
    │   │   ├── label_images.png
    │   │   ├── main.png
    │   │   ├── main_image.png
    │   │   ├── manage-access.png
    │   │   ├── name-access-group.png
    │   │   ├── new_label.png
    │   │   ├── notebook-run-all.png
    │   │   ├── object-thumb.png
    │   │   ├── pending_training.png
    │   │   ├── select-users-from-access-group-list.png
    │   │   ├── shrink_image.png
    │   │   ├── small_image.png
    │   │   ├── training_steps.png
    │   │   ├── upload-media-classification.png
    │   │   ├── upload_alt.png
    │   │   ├── upload_training.png
    │   │   ├── view_all_training.png
    │   │   ├── watson-studio-notebook-details.png
    │   │   ├── watson-studio-project-details.png
    │   │   ├── wml_catalog.png
    │   │   ├── wml_create.png
    │   │   └── wml_dialog.png
    │   └── generated_images@2x
    │   │   ├── 0a.CA_login.png
    │   │   ├── 10.CA_labeled.png
    │   │   ├── 1a.CA_no-object-storage.png
    │   │   ├── 2a.IBM_login-to-create-resource.png
    │   │   ├── 3a.IBM_create-object-storage.png
    │   │   ├── 4a.CA_create-bucket.png
    │   │   ├── 5.CA_name-bucket.png
    │   │   ├── 6a.CA_set-type-classification.png
    │   │   ├── 6a.CA_set-type.png
    │   │   ├── 7a.CA_blank-canvas.png
    │   │   ├── 9a.CA_create-label.png
    │   │   ├── access-groups.png
    │   │   ├── add-access-policy.png
    │   │   ├── add-asset-to-watson-studio-project.png
    │   │   ├── add-email.png
    │   │   ├── add-users-to-access-group.png
    │   │   ├── assign-the-policy.png
    │   │   ├── choose-notebook-as-watson-studio-asset-type.png
    │   │   ├── choose-policies.png
    │   │   ├── class-thumb.png
    │   │   ├── create-empty-watson-studio-project.png
    │   │   ├── create-label-button.png
    │   │   ├── create-watson-studio-project.png
    │   │   ├── empty_dashboard.png
    │   │   ├── export-annotations.png
    │   │   ├── export-notebook.png
    │   │   ├── gdrive.png
    │   │   ├── image_shrink.png
    │   │   ├── invite-users.png
    │   │   ├── label-donuts.png
    │   │   ├── label_images.png
    │   │   ├── main.png
    │   │   ├── main_image.png
    │   │   ├── manage-access.png
    │   │   ├── name-access-group.png
    │   │   ├── new_label.png
    │   │   ├── notebook-run-all.png
    │   │   ├── object-thumb.png
    │   │   ├── pending_training.png
    │   │   ├── select-users-from-access-group-list.png
    │   │   ├── shrink_image.png
    │   │   ├── small_image.png
    │   │   ├── training_steps.png
    │   │   ├── upload-media-classification.png
    │   │   ├── upload_alt.png
    │   │   ├── upload_training.png
    │   │   ├── view_all_training.png
    │   │   ├── watson-studio-notebook-details.png
    │   │   ├── watson-studio-project-details.png
    │   │   ├── wml_catalog.png
    │   │   ├── wml_create.png
    │   │   └── wml_dialog.png
    ├── favicon-16x16.png
    ├── favicon-32x32.png
    ├── favicon.ico
    ├── generate_assets.sh
    ├── k8s
    │   └── docs.yaml
    ├── mstile-150x150.png
    ├── nginx
    │   └── default.conf
    ├── safari-pinned-tab.svg
    ├── sdks.md
    ├── site.webmanifest
    └── workshops.md
├── jest.config.js
├── lerna.json
├── package.json
├── packages
    ├── iris-api
    │   ├── package.json
    │   ├── src
    │   │   ├── api.ts
    │   │   ├── endpoint.ts
    │   │   ├── index.ts
    │   │   ├── types.ts
    │   │   └── utils.ts
    │   └── tsconfig.json
    ├── iris-app
    │   ├── config
    │   │   ├── env.js
    │   │   ├── getHttpsConfig.js
    │   │   ├── jest
    │   │   │   ├── cssTransform.js
    │   │   │   └── fileTransform.js
    │   │   ├── modules.js
    │   │   ├── paths.js
    │   │   ├── pnpTs.js
    │   │   ├── webpack.config.js
    │   │   └── webpackDevServer.config.js
    │   ├── package.json
    │   ├── public
    │   │   ├── android-chrome-192x192.png
    │   │   ├── apple-touch-icon.png
    │   │   ├── browserconfig.xml
    │   │   ├── favicon-16x16.png
    │   │   ├── favicon-32x32.png
    │   │   ├── favicon-green-16x16.png
    │   │   ├── favicon-green-32x32.png
    │   │   ├── favicon-red-16x16.png
    │   │   ├── favicon-red-32x32.png
    │   │   ├── favicon-yellow-16x16.png
    │   │   ├── favicon-yellow-32x32.png
    │   │   ├── favicon.ico
    │   │   ├── index.html
    │   │   ├── install.sh
    │   │   ├── mstile-150x150.png
    │   │   ├── robots.txt
    │   │   ├── safari-pinned-tab.svg
    │   │   ├── site.webmanifest
    │   │   └── sitemap.xml
    │   ├── scripts
    │   │   ├── WebpackDevServerUtils.js
    │   │   ├── build.js
    │   │   ├── start.js
    │   │   └── test.js
    │   ├── src
    │   │   ├── AuthenticatedApp
    │   │   │   ├── NotFound
    │   │   │   │   └── index.tsx
    │   │   │   ├── Project
    │   │   │   │   ├── Layout.tsx
    │   │   │   │   ├── components
    │   │   │   │   │   ├── Header
    │   │   │   │   │   │   └── index.tsx
    │   │   │   │   │   ├── Main
    │   │   │   │   │   │   └── index.tsx
    │   │   │   │   │   └── image-utils.ts
    │   │   │   │   ├── editors
    │   │   │   │   │   └── ObjectDetection
    │   │   │   │   │   │   ├── Layout.tsx
    │   │   │   │   │   │   └── index.tsx
    │   │   │   │   ├── index.tsx
    │   │   │   │   └── panels
    │   │   │   │   │   ├── DrawingPanel
    │   │   │   │   │       ├── color-utils.ts
    │   │   │   │   │       ├── index.tsx
    │   │   │   │   │       └── styles.module.css
    │   │   │   │   │   ├── ImagesPanel
    │   │   │   │   │       ├── index.tsx
    │   │   │   │   │       └── styles.module.css
    │   │   │   │   │   ├── ShapesPanel
    │   │   │   │   │       ├── index.tsx
    │   │   │   │   │       └── styles.module.css
    │   │   │   │   │   ├── ToolOptionsPanel
    │   │   │   │   │       ├── index.tsx
    │   │   │   │   │       └── styles.module.css
    │   │   │   │   │   └── ToolsPanel
    │   │   │   │   │       ├── index.tsx
    │   │   │   │   │       └── styles.module.css
    │   │   │   ├── Projects
    │   │   │   │   ├── Connections.tsx
    │   │   │   │   ├── Header.tsx
    │   │   │   │   ├── Layout.tsx
    │   │   │   │   ├── Main.tsx
    │   │   │   │   └── index.tsx
    │   │   │   └── index.tsx
    │   │   ├── UnauthenticatedApp
    │   │   │   └── index.tsx
    │   │   ├── bootstrap.handlebars
    │   │   ├── index.css
    │   │   ├── initIris.ts
    │   │   ├── initReactApp.tsx
    │   │   ├── react-app-env.d.ts
    │   │   └── setupProxy.js
    │   ├── tsconfig.json
    │   └── yarn.lock
    ├── iris-components
    │   ├── .storybook
    │   │   ├── main.js
    │   │   └── preview.js
    │   ├── package.json
    │   ├── src
    │   │   ├── CanvasView
    │   │   │   ├── index.stories.tsx
    │   │   │   └── index.tsx
    │   │   ├── CrossHair
    │   │   │   ├── Horizontal.tsx
    │   │   │   ├── Pointer.tsx
    │   │   │   ├── Vertical.tsx
    │   │   │   ├── index.stories.tsx
    │   │   │   ├── index.tsx
    │   │   │   └── styles.ts
    │   │   ├── Dialog
    │   │   │   ├── index.tsx
    │   │   │   ├── showConfirmDialog.tsx
    │   │   │   ├── showDialog.tsx
    │   │   │   ├── showFileDialog.tsx
    │   │   │   └── showInputDialog.tsx
    │   │   ├── EmptySet
    │   │   │   ├── index.stories.tsx
    │   │   │   └── index.tsx
    │   │   ├── HorizontalListController
    │   │   │   ├── HorizontalListItem.js
    │   │   │   └── index.js
    │   │   ├── ImageTile
    │   │   │   ├── index.stories.tsx
    │   │   │   └── index.tsx
    │   │   ├── LabelSelect
    │   │   │   ├── index.stories.tsx
    │   │   │   └── index.tsx
    │   │   ├── ToolbarMenus
    │   │   │   ├── Divider.tsx
    │   │   │   ├── Header.module.css
    │   │   │   ├── MenuItem.tsx
    │   │   │   ├── icons
    │   │   │   │   ├── Chevron.tsx
    │   │   │   │   └── Tooltip.tsx
    │   │   │   ├── index.tsx
    │   │   │   └── types.ts
    │   │   └── index.ts
    │   └── tsconfig.json
    ├── iris-core
    │   ├── package.json
    │   ├── src
    │   │   ├── CanvasPlugin
    │   │   │   ├── Canvas.ts
    │   │   │   └── index.ts
    │   │   ├── data
    │   │   │   ├── index.test.ts
    │   │   │   ├── index.ts
    │   │   │   ├── types.ts
    │   │   │   ├── utils.test.ts
    │   │   │   └── utils.ts
    │   │   ├── hooks.ts
    │   │   ├── index.ts
    │   │   ├── load.ts
    │   │   ├── meta
    │   │   │   └── index.ts
    │   │   ├── persist.ts
    │   │   ├── room
    │   │   │   └── index.ts
    │   │   └── store.ts
    │   └── tsconfig.json
    ├── iris-hooks
    │   ├── package.json
    │   ├── src
    │   │   ├── index.ts
    │   │   ├── useBlockSwipeBack
    │   │   │   └── index.ts
    │   │   └── useClickOutside
    │   │   │   └── index.ts
    │   └── tsconfig.json
    ├── iris-icons
    │   ├── package.json
    │   ├── src
    │   │   ├── IrisLogo.tsx
    │   │   └── index.ts
    │   └── tsconfig.json
    ├── iris-plugin-box-tool
    │   ├── package.json
    │   ├── src
    │   │   ├── ActiveLabel
    │   │   │   └── index.tsx
    │   │   ├── BoxCanvasPlugin.ts
    │   │   └── index.tsx
    │   └── tsconfig.json
    └── iris-theme
    │   ├── package.json
    │   ├── src
    │       └── index.ts
    │   └── tsconfig.json
├── server
    ├── package.json
    ├── src
    │   ├── handlers
    │   │   ├── error.ts
    │   │   └── not-found.ts
    │   ├── index.ts
    │   ├── middleware
    │   │   ├── gzip.ts
    │   │   ├── logger.ts
    │   │   ├── pino-colada.d.ts
    │   │   └── security.ts
    │   ├── multiuser.ts
    │   ├── plugins
    │   │   ├── iris-server-plugin-cos
    │   │   │   ├── COSProvider.ts
    │   │   │   └── index.ts
    │   │   ├── iris-server-plugin-file-system
    │   │   │   ├── FileSystemProvider.ts
    │   │   │   └── index.ts
    │   │   ├── iris-server-plugin-ibm-auth
    │   │   │   └── index.ts
    │   │   └── project-provider
    │   │   │   └── index.ts
    │   └── routes
    │   │   ├── auth.ts
    │   │   ├── spa.ts
    │   │   └── v2.ts
    └── tsconfig.json
├── training
    ├── notebooks
    │   ├── colab
    │   │   ├── classification.ipynb
    │   │   └── object_detection.ipynb
    │   └── templates
    │   │   ├── classification-notebook.ipynb
    │   │   ├── object-detection-testing-wml.ipynb
    │   │   └── object-detection-training.ipynb
    ├── pipelines
    │   └── classification.pipeline
    └── scripts
    │   └── trainer
    │       ├── .dockerignore
    │       ├── .flake8
    │       ├── .gitignore
    │       ├── Dockerfile
    │       ├── MANIFEST.in
    │       ├── Makefile
    │       ├── README.md
    │       ├── setup.py
    │       ├── src
    │           ├── __init__.py
    │           ├── convert
    │           │   ├── TFLiteConverter.py
    │           │   ├── __init__.py
    │           │   ├── build_decoder.py
    │           │   ├── build_nms.py
    │           │   ├── convert.py
    │           │   ├── convert_to_core_ml.py
    │           │   ├── convert_to_tfjs.py
    │           │   └── convert_to_tflite.py
    │           ├── data
    │           │   ├── __init__.py
    │           │   ├── prepare_data_classification.py
    │           │   └── prepare_data_object_detection.py
    │           ├── export_labels.py
    │           ├── get_latest_checkpoint.py
    │           ├── model_main_override.py
    │           ├── pipeline_skeleton.config
    │           ├── requirements.txt
    │           └── start.sh
    │       └── test
    │           ├── cache.sh
    │           ├── convert.sh
    │           ├── ensure_models_exist.sh
    │           └── run.sh
├── tsconfig.base.json
└── yarn.lock


/.github/workflows/deploy.yaml:
--------------------------------------------------------------------------------
 1 | name: Deployment
 2 | 
 3 | concurrency: production
 4 | 
 5 | on:
 6 |   push:
 7 |     branches:
 8 |       - main
 9 | 
10 | env:
11 |   DEPLOY_TO: production
12 |   CLUSTER_ID: c6bbmpjw0i2st0vc9gr0
13 |   IMAGE_NAME: us.icr.io/cloud-annotations/docs:${{ github.sha }}
14 |   IBMCLOUD_API_KEY: ${{ secrets.IBMCLOUD_API_KEY }}
15 | 
16 | jobs:
17 |   docs:
18 |     name: Deploy Documentation
19 |     runs-on: ubuntu-latest
20 |     environment: production
21 |     steps:
22 |       - uses: actions/checkout@v2
23 |       - uses: actions/setup-node@v2
24 |         with:
25 |           node-version: "*"
26 |       - name: Install IBM Cloud CLI
27 |         run: |
28 |           curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
29 |           ibmcloud plugin install container-registry
30 |           ibmcloud plugin install container-service
31 |       - name: Install Kubernetes CLI
32 |         run: |
33 |           curl --progress-bar -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
34 |       - name: Deploy
35 |         run: |
36 |           cd docs
37 |           ./deploy.sh


--------------------------------------------------------------------------------
/.github/workflows/validate.yaml:
--------------------------------------------------------------------------------
 1 | name: Validate
 2 | 
 3 | on: [push, pull_request]
 4 | 
 5 | jobs:
 6 |   prepare-yarn-cache:
 7 |     name: Prepare Cache
 8 |     runs-on: ubuntu-latest
 9 |     steps:
10 |       - uses: actions/checkout@v2
11 |       - uses: actions/setup-node@v2
12 |         with:
13 |           node-version: "*"
14 |       - uses: actions/cache@v2
15 |         with:
16 |           path: |
17 |             node_modules
18 |             packages/*/node_modules
19 |             server/node_modules
20 |           key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
21 |       - name: Install
22 |         run: yarn install --frozen-lockfile
23 | 
24 |   lint:
25 |     name: Lint
26 |     needs: prepare-yarn-cache
27 |     runs-on: ubuntu-latest
28 |     steps:
29 |       - uses: actions/checkout@v2
30 |       - uses: actions/setup-node@v2
31 |         with:
32 |           node-version: "*"
33 |       - uses: actions/cache@v2
34 |         with:
35 |           path: |
36 |             node_modules
37 |             packages/*/node_modules
38 |             server/node_modules
39 |           key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
40 |       - name: Install
41 |         run: yarn install
42 |       - name: Check format
43 |         run: yarn format
44 |       - name: Lint
45 |         run: yarn lint


--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
 1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
 2 | 
 3 | **/iris-app/src/bootstrap.js
 4 | 
 5 | /sample-projects
 6 | 
 7 | # dependencies
 8 | **/node_modules
 9 | 
10 | # testing
11 | **/coverage
12 | 
13 | # production
14 | **/build
15 | **/dist
16 | 
17 | # misc
18 | .DS_Store
19 | .env.local
20 | .env.development.local
21 | .env.test.local
22 | .env.production.local
23 | 
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 | lerna-debug.log*
28 | 
29 | # Docs
30 | _site/
31 | .sass-cache/
32 | .jekyll-cache/
33 | .jekyll-metadata
34 | vendor
35 | 
36 | .env


--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "python.pythonPath": "trainer/env/bin/python",
 3 |   "workbench.editor.labelFormat": "short",
 4 |   "[typescript]": {
 5 |     "editor.codeActionsOnSave": {
 6 |       "source.fixAll.eslint": true
 7 |     }
 8 |   },
 9 |   "[typescriptreact]": {
10 |     "editor.codeActionsOnSave": {
11 |       "source.fixAll.eslint": true
12 |     }
13 |   }
14 | }
15 | 


--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
 1 | MIT License
 2 | 
 3 | Copyright (c) 2018-2021 International Business Machines
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy
 6 | of this software and associated documentation files (the "Software"), to deal
 7 | in the Software without restriction, including without limitation the rights
 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 | 


--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | # Cloud Annotations
 2 | 
 3 | > **Important Note: Due to unforseen circumstances, the hosted version of Cloud Annotations (cloud.annotations.ai) is no longer available.**
 4 | >
 5 | > For a similar hosted experience, but focused on education/learning, see [Computer Vision Learning Studio](https://vision.skills.network/).
 6 | >
 7 | > For instructions on how to run Cloud Annotations using the local file system, see the experimental [Iris project](https://github.com/cloud-annotations/iris/tree/v2).
 8 | 
 9 | ![Logo][logo]
10 | 
11 | <!-- GitHub -->
12 | 
13 | [logo]: ./docs/docs-assets/_images/logo.png
14 | [actions]: https://github.com/cloud-annotations/cloud-annotations/actions/workflows/validate.yaml?query=branch%3Amaster
15 | [issues]: https://github.com/cloud-annotations/cloud-annotations/issues/new
16 | 
17 | <!-- Badges -->
18 | 
19 | [actions-badge]: https://img.shields.io/github/workflow/status/cloud-annotations/cloud-annotations/Validate?logo=github
20 | 


--------------------------------------------------------------------------------
/cli/bin/cli.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const { Command } = require("commander");
 9 | 
10 | const build = require("./commands/build");
11 | const server = require("./commands/server");
12 | const start = require("./commands/start");
13 | const ui = require("./commands/ui");
14 | 
15 | function cli() {
16 |   const program = new Command();
17 |   program.version("0.0.1");
18 | 
19 |   program.addCommand(start);
20 |   program.addCommand(build);
21 |   program.addCommand(ui);
22 |   program.addCommand(server);
23 | 
24 |   program.parse(process.argv);
25 | }
26 | 
27 | module.exports = cli;
28 | 


--------------------------------------------------------------------------------
/cli/bin/commands/build.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const { Command } = require("commander");
 9 | 
10 | const command = new Command()
11 |   .command("build")
12 |   .description("TODO: description")
13 |   .action(() => {
14 |     console.log("...");
15 |   });
16 | 
17 | module.exports = command;
18 | 


--------------------------------------------------------------------------------
/cli/bin/commands/server.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const { Command } = require("commander");
 9 | 
10 | const command = new Command()
11 |   .command("server")
12 |   .description("TODO: description")
13 |   .action(() => {
14 |     console.log("...");
15 |   });
16 | 
17 | module.exports = command;
18 | 


--------------------------------------------------------------------------------
/cli/bin/commands/ui.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const { Command } = require("commander");
 9 | 
10 | const command = new Command()
11 |   .command("ui")
12 |   .description("TODO: description")
13 |   .action(() => {
14 |     console.log("...");
15 |   });
16 | 
17 | module.exports = command;
18 | 


--------------------------------------------------------------------------------
/cli/bin/index.js:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env node
 2 | /*
 3 |  * Copyright (c) International Business Machines
 4 |  *
 5 |  * This source code is licensed under the MIT license found in the
 6 |  * LICENSE file in the root directory of this source tree.
 7 |  */
 8 | 
 9 | const currentNodeVersion = process.versions.node;
10 | const semver = currentNodeVersion.split(".");
11 | const major = semver[0];
12 | 
13 | if (major < 10) {
14 |   console.error(
15 |     "You are running Node " +
16 |       currentNodeVersion +
17 |       ".\n" +
18 |       "Iris requires Node 10 or higher. \n" +
19 |       "Please update your version of Node."
20 |   );
21 |   process.exit(1);
22 | }
23 | 
24 | const cli = require("./cli");
25 | 
26 | cli();
27 | 


--------------------------------------------------------------------------------
/cli/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/cli",
 3 |   "version": "0.0.12",
 4 |   "bin": {
 5 |     "iris": "./bin/index.js"
 6 |   },
 7 |   "scripts": {
 8 |     "install": "rm -rf /usr/local/lib/iris && git clone https://github.com/cloud-annotations/iris.git /usr/local/lib/iris",
 9 |     "uninstall": "rm -rf /usr/local/lib/iris"
10 |   },
11 |   "publishConfig": {
12 |     "access": "public"
13 |   },
14 |   "dependencies": {
15 |     "commander": "^7.1.0"
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/cli/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 | 
4 | 
5 | commander@^7.1.0:
6 |   version "7.1.0"
7 |   resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff"
8 |   integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==
9 | 


--------------------------------------------------------------------------------
/docs/.dockerignore:
--------------------------------------------------------------------------------
1 | **/_site/
2 | **/.sass-cache/
3 | **/.jekyll-cache/
4 | **/.jekyll-metadata
5 | **/vendor


--------------------------------------------------------------------------------
/docs/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | .sass-cache/
3 | .jekyll-cache/
4 | .jekyll-metadata
5 | vendor
6 | 


--------------------------------------------------------------------------------
/docs/CNAME:
--------------------------------------------------------------------------------
1 | docs.annotations.ai


--------------------------------------------------------------------------------
/docs/Dockerfile:
--------------------------------------------------------------------------------
 1 | FROM nginx
 2 | 
 3 | EXPOSE 80
 4 | 
 5 | # Ruby
 6 | RUN apt-get -y update && apt-get -y install ruby-full build-essential
 7 | # RUN apt-get -y install ruby ruby-dev build-essential nodejs
 8 | 
 9 | ENV GEM_HOME "$HOME/gems"
10 | ENV PATH "$HOME/gems/bin:$PATH"
11 | 
12 | # Jekyll
13 | # RUN gem install jekyll bundler octopress-autoprefixer
14 | RUN gem install jekyll bundler
15 | 
16 | # Environment
17 | ENV LC_ALL C.UTF-8
18 | ENV LANG en_US.UTF-8
19 | ENV LANGUAGE en_US.UTF-8
20 | 
21 | ADD . /tmp/jekyll-site
22 | WORKDIR /tmp/jekyll-site
23 | RUN bundle install
24 | RUN JEKYLL_ENV=production bundle exec jekyll build
25 | RUN cp /tmp/jekyll-site/nginx/default.conf /etc/nginx/conf.d/default.conf
26 | RUN cp -r /tmp/jekyll-site/_site/* /usr/share/nginx/html


--------------------------------------------------------------------------------
/docs/Gemfile:
--------------------------------------------------------------------------------
 1 | source "https://rubygems.org"
 2 | 
 3 | # Hello! This is where you manage which Jekyll version is used to run.
 4 | # When you want to use a different version, change it below, save the
 5 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
 6 | #
 7 | #     bundle exec jekyll serve
 8 | #
 9 | # This will help ensure the proper Jekyll version is running.
10 | # Happy Jekylling!
11 | gem "jekyll", "~> 4.0.0"
12 | 
13 | # This is the default theme for new Jekyll sites. You may change this to anything you like.
14 | gem "minima", "~> 2.5"
15 | 
16 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and
17 | # uncomment the line below. To upgrade, run `bundle update github-pages`.
18 | # gem "github-pages", group: :jekyll_plugins
19 | 
20 | # If you have any plugins, put them here!
21 | group :jekyll_plugins do
22 |   gem "jekyll-feed", "~> 0.12"
23 |   gem "jekyll-redirect-from", "~> 0.15"
24 | end
25 | 
26 | # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
27 | # and associated library.
28 | install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
29 |   gem "tzinfo", "~> 1.2"
30 |   gem "tzinfo-data"
31 | end
32 | 
33 | # Performance-booster for watching directories on Windows
34 | gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?
35 | 


--------------------------------------------------------------------------------
/docs/_guides/classification.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Classification
 3 | # date: 1970-01-04
 4 | ---
 5 | 
 6 | After your bucket is created and named, it will prompt you to choose an annotation type. Choose `Classification`.
 7 | 
 8 | {% include responsive.liquid image="6a.CA_set-type-classification.png" %}
 9 | 
10 | ## Labeling the data
11 | 
12 | <!-- markdown list doesn't support include -->
13 | <ol>
14 |   <li>Create the desired labels
15 |   {% include responsive.liquid image="create-label-button.png" %}
16 |   </li>
17 |   <li>Upload a video or some images
18 |   {% include responsive.liquid image="upload-media-classification.png" %}
19 |   </li>
20 |   <li>Select images then choose <code class="highlighter-rouge">Label</code> > <code class="highlighter-rouge">DESIRED_LABEL</code>
21 |   {% include responsive.liquid image="label-donuts.png" %}
22 |   </li>
23 | </ol>
24 | 
25 | > **Pro Tip:** Upload images of the same class and use <kbd>⌘</kbd> + <kbd>A</kbd> (<kbd>Ctrl</kbd> + <kbd>A</kbd> on windows) to label all of the unlabeled images as the same label.
26 | 
27 | ## Keyboard shortcuts
28 | 
29 | | Functionality     |             Mac             |        Windows / Linux         |
30 | | :---------------- | :-------------------------: | :----------------------------: |
31 | | Select all images | <kbd>⌘</kbd> + <kbd>A</kbd> | <kbd>Ctrl</kbd> + <kbd>A</kbd> |
32 | | Expand selection  |  <kbd>Shift</kbd> + Click   |    <kbd>Shift</kbd> + Click    |
33 | 


--------------------------------------------------------------------------------
/docs/_guides/getting-started.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Getting started
 3 | # date: 1970-01-01
 4 | ---
 5 | 
 6 | Cloud Annotations makes labeling images and training machine learning models easy.
 7 | Whether you've never touched a line of code in your life or you're a TensorFlow ninja, these docs will help you build what you need. Let's get started!
 8 | 
 9 | ## Sign up for [IBM Cloud](https://ibm.biz/cloud-annotations-sign-up){:target="_blank"}
10 | Cloud Annotations is built on top of IBM Cloud Object Storage.
11 | Using a cloud object storage offering provides a reliable place to store training data.
12 | It also opens up the potential for collaboration, letting a team to simultaneously annotate the dataset in real-time.
13 | 
14 | IBM Cloud offers a lite tier of object storage, which includes 25 GB of free storage.
15 | 
16 | Before you start, sign up for a free [IBM Cloud](https://ibm.biz/cloud-annotations-dashboard){:target="_blank"} account.
17 | 


--------------------------------------------------------------------------------
/docs/_guides/object-detection.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Object detection
 3 | # date: 1970-01-03
 4 | ---
 5 | 
 6 | After your bucket is created and named, it will prompt you to choose an annotation type. Choose `Localization`, this enables bounding box drawing.
 7 | 
 8 | {% include responsive.liquid image="6a.CA_set-type.png" %}
 9 | 
10 | ## Labeling the data
11 | 
12 | <!-- markdown list doesn't support include -->
13 | <ol>
14 |   <li>Upload a video or some images
15 |   {% include responsive.liquid image="7a.CA_blank-canvas.png" %}
16 |   </li>
17 |   <li>Create the desired labels
18 |   {% include responsive.liquid image="9a.CA_create-label.png" %}
19 |   </li>
20 |   <li>Start drawing bounding boxes
21 |   {% include responsive.liquid image="10.CA_labeled.png" %}
22 |   </li>
23 | </ol>
24 | 
25 | ## Keyboard shortcuts
26 | 
27 | | Functionality                     |                  Mac                   |            Windows / Linux             |
28 | | :-------------------------------- | :------------------------------------: | :------------------------------------: |
29 | | Cycle active label                |              <kbd>Q</kbd>              |              <kbd>Q</kbd>              |
30 | | Switch active label               |      <kbd>0</kbd> - <kbd>9</kbd>       |      <kbd>0</kbd> - <kbd>9</kbd>       |
31 | | Next image                        | <kbd>Right</kbd> / <kbd>Spacebar</kbd> | <kbd>Right</kbd> / <kbd>Spacebar</kbd> |
32 | | Previous image                    |            <kbd>Left</kbd>             |            <kbd>Left</kbd>             |
33 | | Multiselect images                |          <kbd>⌘</kbd> + Click          |        <kbd>Ctrl</kbd> + Click         |
34 | | Temporarily activate the `✥` tool |           Hold <kbd>⌘</kbd>            |          Hold <kbd>Ctrl</kbd>          |
35 | 


--------------------------------------------------------------------------------
/docs/_includes/code-error.liquid:
--------------------------------------------------------------------------------
1 | <div class="highlighter-rouge">
2 |   <div class="highlight">
3 |     <pre class="highlight" style="background-color: #ffeef0; color: #b31d28;"><code>{{ include.content | markdownify }}</code></pre>
4 |   </div>
5 | </div>


--------------------------------------------------------------------------------
/docs/_includes/head.liquid:
--------------------------------------------------------------------------------
 1 | <head>
 2 |   <meta charset="utf-8" />
 3 |   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 4 |   <meta name="viewport" content="width=device-width, initial-scale=1" />
 5 |   {%- seo -%}
 6 |   <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
 7 |   <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
 8 |   <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
 9 |   <link rel="manifest" href="/site.webmanifest" />
10 |   <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#0062ff" />
11 |   <meta name="msapplication-TileColor" content="#0062ff" />
12 |   <meta name="theme-color" content="#ffffff" />
13 | 
14 |   <!-- jQuery library -->
15 |   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
16 |   <!-- Latest compiled JavaScript -->
17 |   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
18 | 
19 |   <link
20 |     rel="stylesheet"
21 |     href="{{ '/docs-assets/css/components.css' | relative_url }}"
22 |   />
23 |   <link
24 |     rel="stylesheet"
25 |     href="{{ '/docs-assets/css/github-markdown.css' | relative_url }}"
26 |   />
27 |   <!-- <link
28 |     rel="stylesheet"
29 |     href="{{ '/docs-assets/css/ibm-markdown.css' | relative_url }}"
30 |   /> -->
31 |   <link
32 |     rel="stylesheet"
33 |     href="{{ '/docs-assets/css/custom2.css' | relative_url }}"
34 |   />
35 |   <link
36 |     rel="stylesheet"
37 |     href="{{ '/docs-assets/css/custom.css' | relative_url }}"
38 |   />
39 |   <link
40 |     rel="stylesheet"
41 |     href="{{ '/docs-assets/css/toc.css' | relative_url }}"
42 |   />
43 |   {%- feed_meta -%} {%- if jekyll.environment == 'production' and
44 |   site.google_analytics -%} {%- include google-analytics.html -%} {%- endif -%}
45 | </head>
46 | 


--------------------------------------------------------------------------------
/docs/_includes/responsive.liquid:
--------------------------------------------------------------------------------
 1 | <picture>
 2 |   <source
 3 |     class="content-responsive-img"
 4 |     media="(max-width: 600px)"
 5 |     srcset="/docs-assets/generated_images/{{ include.image }}, /docs-assets/generated_images@1x/{{ include.image }} 2x"
 6 |   />
 7 |   <img
 8 |     class="content-responsive-img"
 9 |     src="/docs-assets/generated_images@1x/{{ include.image }}"
10 |     alt="{{ include.alt }}"
11 |     srcset="/docs-assets/generated_images@2x/{{ include.image }} 2x"
12 |   />
13 | </picture>
14 | 


--------------------------------------------------------------------------------
/docs/_layouts/base-guides.liquid:
--------------------------------------------------------------------------------
 1 | <!DOCTYPE html>
 2 | <html lang="{{ page.lang | default: site.lang | default: " en " }}">
 3 | 
 4 | {%- include head.liquid -%}
 5 | 
 6 | <body>
 7 |   {{ content }}
 8 | 
 9 |   <script>
10 | 
11 | const ID = function () {
12 |   // Math.random should be unique because of its seeding algorithm.
13 |   // Convert it to base 36 (numbers + letters), and grab the first 9 characters
14 |   // after the decimal.
15 |   return '-' + Math.random().toString(36).substr(2, 9);
16 | };
17 | 
18 | $('body .markdown-body').find("h1").each(function() {
19 |   const h1ID = this.id
20 |   let listItems = []
21 |   $(this).next("section").find("h2").each(function() {
22 |     this.id = this.id + ID()
23 |     listItems.push('<li><a href="#' + this.id + '">'+$(this).text()+'</a></li>')
24 |   })
25 |   $("#nav-" + h1ID + ' .nav-stacked').html(listItems.join(''))
26 | })
27 | 
28 | $('body').scrollspy({
29 |     target: '#the-nav-bar',
30 |     offset: 140
31 | })
32 | 
33 |    </script>
34 | </body>
35 | 
36 | </html>


--------------------------------------------------------------------------------
/docs/_layouts/base.liquid:
--------------------------------------------------------------------------------
 1 | <!DOCTYPE html>
 2 | <html lang="{{ page.lang | default: site.lang | default: " en " }}">
 3 | 
 4 | {%- include head.liquid -%}
 5 | 
 6 | <body>
 7 |   {{ content }}
 8 |   <!-- Stops weird animation when loading...? -->
 9 |   <script>$('body')</script>
10 | </body>
11 | 
12 | </html>


--------------------------------------------------------------------------------
/docs/_layouts/guides.liquid:
--------------------------------------------------------------------------------
 1 | ---
 2 | layout: base-guides
 3 | ---
 4 | 
 5 | {% include titlebar.liquid active="guides" %}
 6 | 
 7 | <main class="wrapper-stuff">
 8 |   <!--Nav Bar -->
 9 |   <nav class="col-xs-3 bs-docs-sidebar" id="the-nav-bar">
10 |     <ul id="sidebar" class="nav nav-stacked fixed">
11 |       {% for item in site[page.collection] %}
12 |       <li id="nav-{{ item.title_overide | default: item.title | slugify }}">
13 |         <a href="#{{ item.title_overide | default: item.title | slugify }}"
14 |           >{{ item.title_overide | default: item.title }}</a
15 |         >
16 |         <ul class="nav nav-stacked"></ul>
17 |       </li>
18 |       {% endfor %}
19 |     </ul>
20 |   </nav>
21 | 
22 |   <!--Main Content -->
23 |   <article class="content markdown-body">
24 |     {% for item in site[page.collection] %}
25 |     <h1 id="{{ item.title_overide | default: item.title | slugify }}">
26 |       {{ item.title_overide | default: item.title }}
27 |     </h1>
28 |     <section class="guide-section">{{ item.content }}</section>
29 |     {% endfor %}
30 |   </article>
31 | </main>
32 | 


--------------------------------------------------------------------------------
/docs/_workshops/classification/7.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Training a model
 3 | order: 4
 4 | redirect_from:
 5 |   - /classification/cli/7.html
 6 | ---
 7 | 
 8 | Cloud Annotations focuses on the dataset creation aspect of the model development lifecycle leaving the training up to you. There are many ways to train your model, each with their own use cases and tradeoffs. You could train from scratch using a framework like [TensorFlow](https://www.tensorflow.org/){:target="_blank"} or [PyTorch](https://pytorch.org/){:target="_blank"}, use a drag & drop tool like Apple's [Create ML](https://developer.apple.com/machine-learning/create-ml/){:target="_blank"} or use a cloud managed solution like [Watson Machine Learning](https://www.ibm.com/cloud/machine-learning){:target="_blank"}.
 9 | 
10 | Today we'll be using an online tool called Google Colab as a free and easy way to get our first model trained.
11 | 
12 | ## Training with Google Colab
13 | Google Colaboratory, or “Colab” for short, is a product from Google Research. Colab allows anybody to write and execute arbitrary python code through the browser, and is especially well suited to machine learning, data analysis and education. More technically, Colab is a hosted Jupyter notebook service that requires no setup to use, while providing free access to computing resources including GPUs.
14 | 
15 | To train your model with Colab, click `Train model in Colab`.
16 | 
17 | ![Train in Colab](assets/colab_train_in.png)
18 | 
19 | 
20 | Copy the provided credentials and click `Open Colab`.
21 | 
22 | ![Colab Credentials](assets/colab_credentials.png)
23 | 
24 | 
25 | In order to access our training data from our Colab notebook, our code needs credentials for the object storage bucket. Paste the credentials copied from the previous step into the first cell and follow the rest of the instructions provided in the notebook.
26 | 
27 | ![Colab Screenshot](assets/colab_screenshot.png)


--------------------------------------------------------------------------------
/docs/_workshops/classification/9.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Common issues
3 | order: 6
4 | redirect_from:
5 |   - /classification/cli/9.html
6 | ---
7 | This page is updated regularly with issues that frequently occur.
8 | > **Note:** If you don't see your issue listed below, feel free to contact me at bourdakos1@gmail.com


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/classification_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/classification_example.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/cloud_annotations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/cloud_annotations.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/colab_credentials.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/colab_credentials.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/colab_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/colab_screenshot.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/colab_train_in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/colab_train_in.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/create_bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/create_bucket.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/credentials_hmac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/credentials_hmac.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/image_shrink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/image_shrink.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/main.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/wml_catalog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/wml_catalog.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/wml_create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/wml_create.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/wml_credentials_modal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/wml_credentials_modal.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/wml_new_credential.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/wml_new_credential.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/assets/wml_view_credentials.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/classification/assets/wml_view_credentials.png


--------------------------------------------------------------------------------
/docs/_workshops/classification/index.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Introduction
 3 | order: 1
 4 | redirect_from:
 5 |   - /classification/cli/
 6 | ---
 7 | 
 8 | ![](assets/main.png)
 9 | 
10 | ## What you will build
11 | In this workshop, you’ll build an app that lets you use your own custom-trained models to classify images.
12 | You’ll create an IBM Cloud Object Storage instance to store your labeled data, then after your data is ready, you’ll learn how to train your own custom model on Google Colab.
13 | After your model has completed training, you can simply plug the model into your application.
14 | ![](assets/classification_example.png)
15 | 
16 | ## Prerequisites
17 | * **Recommended:** A basic understanding of using terminal
18 | 


--------------------------------------------------------------------------------
/docs/_workshops/classification/what_next.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: What next?
 3 | order: 7
 4 | redirect_from:
 5 |   - /classification/cli/what_next.html
 6 | ---
 7 | 
 8 | Congratulations, you've made it!
 9 | 
10 | For more resources on taking your first steps into the world of deep learning, check out these links:
11 | 
12 | - Learn more about TensorFlow in general with the [getting started](http://tensorflow.org/get_started) docs.
13 | - Find more tutorials around all things IBM at [IBM Developer](https://ibm.biz/cloud-annotations-developer).
14 | 
15 | {% include profile.liquid
16 |   display_name="Nick Bourdakos"
17 |   profile_photo="https://pbs.twimg.com/profile_images/1035328157707128832/e_0EXqIu.jpg"
18 |   twitter_username="bourdakos1"
19 |   medium_username="bourdakos1"
20 |   github_username="bourdakos1"
21 |   linkedin_username="nicholasbourdakos"
22 | %}
23 | 


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/8.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Using a model
 3 | order: 8
 4 | redirect_from:
 5 |   - /object-detection/cli/8.html
 6 | ---
 7 | At this time there are 6 compatible demos available for running your trained object detection model:
 8 | - [React webapp](https://github.com/cloud-annotations/object-detection-react){:target="_blank"}
 9 | - [iOS app](https://github.com/cloud-annotations/object-detection-ios){:target="_blank"}
10 | - [Android app](https://github.com/cloud-annotations/object-detection-android){:target="_blank"}
11 | - [Livestream](https://github.com/cloud-annotations/object-detection-live-stream){:target="_blank"}
12 | - [Raspberry Pi](https://github.com/cloud-annotations/raspberrypi-streaming-object-detection){:target="_blank"}
13 | - [Python](https://github.com/cloud-annotations/object-detection-python){:target="_blank"}
14 | 
15 | 


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/9.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Common issues
3 | order: 9
4 | redirect_from:
5 |   - /object-detection/cli/9.html
6 | ---
7 | This page is updated regularly with issues that frequently occur.
8 | > **Note:** If you don't see your issue listed below, feel free to contact me at bourdakos1@gmail.com
9 | 


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/0a.CA_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/0a.CA_login.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/10.CA_labeled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/10.CA_labeled.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/11.CA_export.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/11.CA_export.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/12.CACLI_train.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/12.CACLI_train.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/1a.CA_no-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/1a.CA_no-object-storage.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/2a.IBM_login-to-create-resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/2a.IBM_login-to-create-resource.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/3a.IBM_create-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/3a.IBM_create-object-storage.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/4a.CA_create-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/4a.CA_create-bucket.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/5.CA_name-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/5.CA_name-bucket.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/6a.CA_set-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/6a.CA_set-type.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/7a.CA_blank-canvas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/7a.CA_blank-canvas.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/9a.CA_create-label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/9a.CA_create-label.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/colab_credentials.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/colab_credentials.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/colab_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/colab_screenshot.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/colab_train_in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/colab_train_in.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/credentials_hmac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/credentials_hmac.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/image_shrink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/image_shrink.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/main.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/main_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/main_image.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/resources.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/resources.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/wml_catalog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/wml_catalog.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/wml_create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/wml_create.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/wml_credentials_modal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/wml_credentials_modal.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/wml_new_credential.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/wml_new_credential.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/assets/wml_view_credentials.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/_workshops/object-detection/assets/wml_view_credentials.png


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/index.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Introduction
 3 | order: 1
 4 | redirect_from:
 5 |   - /object-detection/cli/
 6 | ---
 7 | 
 8 | ![](assets/main.png)
 9 | 
10 | ## What you will build
11 | In this workshop, you’ll build an app that lets you use your own custom-trained models to detect objects.
12 | You’ll create an IBM Cloud Object Storage instance to store your labeled data, then after your data is ready, you’ll learn how to train your own custom model on Google Colab.
13 | After your model has completed training, you can simply plug the model into your application.
14 | ![](assets/main_image.png)
15 | 
16 | ## Prerequisites
17 | * **Recommended:** A basic understanding of using terminal
18 | 


--------------------------------------------------------------------------------
/docs/_workshops/object-detection/what_next.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: What next?
 3 | order: 11
 4 | redirect_from:
 5 |   - /object-detection/cli/what_next.html
 6 | ---
 7 | 
 8 | Congratulations, you've made it!
 9 | 
10 | For more resources on taking your first steps into the world of deep learning, check out these links:
11 | 
12 | - Learn more about TensorFlow in general with the [getting started](http://tensorflow.org/get_started) docs.
13 | - Find more tutorials around all things IBM at [IBM Developer](https://ibm.biz/cloud-annotations-developer).
14 | 
15 | {% include profile.liquid
16 |   display_name="Nick Bourdakos"
17 |   profile_photo="https://pbs.twimg.com/profile_images/1035328157707128832/e_0EXqIu.jpg"
18 |   twitter_username="bourdakos1"
19 |   medium_username="bourdakos1"
20 |   github_username="bourdakos1"
21 |   linkedin_username="nicholasbourdakos"
22 | %}
23 | 


--------------------------------------------------------------------------------
/docs/_workshops/watson-studio-classification/common-issues.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Common issues
3 | order: 6
4 | ---
5 | This page is updated regularly with issues that frequently occur.
6 | > **Note:** If you don't see your issue listed below, feel free to contact me at bourdakos1@gmail.com


--------------------------------------------------------------------------------
/docs/_workshops/watson-studio-classification/index.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Introduction
 3 | order: 1
 4 | ---
 5 | 
 6 | ## What you will build
 7 | 
 8 | ## Prerequisites
 9 | 
10 | 


--------------------------------------------------------------------------------
/docs/_workshops/watson-studio-classification/watson-studio.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Watson Studio
 3 | order: 4
 4 | ---
 5 | 
 6 | {% include responsive.liquid image="export-notebook.png" %}
 7 | 
 8 | {% include responsive.liquid image="create-watson-studio-project.png" %}
 9 | 
10 | {% include responsive.liquid image="create-empty-watson-studio-project.png" %}
11 | 
12 | {% include responsive.liquid image="watson-studio-project-details.png" %}
13 | 
14 | {% include responsive.liquid image="add-asset-to-watson-studio-project.png" %}
15 | 
16 | {% include responsive.liquid image="choose-notebook-as-watson-studio-asset-type.png" %}
17 | 
18 | {% include responsive.liquid image="watson-studio-notebook-details.png" %}
19 | 
20 | {% include responsive.liquid image="notebook-run-all.png" %}
21 | 


--------------------------------------------------------------------------------
/docs/_workshops/watson-studio-classification/what-next.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: What next?
 3 | order: 7
 4 | ---
 5 | 
 6 | Congratulations, you've made it!
 7 | 
 8 | For more resources on taking your first steps into the world of deep learning, check out these links:
 9 | 
10 | - Learn more about TensorFlow in general with the [getting started](http://tensorflow.org/get_started) docs.
11 | - Find more tutorials around all things IBM at [IBM Developer](https://ibm.biz/cloud-annotations-developer).
12 | 
13 | {% include profile.liquid
14 |   display_name="Upkar Lidder"
15 |   profile_photo="https://pbs.twimg.com/profile_images/814709815440068608/YKGJ-8-O_400x400.jpg"
16 |   twitter_username="lidderupk"
17 |   medium_username="lidderupk"
18 |   github_username="lidderupk"
19 |   linkedin_username="lidderupk"
20 | %}
21 | 
22 | {% include profile.liquid
23 |   display_name="Nick Bourdakos"
24 |   profile_photo="https://pbs.twimg.com/profile_images/1035328157707128832/e_0EXqIu.jpg"
25 |   twitter_username="bourdakos1"
26 |   medium_username="bourdakos1"
27 |   github_username="bourdakos1"
28 |   linkedin_username="nicholasbourdakos"
29 | %}
30 | 


--------------------------------------------------------------------------------
/docs/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/android-chrome-192x192.png


--------------------------------------------------------------------------------
/docs/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/apple-touch-icon.png


--------------------------------------------------------------------------------
/docs/browserconfig.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <browserconfig>
 3 |     <msapplication>
 4 |         <tile>
 5 |             <square150x150logo src="/mstile-150x150.png"/>
 6 |             <TileColor>#da532c</TileColor>
 7 |         </tile>
 8 |     </msapplication>
 9 | </browserconfig>
10 | 


--------------------------------------------------------------------------------
/docs/deploy.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | trap 'echo "The deployment was aborted. Message -- "; exit 1' ERR
 4 | 
 5 | # Log in
 6 | echo "Logging in..."
 7 | ibmcloud config --check-version=false
 8 | ibmcloud login -a https://cloud.ibm.com -r us-east -g prod
 9 | ibmcloud cr region-set us-south
10 | ibmcloud cr login
11 | 
12 | # Download cluster config
13 | echo Downloading config for $CLUSTER_ID ...
14 | ibmcloud ks cluster config --cluster $CLUSTER_ID
15 | 
16 | # Build image
17 | echo Building $IMAGE_NAME ...
18 | docker build -t $IMAGE_NAME .
19 | docker push $IMAGE_NAME
20 | 
21 | # Apply kubernetes yamls
22 | echo Container build completed, updating $DEPLOYMENT ...
23 | sed -i "s,\(^.*image: \)\(.*$\),\1"$IMAGE_NAME"," k8s/docs.yaml
24 | kubectl apply -f k8s
25 | 
26 | echo "Deployment complete"
27 | 


--------------------------------------------------------------------------------
/docs/docs-assets/_images/0a.CA_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/0a.CA_login.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/10.CA_labeled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/10.CA_labeled.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/1a.CA_no-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/1a.CA_no-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/2a.IBM_login-to-create-resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/2a.IBM_login-to-create-resource.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/3a.IBM_create-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/3a.IBM_create-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/4a.CA_create-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/4a.CA_create-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/5.CA_name-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/5.CA_name-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/6a.CA_set-type-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/6a.CA_set-type-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/6a.CA_set-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/6a.CA_set-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/7a.CA_blank-canvas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/7a.CA_blank-canvas.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/9a.CA_create-label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/9a.CA_create-label.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/access-groups.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/access-groups.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/add-access-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/add-access-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/add-asset-to-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/add-asset-to-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/add-email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/add-email.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/add-users-to-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/add-users-to-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/assign-the-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/assign-the-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/choose-notebook-as-watson-studio-asset-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/choose-notebook-as-watson-studio-asset-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/choose-policies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/choose-policies.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/class-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/class-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/create-empty-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/create-empty-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/create-label-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/create-label-button.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/create-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/create-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/empty_dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/empty_dashboard.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/export-annotations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/export-annotations.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/export-notebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/export-notebook.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/gdrive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/gdrive.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/image_shrink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/image_shrink.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/invite-users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/invite-users.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/label-donuts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/label-donuts.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/label_images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/label_images.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/logo.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/main.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/main_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/main_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/manage-access.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/manage-access.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/name-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/name-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/new_label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/new_label.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/notebook-run-all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/notebook-run-all.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/object-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/object-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/pending_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/pending_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/select-users-from-access-group-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/select-users-from-access-group-list.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/shrink_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/shrink_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/small_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/small_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/training_steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/training_steps.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/upload-media-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/upload-media-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/upload_alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/upload_alt.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/upload_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/upload_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/view_all_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/view_all_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/watson-studio-notebook-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/watson-studio-notebook-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/watson-studio-project-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/watson-studio-project-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/wml_catalog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/wml_catalog.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/wml_create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/wml_create.png


--------------------------------------------------------------------------------
/docs/docs-assets/_images/wml_dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/_images/wml_dialog.png


--------------------------------------------------------------------------------
/docs/docs-assets/css/ibm-markdown.css:
--------------------------------------------------------------------------------
 1 | .markdown-body h1 {
 2 |   /* padding-bottom: 0.3em; */
 3 |   font-size: 2.625rem;
 4 |   line-height: 3.125rem;
 5 |   font-weight: 600;
 6 |   letter-spacing: 0px;
 7 |   border-bottom: 1px solid #eaecef;
 8 | }
 9 | 
10 | .markdown-body h2 {
11 |   margin-top: 5rem;
12 |   /* padding-bottom: 0.3em; */
13 |   font-size: 1.75rem;
14 |   line-height: 2.25rem;
15 |   font-weight: 400;
16 |   letter-spacing: 0px;
17 |   border-bottom: 0px solid transparent;
18 | }
19 | 
20 | .markdown-body h3 {
21 |   font-size: 1.25em;
22 | }
23 | 
24 | .markdown-body h4 {
25 |   margin-top: 3rem;
26 |   font-size: 1rem;
27 |   line-height: 1.5rem;
28 |   font-weight: 600;
29 |   letter-spacing: 0px;
30 | }
31 | 
32 | .markdown-body h5 {
33 |   font-size: 0.875em;
34 | }
35 | 
36 | .markdown-body h6 {
37 |   font-size: 0.85em;
38 |   color: #6a737d;
39 | }
40 | 
41 | .markdown-body p {
42 |   margin-top: 0;
43 |   margin-bottom: 10px;
44 | 
45 |   margin-bottom: 1.5rem;
46 |   font-size: 1rem;
47 |   line-height: 1.5rem;
48 |   font-weight: 400;
49 |   letter-spacing: 0px;
50 | }
51 | 


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/0a.CA_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/0a.CA_login.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/10.CA_labeled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/10.CA_labeled.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/1a.CA_no-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/1a.CA_no-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/2a.IBM_login-to-create-resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/2a.IBM_login-to-create-resource.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/3a.IBM_create-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/3a.IBM_create-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/4a.CA_create-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/4a.CA_create-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/5.CA_name-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/5.CA_name-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/6a.CA_set-type-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/6a.CA_set-type-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/6a.CA_set-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/6a.CA_set-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/7a.CA_blank-canvas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/7a.CA_blank-canvas.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/9a.CA_create-label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/9a.CA_create-label.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/access-groups.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/access-groups.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/add-access-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/add-access-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/add-asset-to-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/add-asset-to-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/add-email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/add-email.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/add-users-to-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/add-users-to-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/assign-the-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/assign-the-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/choose-notebook-as-watson-studio-asset-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/choose-notebook-as-watson-studio-asset-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/choose-policies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/choose-policies.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/class-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/class-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/create-empty-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/create-empty-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/create-label-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/create-label-button.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/create-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/create-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/empty_dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/empty_dashboard.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/export-annotations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/export-annotations.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/export-notebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/export-notebook.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/gdrive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/gdrive.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/image_shrink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/image_shrink.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/invite-users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/invite-users.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/label-donuts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/label-donuts.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/label_images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/label_images.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/main.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/main_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/main_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/manage-access.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/manage-access.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/name-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/name-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/new_label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/new_label.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/notebook-run-all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/notebook-run-all.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/object-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/object-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/pending_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/pending_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/select-users-from-access-group-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/select-users-from-access-group-list.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/shrink_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/shrink_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/small_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/small_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/training_steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/training_steps.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/upload-media-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/upload-media-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/upload_alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/upload_alt.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/upload_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/upload_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/view_all_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/view_all_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/watson-studio-notebook-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/watson-studio-notebook-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/watson-studio-project-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/watson-studio-project-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/wml_catalog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/wml_catalog.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/wml_create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/wml_create.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images/wml_dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images/wml_dialog.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/0a.CA_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/0a.CA_login.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/10.CA_labeled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/10.CA_labeled.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/1a.CA_no-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/1a.CA_no-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/2a.IBM_login-to-create-resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/2a.IBM_login-to-create-resource.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/3a.IBM_create-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/3a.IBM_create-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/4a.CA_create-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/4a.CA_create-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/5.CA_name-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/5.CA_name-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/6a.CA_set-type-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/6a.CA_set-type-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/6a.CA_set-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/6a.CA_set-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/7a.CA_blank-canvas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/7a.CA_blank-canvas.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/9a.CA_create-label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/9a.CA_create-label.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/access-groups.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/access-groups.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/add-access-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/add-access-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/add-asset-to-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/add-asset-to-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/add-email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/add-email.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/add-users-to-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/add-users-to-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/assign-the-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/assign-the-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/choose-notebook-as-watson-studio-asset-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/choose-notebook-as-watson-studio-asset-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/choose-policies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/choose-policies.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/class-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/class-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/create-empty-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/create-empty-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/create-label-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/create-label-button.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/create-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/create-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/empty_dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/empty_dashboard.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/export-annotations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/export-annotations.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/export-notebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/export-notebook.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/gdrive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/gdrive.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/image_shrink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/image_shrink.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/invite-users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/invite-users.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/label-donuts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/label-donuts.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/label_images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/label_images.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/main.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/main_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/main_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/manage-access.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/manage-access.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/name-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/name-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/new_label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/new_label.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/notebook-run-all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/notebook-run-all.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/object-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/object-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/pending_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/pending_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/select-users-from-access-group-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/select-users-from-access-group-list.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/shrink_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/shrink_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/small_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/small_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/training_steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/training_steps.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/upload-media-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/upload-media-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/upload_alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/upload_alt.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/upload_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/upload_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/view_all_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/view_all_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/watson-studio-notebook-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/watson-studio-notebook-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/watson-studio-project-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/watson-studio-project-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/wml_catalog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/wml_catalog.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/wml_create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/wml_create.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@1x/wml_dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@1x/wml_dialog.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/0a.CA_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/0a.CA_login.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/10.CA_labeled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/10.CA_labeled.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/1a.CA_no-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/1a.CA_no-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/2a.IBM_login-to-create-resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/2a.IBM_login-to-create-resource.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/3a.IBM_create-object-storage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/3a.IBM_create-object-storage.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/4a.CA_create-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/4a.CA_create-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/5.CA_name-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/5.CA_name-bucket.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/6a.CA_set-type-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/6a.CA_set-type-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/6a.CA_set-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/6a.CA_set-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/7a.CA_blank-canvas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/7a.CA_blank-canvas.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/9a.CA_create-label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/9a.CA_create-label.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/access-groups.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/access-groups.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/add-access-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/add-access-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/add-asset-to-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/add-asset-to-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/add-email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/add-email.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/add-users-to-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/add-users-to-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/assign-the-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/assign-the-policy.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/choose-notebook-as-watson-studio-asset-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/choose-notebook-as-watson-studio-asset-type.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/choose-policies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/choose-policies.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/class-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/class-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/create-empty-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/create-empty-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/create-label-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/create-label-button.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/create-watson-studio-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/create-watson-studio-project.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/empty_dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/empty_dashboard.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/export-annotations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/export-annotations.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/export-notebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/export-notebook.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/gdrive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/gdrive.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/image_shrink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/image_shrink.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/invite-users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/invite-users.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/label-donuts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/label-donuts.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/label_images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/label_images.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/main.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/main_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/main_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/manage-access.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/manage-access.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/name-access-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/name-access-group.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/new_label.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/new_label.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/notebook-run-all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/notebook-run-all.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/object-thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/object-thumb.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/pending_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/pending_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/select-users-from-access-group-list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/select-users-from-access-group-list.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/shrink_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/shrink_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/small_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/small_image.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/training_steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/training_steps.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/upload-media-classification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/upload-media-classification.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/upload_alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/upload_alt.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/upload_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/upload_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/view_all_training.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/view_all_training.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/watson-studio-notebook-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/watson-studio-notebook-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/watson-studio-project-details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/watson-studio-project-details.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/wml_catalog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/wml_catalog.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/wml_create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/wml_create.png


--------------------------------------------------------------------------------
/docs/docs-assets/generated_images@2x/wml_dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/docs-assets/generated_images@2x/wml_dialog.png


--------------------------------------------------------------------------------
/docs/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/favicon-16x16.png


--------------------------------------------------------------------------------
/docs/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/favicon-32x32.png


--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/favicon.ico


--------------------------------------------------------------------------------
/docs/generate_assets.sh:
--------------------------------------------------------------------------------
 1 | #     375
 2 | # @x1 782
 3 | # @x2 1564
 4 | 
 5 | IMAGE_SMALL=docs-assets/generated_images
 6 | IMAGE_1X=docs-assets/generated_images@1x
 7 | IMAGE_2X=docs-assets/generated_images@2x
 8 | 
 9 | rm -rf $IMAGE_SMALL
10 | rm -rf $IMAGE_1X
11 | rm -rf $IMAGE_2X
12 | 
13 | mkdir $IMAGE_SMALL
14 | mkdir $IMAGE_1X
15 | mkdir $IMAGE_2X
16 | 
17 | # If 0.25 ≤ SF < 1	Cubic with B=0, C=2.6−1.6×SF, blur=1.05.
18 | # If ? ≤ SF < 0.25	Step 1: Use box filter (as defined above in Bilinear) to scale to 4×DSTN.
19 | # Step 2: Cubic with B=0, C=2.2, blur=1.05.
20 | 
21 | # C = 2.6 − (1.6 * SF)
22 | # C = 2.2
23 | 
24 | # all images should be: 3104px
25 | # 1564 -> SF = 0.50386598 -> 2.6 − (1.6 * 0.50386598) = 1.793814432
26 | # 782  -> SF = 0.25193299 -> 2.6 − (1.6 * 0.25193299) = 2.196907216
27 | # 375  -> SF = 0.12081186 -> 2.2                      = 2.2
28 | 
29 | echo "Generating small..."
30 | 
31 | mogrify -path $IMAGE_SMALL \
32 |   -filter box -resize 400% \
33 |   -filter cubic -define filter:b=0 -define filter:c=2.2 -define filter:blur=1.05 \
34 |   -resize 375 \
35 |   docs-assets/_images/*.png
36 | 
37 | echo "Generating @1x..."
38 | 
39 | mogrify -path $IMAGE_1X \
40 |   -filter cubic -define filter:b=0 -define filter:c=2.196907216 -define filter:blur=1.05 \
41 |   -resize 782 \
42 |   docs-assets/_images/*.png
43 | 
44 | echo "Generating @2x..."
45 | 
46 | mogrify -path $IMAGE_2X \
47 |   -filter cubic -define filter:b=0 -define filter:c=1.793814432 -define filter:blur=1.05 \
48 |   -resize 1564 \
49 |   docs-assets/_images/*.png
50 | 
51 | 
52 | 


--------------------------------------------------------------------------------
/docs/k8s/docs.yaml:
--------------------------------------------------------------------------------
 1 | apiVersion: v1
 2 | kind: Service
 3 | metadata:
 4 |   name: docs
 5 |   labels:
 6 |     app: docs
 7 |     tier: docs
 8 | spec:
 9 |   ports:
10 |   - port: 80
11 |     targetPort: 80
12 |     protocol: TCP
13 |   selector:
14 |     app: docs
15 |     tier: docs
16 | ---
17 | apiVersion: apps/v1
18 | kind: Deployment
19 | metadata:
20 |   name: docs
21 | spec:
22 |   selector:
23 |     matchLabels:
24 |       app: docs
25 |       tier: docs
26 |   replicas: 3
27 |   template:
28 |     metadata:
29 |       labels:
30 |         app: docs
31 |         tier: docs
32 |     spec:
33 |       containers:
34 |       - name: docs
35 |         image: us.icr.io/bourdakos1/docs:4e210023fdf7f243c9a4df33b3c98d3fc5c803f3
36 |         ports:
37 |         - containerPort: 8012
38 | 


--------------------------------------------------------------------------------
/docs/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/docs/mstile-150x150.png


--------------------------------------------------------------------------------
/docs/nginx/default.conf:
--------------------------------------------------------------------------------
 1 | server {
 2 |     listen       80;
 3 |     server_name stagingannotations.us-east.containers.appdomain.cloud;
 4 | 
 5 |     #charset koi8-r;
 6 |     #access_log  /var/log/nginx/host.access.log  main;
 7 | 
 8 |     rewrite ^/(.*)/$ /$1 permanent;
 9 |     rewrite ^/(docs|workshops|demos|sdks).html$ /$1 permanent;
10 | 
11 |     location / {
12 |         root /usr/share/nginx/html;
13 |    
14 |         try_files $uri $uri.html =404;
15 | 
16 |         if (-f $document_root/$uri/index.html) {
17 |             rewrite ^ $uri/index.html permanent;
18 |         }
19 |     }
20 | 
21 |     #error_page  404              /404.html;
22 | 
23 |     # redirect server error pages to the static page /50x.html
24 |     #
25 |     error_page   500 502 503 504  /50x.html;
26 |     location = /50x.html {
27 |         root   /usr/share/nginx/html;
28 |     }
29 | }
30 | 


--------------------------------------------------------------------------------
/docs/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
 1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
 2 |   <defs>
 3 |     <style>
 4 |       .cls-1 {
 5 |         fill: #fff;
 6 |       }
 7 |     </style>
 8 |   </defs>
 9 |   <rect class="cls-1" x="3" y="3" width="4" height="4"/>
10 |   <rect id="Rectangle_19_copy" data-name="Rectangle 19 copy" class="cls-1" x="3" y="25" width="4" height="4"/>
11 |   <rect id="Rectangle_19_copy_2" data-name="Rectangle 19 copy 2" class="cls-1" x="25" y="25" width="4" height="4"/>
12 |   <rect id="Rectangle_19_copy_3" data-name="Rectangle 19 copy 3" class="cls-1" x="25" y="3" width="4" height="4"/>
13 |   <rect class="cls-1" x="7" y="5" width="18" height="2"/>
14 |   <rect class="cls-1" x="25" y="7" width="2" height="18"/>
15 |   <rect class="cls-1" x="5" y="7" width="2" height="18"/>
16 |   <rect class="cls-1" x="7" y="25" width="18" height="2"/>
17 | </svg>
18 | 


--------------------------------------------------------------------------------
/docs/sdks.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | layout: base
 3 | title: SDKs
 4 | description: Download the Tools & Libraries to Get Started with Cloud Annotations.
 5 | ---
 6 | 
 7 | {% include titlebar.liquid active="sdks" %}
 8 | 
 9 | <main class="content markdown-body">
10 |   <ul style="padding-top: 80px">
11 |     <li>
12 |       <a href="https://github.com/cloud-annotations/object-detection-js"
13 |         >JavaScript</a
14 |       >
15 |     </li>
16 |   </ul>
17 | </main>
18 | 


--------------------------------------------------------------------------------
/docs/site.webmanifest:
--------------------------------------------------------------------------------
 1 | {
 2 |     "name": "",
 3 |     "short_name": "",
 4 |     "icons": [
 5 |         {
 6 |             "src": "/android-chrome-192x192.png",
 7 |             "sizes": "192x192",
 8 |             "type": "image/png"
 9 |         }
10 |     ],
11 |     "theme_color": "#ffffff",
12 |     "background_color": "#ffffff",
13 |     "display": "standalone"
14 | }
15 | 


--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | module.exports = {
 9 |   testEnvironment: "jest-environment-jsdom",
10 |   setupFilesAfterEnv: ["@testing-library/jest-dom/extend-expect"],
11 |   coverageThreshold: {
12 |     global: {
13 |       statements: 15,
14 |       branches: 10,
15 |       functions: 15,
16 |       lines: 15,
17 |     },
18 |   },
19 | };
20 | 


--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 |   "packages": ["packages/*", "server"],
3 |   "npmClient": "yarn",
4 |   "useWorkspaces": true,
5 |   "version": "0.0.0"
6 | }
7 | 


--------------------------------------------------------------------------------
/packages/iris-api/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/api",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "start": "tsc -w",
 8 |     "build": "tsc"
 9 |   },
10 |   "dependencies": {
11 |     "@types/uuid": "^8.3.0",
12 |     "swr": "^0.3.6"
13 |   }
14 | }
15 | 


--------------------------------------------------------------------------------
/packages/iris-api/src/endpoint.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { EndpointOptions, PathParams, QueryParams } from "./types";
 9 | import { stripEmptyKeys } from "./utils";
10 | 
11 | function injectPathParams(route: string, path?: PathParams) {
12 |   return route.replace(/\/:(\w+)/gi, (_match, group1) => `/${path?.[group1]}`);
13 | }
14 | 
15 | function queryString(query?: QueryParams) {
16 |   if (query !== undefined) {
17 |     const safe = stripEmptyKeys(query);
18 |     return "?" + new URLSearchParams(safe).toString();
19 |   }
20 |   return "";
21 | }
22 | 
23 | function endpoint(route: string, options: EndpointOptions = {}) {
24 |   const { baseUrl = "/api/v2", path, query } = options;
25 | 
26 |   return baseUrl + injectPathParams(route, path) + queryString(query);
27 | }
28 | 
29 | export default endpoint;
30 | 


--------------------------------------------------------------------------------
/packages/iris-api/src/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export * from "./types";
 9 | export * from "./api";
10 | export { default as api } from "./api";
11 | export { default as endpoint } from "./endpoint";
12 | 


--------------------------------------------------------------------------------
/packages/iris-api/src/types.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export interface PathParams {
 9 |   [key: string]: string | undefined;
10 | }
11 | 
12 | export interface QueryParams {
13 |   [key: string]: string | undefined;
14 | }
15 | 
16 | export interface Headers {
17 |   [key: string]: string | undefined;
18 | }
19 | 
20 | export interface EndpointOptions {
21 |   baseUrl?: string;
22 |   path?: PathParams;
23 |   query?: QueryParams;
24 | }
25 | 
26 | export interface MethodOptions extends EndpointOptions {
27 |   headers?: Headers;
28 |   body?:
29 |     | string
30 |     | URLSearchParams
31 |     | FormData
32 |     | Blob
33 |     | ArrayBufferView
34 |     | ArrayBuffer
35 |     | ReadableStream<Uint8Array>;
36 |   json?: any;
37 |   signal?: AbortSignal;
38 | }
39 | 
40 | export interface APIOptions extends MethodOptions {
41 |   method: string;
42 | }
43 | 
44 | export interface HttpError extends Error {
45 |   status: number;
46 | }
47 | 


--------------------------------------------------------------------------------
/packages/iris-api/src/utils.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export function stripEmptyKeys<T>(o: { [key: string]: T | undefined }) {
 9 |   let safe: { [key: string]: T } = {};
10 |   for (const [key, val] of Object.entries(o)) {
11 |     if (val !== undefined && val !== null) {
12 |       safe[key] = val;
13 |     }
14 |   }
15 |   return safe;
16 | }
17 | 


--------------------------------------------------------------------------------
/packages/iris-api/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-app/config/jest/cssTransform.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2020 International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | // This is a custom Jest transformer turning style imports into empty objects.
 9 | // http://facebook.github.io/jest/docs/en/webpack.html
10 | 
11 | module.exports = {
12 |   process() {
13 |     return "module.exports = {};";
14 |   },
15 |   getCacheKey() {
16 |     // The output is always the same.
17 |     return "cssTransform";
18 |   },
19 | };
20 | 


--------------------------------------------------------------------------------
/packages/iris-app/config/jest/fileTransform.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2020 International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const path = require("path");
 9 | 
10 | const camelcase = require("camelcase");
11 | 
12 | // This is a custom Jest transformer turning file imports into filenames.
13 | // http://facebook.github.io/jest/docs/en/webpack.html
14 | 
15 | module.exports = {
16 |   process(src, filename) {
17 |     const assetFilename = JSON.stringify(path.basename(filename));
18 | 
19 |     if (filename.match(/\.svg$/)) {
20 |       // Based on how SVGR generates a component name:
21 |       // https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6
22 |       const pascalCaseFilename = camelcase(path.parse(filename).name, {
23 |         pascalCase: true,
24 |       });
25 |       const componentName = `Svg${pascalCaseFilename}`;
26 |       return `const React = require('react');
27 |       module.exports = {
28 |         __esModule: true,
29 |         default: ${assetFilename},
30 |         ReactComponent: React.forwardRef(function ${componentName}(props, ref) {
31 |           return {
32 |             $typeof: Symbol.for('react.element'),
33 |             type: 'svg',
34 |             ref: ref,
35 |             key: null,
36 |             props: Object.assign({}, props, {
37 |               children: ${assetFilename}
38 |             })
39 |           };
40 |         }),
41 |       };`;
42 |     }
43 | 
44 |     return `module.exports = ${assetFilename};`;
45 |   },
46 | };
47 | 


--------------------------------------------------------------------------------
/packages/iris-app/config/pnpTs.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2020 International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const { resolveModuleName } = require("ts-pnp");
 9 | 
10 | exports.resolveModuleName = (
11 |   typescript,
12 |   moduleName,
13 |   containingFile,
14 |   compilerOptions,
15 |   resolutionHost
16 | ) => {
17 |   return resolveModuleName(
18 |     moduleName,
19 |     containingFile,
20 |     compilerOptions,
21 |     resolutionHost,
22 |     typescript.resolveModuleName
23 |   );
24 | };
25 | 
26 | exports.resolveTypeReferenceDirective = (
27 |   typescript,
28 |   moduleName,
29 |   containingFile,
30 |   compilerOptions,
31 |   resolutionHost
32 | ) => {
33 |   return resolveModuleName(
34 |     moduleName,
35 |     containingFile,
36 |     compilerOptions,
37 |     resolutionHost,
38 |     typescript.resolveTypeReferenceDirective
39 |   );
40 | };
41 | 


--------------------------------------------------------------------------------
/packages/iris-app/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/android-chrome-192x192.png


--------------------------------------------------------------------------------
/packages/iris-app/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/apple-touch-icon.png


--------------------------------------------------------------------------------
/packages/iris-app/public/browserconfig.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <browserconfig>
 3 |     <msapplication>
 4 |         <tile>
 5 |             <square150x150logo src="/mstile-150x150.png"/>
 6 |             <TileColor>#da532c</TileColor>
 7 |         </tile>
 8 |     </msapplication>
 9 | </browserconfig>
10 | 


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-16x16.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-32x32.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-green-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-green-16x16.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-green-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-green-32x32.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-red-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-red-16x16.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-red-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-red-32x32.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-yellow-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-yellow-16x16.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon-yellow-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon-yellow-32x32.png


--------------------------------------------------------------------------------
/packages/iris-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/favicon.ico


--------------------------------------------------------------------------------
/packages/iris-app/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/packages/iris-app/public/mstile-150x150.png


--------------------------------------------------------------------------------
/packages/iris-app/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Allow: /
3 | 
4 | Sitemap: https://cloud.annotations.ai/sitemap.xml


--------------------------------------------------------------------------------
/packages/iris-app/public/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
 1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
 2 |   <defs>
 3 |     <style>
 4 |       .cls-1 {
 5 |         fill: #fff;
 6 |       }
 7 |     </style>
 8 |   </defs>
 9 |   <rect class="cls-1" x="3" y="3" width="4" height="4"/>
10 |   <rect id="Rectangle_19_copy" data-name="Rectangle 19 copy" class="cls-1" x="3" y="25" width="4" height="4"/>
11 |   <rect id="Rectangle_19_copy_2" data-name="Rectangle 19 copy 2" class="cls-1" x="25" y="25" width="4" height="4"/>
12 |   <rect id="Rectangle_19_copy_3" data-name="Rectangle 19 copy 3" class="cls-1" x="25" y="3" width="4" height="4"/>
13 |   <rect class="cls-1" x="7" y="5" width="18" height="2"/>
14 |   <rect class="cls-1" x="25" y="7" width="2" height="18"/>
15 |   <rect class="cls-1" x="5" y="7" width="2" height="18"/>
16 |   <rect class="cls-1" x="7" y="25" width="18" height="2"/>
17 | </svg>
18 | 


--------------------------------------------------------------------------------
/packages/iris-app/public/site.webmanifest:
--------------------------------------------------------------------------------
 1 | {
 2 |     "name": "Cloud Annotations",
 3 |     "short_name": "Cloud Annotations",
 4 |     "icons": [
 5 |         {
 6 |             "src": "/android-chrome-192x192.png",
 7 |             "sizes": "192x192",
 8 |             "type": "image/png"
 9 |         }
10 |     ],
11 |     "start_url": "./index.html",
12 |     "theme_color": "#ffffff",
13 |     "background_color": "#ffffff",
14 |     "display": "standalone"
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-app/public/sitemap.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="UTF-8"?>
 2 | <urlset
 3 |       xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
 4 |       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5 |       xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
 6 |             http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
 7 | 
 8 | <url>
 9 |   <loc>https://cloud.annotations.ai/</loc>
10 |   <lastmod>2020-01-20T18:58:45+00:00</lastmod>
11 |   <priority>1.00</priority>
12 | </url>
13 | 
14 | <url>
15 |   <loc>https://cloud.annotations.ai/docs</loc>
16 |   <lastmod>2020-01-20T18:58:45+00:00</lastmod>
17 |   <priority>0.80</priority>
18 | </url>
19 | 
20 | <url>
21 |   <loc>https://cloud.annotations.ai/workshops</loc>
22 |   <lastmod>2020-01-20T18:58:45+00:00</lastmod>
23 |   <priority>0.80</priority>
24 | </url>
25 | <url>
26 |   <loc>https://cloud.annotations.ai/demos</loc>
27 |   <lastmod>2020-01-20T18:58:45+00:00</lastmod>
28 |   <priority>0.80</priority>
29 | </url>
30 | <url>
31 |   <loc>https://cloud.annotations.ai/sdks</loc>
32 |   <lastmod>2020-01-20T18:58:45+00:00</lastmod>
33 |   <priority>0.80</priority>
34 | </url>
35 | </urlset>


--------------------------------------------------------------------------------
/packages/iris-app/scripts/test.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) 2020 International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | // Do this as the first thing so that any code reading it knows the right env.
 9 | process.env.BABEL_ENV = "test";
10 | process.env.NODE_ENV = "test";
11 | process.env.PUBLIC_URL = "";
12 | 
13 | // Makes the script crash on unhandled rejections instead of silently
14 | // ignoring them. In the future, promise rejections that are not handled will
15 | // terminate the Node.js process with a non-zero exit code.
16 | process.on("unhandledRejection", (err) => {
17 |   throw err;
18 | });
19 | 
20 | // Ensure environment variables are read.
21 | require("../config/env");
22 | 
23 | const jest = require("jest");
24 | 
25 | const execSync = require("child_process").execSync;
26 | 
27 | let argv = process.argv.slice(2);
28 | 
29 | function isInGitRepository() {
30 |   try {
31 |     execSync("git rev-parse --is-inside-work-tree", { stdio: "ignore" });
32 |     return true;
33 |   } catch (e) {
34 |     return false;
35 |   }
36 | }
37 | 
38 | function isInMercurialRepository() {
39 |   try {
40 |     execSync("hg --cwd . root", { stdio: "ignore" });
41 |     return true;
42 |   } catch (e) {
43 |     return false;
44 |   }
45 | }
46 | 
47 | // Watch unless on CI or explicitly running all tests
48 | if (
49 |   !process.env.CI &&
50 |   argv.indexOf("--watchAll") === -1 &&
51 |   argv.indexOf("--watchAll=false") === -1
52 | ) {
53 |   // https://github.com/facebook/create-react-app/issues/5210
54 |   const hasSourceControl = isInGitRepository() || isInMercurialRepository();
55 |   argv.push(hasSourceControl ? "--watch" : "--watchAll");
56 | }
57 | 
58 | jest.run(argv);
59 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/NotFound/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | function NotFound() {
11 |   return <div>404</div>;
12 | }
13 | 
14 | export default NotFound;
15 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Project/Layout.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { createStyles, makeStyles, Theme } from "@material-ui/core";
11 | 
12 | const appBarHeight = 64;
13 | const divider = 1;
14 | 
15 | interface Props {
16 |   header: JSX.Element;
17 |   main: JSX.Element;
18 | }
19 | 
20 | const useStyles = makeStyles((theme: Theme) =>
21 |   createStyles({
22 |     header: {
23 |       position: "absolute",
24 |       top: 0,
25 |       left: 0,
26 |       right: 0,
27 |       height: appBarHeight,
28 |     },
29 |     divider: {
30 |       position: "absolute",
31 |       top: appBarHeight,
32 |       left: 0,
33 |       right: 0,
34 |       height: 0,
35 |       border: 0,
36 |       borderTopWidth: divider,
37 |       borderTopStyle: "solid",
38 |       borderTopColor: theme.palette.grey[900],
39 |       margin: 0,
40 |     },
41 |     main: {
42 |       position: "absolute",
43 |       top: appBarHeight + divider,
44 |       left: 0,
45 |       right: 0,
46 |       bottom: 0,
47 |     },
48 |   })
49 | );
50 | 
51 | function Layout({ header, main }: Props) {
52 |   const classes = useStyles();
53 | 
54 |   return (
55 |     <React.Fragment>
56 |       <header className={classes.header}>{header}</header>
57 |       <hr className={classes.divider} />
58 |       <main className={classes.main}>{main}</main>
59 |     </React.Fragment>
60 |   );
61 | }
62 | 
63 | export default Layout;
64 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Project/editors/ObjectDetection/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import DrawingPanel from "../../panels/DrawingPanel";
11 | import ImagesPanel from "../../panels/ImagesPanel";
12 | import ShapesPanel from "../../panels/ShapesPanel";
13 | import ToolOptionsPanel from "../../panels/ToolOptionsPanel";
14 | import ToolsPanel from "../../panels/ToolsPanel";
15 | import Layout from "./Layout";
16 | 
17 | function ObjectDetection() {
18 |   return (
19 |     <Layout
20 |       top={<ToolOptionsPanel />}
21 |       left={<ToolsPanel />}
22 |       content={<DrawingPanel />}
23 |       right={<ShapesPanel />}
24 |       bottom={<ImagesPanel />}
25 |     />
26 |   );
27 | }
28 | 
29 | export default ObjectDetection;
30 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Project/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React, { useEffect } from "react";
 9 | 
10 | import { Provider } from "react-redux";
11 | import { useParams } from "react-router-dom";
12 | 
13 | import { store, load, useProjectStatus } from "@iris/core";
14 | 
15 | import Header from "./components/Header";
16 | import Main from "./components/Main";
17 | import ObjectDetection from "./editors/ObjectDetection";
18 | import Layout from "./Layout";
19 | 
20 | function ProjectsView() {
21 |   return (
22 |     <Layout
23 |       header={<Header />}
24 |       main={
25 |         <Main>
26 |           <ObjectDetection />
27 |         </Main>
28 |       }
29 |     />
30 |   );
31 | }
32 | 
33 | function ProjectController() {
34 |   const status = useProjectStatus();
35 | 
36 |   switch (status) {
37 |     case "idle":
38 |     case "pending":
39 |       return <div>LOADING...</div>;
40 |     case "success":
41 |     case "saving":
42 |       return <ProjectsView />;
43 |     default:
44 |       return <div>ERROR</div>;
45 |   }
46 | }
47 | 
48 | interface ProjectParams {
49 |   providerID: string;
50 |   connectionID: string;
51 |   projectID: string;
52 | }
53 | 
54 | export const useProjectParams = () => useParams<ProjectParams>();
55 | 
56 | function Project() {
57 |   const { projectID, connectionID, providerID } = useProjectParams();
58 | 
59 |   useEffect(() => {
60 |     store.dispatch(load({ projectID, connectionID, providerID }));
61 |   }, [connectionID, projectID, providerID]);
62 | 
63 |   return (
64 |     <Provider store={store}>
65 |       <ProjectController />
66 |     </Provider>
67 |   );
68 | }
69 | 
70 | export default Project;
71 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Project/panels/ToolOptionsPanel/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { useActiveTool } from "@iris/core";
11 | 
12 | import classes from "./styles.module.css";
13 | 
14 | function ToolOptionsPanel() {
15 |   const tool = useActiveTool();
16 | 
17 |   return (
18 |     <div className={classes.wrapper}>
19 |       <div className={classes.divider} />
20 |       {window.IRIS.tools
21 |         .get(tool)
22 |         .options.list()
23 |         .map((option, i) => {
24 |           return (
25 |             <React.Fragment key={i}>
26 |               {option.component}
27 |               <div className={classes.divider} />
28 |             </React.Fragment>
29 |           );
30 |         })}
31 |     </div>
32 |   );
33 | }
34 | 
35 | export default ToolOptionsPanel;
36 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Project/panels/ToolOptionsPanel/styles.module.css:
--------------------------------------------------------------------------------
 1 | .wrapper {
 2 |   position: absolute;
 3 |   top: 0;
 4 |   bottom: 0;
 5 |   right: 0;
 6 |   left: 0;
 7 |   background-color: var(--secondaryBg);
 8 |   display: flex;
 9 |   align-items: center;
10 |   padding-left: 47px; /* account for divider margin */
11 | }
12 | 
13 | .divider {
14 |   margin: 0px 4px;
15 |   border-left: 1px solid var(--toolBarSpacer);
16 |   height: 20px;
17 | }
18 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Project/panels/ToolsPanel/styles.module.css:
--------------------------------------------------------------------------------
 1 | .wrapper {
 2 |   position: absolute;
 3 |   top: 0;
 4 |   bottom: 0;
 5 |   right: 0;
 6 |   left: 0;
 7 |   background-color: var(--secondaryBg);
 8 |   display: flex;
 9 |   flex-direction: column;
10 |   align-items: center;
11 | }
12 | 
13 | .toolBase {
14 |   margin: 4px;
15 |   height: 26px;
16 |   width: 34px;
17 |   border-radius: 4px;
18 |   background-color: transparent;
19 |   display: flex;
20 |   align-items: center;
21 |   justify-content: center;
22 | }
23 | 
24 | .tool {
25 |   composes: toolBase;
26 | }
27 | 
28 | .toolActive {
29 |   composes: toolBase;
30 |   background-color: var(--blue);
31 | }
32 | 
33 | .tool:hover {
34 |   background-color: var(--highlight);
35 | }
36 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/AuthenticatedApp/Projects/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { useParams } from "react-router-dom";
11 | import useSWR from "swr";
12 | 
13 | import { endpoint, fetcher } from "@iris/api";
14 | 
15 | import Connections from "./Connections";
16 | import Header from "./Header";
17 | import Layout from "./Layout";
18 | import Main from "./Main";
19 | 
20 | interface ProjectProps {
21 |   name: string;
22 |   projects: any[];
23 |   connections: any[];
24 | }
25 | 
26 | function ProjectsView({ name, projects, connections }: ProjectProps) {
27 |   return (
28 |     <Layout
29 |       header={<Header />}
30 |       left={<Connections connections={connections} />}
31 |       main={<Main projects={projects} name={name} />}
32 |     />
33 |   );
34 | }
35 | 
36 | function ProjectsController({ connections }: { connections: any[] }) {
37 |   const params = useParams<any>();
38 | 
39 |   const connection = connections?.find((c) => c.id === params.connectionID);
40 | 
41 |   const { data: projects } = useSWR(
42 |     connection
43 |       ? endpoint("/projects", {
44 |           query: {
45 |             providerID: connection.providerID,
46 |             connectionID: connection.id,
47 |           },
48 |         })
49 |       : null,
50 |     fetcher
51 |   );
52 | 
53 |   if (!connections) {
54 |     return <div>LOADING...</div>;
55 |   }
56 | 
57 |   return (
58 |     <ProjectsView
59 |       name={connection.name}
60 |       projects={projects ?? []}
61 |       connections={connections}
62 |     />
63 |   );
64 | }
65 | 
66 | export default ProjectsController;
67 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/UnauthenticatedApp/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | function UnauthenticatedApp() {
11 |   return <div>unauthenticated</div>;
12 | }
13 | 
14 | export default UnauthenticatedApp;
15 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/bootstrap.handlebars:
--------------------------------------------------------------------------------
 1 | import initIris from "./initIris"
 2 | import initReactApp from "./initReactApp"
 3 | 
 4 | initIris()
 5 | 
 6 | {{#each extensions}}
 7 | try {
 8 |   const {{clean this}} = require("{{this}}")
 9 |   {{clean this}}.activate(window.IRIS)
10 | } catch (e) {
11 |   console.log(e)
12 | }
13 | {{/each}}
14 | 
15 | initReactApp()


--------------------------------------------------------------------------------
/packages/iris-app/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | declare namespace NodeJS {
 9 |   interface ProcessEnv {
10 |     readonly NODE_ENV: "development" | "production" | "test";
11 |     readonly PUBLIC_URL: string;
12 |   }
13 | }
14 | 
15 | declare module "*.bmp" {
16 |   const src: string;
17 |   export default src;
18 | }
19 | 
20 | declare module "*.gif" {
21 |   const src: string;
22 |   export default src;
23 | }
24 | 
25 | declare module "*.jpg" {
26 |   const src: string;
27 |   export default src;
28 | }
29 | 
30 | declare module "*.jpeg" {
31 |   const src: string;
32 |   export default src;
33 | }
34 | 
35 | declare module "*.png" {
36 |   const src: string;
37 |   export default src;
38 | }
39 | 
40 | declare module "*.webp" {
41 |   const src: string;
42 |   export default src;
43 | }
44 | 
45 | declare module "*.svg" {
46 |   import * as React from "react";
47 | 
48 |   export const ReactComponent: React.FunctionComponent<
49 |     React.SVGProps<SVGSVGElement> & { title?: string }
50 |   >;
51 | 
52 |   const src: string;
53 |   export default src;
54 | }
55 | 
56 | declare module "*.module.css" {
57 |   const classes: { readonly [key: string]: string };
58 |   export default classes;
59 | }
60 | 
61 | declare module "*.module.scss" {
62 |   const classes: { readonly [key: string]: string };
63 |   export default classes;
64 | }
65 | 
66 | declare module "*.module.sass" {
67 |   const classes: { readonly [key: string]: string };
68 |   export default classes;
69 | }
70 | 


--------------------------------------------------------------------------------
/packages/iris-app/src/setupProxy.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | const { createProxyMiddleware } = require("http-proxy-middleware");
 9 | 
10 | const proxy = createProxyMiddleware({
11 |   target: "http://localhost:9000",
12 |   changeOrigin: true,
13 | });
14 | 
15 | module.exports = function (app) {
16 |   app.use("/api", proxy);
17 |   app.use("/auth", proxy);
18 |   app.use("/socket.io", proxy);
19 | };
20 | 


--------------------------------------------------------------------------------
/packages/iris-app/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "noEmit": true,
 5 |     "downlevelIteration": true,
 6 | 
 7 |     "target": "es5",
 8 |     "lib": ["dom", "dom.iterable", "esnext"],
 9 |     "module": "esnext",
10 |     "jsx": "react"
11 |   },
12 |   "include": ["src"]
13 | }
14 | 


--------------------------------------------------------------------------------
/packages/iris-components/.storybook/main.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
3 |   addons: ["@storybook/addon-essentials"],
4 | };
5 | 


--------------------------------------------------------------------------------
/packages/iris-components/.storybook/preview.js:
--------------------------------------------------------------------------------
 1 | import React from "react";
 2 | import { ThemeProvider, CssBaseline } from "@material-ui/core";
 3 | import theme from "@iris/theme";
 4 | 
 5 | export const decorators = [
 6 |   (Story) => (
 7 |     <ThemeProvider theme={theme}>
 8 |       <CssBaseline />
 9 |       <Story />
10 |     </ThemeProvider>
11 |   ),
12 | ];
13 | 


--------------------------------------------------------------------------------
/packages/iris-components/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/components",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "storybook": "start-storybook -p 6006",
 8 |     "build-storybook": "build-storybook",
 9 |     "start": "tsc -w",
10 |     "build": "tsc"
11 |   },
12 |   "dependencies": {
13 |     "@iris/core": "^0.0.1",
14 |     "@iris/hooks": "^0.0.1",
15 |     "@iris/theme": "^0.0.1",
16 |     "@material-ui/core": "^4.11.0",
17 |     "@material-ui/lab": "^4.0.0-alpha.56",
18 |     "@storybook/addon-essentials": "6.0.27",
19 |     "@storybook/react": "6.0.27",
20 |     "@types/uuid": "^8.3.0",
21 |     "clsx": "^1.1.1",
22 |     "react": "^17.0.1",
23 |     "react-dom": "^17.0.1"
24 |   }
25 | }
26 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/CrossHair/Horizontal.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import useStyles from "./styles";
11 | 
12 | interface Props {
13 |   color?: string;
14 | }
15 | 
16 | const Horizontal = React.forwardRef<SVGSVGElement, Props>(({ color }, ref) => {
17 |   const classes = useStyles({ color });
18 |   return (
19 |     <svg
20 |       preserveAspectRatio="none"
21 |       viewBox="0 0 1 2"
22 |       className={classes.base}
23 |       ref={ref}
24 |     >
25 |       <rect x="0" y="0" width="1" height="1" className={classes.primary} />
26 |       <rect x="0" y="1" width="1" height="1" className={classes.shadow} />
27 |     </svg>
28 |   );
29 | });
30 | 
31 | export default Horizontal;
32 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/CrossHair/Pointer.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import useStyles from "./styles";
11 | 
12 | interface Props {
13 |   color?: string;
14 | }
15 | 
16 | const Pointer = React.forwardRef<SVGSVGElement, Props>(({ color }, ref) => {
17 |   const classes = useStyles({ color });
18 |   return (
19 |     <svg viewBox="0 0 38 38" ref={ref} className={classes.base}>
20 |       <g className={classes.border}>
21 |         <rect x="0" y="16" width="14" height="6" rx="3" />
22 |         <rect x="24" y="16" width="14" height="6" rx="3" />
23 |         <rect x="16" y="0" width="6" height="14" rx="3" />
24 |         <rect x="16" y="24" width="6" height="14" rx="3" />
25 |         <rect x="16" y="16" width="6" height="6" rx="3" />
26 |       </g>
27 | 
28 |       <g className={classes.primary}>
29 |         <rect x="2" y="18" width="10" height="2" />
30 |         <rect x="26" y="18" width="10" height="2" />
31 |         <rect x="18" y="2" width="2" height="10" />
32 |         <rect x="18" y="26" width="2" height="10" />
33 |         <rect x="18" y="18" width="2" height="2" />
34 |       </g>
35 |     </svg>
36 |   );
37 | });
38 | 
39 | export default Pointer;
40 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/CrossHair/Vertical.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import useStyles from "./styles";
11 | 
12 | interface Props {
13 |   color?: string;
14 | }
15 | 
16 | const Vertical = React.forwardRef<SVGSVGElement, Props>(({ color }, ref) => {
17 |   const classes = useStyles({ color });
18 |   return (
19 |     <svg
20 |       preserveAspectRatio="none"
21 |       viewBox="0 0 2 1"
22 |       className={classes.base}
23 |       ref={ref}
24 |     >
25 |       <rect x="0" y="0" width="1" height="1" className={classes.primary} />
26 |       <rect x="1" y="0" width="1" height="1" className={classes.shadow} />
27 |     </svg>
28 |   );
29 | });
30 | 
31 | export default Vertical;
32 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/CrossHair/index.stories.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { Story } from "@storybook/react/types-6-0";
11 | 
12 | import CrossHair from "./";
13 | 
14 | export default {
15 |   title: "components/CrossHair",
16 |   component: CrossHair,
17 | };
18 | 
19 | const Template: Story<any> = (args) => (
20 |   <CrossHair active color="red" {...args}>
21 |     <img
22 |       style={{ width: 800 }}
23 |       alt="dog"
24 |       src="https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/dog-puppy-on-garden-royalty-free-image-1586966191.jpg"
25 |     />
26 |   </CrossHair>
27 | );
28 | 
29 | export const Primary = Template.bind({});
30 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/CrossHair/styles.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { createStyles, makeStyles } from "@material-ui/core";
 9 | 
10 | interface Props {
11 |   color?: string;
12 | }
13 | 
14 | const useStyles = makeStyles(() =>
15 |   createStyles({
16 |     base: {
17 |       visibility: "hidden",
18 |       position: "absolute",
19 |       pointerEvents: "none",
20 |       zIndex: 2,
21 |     },
22 |     primary: { fill: (props: Props) => props.color },
23 |     shadow: { fill: "rgba(255, 255, 255, 0.2)" },
24 |     border: { fill: "rgba(255, 255, 255, 0.5)" },
25 |   })
26 | );
27 | 
28 | export default useStyles;
29 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/Dialog/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | export const DIALOG_ROOT_ID = "dialog-root";
11 | export const FILE_INPUT_ID = "file-input";
12 | 
13 | // TODO handle thi better...
14 | declare module "@material-ui/core/styles/createPalette" {
15 |   interface Palette {
16 |     danger: Palette["primary"];
17 |   }
18 |   interface PaletteOptions {
19 |     danger: PaletteOptions["primary"];
20 |   }
21 | }
22 | 
23 | function Dialog() {
24 |   return (
25 |     <React.Fragment>
26 |       <div id={DIALOG_ROOT_ID} />
27 |       <input type="file" id={FILE_INPUT_ID} style={{ display: "none" }} />
28 |     </React.Fragment>
29 |   );
30 | }
31 | 
32 | export default Dialog;
33 | export * from "./showDialog";
34 | export * from "./showFileDialog";
35 | export * from "./showConfirmDialog";
36 | export * from "./showInputDialog";
37 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/Dialog/showDialog.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | import ReactDOM from "react-dom";
10 | 
11 | import { CssBaseline, ThemeProvider } from "@material-ui/core";
12 | 
13 | import theme from "@iris/theme";
14 | 
15 | import { DIALOG_ROOT_ID } from ".";
16 | 
17 | export function showDialog<T>(Dialog: any, props: any): Promise<T | undefined> {
18 |   return new Promise((resolve) => {
19 |     const dialogRoot = document.getElementById(DIALOG_ROOT_ID);
20 | 
21 |     if (dialogRoot === null) {
22 |       return resolve(undefined);
23 |     }
24 | 
25 |     const handleClose = () => {
26 |       ReactDOM.unmountComponentAtNode(dialogRoot);
27 |       resolve(undefined);
28 |     };
29 | 
30 |     const handleAction = (value: T) => {
31 |       ReactDOM.unmountComponentAtNode(dialogRoot);
32 |       resolve(value);
33 |     };
34 | 
35 |     ReactDOM.render(
36 |       <React.StrictMode>
37 |         <ThemeProvider theme={theme}>
38 |           <CssBaseline />
39 |           <Dialog onClose={handleClose} onAction={handleAction} {...props} />
40 |         </ThemeProvider>
41 |       </React.StrictMode>,
42 |       dialogRoot
43 |     );
44 |   });
45 | }
46 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/Dialog/showFileDialog.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { FILE_INPUT_ID } from ".";
 9 | 
10 | interface Options {
11 |   accept?: string;
12 |   multiple?: boolean;
13 | }
14 | 
15 | export function showFileDialog(
16 |   options: Options = {}
17 | ): Promise<File[] | undefined> {
18 |   const { accept, multiple } = options;
19 |   return new Promise((resolve) => {
20 |     const input = document.getElementById(FILE_INPUT_ID) as HTMLInputElement;
21 | 
22 |     if (input === null) {
23 |       return resolve(undefined);
24 |     }
25 | 
26 |     function handleFileChosen() {
27 |       const curFiles = input.files;
28 |       if (curFiles === null) {
29 |         return resolve(undefined);
30 |       }
31 |       return resolve(Array.from(curFiles));
32 |     }
33 | 
34 |     if (accept !== undefined) {
35 |       input.accept = accept;
36 |     }
37 | 
38 |     if (multiple !== undefined) {
39 |       input.multiple = multiple;
40 |     }
41 | 
42 |     input.addEventListener("change", handleFileChosen);
43 |     input.click();
44 |   });
45 | }
46 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/EmptySet/index.stories.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { Story } from "@storybook/react/types-6-0";
11 | 
12 | import EmptySet from "./";
13 | 
14 | export default {
15 |   title: "components/EmptySet",
16 |   component: EmptySet,
17 | };
18 | 
19 | const Template: Story<any> = (args) => <EmptySet show {...args} />;
20 | 
21 | export const Primary = Template.bind({});
22 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/HorizontalListController/HorizontalListItem.js:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React, { useCallback } from "react";
 9 | 
10 | const HorizontalListItem = React.memo(
11 |   ({ onItemSelected, state, listItem, index, id }) => {
12 |     const handleClick = useCallback(
13 |       (e) => {
14 |         onItemSelected(e, index);
15 |       },
16 |       [index, onItemSelected]
17 |     );
18 |     return (
19 |       <div id={id} onClick={handleClick}>
20 |         {React.cloneElement(listItem, {
21 |           state: state,
22 |         })}
23 |       </div>
24 |     );
25 |   }
26 | );
27 | 
28 | export default HorizontalListItem;
29 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/ImageTile/index.stories.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { Story } from "@storybook/react/types-6-0";
11 | 
12 | import ImageTile from "./";
13 | 
14 | export default {
15 |   title: "components/ImageTile",
16 |   component: ImageTile,
17 |   argTypes: {
18 |     state: {
19 |       control: {
20 |         type: "inline-radio",
21 |         options: ["active", "selected", "normal"],
22 |       },
23 |     },
24 |   },
25 | };
26 | 
27 | const Template: Story<any> = (args) => <ImageTile {...args} />;
28 | 
29 | export const Primary = Template.bind({});
30 | Primary.args = {
31 |   state: "normal",
32 |   url: "https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/dog-puppy-on-garden-royalty-free-image-1586966191.jpg",
33 | };
34 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/LabelSelect/index.stories.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React, { useState } from "react";
 9 | 
10 | import { Story } from "@storybook/react/types-6-0";
11 | 
12 | import Select, { Props } from "./";
13 | 
14 | export default {
15 |   title: "components/LabelSelect",
16 |   component: Select,
17 | };
18 | 
19 | const Template: Story<Props> = (args) => {
20 |   const [active, setActive] = useState(args.labels[0].id);
21 |   return (
22 |     <Select
23 |       {...args}
24 |       activeLabel={active}
25 |       onChange={(label) => {
26 |         setActive(label);
27 |       }}
28 |     />
29 |   );
30 | };
31 | 
32 | export const Primary = Template.bind({});
33 | Primary.args = {
34 |   labels: [
35 |     { name: "bloop", id: "0" },
36 |     { name: "blop", id: "1" },
37 |     { name: "bleep", id: "2" },
38 |   ],
39 | };
40 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/ToolbarMenus/Divider.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { createStyles, makeStyles, Theme } from "@material-ui/core";
11 | 
12 | const useStyles = makeStyles((theme: Theme) =>
13 |   createStyles({
14 |     listDivider: {
15 |       margin: "6px 0",
16 |       height: 1,
17 |       background: theme.palette.grey[600], // listDivider
18 |     },
19 |   })
20 | );
21 | 
22 | function Divider() {
23 |   const classes = useStyles();
24 |   return <div className={classes.listDivider} />;
25 | }
26 | 
27 | export default Divider;
28 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/ToolbarMenus/icons/Chevron.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { SvgIcon, SvgIconProps } from "@material-ui/core";
11 | 
12 | function Chevron(props: SvgIconProps) {
13 |   return (
14 |     <SvgIcon viewBox="0 0 32 32" {...props}>
15 |       <path d="M22 16L12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path>
16 |     </SvgIcon>
17 |   );
18 | }
19 | 
20 | export default Chevron;
21 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/ToolbarMenus/icons/Tooltip.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { SvgIcon, SvgIconProps } from "@material-ui/core";
11 | 
12 | function Tooltip(props: SvgIconProps) {
13 |   return (
14 |     <SvgIcon viewBox="0 0 32 32" {...props}>
15 |       <polygon points="17 22 17 13 13 13 13 15 15 15 15 22 12 22 12 24 20 24 20 22 17 22" />
16 |       <path d="M16,7a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,16,7Z" />
17 |       <path d="M16,30A14,14,0,1,1,30,16,14,14,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4Z" />
18 |     </SvgIcon>
19 |   );
20 | }
21 | 
22 | export default Tooltip;
23 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/ToolbarMenus/types.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export interface Menu {
 9 |   name: string;
10 |   items: Item[];
11 | }
12 | 
13 | export type Item = Divider | MenuItem;
14 | 
15 | export interface Divider {
16 |   divider: boolean;
17 | }
18 | 
19 | export interface MenuItem {
20 |   name: string;
21 |   disabled?: boolean;
22 |   action?: () => void;
23 |   link?: string;
24 | 
25 |   items?: Item[];
26 |   tooltip?: Tooltip;
27 | }
28 | 
29 | export interface TooltipMenuItem extends MenuItem {
30 |   tooltip: Tooltip;
31 |   items: never;
32 | }
33 | 
34 | export interface SubMenuItem extends MenuItem {
35 |   items: Item[];
36 |   tooltip: never;
37 | }
38 | 
39 | export interface Tooltip {
40 |   title: string;
41 |   description: string;
42 |   link: string;
43 | }
44 | 
45 | export function isDivider(item: Divider | MenuItem): item is Divider {
46 |   return (item as Divider).divider === true;
47 | }
48 | 
49 | export function isMenuItem(item: Divider | MenuItem): item is MenuItem {
50 |   return (item as MenuItem).name !== undefined;
51 | }
52 | 
53 | export function isTooltipMenuItem(
54 |   item: Divider | MenuItem
55 | ): item is TooltipMenuItem {
56 |   return isMenuItem(item) && (item as TooltipMenuItem).tooltip !== undefined;
57 | }
58 | 
59 | export function isSubMenuItem(item: Divider | MenuItem): item is SubMenuItem {
60 |   return isMenuItem(item) && (item as SubMenuItem).items !== undefined;
61 | }
62 | 


--------------------------------------------------------------------------------
/packages/iris-components/src/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export { default as CanvasView } from "./CanvasView";
 9 | export { default as CrossHair } from "./CrossHair";
10 | export { default as EmptySet } from "./EmptySet";
11 | export { default as HorizontalListController } from "./HorizontalListController";
12 | export { default as ImageTile } from "./ImageTile";
13 | export { default as LabelSelect } from "./LabelSelect";
14 | export { default as Dialog } from "./Dialog";
15 | export { default as ToolbarMenus } from "./ToolbarMenus";
16 | 
17 | export * from "./Dialog";
18 | 


--------------------------------------------------------------------------------
/packages/iris-components/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-core/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/core",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "start": "tsc -w",
 8 |     "build": "tsc"
 9 |   },
10 |   "dependencies": {
11 |     "@iris/api": "^0.0.1",
12 |     "@reduxjs/toolkit": "^1.4.0",
13 |     "@types/react": "^16.9.53",
14 |     "@types/react-redux": "^7.1.9",
15 |     "@types/uuid": "^8.3.0",
16 |     "react": "^17.0.1",
17 |     "react-redux": "^7.2.1",
18 |     "socket.io-client": "^3.1.2"
19 |   }
20 | }
21 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/CanvasPlugin/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { Canvas } from "./Canvas";
 9 | 
10 | export abstract class CanvasPlugin {
11 |   abstract onTargetMove(point: Canvas.Point, target: Canvas.TouchTarget): void;
12 | 
13 |   abstract onMouseDown(point: Canvas.Point): void;
14 | 
15 |   abstract onMouseMove(point: Canvas.Point): void;
16 | 
17 |   abstract onMouseUp(point: Canvas.Point, xScale: number, yScale: number): void;
18 | 
19 |   abstract render(ctx: Canvas.Context, v: Canvas.Shape): void;
20 | }
21 | 
22 | export { Canvas } from "./Canvas";
23 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/data/types.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export interface DataState {
 9 |   labels: {
10 |     data: { [key: string]: Project.Label };
11 |     active: string | undefined;
12 |   };
13 | 
14 |   images: {
15 |     data: { [key: string]: Project.Image };
16 |     active: string | undefined;
17 |     filter: {
18 |       mode?: "unlabeled" | "labeled" | "byLabel";
19 |       label?: string;
20 |     };
21 |     selection: string[];
22 |   };
23 | 
24 |   annotations: {
25 |     data: { [key: string]: Project.AnnotationWithID };
26 |   };
27 | 
28 |   tool: {
29 |     active: string;
30 |   };
31 | }
32 | 
33 | export namespace Project {
34 |   export interface Label {
35 |     id: string;
36 |     name: string;
37 |   }
38 | 
39 |   export interface Image {
40 |     id: string;
41 |     status: "idle" | "pending" | "success" | "error";
42 |     date: string;
43 |     annotations: string[];
44 |   }
45 | 
46 |   export interface ResolvedImage extends Image {
47 |     resolvedAnnotations: AnnotationWithID[];
48 |   }
49 | 
50 |   export interface Annotation {
51 |     label: string;
52 |     tool: string;
53 |     targets?: Target[];
54 |     [key: string]: any; // plugins can specify extra keys.
55 |   }
56 | 
57 |   export interface AnnotationWithID extends Annotation {
58 |     id: string;
59 |   }
60 | 
61 |   export interface Target {
62 |     id: string;
63 |     x: number;
64 |     y: number;
65 |   }
66 | }
67 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/data/utils.test.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { labelNameExists } from "./utils";
 9 | 
10 | describe("labelNameExists", () => {
11 |   it("returns true for existing names", () => {
12 |     expect(
13 |       labelNameExists(
14 |         { "1": { id: "1", name: "x" }, "2": { id: "2", name: "y" } },
15 |         "x"
16 |       )
17 |     ).toBe(true);
18 |   });
19 | 
20 |   it("returns false for nonexistant names", () => {
21 |     expect(
22 |       labelNameExists(
23 |         { y: { id: "y", name: "y" }, x: { id: "x", name: "xxx" } },
24 |         "x"
25 |       )
26 |     ).toBe(false);
27 |   });
28 | });
29 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/data/utils.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { Project } from "./types";
 9 | 
10 | export function labelNameExists(
11 |   labels: { [key: string]: Project.Label },
12 |   label: string
13 | ) {
14 |   const names = Object.values(labels).map((l) => l.name);
15 |   return names.includes(label);
16 | }
17 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export * from "./store";
 9 | export { default as store } from "./store";
10 | 
11 | export * from "./CanvasPlugin";
12 | 
13 | export * from "./load";
14 | export * from "./persist";
15 | export * from "./hooks";
16 | 
17 | export * from "./data";
18 | export * from "./meta";
19 | export * from "./room";
20 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/load.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { createAsyncThunk } from "@reduxjs/toolkit";
 9 | 
10 | import { api } from "@iris/api";
11 | 
12 | interface Options {
13 |   projectID: string;
14 |   connectionID: string;
15 |   providerID: string;
16 | }
17 | 
18 | export const load = createAsyncThunk(
19 |   "load",
20 |   async ({ projectID, connectionID, providerID }: Options) => {
21 |     return await api.get("/project", {
22 |       query: { projectID, connectionID, providerID },
23 |     });
24 |   }
25 | );
26 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/meta/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { createSlice, SerializedError } from "@reduxjs/toolkit";
 9 | 
10 | import { load } from "../load";
11 | 
12 | export interface MetaState {
13 |   status: "idle" | "pending" | "success" | "error";
14 |   saving: number;
15 |   name?: string;
16 |   created?: string;
17 |   error?: SerializedError;
18 | }
19 | 
20 | const initialState: MetaState = {
21 |   status: "idle",
22 |   saving: 0,
23 |   name: undefined,
24 |   created: undefined,
25 |   error: undefined,
26 | };
27 | 
28 | const slice = createSlice({
29 |   name: "metadata",
30 |   initialState,
31 |   reducers: {
32 |     incrementSaving: (state) => {
33 |       state.saving += 1;
34 |     },
35 |     decrementSaving: (state) => {
36 |       state.saving -= 1;
37 |     },
38 |   },
39 |   extraReducers: (builder) => {
40 |     builder.addCase(load.pending, (state, _action) => {
41 |       state.status = "pending";
42 |     });
43 |     builder.addCase(load.fulfilled, (state, action) => {
44 |       state.status = "success";
45 |       state.name = action.payload.name;
46 |       state.created = action.payload.created;
47 |     });
48 |     builder.addCase(load.rejected, (state, action) => {
49 |       state.status = "error";
50 |       state.error = action.error;
51 |     });
52 |   },
53 | });
54 | 
55 | export default slice.reducer;
56 | export const { incrementSaving, decrementSaving } = slice.actions;
57 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/room/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { createAction, createReducer } from "@reduxjs/toolkit";
 9 | 
10 | export interface RoomState {
11 |   headCount: number;
12 | }
13 | 
14 | const initialState: RoomState = {
15 |   headCount: 0,
16 | };
17 | 
18 | export const SET_HEADCOUNT = createAction<number>("[room] Set head count");
19 | 
20 | const reducer = createReducer(initialState, (builder) => {
21 |   builder.addCase(SET_HEADCOUNT, (state, { payload }) => {
22 |     state.headCount = payload;
23 |   });
24 | });
25 | 
26 | export default reducer;
27 | 


--------------------------------------------------------------------------------
/packages/iris-core/src/store.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { configureStore } from "@reduxjs/toolkit";
 9 | 
10 | import data from "./data";
11 | import meta from "./meta";
12 | import { persist } from "./persist";
13 | import room from "./room";
14 | 
15 | const store = configureStore({
16 |   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(persist),
17 |   reducer: { data, meta, room },
18 |   devTools: process.env.NODE_ENV !== "production",
19 | });
20 | 
21 | export type ProjectState = ReturnType<typeof store.getState>;
22 | 
23 | export default store;
24 | 


--------------------------------------------------------------------------------
/packages/iris-core/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-hooks/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/hooks",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "start": "tsc -w",
 8 |     "build": "tsc"
 9 |   },
10 |   "dependencies": {
11 |     "@types/react": "^16.9.53",
12 |     "@types/uuid": "^8.3.0",
13 |     "react": "^17.0.1"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-hooks/src/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | export { default as useClickOutside } from "./useClickOutside";
 9 | export { default as useBlockSwipeBack } from "./useBlockSwipeBack";
10 | 


--------------------------------------------------------------------------------
/packages/iris-hooks/src/useBlockSwipeBack/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { useEffect, useRef } from "react";
 9 | 
10 | function useBlockSwipeBack<T extends HTMLElement>() {
11 |   const ref = useRef<T>(null);
12 | 
13 |   useEffect(() => {
14 |     const current = ref.current;
15 | 
16 |     function handleMouseWheel(e: WheelEvent) {
17 |       e.stopPropagation();
18 |       if (current === null) {
19 |         return;
20 |       }
21 | 
22 |       if (!current.contains(e.target as Node)) {
23 |         return;
24 |       }
25 | 
26 |       e.preventDefault();
27 |       const max = current.scrollWidth - current.offsetWidth;
28 |       const scrollPosition =
29 |         Math.abs(e.deltaX) > Math.abs(e.deltaY)
30 |           ? current.scrollLeft + e.deltaX
31 |           : current.scrollLeft + e.deltaY;
32 |       current.scrollLeft = Math.max(0, Math.min(max, scrollPosition));
33 |     }
34 | 
35 |     document.addEventListener("wheel", handleMouseWheel, {
36 |       passive: false,
37 |     });
38 | 
39 |     return () => {
40 |       document.removeEventListener("wheel", handleMouseWheel);
41 |     };
42 |   }, []);
43 | 
44 |   return { ref };
45 | }
46 | 
47 | export default useBlockSwipeBack;
48 | 


--------------------------------------------------------------------------------
/packages/iris-hooks/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-icons/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/icons",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "start": "tsc -w",
 8 |     "build": "tsc"
 9 |   },
10 |   "dependencies": {
11 |     "@types/uuid": "^8.3.0",
12 |     "@material-ui/core": "^4.11.0",
13 |     "react": "^17.0.1"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-icons/src/IrisLogo.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import { SvgIcon, SvgIconProps } from "@material-ui/core";
11 | 
12 | export function IrisLogo(props: SvgIconProps) {
13 |   return (
14 |     <SvgIcon viewBox="0 0 40 41" {...props}>
15 |       <rect fill="white" x="0" y="0" width="8" height="8" />
16 |       <rect fill="white" x="32" y="0" width="8" height="8" />
17 |       <rect fill="white" x="0" y="33" width="8" height="8" />
18 |       <rect fill="white" x="32" y="33" width="8" height="8" />
19 |       <rect fill="white" x="4" y="8" width="4" height="25" />
20 |       <rect fill="white" x="32" y="8" width="4" height="25" />
21 |       <rect fill="white" x="8" y="5" width="24" height="3" />
22 |       <rect fill="white" x="8" y="33" width="24" height="3" />
23 |     </SvgIcon>
24 |   );
25 | }
26 | 


--------------------------------------------------------------------------------
/packages/iris-icons/src/index.ts:
--------------------------------------------------------------------------------
1 | /*
2 |  * Copyright (c) International Business Machines
3 |  *
4 |  * This source code is licensed under the MIT license found in the
5 |  * LICENSE file in the root directory of this source tree.
6 |  */
7 | 
8 | export * from "./IrisLogo";
9 | 


--------------------------------------------------------------------------------
/packages/iris-icons/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-plugin-box-tool/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/plugin-box-tool",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "start": "tsc -w",
 8 |     "build": "tsc"
 9 |   },
10 |   "dependencies": {
11 |     "@iris/components": "^0.0.1",
12 |     "@iris/core": "^0.0.1",
13 |     "@material-ui/core": "^4.11.0",
14 |     "@types/react": "^16.9.53",
15 |     "@types/react-dom": "^16.9.8",
16 |     "@types/react-redux": "^7.1.9",
17 |     "@types/uuid": "^8.3.0",
18 |     "immer": "^9.0.2",
19 |     "react": "^17.0.1",
20 |     "react-dom": "^17.0.1",
21 |     "react-redux": "^7.2.1"
22 |   }
23 | }
24 | 


--------------------------------------------------------------------------------
/packages/iris-plugin-box-tool/src/index.tsx:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import React from "react";
 9 | 
10 | import ActiveLabel from "./ActiveLabel";
11 | import BoxCanvasPlugin from "./BoxCanvasPlugin";
12 | 
13 | const moveStyle = {
14 |   fill: "white",
15 | };
16 | 
17 | const boxStyle = {
18 |   fill: "white",
19 |   fillOpacity: 0.2,
20 |   stroke: "white",
21 |   strokeWidth: 2,
22 | };
23 | 
24 | export function activate(iris: any) {
25 |   iris.tools.register({
26 |     id: "move",
27 |     displayName: "Move",
28 |     priority: 100,
29 |     icon: (
30 |       <svg style={moveStyle} width="20" height="20" viewBox="0 0 40 40">
31 |         <path d="M19,11h2V29H19V11Zm-8,8H29v2H11V19ZM21,35H19l-4-6H25ZM35,19v2l-6,4V15ZM5,21V19l6-4V25ZM19,5h2l4,6H15Z" />
32 |       </svg>
33 |     ),
34 |   });
35 | 
36 |   const boxTool = iris.tools.register({
37 |     id: "box",
38 |     canvasPlugin: new BoxCanvasPlugin(),
39 |     displayName: "Bounding Box",
40 |     displayNamePlural: "Bounding Boxes",
41 |     icon: (
42 |       <svg style={boxStyle} width="20" height="20" viewBox="0 0 40 40">
43 |         <rect x="4" y="8" width="32" height="24" />
44 |       </svg>
45 |     ),
46 |   });
47 | 
48 |   boxTool.options.register({
49 |     component: <ActiveLabel />,
50 |     priority: 100,
51 |   });
52 | }
53 | 


--------------------------------------------------------------------------------
/packages/iris-plugin-box-tool/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/iris-theme/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/theme",
 3 |   "version": "0.0.1",
 4 |   "main": "dist/index.js",
 5 |   "license": "MIT",
 6 |   "scripts": {
 7 |     "start": "tsc -w",
 8 |     "build": "tsc"
 9 |   },
10 |   "dependencies": {
11 |     "@material-ui/core": "^4.11.0",
12 |     "@material-ui/lab": "^4.0.0-alpha.56",
13 |     "@storybook/react": "6.0.27",
14 |     "@types/uuid": "^8.3.0"
15 |   }
16 | }
17 | 


--------------------------------------------------------------------------------
/packages/iris-theme/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es5",
10 |     "lib": ["dom", "dom.iterable", "esnext"],
11 |     "module": "esnext",
12 |     "jsx": "react"
13 |   },
14 |   "include": ["src"]
15 | }
16 | 


--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "@iris/server",
 3 |   "private": true,
 4 |   "version": "0.0.1",
 5 |   "bin": {
 6 |     "iris": "./bin/index.js"
 7 |   },
 8 |   "scripts": {
 9 |     "serve": "node dist/index.js",
10 |     "start": "tsc -w",
11 |     "build": "tsc"
12 |   },
13 |   "dependencies": {
14 |     "@types/busboy": "^0.2.3",
15 |     "@types/compression": "^1.7.0",
16 |     "@types/express": "^4.17.8",
17 |     "@types/fs-extra": "^9.0.4",
18 |     "@types/node": "^14.14.2",
19 |     "@types/pino-http": "^5.0.5",
20 |     "@types/proper-lockfile": "^4.1.1",
21 |     "@types/redis": "^2.8.28",
22 |     "@types/uuid": "^8.3.0",
23 |     "axios": "^0.21.1",
24 |     "busboy": "^0.3.1",
25 |     "clean-webpack-plugin": "^3.0.0",
26 |     "compression": "^1.7.4",
27 |     "cookie-parser": "^1.4.5",
28 |     "dotenv": "^10.0.0",
29 |     "express": "^4.17.1",
30 |     "fs-extra": "^9.0.1",
31 |     "helmet": "^4.1.1",
32 |     "ibm-cos-sdk": "^1.10.0",
33 |     "jsonwebtoken": "^8.5.1",
34 |     "pino-colada": "^2.1.0",
35 |     "pino-http": "^5.3.0",
36 |     "proper-lockfile": "^4.1.1",
37 |     "redis": "^3.0.2",
38 |     "socket.io": "^3.1.2",
39 |     "socket.io-redis": "^6.0.1",
40 |     "start-server-webpack-plugin": "^2.2.5",
41 |     "ts-loader": "^8.0.6",
42 |     "tsconfig-paths-webpack-plugin": "^3.3.0",
43 |     "typescript": "^4.0.3",
44 |     "webpack": "^5.2.0",
45 |     "webpack-cli": "^4.1.0",
46 |     "webpack-merge": "^5.2.0",
47 |     "webpack-node-externals": "^2.5.2"
48 |   },
49 |   "devDependencies": {
50 |     "@types/cookie-parser": "^1.4.2",
51 |     "@types/jsonwebtoken": "^8.5.1"
52 |   }
53 | }
54 | 


--------------------------------------------------------------------------------
/server/src/handlers/error.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { NextFunction, Request, Response } from "express";
 9 | 
10 | function errorHandler(
11 |   err: Error,
12 |   _req: Request,
13 |   res: Response,
14 |   next: NextFunction
15 | ) {
16 |   if (res.headersSent) {
17 |     return next(err);
18 |   }
19 |   // Don't leak internal errors in production.
20 |   if (process.env.NODE_ENV === "production") {
21 |     return res.sendStatus(500);
22 |   }
23 | 
24 |   return res.status(500).json({ error: err.message });
25 | }
26 | 
27 | export default errorHandler;
28 | 


--------------------------------------------------------------------------------
/server/src/handlers/not-found.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { Request, Response } from "express";
 9 | 
10 | function notFoundHandler(_req: Request, res: Response) {
11 |   res.sendStatus(404);
12 | }
13 | 
14 | export default notFoundHandler;
15 | 


--------------------------------------------------------------------------------
/server/src/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import "dotenv/config";
 9 | 
10 | import http from "http";
11 | 
12 | import cookieParser from "cookie-parser";
13 | import express from "express";
14 | 
15 | import errorHandler from "./handlers/error";
16 | import notFoundHandler from "./handlers/not-found";
17 | import gzip from "./middleware/gzip";
18 | import logger from "./middleware/logger";
19 | import security from "./middleware/security";
20 | import multiuser from "./multiuser";
21 | import { authenticate } from "./plugins/iris-server-plugin-ibm-auth";
22 | import authRouter from "./routes/auth";
23 | import spaRouter from "./routes/spa";
24 | import v2Router from "./routes/v2";
25 | 
26 | const app = express();
27 | const server = http.createServer(app);
28 | const port = process.env.PORT || 9000;
29 | 
30 | app.enable("trust proxy");
31 | app.disable("x-powered-by");
32 | 
33 | multiuser(server);
34 | 
35 | app.use(gzip());
36 | app.use(security());
37 | app.use(logger());
38 | app.use(cookieParser());
39 | app.use(express.json());
40 | 
41 | app.use("/auth", authRouter);
42 | app.use("/api/v2", authenticate);
43 | app.use("/api/v2", v2Router);
44 | app.use("/", spaRouter);
45 | 
46 | app.use(notFoundHandler);
47 | app.use(errorHandler);
48 | 
49 | server.listen(port, () => {
50 |   console.log("listening on port " + port);
51 | });
52 | 


--------------------------------------------------------------------------------
/server/src/middleware/gzip.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import compression from "compression";
 9 | 
10 | function gzip() {
11 |   return compression({
12 |     filter: (req, res) => {
13 |       // don't compress responses asking explicitly not
14 |       if (req.headers["x-no-compression"]) {
15 |         return false;
16 |       }
17 | 
18 |       // use compression filter function
19 |       return compression.filter(req, res);
20 |     },
21 |   });
22 | }
23 | 
24 | export default gzip;
25 | 


--------------------------------------------------------------------------------
/server/src/middleware/logger.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import pinoColada from "pino-colada";
 9 | import pino from "pino-http";
10 | 
11 | function logger() {
12 |   return pino({
13 |     level: process.env.LOG_LEVEL || "info",
14 |     prettyPrint: process.env.NODE_ENV !== "production",
15 |     prettifier: pinoColada,
16 |   });
17 | }
18 | 
19 | export default logger;
20 | 


--------------------------------------------------------------------------------
/server/src/middleware/pino-colada.d.ts:
--------------------------------------------------------------------------------
1 | /*
2 |  * Copyright (c) International Business Machines
3 |  *
4 |  * This source code is licensed under the MIT license found in the
5 |  * LICENSE file in the root directory of this source tree.
6 |  */
7 | 
8 | declare module "pino-colada";
9 | 


--------------------------------------------------------------------------------
/server/src/middleware/security.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import helmet from "helmet";
 9 | 
10 | function security() {
11 |   return helmet({ contentSecurityPolicy: false });
12 | }
13 | 
14 | export default security;
15 | 


--------------------------------------------------------------------------------
/server/src/plugins/iris-server-plugin-cos/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import COSProvider from "./COSProvider";
 9 | 
10 | export function activate(iris: any) {
11 |   iris.providers.register({
12 |     id: "cos",
13 |     provider: new COSProvider(),
14 |   });
15 | }
16 | 


--------------------------------------------------------------------------------
/server/src/plugins/iris-server-plugin-file-system/index.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import FileSystemProvider from "./FileSystemProvider";
 9 | 
10 | export function activate(iris: any) {
11 |   iris.providers.register({
12 |     id: "file-system",
13 |     provider: new FileSystemProvider(),
14 |   });
15 | }
16 | 


--------------------------------------------------------------------------------
/server/src/routes/auth.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import { Router } from "express";
 9 | 
10 | import {
11 |   authHandler,
12 |   authCallbackHandler,
13 | } from "../plugins/iris-server-plugin-ibm-auth";
14 | 
15 | const router = Router();
16 | 
17 | router.get("/", authHandler);
18 | 
19 | router.get("/callback", authCallbackHandler);
20 | 
21 | export default router;
22 | 


--------------------------------------------------------------------------------
/server/src/routes/spa.ts:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (c) International Business Machines
 3 |  *
 4 |  * This source code is licensed under the MIT license found in the
 5 |  * LICENSE file in the root directory of this source tree.
 6 |  */
 7 | 
 8 | import path from "path";
 9 | 
10 | import express, { Router } from "express";
11 | 
12 | const root = process.env.SPA_ROOT;
13 | 
14 | const router = Router();
15 | 
16 | if (root) {
17 |   router.use(express.static(root, { maxAge: 31536000 }));
18 |   router.get("*", (_req, res) => {
19 |     res.sendFile(path.join(root, "index.html"));
20 |   });
21 | }
22 | 
23 | export default router;
24 | 


--------------------------------------------------------------------------------
/server/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "extends": "../tsconfig.base.json",
 3 |   "compilerOptions": {
 4 |     "declarationMap": true,
 5 |     "declaration": true,
 6 |     "sourceMap": true,
 7 |     "outDir": "dist",
 8 | 
 9 |     "target": "es2017",
10 |     "lib": ["es2017", "es2019.array"],
11 |     "module": "commonjs"
12 |   },
13 |   "include": ["src"]
14 | }
15 | 


--------------------------------------------------------------------------------
/training/pipelines/classification.pipeline:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/training/pipelines/classification.pipeline


--------------------------------------------------------------------------------
/training/scripts/trainer/.dockerignore:
--------------------------------------------------------------------------------
1 | # Ignore everything.
2 | **
3 | 
4 | # Allow `/src` and `Dockerfile`.
5 | !/Dockerfile
6 | !/src/**
7 | !/test/**


--------------------------------------------------------------------------------
/training/scripts/trainer/.flake8:
--------------------------------------------------------------------------------
1 | [flake8]
2 | ignore = E266, E501, W503
3 | exclude = src/classification,src/object_detection
4 | max-line-length = 88
5 | max-complexity = 18
6 | select = B,C,E,F,W,T4,B9


--------------------------------------------------------------------------------
/training/scripts/trainer/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include src/requirements.txt
2 | include src/start.sh
3 | include src/pipeline_skeleton.config


--------------------------------------------------------------------------------
/training/scripts/trainer/README.md:
--------------------------------------------------------------------------------
 1 | Build the docker image:
 2 | ```
 3 | docker build -t trainer .
 4 | ```
 5 | 
 6 | Run with number of steps:
 7 | ```
 8 | docker build -t trainer . && docker run -a stdin -a stdout -a stderr -i -t --privileged trainer 10
 9 | ```
10 | 
11 | ```
12 | zip -r trainer.zip src
13 | cacli train thumbs-up-down-v2 --steps 500 --script trainer.zip --frameworkv 1.15
14 | ```
15 | 
16 | coremltools==3.3
17 | tfcoreml==1.1
18 | tensorflowjs==1.4.0
19 | ```
20 | python -m convert.convert --tfjs --coreml --tflite \
21 |   --tfjs-path=../model_web \
22 |   --mlmodel-path=../model_ios \
23 |   --tflite-path=../model_android \
24 |   --saved-model-path=../model
25 | ```


--------------------------------------------------------------------------------
/training/scripts/trainer/src/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/training/scripts/trainer/src/__init__.py


--------------------------------------------------------------------------------
/training/scripts/trainer/src/convert/TFLiteConverter.py:
--------------------------------------------------------------------------------
 1 | import tensorflow as tf
 2 | from pkg_resources import parse_version
 3 | 
 4 | 
 5 | print("Using TensorFlow version: {}".format(parse_version(tf.__version__)))
 6 | 
 7 | # TensorFlow 1.12
 8 | if parse_version(tf.__version__) < parse_version("1.13"):
 9 |     print("Using contrib TFLiteConverter")
10 |     convert = tf.contrib.lite.TFLiteConverter
11 | 
12 | # Current
13 | else:
14 |     print("Using current TFLiteConverter")
15 |     convert = tf.lite.TFLiteConverter
16 | 


--------------------------------------------------------------------------------
/training/scripts/trainer/src/convert/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/training/scripts/trainer/src/convert/__init__.py


--------------------------------------------------------------------------------
/training/scripts/trainer/src/convert/convert_to_tfjs.py:
--------------------------------------------------------------------------------
 1 | import os
 2 | import json
 3 | import shutil
 4 | 
 5 | from tensorflowjs.converters import tf_saved_model_conversion_v2
 6 | 
 7 | 
 8 | def convert_localization(frozen_model, labels_path, output_path):
 9 |     tf_saved_model_conversion_v2.convert_tf_frozen_model(
10 |         frozen_model,
11 |         "Postprocessor/ExpandDims_1,Postprocessor/Slice",
12 |         output_path,
13 |         quantization_dtype=None,
14 |         skip_op_check=False,
15 |         strip_debug_ops=True,
16 |     )
17 | 
18 |     # Move the labels to the model directory.
19 |     shutil.copy2(labels_path, output_path)
20 | 
21 | 
22 | def convert_classification(frozen_model, labels_path, output_path):
23 |     tf_saved_model_conversion_v2.convert_tf_frozen_model(
24 |         frozen_model,
25 |         "final_result",
26 |         output_path,
27 |         quantization_dtype=None,
28 |         skip_op_check=False,
29 |         strip_debug_ops=True,
30 |     )
31 | 
32 |     # Move the labels to the model directory.
33 |     with open(labels_path, "r") as f:
34 |         labels = f.read()
35 |         labels = list(filter(bool, [s.strip() for s in labels.splitlines()]))
36 |     with open(os.path.join(output_path, "labels.json"), "w") as f:
37 |         json.dump(labels, f)
38 | 


--------------------------------------------------------------------------------
/training/scripts/trainer/src/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-annotations/cloud-annotations/236f9a64e0880ebaa6ea5f1cb126ab427769bda5/training/scripts/trainer/src/data/__init__.py


--------------------------------------------------------------------------------
/training/scripts/trainer/src/export_labels.py:
--------------------------------------------------------------------------------
 1 | import json
 2 | 
 3 | import tensorflow as tf
 4 | from object_detection.utils.label_map_util import get_label_map_dict
 5 | 
 6 | 
 7 | flags = tf.app.flags
 8 | flags.DEFINE_string("label_map_path", None, "Path to label map.")
 9 | flags.DEFINE_string("output_label_path", None, "Path to write labels.")
10 | tf.app.flags.mark_flag_as_required("label_map_path")
11 | tf.app.flags.mark_flag_as_required("output_label_path")
12 | FLAGS = flags.FLAGS
13 | 
14 | 
15 | def main(_):
16 |     label_map = get_label_map_dict(FLAGS.label_map_path)
17 |     label_array = [k for k in sorted(label_map, key=label_map.get)]
18 |     with open(FLAGS.output_label_path, "w") as f:
19 |         json.dump(label_array, f)
20 | 
21 | 
22 | if __name__ == "__main__":
23 |     tf.app.run(main)
24 | 


--------------------------------------------------------------------------------
/training/scripts/trainer/src/get_latest_checkpoint.py:
--------------------------------------------------------------------------------
 1 | import os
 2 | import re
 3 | 
 4 | import tensorflow as tf
 5 | 
 6 | 
 7 | flags = tf.app.flags
 8 | flags.DEFINE_string("checkpoint_path", None, "Path to checkpoints.")
 9 | tf.app.flags.mark_flag_as_required("checkpoint_path")
10 | FLAGS = flags.FLAGS
11 | 
12 | 
13 | def main(_):
14 |     regex = re.compile(r"model\.ckpt-([0-9]+)\.index")
15 |     numbers = [
16 |         int(regex.search(f).group(1))
17 |         for f in os.listdir(FLAGS.checkpoint_path)
18 |         if regex.search(f)
19 |     ]
20 |     if not numbers:
21 |         print("No checkpoint found!")
22 |         exit(1)
23 |     trained_checkpoint_prefix = os.path.join(
24 |         FLAGS.checkpoint_path, "model.ckpt-{}".format(max(numbers))
25 |     )
26 |     print(trained_checkpoint_prefix)
27 | 
28 | 
29 | if __name__ == "__main__":
30 |     tf.app.run(main)
31 | 


--------------------------------------------------------------------------------
/training/scripts/trainer/src/requirements.txt:
--------------------------------------------------------------------------------
1 | pycocotools==2.0.0
2 | coremltools==3.3
3 | tfcoreml==1.1
4 | tensorflowjs==1.4.0
5 | tensorflow-hub==0.3.0
6 | h5py==2.8.0
7 | numpy==1.17.5
8 | sympy==1.5.1
9 | mpmath==1.1.0


--------------------------------------------------------------------------------
/training/scripts/trainer/test/cache.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | mkdir data_dir
 4 | mkdir result_dir
 5 | 
 6 | S3_ID=$1
 7 | S3_KEY=$2
 8 | BUCKET=$3
 9 | STEPS=$4
10 | 
11 | echo $S3_ID:$S3_KEY > .passwd-s3fs
12 | chmod 600 .passwd-s3fs
13 | s3fs $BUCKET /data_dir -o passwd_file=.passwd-s3fs -o url=https://s3.us.cloud-object-storage.appdomain.cloud/ -o use_path_request_style
14 | 
15 | export DATA_DIR=/data_dir
16 | export RESULT_DIR=/result_dir
17 | 
18 | ./start.sh $STEPS


--------------------------------------------------------------------------------
/training/scripts/trainer/test/convert.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | TYPE=$1
 4 | 
 5 | pip install --user Cython contextlib2 matplotlib
 6 | pip install --user --no-deps -r requirements.txt
 7 | 
 8 | python -m convert.convert \
 9 |   --model-type=$TYPE \
10 |   --coreml --tflite --tfjs \
11 |   --saved-model=/result_dir/model \
12 |   --mlmodel-path=model_ios \
13 |   --tflite-path=model_android \
14 |   --tfjs-path=model_web
15 | 
16 | 
17 | FILE=model_ios/Model.mlmodel
18 | if [ -f "$FILE" ]; then
19 |   echo "✅ Core ML"
20 | else 
21 |   echo "❌ Core ML"
22 | fi
23 | 
24 | FILE=model_android/model.tflite
25 | if [ -f "$FILE" ]; then
26 |   echo "✅ TensorFlow Lite"
27 | else 
28 |   echo "❌ TensorFlow Lite"
29 | fi
30 | 
31 | FILE=model_web/model.json
32 | if [ -f "$FILE" ]; then
33 |   echo "✅ TensorFlow.js"
34 | else 
35 |   echo "❌ TensorFlow.js"
36 | fi
37 | 
38 | 
39 | # Fail....
40 | FILE=model_ios/Model.mlmodel
41 | if [ ! -f "$FILE" ]; then
42 |   exit 1
43 | fi
44 | 
45 | FILE=model_android/model.tflite
46 | if [ ! -f "$FILE" ]; then
47 |   exit 1
48 | fi
49 | 
50 | FILE=model_web/model.json
51 | if [ ! -f "$FILE" ]; then
52 |   exit 1
53 | fi


--------------------------------------------------------------------------------
/training/scripts/trainer/test/ensure_models_exist.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | CORE_ML=$1/model_ios/Model.mlmodel
 4 | TF_LITE=$1/model_android/model.tflite
 5 | TF_JS=$1/model_web/model.json
 6 | 
 7 | if [ -f "$CORE_ML" ]; then
 8 |   echo "✅ Core ML"
 9 | else 
10 |   echo "❌ Core ML"
11 | fi
12 | 
13 | if [ -f "$TF_LITE" ]; then
14 |   echo "✅ TensorFlow Lite"
15 | else 
16 |   echo "❌ TensorFlow Lite"
17 | fi
18 | 
19 | if [ -f "$TF_JS" ]; then
20 |   echo "✅ TensorFlow.js"
21 | else 
22 |   echo "❌ TensorFlow.js"
23 | fi
24 | 
25 | 
26 | # Fail....
27 | if [ ! -f "$CORE_ML" ]; then
28 |   exit 1
29 | fi
30 | 
31 | if [ ! -f "$TF_LITE" ]; then
32 |   exit 1
33 | fi
34 | 
35 | if [ ! -f "$TF_JS" ]; then
36 |   exit 1
37 | fi


--------------------------------------------------------------------------------
/training/scripts/trainer/test/run.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | mkdir data_dir
 4 | mkdir result_dir
 5 | 
 6 | S3_ID=$1
 7 | S3_KEY=$2
 8 | BUCKET=$3
 9 | STEPS=$4
10 | 
11 | echo $S3_ID:$S3_KEY > .passwd-s3fs
12 | chmod 600 .passwd-s3fs
13 | s3fs $BUCKET /data_dir -o passwd_file=.passwd-s3fs -o url=https://s3.us.cloud-object-storage.appdomain.cloud/ -o use_path_request_style
14 | s3fs $BUCKET /result_dir -o passwd_file=.passwd-s3fs -o url=https://s3.us.cloud-object-storage.appdomain.cloud/ -o use_path_request_style
15 | 
16 | export DATA_DIR=/data_dir
17 | export RESULT_DIR=/result_dir/training-local-$(cat /dev/urandom | tr -cd '\-_a-zA-Z0-9' | head -c 9)
18 | 
19 | mkdir $RESULT_DIR
20 | 
21 | ./start.sh $STEPS


--------------------------------------------------------------------------------
/tsconfig.base.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "allowJs": true,
 4 |     "skipLibCheck": true,
 5 | 
 6 |     /* Strict Type-Checking Options */
 7 |     "strict": true,
 8 |     "strictNullChecks": true,
 9 |     "strictFunctionTypes": true,
10 |     "strictBindCallApply": true,
11 |     "strictPropertyInitialization": true,
12 |     "noImplicitThis": true,
13 |     "alwaysStrict": true,
14 | 
15 |     /* Additional Checks */
16 |     "noImplicitReturns": true,
17 |     "noFallthroughCasesInSwitch": true,
18 |     "forceConsistentCasingInFileNames": true,
19 |     "isolatedModules": true,
20 | 
21 |     /* Module Resolution Options */
22 |     "moduleResolution": "node",
23 |     "allowSyntheticDefaultImports": true,
24 |     "esModuleInterop": true,
25 | 
26 |     /* Advanced Options */
27 |     "resolveJsonModule": true,
28 |     "preserveWatchOutput": true
29 |   }
30 | }
31 | 


--------------------------------------------------------------------------------