├── .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 |  18 | 19 | 20 | Copy the provided credentials and click `Open Colab`. 21 | 22 |  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 |  -------------------------------------------------------------------------------- /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 |  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 |  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 |  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 |  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 | --------------------------------------------------------------------------------