diff --git a/.babelrc b/.babelrc index b5ac79bd..136501a1 100644 --- a/.babelrc +++ b/.babelrc @@ -2,5 +2,8 @@ "presets": [ [ "react-app", { "absoluteRuntime": false } ] ], - "plugins": ["@babel/plugin-proposal-optional-chaining"] + "plugins": [ + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-nullish-coalescing-operator" + ] } diff --git a/README.md b/README.md index cd58b6be..a99a26e1 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# React Image Annotate +# React Image Annotate (Searpent fork) [![npm version](https://badge.fury.io/js/react-image-annotate.svg)](https://badge.fury.io/js/react-image-annotate) diff --git a/package.json b/package.json index 39df133a..3f8ac7ed 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { - "name": "react-image-annotate", - "version": "2.0.0", + "name": "@searpent/react-image-annotate", + "version": "2.3.17", "dependencies": { + "@editorjs/editorjs": "^2.25.0", + "@editorjs/paragraph": "^2.8.0", "@emotion/react": "^11.7.0", "@emotion/styled": "^11.6.0", "@fortawesome/fontawesome-svg-core": "^1.2.12", @@ -18,8 +20,10 @@ "material-survey": "^2.1.0", "mmgc1-cpp": "^1.0.50", "moment": "^2.23.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "nspell": "^2.1.5", + "react": "^17.0.0", + "react-dom": "^17.0.0", + "react-editor-js": "^2.0.6", "react-full-screen": "^0.3.1", "react-hotkeys": "^2.0.0", "react-json-view": "^1.19.1", @@ -37,12 +41,20 @@ "styled-components": "^5.2.1", "transformation-matrix-js": "^2.7.6", "use-event-callback": "^0.1.0", - "use-key-hook": "^1.3.0" + "use-key-hook": "^1.3.0", + "uuid": "^9.0.0" }, "peerDependencies": { "react": "^17.0.0", "react-dom": "^17.0.0" }, + "engines": { + "node": ">=14.0.0 <18.0.0", + "yarn": ">=1.22.0" + }, + "resolutions": { + "@babel/plugin-transform-typescript": "^7.9.4" + }, "homepage": "/react-image-annotate", "repository": { "type": "git", @@ -55,7 +67,7 @@ "storybook": "start-storybook -p 9090 -s public", "build": "npm run build:babel && cp ./package.json ./dist/package.json && cp ./README.md ./dist/README.md", "dist": "npm run build && cd dist && npm publish", - "build:babel": "NODE_ENV=production babel ./src --ignore \"src/**/*.story.js\" --out-dir=./dist && rm dist/index.js && cp dist/lib.js dist/index.js", + "build:babel": "NODE_ENV=production babel ./src --ignore \"src/**/*.story.js\" --out-dir=./dist && rm dist/index.js && cp dist/lib.js dist/index.js && cp src/PageSelector/page-selector.css dist/PageSelector/ && cp src/Locker/locker.css dist/Locker/ && cp src/Errorer/errorer.css dist/Errorer/ && cp src/Editor/editor.css dist/Editor/ && cp src/Editor/annotation-plugin/annotation.css dist/Editor/annotation-plugin", "build-storybook": "build-storybook", "build:gh-pages": "CI=false react-scripts build && mkdir build/demo && cp build/index.html build/demo/index.html", "gh-pages": "npm run build:gh-pages && gh-pages -d build", @@ -74,7 +86,9 @@ "devDependencies": { "@babel/cli": "^7.2.3", "@babel/core": "^7.2.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-transform-typescript": "^7.9.4", "@storybook/addon-actions": "^5.3.14", "@storybook/addon-links": "^5.3.14", "@storybook/addons": "^5.3.14", diff --git a/src/Annotator/exampleImages.js b/src/Annotator/exampleImages.js new file mode 100644 index 00000000..189eb62b --- /dev/null +++ b/src/Annotator/exampleImages.js @@ -0,0 +1,48 @@ +const mockedImage = { + "id": "NA", + "src": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + "thumbnail": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + "name": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + "regions": [ + { + "id": "346807698131517440", + "type": "box", + "visible": true, + "cls": "title", + "highlighted": false, + "groupHighlighted": false, + "x": 0.5189794, + "y": 0.043963477, + "w": 0.46070240000000007, + "h": 0.13752678299999999, + "groupId": "0", + "text": "komerční příloha čtvrtek 29. dubna 2021 Robotické sekačky na trávu - nový pohled na sekání trávy" + }, + { + "id": "346807698131517441", + "type": "box", + "visible": true, + "cls": "subtitle", + "highlighted": false, + "groupHighlighted": false, + "x": 0.51976687, + "y": 0.17134483, + "w": 0.18034333000000002, + "h": 0.10370872999999997, + "groupId": "0", + "text": "Udržet trávník v perfektním stavu, znamená věnovat mu ohromné množství času a cítit se neustále odpovědný za jeho stav. Znamená to nepopulární, mnohdy obtížnou, časově náročnou práci a také starost o likvidaci zahradního odpadu. Dobrou zprávou je, že robotická sekačka na trávu všechny tyto věci obstará za Vás." + }, + ], + "metadata": [ + { + "key": "page", + "value": "66" + }, + { + "key": "mockedBy", + "value": "artificial server" + } + ] +} + +export default [mockedImage]; \ No newline at end of file diff --git a/src/Annotator/examplePhotos.js b/src/Annotator/examplePhotos.js new file mode 100644 index 00000000..4208e75c --- /dev/null +++ b/src/Annotator/examplePhotos.js @@ -0,0 +1,7603 @@ +const examplePhotos = [ + { + "id": "0f2dc246-77ad-40ea-934b-90980c4f658a", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.7937799, + "box": { + "X1": 0.89342403, + "X2": 0.97789115, + "Y1": 0.80081135, + "Y2": 0.95537525 + }, + "text": null, + "groupId": "0", + "id": "346807494984597504" + }, + { + "label": "title", + "score": 0.67221314, + "box": { + "X1": 0.8931406, + "X2": 0.9770408, + "Y1": 0.7565923, + "Y2": 0.8004057 + }, + "text": null, + "groupId": "0", + "id": "346807494984597505" + }, + { + "label": "author", + "score": 0.65511394, + "box": { + "X1": 0.95181406, + "X2": 0.96145123, + "Y1": 0.9460446, + "Y2": 0.9557809 + }, + "text": null, + "groupId": "0", + "id": "346807494984597506" + }, + { + "label": "text", + "score": 0.94368374, + "box": { + "X1": 0.5260771, + "X2": 0.6026077, + "Y1": 0.77079105, + "Y2": 0.94563895 + }, + "text": null, + "groupId": "1", + "id": "346807494984597507" + }, + { + "label": "title", + "score": 0.8160764, + "box": { + "X1": 0.5289116, + "X2": 0.5569728, + "Y1": 0.76186615, + "Y2": 0.7744422 + }, + "text": null, + "groupId": "1", + "id": "346807494984597508" + }, + { + "label": "text", + "score": 0.9785797, + "box": { + "X1": 0.6153628, + "X2": 0.6989796, + "Y1": 0.6198783, + "Y2": 0.74279916 + }, + "text": null, + "groupId": "2", + "id": "346807494988791808" + }, + { + "label": "text", + "score": 0.97799027, + "box": { + "X1": 0.52210885, + "X2": 0.60600907, + "Y1": 0.62028396, + "Y2": 0.74279916 + }, + "text": null, + "groupId": "2", + "id": "346807494988791809" + }, + { + "label": "text", + "score": 0.97322524, + "box": { + "X1": 0.7077664, + "X2": 0.7919501, + "Y1": 0.62028396, + "Y2": 0.7432049 + }, + "text": null, + "groupId": "2", + "id": "346807494988791810" + }, + { + "label": "title", + "score": 0.96940386, + "box": { + "X1": 0.5223923, + "X2": 0.78599775, + "Y1": 0.5387424, + "Y2": 0.61703855 + }, + "text": null, + "groupId": "2", + "id": "346807494988791811" + }, + { + "label": "author", + "score": 0.90550596, + "box": { + "X1": 0.75396824, + "X2": 0.77324265, + "Y1": 0.7326572, + "Y2": 0.7432049 + }, + "text": null, + "groupId": "2", + "id": "346807494988791812" + }, + { + "label": "subtitle", + "score": 0.38472742, + "box": { + "X1": 0.52097505, + "X2": 0.61848074, + "Y1": 0.5387424, + "Y2": 0.57931036 + }, + "text": null, + "groupId": "2", + "id": "346807494988791813" + }, + { + "label": "image", + "score": 0.9755249, + "box": { + "X1": 0.61933106, + "X2": 0.7933673, + "Y1": 0.7724138, + "Y2": 0.94929004 + }, + "text": null, + "groupId": "3", + "id": "346807494992986112" + }, + { + "label": "text", + "score": 0.85317487, + "box": { + "X1": 0.80073696, + "X2": 0.8798186, + "Y1": 0.79107505, + "Y2": 0.94929004 + }, + "text": null, + "groupId": "3", + "id": "346807494992986113" + }, + { + "label": "title", + "score": 0.724313, + "box": { + "X1": 0.80073696, + "X2": 0.875, + "Y1": 0.7647059, + "Y2": 0.79432046 + }, + "text": null, + "groupId": "3", + "id": "346807494992986114" + }, + { + "label": "author", + "score": 0.63381916, + "box": { + "X1": 0.8732993, + "X2": 0.8798186, + "Y1": 0.93914807, + "Y2": 0.94888437 + }, + "text": null, + "groupId": "3", + "id": "346807494992986115" + }, + { + "label": "image", + "score": 0.97769046, + "box": { + "X1": 0.526644, + "X2": 0.6947279, + "Y1": 0.09168357, + "Y2": 0.3760649 + }, + "text": null, + "groupId": "4", + "id": "346807494992986116" + }, + { + "label": "text", + "score": 0.9766769, + "box": { + "X1": 0.5274943, + "X2": 0.694161, + "Y1": 0.3995943, + "Y2": 0.52251524 + }, + "text": null, + "groupId": "4", + "id": "346807494992986117" + }, + { + "label": "title", + "score": 0.9566452, + "box": { + "X1": 0.5274943, + "X2": 0.68424034, + "Y1": 0.37281948, + "Y2": 0.4020284 + }, + "text": null, + "groupId": "4", + "id": "346807494992986118" + }, + { + "label": "author", + "score": 0.85065436, + "box": { + "X1": 0.6850907, + "X2": 0.694161, + "Y1": 0.5127789, + "Y2": 0.52251524 + }, + "text": null, + "groupId": "4", + "id": "346807494992986119" + }, + { + "label": "title", + "score": 0.40829882, + "box": { + "X1": 0.5263606, + "X2": 0.6947279, + "Y1": 0.39878297, + "Y2": 0.52251524 + }, + "text": null, + "groupId": "4", + "id": "346807494992986120" + }, + { + "label": "text", + "score": 0.7374321, + "box": { + "X1": 0.8044218, + "X2": 0.88548756, + "Y1": 0.5659229, + "Y2": 0.73346853 + }, + "text": null, + "groupId": "5", + "id": "346807494992986121" + }, + { + "label": "text", + "score": 0.6787879, + "box": { + "X1": 0.89370745, + "X2": 0.9747732, + "Y1": 0.5663286, + "Y2": 0.7322515 + }, + "text": null, + "groupId": "5", + "id": "346807494997180416" + }, + { + "label": "author", + "score": 0.6094971, + "box": { + "X1": 0.84297055, + "X2": 0.8526077, + "Y1": 0.7225152, + "Y2": 0.7326572 + }, + "text": null, + "groupId": "5", + "id": "346807494997180417" + }, + { + "label": "title", + "score": 0.59920824, + "box": { + "X1": 0.8078231, + "X2": 0.8276644, + "Y1": 0.5488844, + "Y2": 0.56146044 + }, + "text": null, + "groupId": "5", + "id": "346807494997180418" + }, + { + "label": "author", + "score": 0.5815002, + "box": { + "X1": 0.9316893, + "X2": 0.9418934, + "Y1": 0.72210956, + "Y2": 0.7326572 + }, + "text": null, + "groupId": "5", + "id": "346807494997180419" + }, + { + "label": "text", + "score": 0.9604562, + "box": { + "X1": 0.707483, + "X2": 0.7922336, + "Y1": 0.18093306, + "Y2": 0.5294118 + }, + "text": null, + "groupId": "6", + "id": "346807494997180420" + }, + { + "label": "title", + "score": 0.868382, + "box": { + "X1": 0.7080499, + "X2": 0.96938777, + "Y1": 0.06572008, + "Y2": 0.18539554 + }, + "text": null, + "groupId": "6", + "id": "346807494997180421" + }, + { + "label": "text", + "score": 0.8077644, + "box": { + "X1": 0.8010204, + "X2": 0.88492066, + "Y1": 0.34563893, + "Y2": 0.5306288 + }, + "text": null, + "groupId": "6", + "id": "346807494997180422" + }, + { + "label": "image", + "score": 0.7768049, + "box": { + "X1": 0.80130386, + "X2": 0.97902495, + "Y1": 0.18377282, + "Y2": 0.32941177 + }, + "text": null, + "groupId": "6", + "id": "346807494997180423" + }, + { + "label": "text", + "score": 0.72264034, + "box": { + "X1": 0.89370745, + "X2": 0.97789115, + "Y1": 0.3464503, + "Y2": 0.5306288 + }, + "text": null, + "groupId": "6", + "id": "346807494997180424" + }, + { + "label": "author", + "score": 0.55753076, + "box": { + "X1": 0.9611678, + "X2": 0.9713719, + "Y1": 0.52008116, + "Y2": 0.52981746 + }, + "text": null, + "groupId": "6", + "id": "346807495001374720" + }, + { + "label": "photo_caption", + "score": 0.3831333, + "box": { + "X1": 0.8041383, + "X2": 0.954932, + "Y1": 0.25314403, + "Y2": 0.3387424 + }, + "text": null, + "groupId": "6", + "id": "346807495001374721" + }, + { + "label": "photo_caption", + "score": 0.2017681, + "box": { + "X1": 0.8047052, + "X2": 0.957483, + "Y1": 0.3249493, + "Y2": 0.34077078 + }, + "text": null, + "groupId": "6", + "id": "346807495001374722" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.9796818, + "Y1": 0.7406155, + "Y2": 0.8037425 + }, + "text": "[{\"label\":\"title\",\"text\":\"Fotbal. Remíza s Ukrajinou\"}]", + "groupId": "42ba09e0-b2f5-439d-bdae-201e7c37787b", + "id": "346807503780052992" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.98046935, + "Y1": 0.784579, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer rutrum, orci vestibulum ullamcorper ultricies, lacus quam ultricies odio, vitae placerat pede sem sit amet enim. Aliquam in lorem sit amet leo accumsan lacinia. In rutrum. Phasellus rhoncus. In convallis. Nulla non arcu lacinia neque faucibus fringilla. Integer tempor. Nullam rhoncus aliquam metus. Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Nullam rhoncus aliquam metus. Etiam dictum tincidunt diam. In sem justo, commodo ut, suscipit at, pharetra vitae, orci.\"}]", + "groupId": "42ba09e0-b2f5-439d-bdae-201e7c37787b", + "id": "346807503780052993" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.94975585, + "X2": 0.96393126, + "Y1": 0.9423966, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "42ba09e0-b2f5-439d-bdae-201e7c37787b", + "id": "346807503780052994" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.5268546, + "X2": 0.5591431, + "Y1": 0.7462519, + "Y2": 0.7778154 + }, + "text": "[{\"label\":\"title\",\"text\":\"Lorem ipsum NOT dolor sit amet, consectetuer adipiscing elit.\"}]", + "groupId": "42ba09e0-b2f5-439d-bdae-201e7c37787b", + "id": "346807503993962496" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5237045, + "X2": 0.60481966, + "Y1": 0.75527, + "Y2": 0.9491602 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807503993962497" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.7883131, + "Y1": 0.52305263, + "Y2": 0.61999774 + }, + "text": "[{\"label\":\"text\",\"text\":\"Extraliga. Nová pravidla pro brankáře i vysokou hůl\"}]", + "groupId": "2", + "id": "346807504648273920" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.5189794, + "X2": 0.6205701, + "Y1": 0.5354526, + "Y2": 0.5827979 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Extraliga.\"}]", + "groupId": "2", + "id": "346807504648273921" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.60875726, + "Y1": 0.604216, + "Y2": 0.7462519 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807504648273922" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70168525, + "Y1": 0.604216, + "Y2": 0.7462519 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807504648273923" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.7946133, + "Y1": 0.604216, + "Y2": 0.7462519 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807504648273924" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.7512994, + "X2": 0.77571267, + "Y1": 0.7293428, + "Y2": 0.7462519 + }, + "text": "[{\"label\":\"author\",\"text\":\"iDNES.cz\"}]", + "groupId": "2", + "id": "346807504648273925" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8773035, + "Y1": 0.74850637, + "Y2": 0.7981062 + }, + "text": "[{\"label\":\"title\",\"text\":\"Neměla sílu\"}]", + "groupId": "3", + "id": "346807505000595456" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.88202864, + "Y1": 0.77556086, + "Y2": 0.952542 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807505004789760" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.87100327, + "X2": 0.88202864, + "Y1": 0.935633, + "Y2": 0.952542 + }, + "text": "[{\"label\":\"author\",\"text\":\"AP\"}]", + "groupId": "3", + "id": "346807505004789761" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.5252795, + "X2": 0.6867223, + "Y1": 0.35734415, + "Y2": 0.4058167 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Vary přivítají triatlonisty\"}]", + "groupId": "4", + "id": "346807505487134720" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.5237045, + "X2": 0.69696015, + "Y1": 0.38327134, + "Y2": 0.5264345 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"\\tUž popáté se \\n\\nv Karlových Varech uskuteční Světový pohár v triatlonu. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie. Třídenní akce s bohatým doprovodným programem vyvrcholí nedělními závody mužů a žen elitní kategorie.\"}]", + "groupId": "4", + "id": "346807505487134721" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5252795, + "X2": 0.6961726, + "Y1": 0.38327134, + "Y2": 0.5264345 + }, + "text": "[{\"label\":\"text\",\"text\":\"Vedle domácí špičky nebude chybět řada účastníků OH v Tokiu, nad plánovanou účastí dvojnásobné vítězky Venduly Frintové visí otazník. Nejlepší česká triatlonistka měla žaludeční problémy a o jejím startu se rozhodne na poslední chvíli. Vedle Frintové je přihlášena i druhá česká olympionička Petra Kuříková, jejímž karlovarským maximem je předloňské čtvrté místo. Mezi devítkou domácích závodníků je též Jan Čelůstka i nadějní Tereza Zimovjanová (na snímku) s Radimem Grebíkem.\"}]", + "groupId": "4", + "id": "346807505487134722" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.6827847, + "X2": 0.6961726, + "Y1": 0.5095254, + "Y2": 0.5264345 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "4", + "id": "346807505487134723" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.801701, + "X2": 0.8875413, + "Y1": 0.5501071, + "Y2": 0.7372337 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807506053365760" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.89147896, + "X2": 0.97731924, + "Y1": 0.5501071, + "Y2": 0.73610646 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807506053365761" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.8056387, + "X2": 0.83005196, + "Y1": 0.53319806, + "Y2": 0.5647616 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "5", + "id": "346807506053365762" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.8402898, + "X2": 0.85525274, + "Y1": 0.7191974, + "Y2": 0.73610646 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "5", + "id": "346807506053365763" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.92928016, + "X2": 0.94424313, + "Y1": 0.7191974, + "Y2": 0.73610646 + }, + "text": "[{\"label\":\"author\",\"text\":\"MET\"}]", + "groupId": "5", + "id": "346807506053365764" + }, + // { + // "label": "title", + // "score": 0.99, + // "box": { + // "X1": 0.7056229, + // "X2": 0.9718065, + // "Y1": 0.049599823, + // "Y2": 0.18825386 + // }, + // "text": "[{\"label\":\"title\",\"text\":\"Za lidská práva! Vadí Čína i Katar\"}]", + // "groupId": "6", + // "id": "346807506909003776" + // }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.801701, + "X2": 0.9576311, + "Y1": 0.25025365, + "Y2": 0.3415624 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Protest n z února v Indii,\\n\\tpred proti v Pekingu.\"}]", + "groupId": "6", + "id": "346807506913198081" + } + // { + // "label": "photo_caption", + // "score": 0.99, + // "box": { + // "X1": 0.80248857, + // "X2": 0.95999366, + // "Y1": 0.32127157, + // "Y2": 0.34381694 + // }, + // "text": "[{\"label\":\"photo_caption\",\"text\":\"Protest z února v Indii proti konání ZOH v Pekingu\"}]", + // "groupId": "6", + // "id": "346807506913198082" + // }, + // { + // "label": "author", + // "score": 0.99, + // "box": { + // "X1": 0.9584186, + // "X2": 0.9733816, + // "Y1": 0.51628906, + // "Y2": 0.53319806 + // }, + // "text": "[{\"label\":\"author\",\"text\":\"PUR\"}]", + // "groupId": "6", + // "id": "346807506913198083" + // } + ] + }, + { + "modelFamily": "metadata-engine", + "name": "metadata-engine", + "results": [ + { + "label": "metadata", + "score": 1, + "box": { + "X1": 0, + "X2": 1, + "Y1": 0, + "Y2": 1 + }, + "text": "[{\"key\":\"articleType\",\"value\":\"news\"}, {\"key\":\"section\",\"value\":\"editorial\"}]", + "groupId": "42ba09e0-b2f5-439d-bdae-201e7c37787b", + "id": "aba453dd-f870-4510-ae40-a19eb52eb7d6" + }, + { + "label": "metadata", + "score": 1, + "box": { + "X1": 0, + "X2": 1, + "Y1": 0, + "Y2": 1 + }, + "text": "[{\"key\":\"articleType\",\"value\":\"ads\"}, {\"key\":\"section\",\"value\":\"last page\"}]", + "groupId": "1", + "id": "2615bf87-7247-4bde-a0f9-45413034a6a6" + }, + ] + }, + ] + }, + "metadata": [{ + "key": "pageNumber", + "value": "1" + }, { + "key": "section", + "value": "lokální zpravodajství" + }, { + "key": "mutation", + "value": "hřensko" + }], + "lockedUntil": null, + }, + { + "id": "431fc636-d6d1-4e20-a35b-cc7a201c1833", + "fullsize": { + "key": "https://images.pexels.com/photos/167699/pexels-photo-167699.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2", + }, + "thumbnail": { + "key": "https://images.pexels.com/photos/167699/pexels-photo-167699.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.84259206, + "box": { + "X1": 0.39795917, + "X2": 0.47477323, + "Y1": 0.548073, + "Y2": 0.693712 + }, + "text": null, + "groupId": "0", + "id": "346807702787194880" + }, + { + "label": "author", + "score": 0.81040955, + "box": { + "X1": 0.45408162, + "X2": 0.46400228, + "Y1": 0.6831643, + "Y2": 0.6929006 + }, + "text": null, + "groupId": "0", + "id": "346807702787194881" + }, + { + "label": "subtitle", + "score": 0.42688897, + "box": { + "X1": 0.4010771, + "X2": 0.42120183, + "Y1": 0.51967543, + "Y2": 0.53225154 + }, + "text": null, + "groupId": "0", + "id": "346807702787194882" + }, + { + "label": "title", + "score": 0.38741723, + "box": { + "X1": 0.40136054, + "X2": 0.42120183, + "Y1": 0.51967543, + "Y2": 0.53184587 + }, + "text": null, + "groupId": "0", + "id": "346807702791389184" + }, + { + "label": "title", + "score": 0.32123348, + "box": { + "X1": 0.39852607, + "X2": 0.46740362, + "Y1": 0.54158217, + "Y2": 0.56105477 + }, + "text": null, + "groupId": "0", + "id": "346807702791389185" + }, + { + "label": "text", + "score": 0.9279247, + "box": { + "X1": 0.30073696, + "X2": 0.3840703, + "Y1": 0.5286004, + "Y2": 0.6969574 + }, + "text": null, + "groupId": "1", + "id": "346807702791389186" + }, + { + "label": "image", + "score": 0.9120173, + "box": { + "X1": 0.114795916, + "X2": 0.29223356, + "Y1": 0.5306288, + "Y2": 0.6969574 + }, + "text": null, + "groupId": "1", + "id": "346807702791389187" + }, + { + "label": "text", + "score": 0.85809666, + "box": { + "X1": 0.026927438, + "X2": 0.106292516, + "Y1": 0.56957406, + "Y2": 0.69655174 + }, + "text": null, + "groupId": "1", + "id": "346807702791389188" + }, + { + "label": "author", + "score": 0.8160412, + "box": { + "X1": 0.3755669, + "X2": 0.38435373, + "Y1": 0.68681544, + "Y2": 0.69655174 + }, + "text": null, + "groupId": "1", + "id": "346807702791389189" + }, + { + "label": "title", + "score": 0.75975746, + "box": { + "X1": 0.026927438, + "X2": 0.106292516, + "Y1": 0.5229209, + "Y2": 0.57200813 + }, + "text": null, + "groupId": "1", + "id": "346807702791389190" + }, + { + "label": "title", + "score": 0.9314408, + "box": { + "X1": 0.5272109, + "X2": 0.58928573, + "Y1": 0.4912779, + "Y2": 0.5598377 + }, + "text": null, + "groupId": "2", + "id": "346807702791389191" + }, + { + "label": "text", + "score": 0.930854, + "box": { + "X1": 0.5269274, + "X2": 0.60600907, + "Y1": 0.5574036, + "Y2": 0.7371197 + }, + "text": null, + "groupId": "2", + "id": "346807702791389192" + }, + { + "label": "image", + "score": 0.8410063, + "box": { + "X1": 0.61564624, + "X2": 0.87953514, + "Y1": 0.49776876, + "Y2": 0.73752534 + }, + "text": null, + "groupId": "2", + "id": "346807702795583488" + }, + { + "label": "author", + "score": 0.7466988, + "box": { + "X1": 0.5966553, + "X2": 0.60572565, + "Y1": 0.7273834, + "Y2": 0.73752534 + }, + "text": null, + "groupId": "2", + "id": "346807702795583489" + }, + { + "label": "text", + "score": 0.9399475, + "box": { + "X1": 0.2080499, + "X2": 0.29223356, + "Y1": 0.18336713, + "Y2": 0.50020283 + }, + "text": null, + "groupId": "3", + "id": "346807702795583490" + }, + { + "label": "text", + "score": 0.9357853, + "box": { + "X1": 0.3010204, + "X2": 0.38492063, + "Y1": 0.18498985, + "Y2": 0.50020283 + }, + "text": null, + "groupId": "3", + "id": "346807702795583491" + }, + { + "label": "text", + "score": 0.93025076, + "box": { + "X1": 0.115079366, + "X2": 0.19926304, + "Y1": 0.18498985, + "Y2": 0.50020283 + }, + "text": null, + "groupId": "3", + "id": "346807702795583492" + }, + { + "label": "title", + "score": 0.8790543, + "box": { + "X1": 0.024376417, + "X2": 0.46853742, + "Y1": 0.073833674, + "Y2": 0.1841785 + }, + "text": null, + "groupId": "3", + "id": "346807702795583493" + }, + { + "label": "text", + "score": 0.87562335, + "box": { + "X1": 0.39314058, + "X2": 0.47704083, + "Y1": 0.3602434, + "Y2": 0.49939147 + }, + "text": null, + "groupId": "3", + "id": "346807702795583494" + }, + { + "label": "author", + "score": 0.8716064, + "box": { + "X1": 0.42517006, + "X2": 0.4611678, + "Y1": 0.49046654, + "Y2": 0.50020283 + }, + "text": null, + "groupId": "3", + "id": "346807702795583495" + }, + { + "label": "text", + "score": 0.86617565, + "box": { + "X1": 0.02239229, + "X2": 0.106575966, + "Y1": 0.18255578, + "Y2": 0.5006085 + }, + "text": null, + "groupId": "3", + "id": "346807702799777792" + }, + { + "label": "appendix", + "score": 0.79481745, + "box": { + "X1": 0.39342403, + "X2": 0.47704083, + "Y1": 0.19472617, + "Y2": 0.3565923 + }, + "text": null, + "groupId": "3", + "id": "346807702799777793" + }, + { + "label": "appendix", + "score": 0.367265, + "box": { + "X1": 0.39965987, + "X2": 0.46683672, + "Y1": 0.18539554, + "Y2": 0.19716024 + }, + "text": null, + "groupId": "3", + "id": "346807702799777794" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.39848793, + "X2": 0.42368874, + "Y1": 0.51628906, + "Y2": 0.5354526 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Krátce\"}]", + "groupId": "0", + "id": "346807709074456576" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.39927545, + "X2": 0.42368874, + "Y1": 0.5038891, + "Y2": 0.5354526 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "0", + "id": "346807709074456577" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.39612535, + "X2": 0.47015277, + "Y1": 0.5253072, + "Y2": 0.5647616 + }, + "text": "[{\"label\":\"title\",\"text\":\"Výdělek nestačí\"}]", + "groupId": "0", + "id": "346807709074456578" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39533782, + "X2": 0.4772405, + "Y1": 0.5320708, + "Y2": 0.69665205 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807709074456579" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.45203966, + "X2": 0.46621513, + "Y1": 0.679743, + "Y2": 0.69665205 + }, + "text": "[{\"label\":\"author\",\"text\":\"MET\"}]", + "groupId": "0", + "id": "346807709074456580" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.024413293, + "X2": 0.10867853, + "Y1": 0.5072709, + "Y2": 0.574907 + }, + "text": "[{\"label\":\"title\",\"text\":\"Muzeum? Ani náhodou\"}]", + "groupId": "1", + "id": "346807709317726208" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.024413293, + "X2": 0.10867853, + "Y1": 0.5534889, + "Y2": 0.70003384 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807709317726209" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.2984722, + "X2": 0.38667506, + "Y1": 0.51290727, + "Y2": 0.70003384 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807709317726210" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.3732871, + "X2": 0.38667506, + "Y1": 0.6831248, + "Y2": 0.70003384 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "1", + "id": "346807709317726211" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.524492, + "X2": 0.5914317, + "Y1": 0.47570738, + "Y2": 0.56363434 + }, + "text": "[{\"label\":\"title\",\"text\":\"Vizovice. Vánoce tu už začaly\"}]", + "groupId": "2", + "id": "346807709493886976" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.524492, + "X2": 0.60875726, + "Y1": 0.54108894, + "Y2": 0.7406155 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807709493886977" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.5945818, + "X2": 0.60796976, + "Y1": 0.7237065, + "Y2": 0.7406155 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "2", + "id": "346807709493886978" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.022050716, + "X2": 0.4709403, + "Y1": 0.057490703, + "Y2": 0.18712659 + }, + "text": "[{\"label\":\"title\",\"text\":\"Nejvěrnějšími zaměstnanci jsou ajťáci. Mají hodně rádi své jisté\"}]", + "groupId": "3", + "id": "346807710081089536" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.16683576, + "Y2": 0.5038891 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807710081089537" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.1690903, + "Y2": 0.5038891 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807710081089538" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.20554417, + "X2": 0.29453456, + "Y1": 0.16796303, + "Y2": 0.5038891 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807710081089539" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.2984722, + "X2": 0.3874626, + "Y1": 0.1690903, + "Y2": 0.5038891 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807710081089540" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.3906127, + "X2": 0.47960308, + "Y1": 0.3449442, + "Y2": 0.50276184 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807710081089541" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.47960308, + "Y1": 0.19163567, + "Y2": 0.3595987 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"25 Přibližně čtvrtina českých zaměstnanců se letos na jaře poohlížela po jiném zaměstnavateli. To ale podle průzkumu agentury Randstadt neznamená, že všichni tito lidé nakonec profesi nebo firmu skutečně změnili. Před covidem se fluktuace pohybovala celostátně kolem dvaceti procent.\"}]", + "groupId": "3", + "id": "346807710081089542" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.39691287, + "X2": 0.46936524, + "Y1": 0.18149026, + "Y2": 0.20065382 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Přemýšlení o změně\"}]", + "groupId": "3", + "id": "346807710081089543" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.4229012, + "X2": 0.46385255, + "Y1": 0.48698005, + "Y2": 0.5038891 + }, + "text": "[{\"label\":\"author\",\"text\":\"PAVEL HRABICA\"}]", + "groupId": "3", + "id": "346807710081089544" + } + ] + } + ] + }, + "metadata": [{ + "key": "pageNumber", + "value": "2" + }], + "lockedUntil": null, + }, + { + "id": "45f79ec8-fd2e-4ad8-82f6-007a2eec2b97", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "image", + "score": 0.9281353, + "box": { + "X1": 0.5286281, + "X2": 0.973356, + "Y1": 0.4969574, + "Y2": 0.8434077 + }, + "text": null, + "groupId": "0", + "id": "346807680221839360" + }, + { + "label": "text", + "score": 0.89556354, + "box": { + "X1": 0.5257937, + "X2": 0.9730726, + "Y1": 0.86653143, + "Y2": 0.94929004 + }, + "text": null, + "groupId": "0", + "id": "346807680221839361" + }, + { + "label": "author", + "score": 0.7924961, + "box": { + "X1": 0.96315193, + "X2": 0.9725057, + "Y1": 0.93914807, + "Y2": 0.94929004 + }, + "text": null, + "groupId": "0", + "id": "346807680226033664" + }, + { + "label": "title", + "score": 0.6837379, + "box": { + "X1": 0.022108844, + "X2": 0.19897959, + "Y1": 0.07464503, + "Y2": 0.15131846 + }, + "text": null, + "groupId": "1", + "id": "346807680226033665" + }, + { + "label": "appendix", + "score": 0.57094955, + "box": { + "X1": 0.11819728, + "X2": 0.19557823, + "Y1": 0.15943205, + "Y2": 0.4693712 + }, + "text": null, + "groupId": "1", + "id": "346807680226033666" + }, + { + "label": "text", + "score": 0.55641145, + "box": { + "X1": 0.022108844, + "X2": 0.106575966, + "Y1": 0.15496957, + "Y2": 0.47991887 + }, + "text": null, + "groupId": "1", + "id": "346807680226033667" + }, + { + "label": "appendix", + "score": 0.27893794, + "box": { + "X1": 0.11819728, + "X2": 0.19586168, + "Y1": 0.15456389, + "Y2": 0.168357 + }, + "text": null, + "groupId": "1", + "id": "346807680226033668" + }, + { + "label": "author", + "score": 0.26921034, + "box": { + "X1": 0.076814055, + "X2": 0.10260771, + "Y1": 0.46896553, + "Y2": 0.48073024 + }, + "text": null, + "groupId": "1", + "id": "346807680226033669" + }, + { + "label": "subtitle", + "score": 0.2155898, + "box": { + "X1": 0.018424036, + "X2": 0.0904195, + "Y1": 0.07302231, + "Y2": 0.1148073 + }, + "text": null, + "groupId": "1", + "id": "346807680226033670" + }, + { + "label": "title", + "score": 0.51751065, + "box": { + "X1": 0.40136054, + "X2": 0.42857143, + "Y1": 0.08356998, + "Y2": 0.09614605 + }, + "text": null, + "groupId": "2", + "id": "346807680226033671" + }, + { + "label": "text", + "score": 0.50906485, + "box": { + "X1": 0.3973923, + "X2": 0.47477323, + "Y1": 0.093711965, + "Y2": 0.4709939 + }, + "text": null, + "groupId": "2", + "id": "346807680230227968" + }, + { + "label": "text", + "score": 0.73248726, + "box": { + "X1": 0.022108844, + "X2": 0.10685941, + "Y1": 0.548073, + "Y2": 0.75334686 + }, + "text": null, + "groupId": "3", + "id": "346807680230227969" + }, + { + "label": "text", + "score": 0.67259145, + "box": { + "X1": 0.11536281, + "X2": 0.19926304, + "Y1": 0.5501014, + "Y2": 0.7541582 + }, + "text": null, + "groupId": "3", + "id": "346807680230227970" + }, + { + "label": "image", + "score": 0.6063842, + "box": { + "X1": 0.207483, + "X2": 0.29223356, + "Y1": 0.54929006, + "Y2": 0.66247463 + }, + "text": null, + "groupId": "3", + "id": "346807680230227971" + }, + { + "label": "title", + "score": 0.5884208, + "box": { + "X1": 0.02494331, + "X2": 0.47619048, + "Y1": 0.48194727, + "Y2": 0.55131847 + }, + "text": null, + "groupId": "3", + "id": "346807680230227972" + }, + { + "label": "text", + "score": 0.5678816, + "box": { + "X1": 0.30017006, + "X2": 0.38435373, + "Y1": 0.54969573, + "Y2": 0.75456387 + }, + "text": null, + "groupId": "3", + "id": "346807680230227973" + }, + { + "label": "appendix", + "score": 0.5361987, + "box": { + "X1": 0.39654195, + "X2": 0.4727891, + "Y1": 0.5529412, + "Y2": 0.7444219 + }, + "text": null, + "groupId": "3", + "id": "346807680230227974" + }, + { + "label": "text", + "score": 0.43931368, + "box": { + "X1": 0.20776644, + "X2": 0.2919501, + "Y1": 0.6713996, + "Y2": 0.75334686 + }, + "text": null, + "groupId": "3", + "id": "346807680230227975" + }, + { + "label": "author", + "score": 0.21571945, + "box": { + "X1": 0.35912699, + "X2": 0.37159863, + "Y1": 0.74279916, + "Y2": 0.7549696 + }, + "text": null, + "groupId": "3", + "id": "346807680230227976" + }, + { + "label": "title", + "score": 0.6300793, + "box": { + "X1": 0.027210884, + "X2": 0.08928572, + "Y1": 0.77525353, + "Y2": 0.80608517 + }, + "text": null, + "groupId": "4", + "id": "346807680234422272" + }, + { + "label": "text", + "score": 0.6158098, + "box": { + "X1": 0.026927438, + "X2": 0.105442174, + "Y1": 0.80283976, + "Y2": 0.95010144 + }, + "text": null, + "groupId": "4", + "id": "346807680234422273" + }, + { + "label": "image", + "score": 0.6077787, + "box": { + "X1": 0.11564626, + "X2": 0.28854877, + "Y1": 0.78336716, + "Y2": 0.95010144 + }, + "text": null, + "groupId": "4", + "id": "346807680234422274" + }, + { + "label": "author", + "score": 0.47322506, + "box": { + "X1": 0.100340135, + "X2": 0.10714286, + "Y1": 0.9399594, + "Y2": 0.94969577 + }, + "text": null, + "groupId": "4", + "id": "346807680234422275" + }, + { + "label": "text", + "score": 0.67174083, + "box": { + "X1": 0.39399093, + "X2": 0.473356, + "Y1": 0.7935091, + "Y2": 0.9472617 + }, + "text": null, + "groupId": "5", + "id": "346807680234422276" + }, + { + "label": "text", + "score": 0.6359624, + "box": { + "X1": 0.30442178, + "X2": 0.38605443, + "Y1": 0.7902637, + "Y2": 0.94685596 + }, + "text": null, + "groupId": "5", + "id": "346807680234422277" + }, + { + "label": "author", + "score": 0.63053423, + "box": { + "X1": 0.45493197, + "X2": 0.4642857, + "Y1": 0.936714, + "Y2": 0.94685596 + }, + "text": null, + "groupId": "5", + "id": "346807680234422278" + }, + { + "label": "title", + "score": 0.48166534, + "box": { + "X1": 0.30782312, + "X2": 0.3276644, + "Y1": 0.7732251, + "Y2": 0.78539556 + }, + "text": null, + "groupId": "5", + "id": "346807680234422279" + }, + { + "label": "image", + "score": 0.47015086, + "box": { + "X1": 0.21343537, + "X2": 0.3798186, + "Y1": 0.09492901, + "Y2": 0.35578093 + }, + "text": null, + "groupId": "6", + "id": "346807680234422280" + }, + { + "label": "text", + "score": 0.43449718, + "box": { + "X1": 0.21258503, + "X2": 0.38066894, + "Y1": 0.38093308, + "Y2": 0.47383368 + }, + "text": null, + "groupId": "6", + "id": "346807680238616576" + }, + { + "label": "title", + "score": 0.4097528, + "box": { + "X1": 0.21230158, + "X2": 0.3798186, + "Y1": 0.35415822, + "Y2": 0.38377282 + }, + "text": null, + "groupId": "6", + "id": "346807680238616577" + }, + { + "label": "author", + "score": 0.35195753, + "box": { + "X1": 0.3738662, + "X2": 0.3803855, + "Y1": 0.46409735, + "Y2": 0.4730223 + }, + "text": null, + "groupId": "6", + "id": "346807680238616578" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5237045, + "X2": 0.9757442, + "Y1": 0.8510878, + "Y2": 0.952542 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807688065187840" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.9607812, + "X2": 0.97495663, + "Y1": 0.935633, + "Y2": 0.952542 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "0", + "id": "346807688065187841" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.01575051, + "X2": 0.092928015, + "Y1": 0.069890656, + "Y2": 0.11836321 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Fotbal.\"}]", + "groupId": "1", + "id": "346807688421703680" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.20160654, + "Y1": 0.05861797, + "Y2": 0.15443581 + }, + "text": "[{\"label\":\"title\",\"text\":\"Fotbal. Belgický kouč čeká tuhý boj\"}]", + "groupId": "1", + "id": "346807688425897984" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.13865404, + "Y2": 0.48359826 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807688425897985" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.07481493, + "X2": 0.1047409, + "Y1": 0.46556196, + "Y2": 0.48359826 + }, + "text": "[{\"label\":\"author\",\"text\":\". SIM a ČTK\"}]", + "groupId": "1", + "id": "346807688425897986" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.11576626, + "X2": 0.19845644, + "Y1": 0.151054, + "Y2": 0.17134483 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"„To nikdy nezapomenu“\"}]", + "groupId": "1", + "id": "346807688425897987" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.11576626, + "X2": 0.19766891, + "Y1": 0.15556307, + "Y2": 0.47232556 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Fotbalista Tomáš Souček vstřelil tři góly v jednom utkání jako první český reprezentant od září 2009, kdy se stejný kousek povedl Milanu Barošovi při vítězství 7:0 nad San Marinem. Šestadvacetiletý středopolař ● West Hamu a čerstvý vítěz ankety o nejlepšího hráče roku byl po svém prvním hattricku v národním týmu nadšený a po výhře 6:2 proti Estonsku připustil, že na povedený úvodní zápas kvalifikace MS bude hodně dlouho vzpomínat. „Jsem strašně rád, že jsem ● mohl pomoci týmu a že jsem mohl dát hattrick v reprezentaci. Je to skvělé. Děkuju klukům, že mi to tak krásně připravili. Každého gólu si strašně vážím. Nikdy na to nezapomenu,“ řekl Souček.\"}]", + "groupId": "1", + "id": "346807688425897988" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.39927545, + "X2": 0.43077648, + "Y1": 0.06763612, + "Y2": 0.099199645 + }, + "text": "[{\"label\":\"title\",\"text\":\"Číslo dne\"}]", + "groupId": "2", + "id": "346807688635613184" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39533782, + "X2": 0.4772405, + "Y1": 0.077781536, + "Y2": 0.4745801 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807688635613185" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.02283824, + "X2": 0.47881556, + "Y1": 0.46668923, + "Y2": 0.55461615 + }, + "text": "[{\"label\":\"title\",\"text\":\"pražském Edenu. SIM a ČTK ekordní sezona má 23 závodů\"}]", + "groupId": "3", + "id": "346807689080209408" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10946605, + "Y1": 0.5320708, + "Y2": 0.75639725 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807689084403712" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.53432536, + "Y2": 0.75752455 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807689084403713" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.20554417, + "X2": 0.29453456, + "Y1": 0.65607035, + "Y2": 0.75639725 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807689084403714" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.29768467, + "X2": 0.38667506, + "Y1": 0.53432536, + "Y2": 0.75752455 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807689084403715" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.3567491, + "X2": 0.37407464, + "Y1": 0.73948824, + "Y2": 0.7586518 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "3", + "id": "346807689084403716" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.3945503, + "X2": 0.47487792, + "Y1": 0.5501071, + "Y2": 0.7473791 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Silniční motocykly Netradičně dvěma závody na jednom místě bude zahájena nová sezona MS. Devatenáctidílný seriál ● v neděli odstartuje opět na katarském okruhu Losail a na stejné trati se o body pojede i o týden později. Součástí šampionátu už ● nebude Velká cena ČR. Jediným Čechem v seriálu ● bude Filip Salač, pokračuje v kategorii Moto3.\"}]", + "groupId": "3", + "id": "346807689084403717" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.025200818, + "X2": 0.09135296, + "Y1": 0.7597791, + "Y2": 0.8093789 + }, + "text": "[{\"label\":\"title\",\"text\":\"O 10 bodů\"}]", + "groupId": "4", + "id": "346807689273147392" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.024413293, + "X2": 0.107891, + "Y1": 0.7868335, + "Y2": 0.9536693 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807689273147393" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.09765317, + "X2": 0.10946605, + "Y1": 0.93676025, + "Y2": 0.952542 + }, + "text": "[{\"label\":\"author\",\"text\":\"AP\"}]", + "groupId": "4", + "id": "346807689273147394" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.30240983, + "X2": 0.3882501, + "Y1": 0.77443355, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807689520611328" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.47566545, + "Y1": 0.7778154, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807689520611329" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.30555993, + "X2": 0.32997322, + "Y1": 0.75752455, + "Y2": 0.7890881 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "5", + "id": "346807689520611330" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.4528272, + "X2": 0.46700266, + "Y1": 0.93337846, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "5", + "id": "346807689520611331" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.21026933, + "X2": 0.3819499, + "Y1": 0.3381806, + "Y2": 0.38665316 + }, + "text": "[{\"label\":\"title\",\"text\":\"Možná si zahrají ve Walesu\"}]", + "groupId": "6", + "id": "346807689801629696" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.21026933, + "X2": 0.38273743, + "Y1": 0.36523506, + "Y2": 0.47683465 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "6", + "id": "346807689801629697" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.37171206, + "X2": 0.38273743, + "Y1": 0.4610529, + "Y2": 0.47683465 + }, + "text": "[{\"label\":\"author\",\"text\":\"AP\"}]", + "groupId": "6", + "id": "346807689805824000" + } + ] + } + ] + }, + "metadata": [{ + "key": "pageNumber", + "value": "3" + }], + "lockedUntil": "", + }, + { + "id": "5494ea75-ec1b-4513-b23b-0b2eaa29b576", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.92533153, + "box": { + "X1": 0.89370745, + "X2": 0.97789115, + "Y1": 0.18458419, + "Y2": 0.46004057 + }, + "text": null, + "groupId": "0", + "id": "346807619756752896" + }, + { + "label": "text", + "score": 0.91470265, + "box": { + "X1": 0.8010204, + "X2": 0.8852041, + "Y1": 0.18458419, + "Y2": 0.4596349 + }, + "text": null, + "groupId": "0", + "id": "346807619756752897" + }, + { + "label": "text", + "score": 0.8882565, + "box": { + "X1": 0.7083333, + "X2": 0.7922336, + "Y1": 0.18498985, + "Y2": 0.4596349 + }, + "text": null, + "groupId": "0", + "id": "346807619756752898" + }, + { + "label": "title", + "score": 0.87932307, + "box": { + "X1": 0.61621314, + "X2": 0.9685374, + "Y1": 0.06612576, + "Y2": 0.18498985 + }, + "text": null, + "groupId": "0", + "id": "346807619756752899" + }, + { + "label": "text", + "score": 0.8506219, + "box": { + "X1": 0.61507934, + "X2": 0.69926304, + "Y1": 0.18133874, + "Y2": 0.46044624 + }, + "text": null, + "groupId": "0", + "id": "346807619756752900" + }, + { + "label": "author", + "score": 0.81119007, + "box": { + "X1": 0.944161, + "X2": 0.9676871, + "Y1": 0.45030427, + "Y2": 0.46044624 + }, + "text": null, + "groupId": "0", + "id": "346807619756752901" + }, + { + "label": "author", + "score": 0.86240405, + "box": { + "X1": 0.41213152, + "X2": 0.4452948, + "Y1": 0.94685596, + "Y2": 0.956998 + }, + "text": null, + "groupId": "1", + "id": "346807619760947200" + }, + { + "label": "title", + "score": 0.823983, + "box": { + "X1": 0.021258503, + "X2": 0.44586167, + "Y1": 0.4888438, + "Y2": 0.57119673 + }, + "text": null, + "groupId": "1", + "id": "346807619760947201" + }, + { + "label": "text", + "score": 0.795783, + "box": { + "X1": 0.115079366, + "X2": 0.19897959, + "Y1": 0.8336714, + "Y2": 0.956998 + }, + "text": null, + "groupId": "1", + "id": "346807619760947202" + }, + { + "label": "text", + "score": 0.79213077, + "box": { + "X1": 0.39399093, + "X2": 0.4781746, + "Y1": 0.5691683, + "Y2": 0.9578093 + }, + "text": null, + "groupId": "1", + "id": "346807619760947203" + }, + { + "label": "text", + "score": 0.7912515, + "box": { + "X1": 0.022108844, + "X2": 0.106292516, + "Y1": 0.5663286, + "Y2": 0.9557809 + }, + "text": null, + "groupId": "1", + "id": "346807619760947204" + }, + { + "label": "text", + "score": 0.7651332, + "box": { + "X1": 0.3010204, + "X2": 0.38520408, + "Y1": 0.8336714, + "Y2": 0.956998 + }, + "text": null, + "groupId": "1", + "id": "346807619760947205" + }, + { + "label": "text", + "score": 0.7572683, + "box": { + "X1": 0.2080499, + "X2": 0.29223356, + "Y1": 0.83407706, + "Y2": 0.95740366 + }, + "text": null, + "groupId": "1", + "id": "346807619760947206" + }, + { + "label": "image", + "score": 0.71162915, + "box": { + "X1": 0.11536281, + "X2": 0.38577098, + "Y1": 0.56957406, + "Y2": 0.81460446 + }, + "text": null, + "groupId": "1", + "id": "346807619760947207" + }, + { + "label": "photo_caption", + "score": 0.3278277, + "box": { + "X1": 0.11819728, + "X2": 0.3477891, + "Y1": 0.71034485, + "Y2": 0.82434076 + }, + "text": null, + "groupId": "1", + "id": "346807619760947208" + }, + { + "label": "photo_author", + "score": 0.28640497, + "box": { + "X1": 0.35034013, + "X2": 0.38066894, + "Y1": 0.7099391, + "Y2": 0.82231236 + }, + "text": null, + "groupId": "1", + "id": "346807619765141504" + }, + { + "label": "photo_author", + "score": 0.21235266, + "box": { + "X1": 0.35005668, + "X2": 0.38066894, + "Y1": 0.81338745, + "Y2": 0.82880324 + }, + "text": null, + "groupId": "1", + "id": "346807619765141505" + }, + { + "label": "text", + "score": 0.7420979, + "box": { + "X1": 0.2111678, + "X2": 0.2888322, + "Y1": 0.10791075, + "Y2": 0.47991887 + }, + "text": null, + "groupId": "2", + "id": "346807619765141506" + }, + { + "label": "title", + "score": 0.6427553, + "box": { + "X1": 0.21513605, + "X2": 0.23469388, + "Y1": 0.08356998, + "Y2": 0.09614605 + }, + "text": null, + "groupId": "2", + "id": "346807619765141507" + }, + { + "label": "author", + "score": 0.60719836, + "box": { + "X1": 0.22789116, + "X2": 0.23752834, + "Y1": 0.47018257, + "Y2": 0.48032454 + }, + "text": null, + "groupId": "2", + "id": "346807619765141508" + }, + { + "label": "text", + "score": 0.8082741, + "box": { + "X1": 0.30555555, + "X2": 0.470805, + "Y1": 0.3918864, + "Y2": 0.4831643 + }, + "text": null, + "groupId": "3", + "id": "346807619765141509" + }, + { + "label": "image", + "score": 0.7438879, + "box": { + "X1": 0.3052721, + "X2": 0.4739229, + "Y1": 0.09411765, + "Y2": 0.36876267 + }, + "text": null, + "groupId": "3", + "id": "346807619765141510" + }, + { + "label": "title", + "score": 0.74120504, + "box": { + "X1": 0.30555555, + "X2": 0.4314059, + "Y1": 0.36511156, + "Y2": 0.39391482 + }, + "text": null, + "groupId": "3", + "id": "346807619765141511" + }, + { + "label": "author", + "score": 0.56993765, + "box": { + "X1": 0.46712017, + "X2": 0.473356, + "Y1": 0.47342798, + "Y2": 0.4831643 + }, + "text": null, + "groupId": "3", + "id": "346807619765141512" + }, + { + "label": "title", + "score": 0.25035074, + "box": { + "X1": 0.3047052, + "X2": 0.4713719, + "Y1": 0.3902637, + "Y2": 0.4827586 + }, + "text": null, + "groupId": "3", + "id": "346807619765141513" + }, + { + "label": "image", + "score": 0.8467058, + "box": { + "X1": 0.5263606, + "X2": 0.60175735, + "Y1": 0.09290061, + "Y2": 0.29574037 + }, + "text": null, + "groupId": "4", + "id": "346807619769335808" + }, + { + "label": "text", + "score": 0.77197385, + "box": { + "X1": 0.526644, + "X2": 0.6014739, + "Y1": 0.31764707, + "Y2": 0.45354968 + }, + "text": null, + "groupId": "4", + "id": "346807619769335809" + }, + { + "label": "title", + "score": 0.6418396, + "box": { + "X1": 0.5269274, + "X2": 0.58956915, + "Y1": 0.2912779, + "Y2": 0.32089248 + }, + "text": null, + "groupId": "4", + "id": "346807619769335810" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.6134824, + "X2": 0.971019, + "Y1": 0.050727088, + "Y2": 0.18825386 + }, + "text": "[{\"label\":\"title\",\"text\":\"Covidoví supermani žijí mezi námi. Jste to vy?\"}]", + "groupId": "0", + "id": "346807628933890048" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70168525, + "Y1": 0.1657085, + "Y2": 0.4633074 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807628933890049" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.7946133, + "Y1": 0.1690903, + "Y2": 0.4633074 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807628933890050" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8875413, + "Y1": 0.1690903, + "Y2": 0.4633074 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807628933890051" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.89147896, + "X2": 0.98046935, + "Y1": 0.1690903, + "Y2": 0.4633074 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807628933890052" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.9418806, + "X2": 0.9702315, + "Y1": 0.44639838, + "Y2": 0.4633074 + }, + "text": "[{\"label\":\"author\",\"text\":\"HAL a ČTK\"}]", + "groupId": "0", + "id": "346807628933890053" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.018900614, + "X2": 0.44810206, + "Y1": 0.47345284, + "Y2": 0.574907 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krásné, ale smrtonosné\"}]", + "groupId": "1", + "id": "346807629697253376" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.5501071, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807629697253377" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.81839705, + "Y2": 0.9604329 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807629697253378" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.20554417, + "X2": 0.29453456, + "Y1": 0.81839705, + "Y2": 0.9604329 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807629697253379" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.2984722, + "X2": 0.3874626, + "Y1": 0.81839705, + "Y2": 0.9604329 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807629697253380" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.4803906, + "Y1": 0.5534889, + "Y2": 0.9615602 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807629701447680" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.11576626, + "X2": 0.35044888, + "Y1": 0.7067974, + "Y2": 0.82741517 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Výhled na Středozemní moře z kamenné zahrady ve španělském Benidormu\"}]", + "groupId": "1", + "id": "346807629701447681" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.3480863, + "X2": 0.38273743, + "Y1": 0.7067974, + "Y2": 0.8251607 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"PROFIMEDIA\"}]", + "groupId": "1", + "id": "346807629701447682" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.3480863, + "X2": 0.38273743, + "Y1": 0.81050617, + "Y2": 0.83192426 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"PROFIMEDIA\"}]", + "groupId": "1", + "id": "346807629701447683" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.4095133, + "X2": 0.44731453, + "Y1": 0.9435239, + "Y2": 0.9604329 + }, + "text": "[{\"label\":\"author\",\"text\":\"HAL a iDNES.cz\"}]", + "groupId": "1", + "id": "346807629701447684" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.20869428, + "X2": 0.29138446, + "Y1": 0.09243603, + "Y2": 0.48359826 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807629923745792" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.2126319, + "X2": 0.2370452, + "Y1": 0.06763612, + "Y2": 0.099199645 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "2", + "id": "346807629923745793" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.22523232, + "X2": 0.2401953, + "Y1": 0.46668923, + "Y2": 0.48359826 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "2", + "id": "346807629923745794" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.30240983, + "X2": 0.4740904, + "Y1": 0.37425318, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"text\",\"text\":\"Běloruský vůdce Alexandr Lukašenko včera pohrozil Evropské unii tvrdou odplatou za úterní uvalení nových sankcí proti Minsku. Ve hře je podle něj i přerušení tranzitu ruského zemního plynu a přepravy dalšího zboží přes Bělorusko. EU se chystá postihnout Lukašenkův režim za vyostřování migrační krize na hranicích s Polskem a pobaltskými státy. „Zahříváme Evropu, ale ještě nám vyhrožují, že uzavřou hranice. A co když my jim přerušíme zemní plyn?“ řekl doslova Lukašenko. AP\"}]", + "groupId": "3", + "id": "346807630221541376" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.30319735, + "X2": 0.43392658, + "Y1": 0.34945327, + "Y2": 0.39679858 + }, + "text": "[{\"label\":\"title\",\"text\":\"Sáhne na kohoutky?\"}]", + "groupId": "3", + "id": "346807630221541377" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.30319735, + "X2": 0.47330287, + "Y1": 0.37650773, + "Y2": 0.48698005 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807630225735680" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.46464008, + "X2": 0.47566545, + "Y1": 0.47007102, + "Y2": 0.48698005 + }, + "text": "[{\"label\":\"author\",\"text\":\"AP\"}]", + "groupId": "3", + "id": "346807630225735681" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.524492, + "X2": 0.59221923, + "Y1": 0.27505356, + "Y2": 0.3246534 + }, + "text": "[{\"label\":\"title\",\"text\":\"Hlava JAR\"}]", + "groupId": "4", + "id": "346807630460616704" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.524492, + "X2": 0.6040321, + "Y1": 0.302108, + "Y2": 0.4565438 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807630460616705" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "4" + }] + }, + { + "id": "cd6943d8-f7a1-4dbd-9b0e-4d9050764df4", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.9788943, + "Y1": 0.051854357, + "Y2": 0.1296359 + }, + "text": "[{\"label\":\"title\",\"text\":\"Počasí. Na horách už začalo mrznout\"}]", + "groupId": "0", + "id": "346807652635901952" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.60875726, + "Y1": 0.10821779, + "Y2": 0.40243492 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807652635901953" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70168525, + "Y1": 0.10821779, + "Y2": 0.19952655 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807652635901954" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.7946133, + "Y1": 0.10821779, + "Y2": 0.19952655 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807652635901955" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8875413, + "Y1": 0.10821779, + "Y2": 0.19952655 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807652635901956" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.98046935, + "Y1": 0.10821779, + "Y2": 0.20065382 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807652635901957" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.91274214, + "X2": 0.9269176, + "Y1": 0.18261753, + "Y2": 0.20065382 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "0", + "id": "346807652635901958" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.5268546, + "X2": 0.5512679, + "Y1": 0.40243492, + "Y2": 0.4351257 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "1", + "id": "346807653017583616" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.5268546, + "X2": 0.5512679, + "Y1": 0.41483486, + "Y2": 0.43399844 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Krátce\"}]", + "groupId": "1", + "id": "346807653017583617" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5237045, + "X2": 0.6040321, + "Y1": 0.423853, + "Y2": 0.47908917 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807653017583618" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5237045, + "X2": 0.6040321, + "Y1": 0.57377976, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807653021777920" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.5733186, + "X2": 0.5867065, + "Y1": 0.93337846, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "1", + "id": "346807653021777921" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.022050716, + "X2": 0.24728303, + "Y1": 0.18261753, + "Y2": 0.30661708 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Nic neřešíte. Sklopíte sedačky, vsunete matraci a bydlíte. Jednoduché.\"}]", + "groupId": "2", + "id": "346807653332156416" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.45125216, + "Y1": 0.2942171, + "Y2": 0.3708714 + }, + "text": "[{\"label\":\"title\",\"text\":\"Nic neřešíte. Sklopíte sedačky, vsunete matraci a bydlíte. Jednoduché. Verze XL je oproti klasickému podání Comba delší o 35 cm. Opel Combo XL jako obýváček\"}]", + "groupId": "2", + "id": "346807653332156417" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.34832603, + "Y2": 0.53432536 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807653332156418" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.4370767, + "X2": 0.47487792, + "Y1": 0.5174163, + "Y2": 0.53432536 + }, + "text": "[{\"label\":\"author\",\"text\":\"PETR HOLEČEK\"}]", + "groupId": "2", + "id": "346807653332156419" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.020475665, + "X2": 0.47172782, + "Y1": 0.52417994, + "Y2": 0.59407055 + }, + "text": "[{\"label\":\"title\",\"text\":\"Lenny. Auto je mojí druhou pracovnou\"}]", + "groupId": "3", + "id": "346807653869027328" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.5794161, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807653873221632" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20081902, + "Y1": 0.574907, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807653873221633" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.30004725, + "X2": 0.36856195, + "Y1": 0.9423966, + "Y2": 0.96268743 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Lenny u svého auta\"}]", + "groupId": "3", + "id": "346807653873221634" + }, + { + "label": "interview", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.4803906, + "Y1": 0.587307, + "Y2": 0.9615602 + }, + "text": "[{\"label\":\"interview\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807653873221635" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.4536147, + "X2": 0.46936524, + "Y1": 0.9435239, + "Y2": 0.9604329 + }, + "text": "[{\"label\":\"author\",\"text\":\"MET\"}]", + "groupId": "3", + "id": "346807653873221636" + } + ] + }, + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.94375396, + "box": { + "X1": 0.89342403, + "X2": 0.9781746, + "Y1": 0.12413793, + "Y2": 0.19675456 + }, + "text": null, + "groupId": "0", + "id": "346807643144192000" + }, + { + "label": "text", + "score": 0.91918874, + "box": { + "X1": 0.8010204, + "X2": 0.8852041, + "Y1": 0.12413793, + "Y2": 0.19634889 + }, + "text": null, + "groupId": "0", + "id": "346807643144192001" + }, + { + "label": "text", + "score": 0.8975457, + "box": { + "X1": 0.61507934, + "X2": 0.69926304, + "Y1": 0.12413793, + "Y2": 0.19634889 + }, + "text": null, + "groupId": "0", + "id": "346807643144192002" + }, + { + "label": "text", + "score": 0.8904518, + "box": { + "X1": 0.7080499, + "X2": 0.7922336, + "Y1": 0.12454361, + "Y2": 0.1959432 + }, + "text": null, + "groupId": "0", + "id": "346807643144192003" + }, + { + "label": "text", + "score": 0.874937, + "box": { + "X1": 0.5223923, + "X2": 0.60629255, + "Y1": 0.12454361, + "Y2": 0.39918864 + }, + "text": null, + "groupId": "0", + "id": "346807643144192004" + }, + { + "label": "title", + "score": 0.84934753, + "box": { + "X1": 0.5223923, + "X2": 0.97619045, + "Y1": 0.06774848, + "Y2": 0.12576064 + }, + "text": null, + "groupId": "0", + "id": "346807643144192005" + }, + { + "label": "author", + "score": 0.8461832, + "box": { + "X1": 0.914966, + "X2": 0.92488664, + "Y1": 0.18620689, + "Y2": 0.19675456 + }, + "text": null, + "groupId": "0", + "id": "346807643144192006" + }, + { + "label": "text", + "score": 0.83992594, + "box": { + "X1": 0.5260771, + "X2": 0.6020408, + "Y1": 0.44016227, + "Y2": 0.47626776 + }, + "text": null, + "groupId": "1", + "id": "346807643144192007" + }, + { + "label": "text", + "score": 0.7968195, + "box": { + "X1": 0.5260771, + "X2": 0.6020408, + "Y1": 0.5894523, + "Y2": 0.94685596 + }, + "text": null, + "groupId": "1", + "id": "346807643148386304" + }, + { + "label": "image", + "score": 0.783376, + "box": { + "X1": 0.5252268, + "X2": 0.60119045, + "Y1": 0.47870183, + "Y2": 0.5821501 + }, + "text": null, + "groupId": "1", + "id": "346807643148386305" + }, + { + "label": "author", + "score": 0.72730637, + "box": { + "X1": 0.57539684, + "X2": 0.5844671, + "Y1": 0.936714, + "Y2": 0.94685596 + }, + "text": null, + "groupId": "1", + "id": "346807643148386306" + }, + { + "label": "title", + "score": 0.60979086, + "box": { + "X1": 0.5289116, + "X2": 0.54903626, + "Y1": 0.41825557, + "Y2": 0.4312373 + }, + "text": null, + "groupId": "1", + "id": "346807643148386307" + }, + { + "label": "subtitle", + "score": 0.35433772, + "box": { + "X1": 0.5289116, + "X2": 0.54903626, + "Y1": 0.41825557, + "Y2": 0.43083164 + }, + "text": null, + "groupId": "1", + "id": "346807643148386308" + }, + { + "label": "image", + "score": 0.5562187, + "box": { + "X1": 0.021258503, + "X2": 0.24744898, + "Y1": 0.08438134, + "Y2": 0.29817444 + }, + "text": null, + "groupId": "2", + "id": "346807643148386309" + }, + { + "label": "text", + "score": 0.48500627, + "box": { + "X1": 0.022108844, + "X2": 0.106292516, + "Y1": 0.36389452, + "Y2": 0.5306288 + }, + "text": null, + "groupId": "2", + "id": "346807643148386310" + }, + { + "label": "image", + "score": 0.46431807, + "box": { + "X1": 0.25368482, + "X2": 0.47902495, + "Y1": 0.085192695, + "Y2": 0.2969574 + }, + "text": null, + "groupId": "2", + "id": "346807643148386311" + }, + { + "label": "title", + "score": 0.34878212, + "box": { + "X1": 0.02239229, + "X2": 0.44869614, + "Y1": 0.30953348, + "Y2": 0.36713997 + }, + "text": null, + "groupId": "2", + "id": "346807643148386312" + }, + { + "label": "author", + "score": 0.27873227, + "box": { + "X1": 0.43962586, + "X2": 0.4722222, + "Y1": 0.52048683, + "Y2": 0.53103447 + }, + "text": null, + "groupId": "2", + "id": "346807643152580608" + }, + { + "label": "photo_caption", + "score": 0.2485955, + "box": { + "X1": 0.024659865, + "X2": 0.24518141, + "Y1": 0.18620689, + "Y2": 0.3034483 + }, + "text": null, + "groupId": "2", + "id": "346807643152580609" + }, + { + "label": "author", + "score": 0.67039365, + "box": { + "X1": 0.4563492, + "X2": 0.46712017, + "Y1": 0.94685596, + "Y2": 0.956998 + }, + "text": null, + "groupId": "3", + "id": "346807643152580610" + }, + { + "label": "image", + "score": 0.49904063, + "box": { + "X1": 0.3010204, + "X2": 0.38492063, + "Y1": 0.59148073, + "Y2": 0.94685596 + }, + "text": null, + "groupId": "3", + "id": "346807643152580611" + }, + { + "label": "text", + "score": 0.4862645, + "box": { + "X1": 0.115079366, + "X2": 0.19869615, + "Y1": 0.5906694, + "Y2": 0.9557809 + }, + "text": null, + "groupId": "3", + "id": "346807643152580612" + }, + { + "label": "interview", + "score": 0.48022377, + "box": { + "X1": 0.39399093, + "X2": 0.47789115, + "Y1": 0.59026366, + "Y2": 0.9578093 + }, + "text": null, + "groupId": "3", + "id": "346807643152580613" + }, + { + "label": "text", + "score": 0.4281376, + "box": { + "X1": 0.022108844, + "X2": 0.106292516, + "Y1": 0.59472615, + "Y2": 0.9561866 + }, + "text": null, + "groupId": "3", + "id": "346807643152580614" + }, + { + "label": "title", + "score": 0.3836873, + "box": { + "X1": 0.022675738, + "X2": 0.46938777, + "Y1": 0.53995943, + "Y2": 0.59107506 + }, + "text": null, + "groupId": "3", + "id": "346807643152580615" + }, + { + "label": "photo_caption", + "score": 0.2580192, + "box": { + "X1": 0.30272108, + "X2": 0.36621314, + "Y1": 0.9452333, + "Y2": 0.95943207 + }, + "text": null, + "groupId": "3", + "id": "346807643156774912" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "5" + }] + }, + { + "id": "d462a224-4760-4518-9066-3c84a3b39602", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.84927833, + "box": { + "X1": 0.3973923, + "X2": 0.4739229, + "Y1": 0.113184586, + "Y2": 0.52373224 + }, + "text": null, + "groupId": "0", + "id": "346807631916040192" + }, + { + "label": "title", + "score": 0.59558594, + "box": { + "X1": 0.39824262, + "X2": 0.45578232, + "Y1": 0.098174445, + "Y2": 0.1148073 + }, + "text": null, + "groupId": "0", + "id": "346807631916040193" + }, + { + "label": "subtitle", + "score": 0.512302, + "box": { + "X1": 0.3973923, + "X2": 0.444161, + "Y1": 0.08154158, + "Y2": 0.093711965 + }, + "text": null, + "groupId": "0", + "id": "346807631916040194" + }, + { + "label": "appendix", + "score": 0.42450258, + "box": { + "X1": 0.3956916, + "X2": 0.47562358, + "Y1": 0.4592292, + "Y2": 0.52576065 + }, + "text": null, + "groupId": "0", + "id": "346807631916040195" + }, + { + "label": "author", + "score": 0.40455583, + "box": { + "X1": 0.41780046, + "X2": 0.4659864, + "Y1": 0.44462475, + "Y2": 0.45517242 + }, + "text": null, + "groupId": "0", + "id": "346807631920234496" + }, + { + "label": "title", + "score": 0.90706986, + "box": { + "X1": 0.52125853, + "X2": 0.9552154, + "Y1": 0.06653144, + "Y2": 0.18458419 + }, + "text": null, + "groupId": "1", + "id": "346807631920234497" + }, + { + "label": "text", + "score": 0.9047873, + "box": { + "X1": 0.61507934, + "X2": 0.69926304, + "Y1": 0.18458419, + "Y2": 0.29817444 + }, + "text": null, + "groupId": "1", + "id": "346807631920234498" + }, + { + "label": "text", + "score": 0.87658125, + "box": { + "X1": 0.7080499, + "X2": 0.7922336, + "Y1": 0.1841785, + "Y2": 0.29776877 + }, + "text": null, + "groupId": "1", + "id": "346807631920234499" + }, + { + "label": "text", + "score": 0.8612983, + "box": { + "X1": 0.8010204, + "X2": 0.88492066, + "Y1": 0.18498985, + "Y2": 0.29817444 + }, + "text": null, + "groupId": "1", + "id": "346807631920234500" + }, + { + "label": "text", + "score": 0.81814796, + "box": { + "X1": 0.89399093, + "X2": 0.97732425, + "Y1": 0.18539554, + "Y2": 0.70304257 + }, + "text": null, + "groupId": "1", + "id": "346807631920234501" + }, + { + "label": "author", + "score": 0.46660122, + "box": { + "X1": 0.928288, + "X2": 0.96428573, + "Y1": 0.6929006, + "Y2": 0.7034483 + }, + "text": null, + "groupId": "1", + "id": "346807631920234502" + }, + { + "label": "appendix", + "score": 0.42959827, + "box": { + "X1": 0.89427435, + "X2": 0.9770408, + "Y1": 0.7229209, + "Y2": 0.8527383 + }, + "text": null, + "groupId": "1", + "id": "346807631920234503" + }, + { + "label": "appendix", + "score": 0.37421393, + "box": { + "X1": 0.89569163, + "X2": 0.9753401, + "Y1": 0.83204865, + "Y2": 0.95010144 + }, + "text": null, + "groupId": "1", + "id": "346807631920234504" + }, + { + "label": "text", + "score": 0.78085595, + "box": { + "X1": 0.020975057, + "X2": 0.19954649, + "Y1": 0.2056795, + "Y2": 0.5505071 + }, + "text": null, + "groupId": "2", + "id": "346807631924428800" + }, + { + "label": "author", + "score": 0.7307652, + "box": { + "X1": 0.022108844, + "X2": 0.06887755, + "Y1": 0.08154158, + "Y2": 0.12738337 + }, + "text": null, + "groupId": "2", + "id": "346807631924428801" + }, + { + "label": "image", + "score": 0.6994629, + "box": { + "X1": 0.12188209, + "X2": 0.19529478, + "Y1": 0.0673428, + "Y2": 0.15578093 + }, + "text": null, + "groupId": "2", + "id": "346807631924428802" + }, + { + "label": "appendix", + "score": 0.6661272, + "box": { + "X1": 0.021825397, + "X2": 0.09580499, + "Y1": 0.34766734, + "Y2": 0.41825557 + }, + "text": null, + "groupId": "2", + "id": "346807631924428803" + }, + { + "label": "title", + "score": 0.65983397, + "box": { + "X1": 0.021825397, + "X2": 0.114795916, + "Y1": 0.16348885, + "Y2": 0.20689656 + }, + "text": null, + "groupId": "2", + "id": "346807631924428804" + }, + { + "label": "about_author", + "score": 0.47332278, + "box": { + "X1": 0.020975057, + "X2": 0.058106575, + "Y1": 0.12697768, + "Y2": 0.14117648 + }, + "text": null, + "groupId": "2", + "id": "346807631924428805" + }, + { + "label": "subtitle", + "score": 0.40535787, + "box": { + "X1": 0.02239229, + "X2": 0.05357143, + "Y1": 0.15212981, + "Y2": 0.16673428 + }, + "text": null, + "groupId": "2", + "id": "346807631924428806" + }, + { + "label": "text", + "score": 0.8885111, + "box": { + "X1": 0.61961454, + "X2": 0.70011336, + "Y1": 0.7622718, + "Y2": 0.95010144 + }, + "text": null, + "groupId": "3", + "id": "346807631924428807" + }, + { + "label": "title", + "score": 0.8775064, + "box": { + "X1": 0.61961454, + "X2": 0.6802721, + "Y1": 0.715213, + "Y2": 0.76511157 + }, + "text": null, + "groupId": "3", + "id": "346807631924428808" + }, + { + "label": "image", + "score": 0.8484324, + "box": { + "X1": 0.7083333, + "X2": 0.88038546, + "Y1": 0.7217038, + "Y2": 0.9505071 + }, + "text": null, + "groupId": "3", + "id": "346807631928623104" + }, + { + "label": "author", + "score": 0.6829357, + "box": { + "X1": 0.68679136, + "X2": 0.69954646, + "Y1": 0.9399594, + "Y2": 0.95010144 + }, + "text": null, + "groupId": "3", + "id": "346807631928623105" + }, + { + "label": "image", + "score": 0.8883761, + "box": { + "X1": 0.21230158, + "X2": 0.3798186, + "Y1": 0.13387424, + "Y2": 0.3760649 + }, + "text": null, + "groupId": "4", + "id": "346807631928623106" + }, + { + "label": "photo_caption", + "score": 0.84484494, + "box": { + "X1": 0.21230158, + "X2": 0.3676304, + "Y1": 0.6953347, + "Y2": 0.7273834 + }, + "text": null, + "groupId": "4", + "id": "346807631928623107" + }, + { + "label": "photo_caption", + "score": 0.82607335, + "box": { + "X1": 0.21371882, + "X2": 0.3755669, + "Y1": 0.38296145, + "Y2": 0.43326572 + }, + "text": null, + "groupId": "4", + "id": "346807631928623108" + }, + { + "label": "title", + "score": 0.7765688, + "box": { + "X1": 0.21258503, + "X2": 0.3330499, + "Y1": 0.0831643, + "Y2": 0.12413793 + }, + "text": null, + "groupId": "4", + "id": "346807631928623109" + }, + { + "label": "text", + "score": 0.9326591, + "box": { + "X1": 0.52210885, + "X2": 0.60600907, + "Y1": 0.18052739, + "Y2": 0.7054767 + }, + "text": null, + "groupId": "5", + "id": "346807631928623110" + }, + { + "label": "appendix", + "score": 0.87461144, + "box": { + "X1": 0.52040815, + "X2": 0.60600907, + "Y1": 0.70831645, + "Y2": 0.948073 + }, + "text": null, + "groupId": "5", + "id": "346807631928623111" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.39533782, + "X2": 0.446527, + "Y1": 0.077781536, + "Y2": 0.09694511 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Dopisy a vzkazy\"}]", + "groupId": "0", + "id": "346807638048112640" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.39612535, + "X2": 0.45833987, + "Y1": 0.08229061, + "Y2": 0.11836321 + }, + "text": "[{\"label\":\"title\",\"text\":\"Nová budova\"}]", + "groupId": "0", + "id": "346807638048112641" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39533782, + "X2": 0.47645298, + "Y1": 0.09694511, + "Y2": 0.5275617 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807638048112642" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.39297527, + "X2": 0.47802803, + "Y1": 0.45541653, + "Y2": 0.528689 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"dopisy@metro.cz, www.facebook.com/ denikmetro V dopisu uveďte jméno a adresu. Metro si vyhrazuje právo editovat dopisy.\"}]", + "groupId": "0", + "id": "346807638048112643" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.4158135, + "X2": 0.4685777, + "Y1": 0.44076204, + "Y2": 0.45879835 + }, + "text": "[{\"label\":\"author\",\"text\":\"MARTIN KUBÍK, PRAH\"}]", + "groupId": "0", + "id": "346807638048112644" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.5189794, + "X2": 0.9576311, + "Y1": 0.050727088, + "Y2": 0.18825386 + }, + "text": "[{\"label\":\"title\",\"text\":\"Konvice a co nového na síti. Prodej elektroniky vypovídá\"}]", + "groupId": "1", + "id": "346807638622732288" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70168525, + "Y1": 0.1690903, + "Y2": 0.302108 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807638622732289" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.7946133, + "Y1": 0.16796303, + "Y2": 0.30098075 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807638622732290" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8875413, + "Y1": 0.1690903, + "Y2": 0.302108 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807638622732291" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.89147896, + "X2": 0.9796818, + "Y1": 0.1690903, + "Y2": 0.7067974 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807638626926592" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.89226645, + "X2": 0.9796818, + "Y1": 0.7191974, + "Y2": 0.8555969 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"24 Mladí do 24 let a rodiny s dětmi patřili za uplynulý rok k těm, kteří nejvíc nakupovali notebooky. I nadále se zájem zákazníků nejvíc soustředí na tento druh zboží.\"}]", + "groupId": "1", + "id": "346807638626926593" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.893054, + "X2": 0.97731924, + "Y1": 0.8285425, + "Y2": 0.9536693 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Tolik procent Čechů si na internetu či přímo v obchodě koupilo chytrý telefon, 39 procent z nás utratilo peníze za rychlovarné konvice, které byly druhým nejnakupovanějším produktem elektroniky.\"}]", + "groupId": "1", + "id": "346807638626926594" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.92613006, + "X2": 0.9662939, + "Y1": 0.6898884, + "Y2": 0.7067974 + }, + "text": "[{\"label\":\"author\",\"text\":\"PAVEL HRABICA\"}]", + "groupId": "1", + "id": "346807638626926595" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.0708773, + "Y1": 0.077781536, + "Y2": 0.13076316 + }, + "text": "[{\"label\":\"author\",\"text\":\"PAVEL MAURER\"}]", + "groupId": "2", + "id": "346807639058939904" + }, + { + "label": "about_author", + "score": 0.99, + "box": { + "X1": 0.018900614, + "X2": 0.060639467, + "Y1": 0.12399955, + "Y2": 0.14429039 + }, + "text": "[{\"label\":\"about_author\",\"text\":\"MILOVNÍK JÍDLA\"}]", + "groupId": "2", + "id": "346807639058939905" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.055914316, + "Y1": 0.14879946, + "Y2": 0.17021757 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Sloupek\"}]", + "groupId": "2", + "id": "346807639058939906" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.11734131, + "Y1": 0.14767219, + "Y2": 0.21079923 + }, + "text": "[{\"label\":\"title\",\"text\":\"Sloupek IMUNITA\"}]", + "groupId": "2", + "id": "346807639063134208" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.018900614, + "X2": 0.20160654, + "Y1": 0.18938114, + "Y2": 0.5534889 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807639063134209" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.09844069, + "Y1": 0.34381694, + "Y2": 0.42159846 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Citát Milí gastronauti, takhle já si – podomácku – tvořím imunitu.\"}]", + "groupId": "2", + "id": "346807639063134210" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.61742, + "X2": 0.6827847, + "Y1": 0.69890654, + "Y2": 0.7687972 + }, + "text": "[{\"label\":\"title\",\"text\":\"E-rekord: z 21 na 37\"}]", + "groupId": "3", + "id": "346807639298015232" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61742, + "X2": 0.7024728, + "Y1": 0.7462519, + "Y2": 0.9536693 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807639302209536" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.6843597, + "X2": 0.70168525, + "Y1": 0.93676025, + "Y2": 0.9536693 + }, + "text": "[{\"label\":\"author\",\"text\":\"MAFA\"}]", + "groupId": "3", + "id": "346807639302209537" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.21026933, + "X2": 0.33548588, + "Y1": 0.06763612, + "Y2": 0.12738135 + }, + "text": "[{\"label\":\"title\",\"text\":\"@mojemetro\"}]", + "groupId": "4", + "id": "346807639545479168" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.21105686, + "X2": 0.37801227, + "Y1": 0.37988955, + "Y2": 0.43625298 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Přes Facebook @denikmetro k nám doputovala poezie všedního dne od básnířky, která se podepsala jako Bejbyna. Na těch pár řádcích je velký kus pravdy. Smích umí zázraky! Chtěli byste v Metru víc poezie? Je to na vás. Básněte ve žlutém rámečku a své dílo nám pošlete. Návod najdete níže.\"}]", + "groupId": "4", + "id": "346807639545479169" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.21026933, + "X2": 0.370137, + "Y1": 0.69214296, + "Y2": 0.7304701 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Tohle je místo na váš vzkaz! Do žlutého rámečku napište přání, výzvu, básničku nebo něco namalujte. Výtvor vyfoťte a sdílejte s hashtagem #METROTAG na svém Instagramu. Vzkaz lze poslat i jako zprávu přes Facebook nebo e-mailem na mms@metro.cz. Váš výtvor dáme do novin!\"}]", + "groupId": "4", + "id": "346807639558062080" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.60875726, + "Y1": 0.16458122, + "Y2": 0.70905197 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807639717445632" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.5181918, + "X2": 0.60875726, + "Y1": 0.70454293, + "Y2": 0.95141476 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Hurá do obchodů? Češi nemají úplně jasno, jestli budou v kamenných obchodech nakupovat elektroniku stejně jako před epidemií. Asi třetina z nás se těší na ● otevření klasických prodejen. Čtvrtina Čechů zůstane u nákupů on-line. Nejžádanější značkou elek● troniky je v Česku Samsung, vévodí čtyřem kategoriím. Následuje Xiaomi, ETA, Beko, Canon a HP. Nejnavštěvovanějšími ● obchodníky jsou Alza a Datart. Úspěšné jsou také e-shopy CZC a T.S.Bohemia.\"}]", + "groupId": "5", + "id": "346807639717445633" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "6" + }] + }, + { + "id": "df74e5f5-1649-40dc-821a-3d4d32c157b0", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "title", + "score": 0.7508144, + "box": { + "X1": 0.7083333, + "X2": 0.78741497, + "Y1": 0.08640973, + "Y2": 0.13549696 + }, + "text": null, + "groupId": "0", + "id": "346807655437697024" + }, + { + "label": "text", + "score": 0.7132094, + "box": { + "X1": 0.7086168, + "X2": 0.78798187, + "Y1": 0.13225152, + "Y2": 0.48235294 + }, + "text": null, + "groupId": "0", + "id": "346807655437697025" + }, + { + "label": "author", + "score": 0.6599086, + "box": { + "X1": 0.7783447, + "X2": 0.78741497, + "Y1": 0.47261664, + "Y2": 0.4827586 + }, + "text": null, + "groupId": "0", + "id": "346807655437697026" + }, + { + "label": "image", + "score": 0.6555922, + "box": { + "X1": 0.5252268, + "X2": 0.70011336, + "Y1": 0.094523326, + "Y2": 0.48154157 + }, + "text": null, + "groupId": "0", + "id": "346807655437697027" + }, + { + "label": "text", + "score": 0.8984214, + "box": { + "X1": 0.89370745, + "X2": 0.9770408, + "Y1": 0.55902636, + "Y2": 0.9229209 + }, + "text": null, + "groupId": "1", + "id": "346807655441891328" + }, + { + "label": "text", + "score": 0.88238955, + "box": { + "X1": 0.80017006, + "X2": 0.8840703, + "Y1": 0.7841785, + "Y2": 0.9549696 + }, + "text": null, + "groupId": "1", + "id": "346807655441891329" + }, + { + "label": "image", + "score": 0.8746562, + "box": { + "X1": 0.89342403, + "X2": 0.9155329, + "Y1": 0.9237323, + "Y2": 0.9561866 + }, + "text": null, + "groupId": "1", + "id": "346807655441891330" + }, + { + "label": "appendix", + "score": 0.8722421, + "box": { + "X1": 0.79931974, + "X2": 0.88435376, + "Y1": 0.559432, + "Y2": 0.7829615 + }, + "text": null, + "groupId": "1", + "id": "346807655441891331" + }, + { + "label": "text", + "score": 0.85701054, + "box": { + "X1": 0.7077664, + "X2": 0.7922336, + "Y1": 0.7918864, + "Y2": 0.95537525 + }, + "text": null, + "groupId": "1", + "id": "346807655441891332" + }, + { + "label": "image", + "score": 0.8459836, + "box": { + "X1": 0.6153628, + "X2": 0.7919501, + "Y1": 0.55902636, + "Y2": 0.7724138 + }, + "text": null, + "groupId": "1", + "id": "346807655441891333" + }, + { + "label": "title", + "score": 0.8440867, + "box": { + "X1": 0.5223923, + "X2": 0.9455782, + "Y1": 0.4969574, + "Y2": 0.55902636 + }, + "text": null, + "groupId": "1", + "id": "346807655441891334" + }, + { + "label": "about_author", + "score": 0.7594471, + "box": { + "X1": 0.9160998, + "X2": 0.96286845, + "Y1": 0.94563895, + "Y2": 0.9545639 + }, + "text": null, + "groupId": "1", + "id": "346807655441891335" + }, + { + "label": "text", + "score": 0.7509914, + "box": { + "X1": 0.6153628, + "X2": 0.69954646, + "Y1": 0.7914807, + "Y2": 0.9549696 + }, + "text": null, + "groupId": "1", + "id": "346807655441891336" + }, + { + "label": "author", + "score": 0.57692206, + "box": { + "X1": 0.9143991, + "X2": 0.9569161, + "Y1": 0.9208925, + "Y2": 0.94563895 + }, + "text": null, + "groupId": "1", + "id": "346807655441891337" + }, + { + "label": "text", + "score": 0.56846696, + "box": { + "X1": 0.52210885, + "X2": 0.60657597, + "Y1": 0.5565923, + "Y2": 0.9545639 + }, + "text": null, + "groupId": "1", + "id": "346807655446085632" + }, + { + "label": "photo_caption", + "score": 0.3725593, + "box": { + "X1": 0.61848074, + "X2": 0.75453514, + "Y1": 0.67505074, + "Y2": 0.7829615 + }, + "text": null, + "groupId": "1", + "id": "346807655446085633" + }, + { + "label": "photo_author", + "score": 0.34255612, + "box": { + "X1": 0.75396824, + "X2": 0.7876984, + "Y1": 0.6713996, + "Y2": 0.78255576 + }, + "text": null, + "groupId": "1", + "id": "346807655446085634" + }, + { + "label": "photo_caption", + "score": 0.2204142, + "box": { + "X1": 0.61876416, + "X2": 0.7497166, + "Y1": 0.77160245, + "Y2": 0.78701824 + }, + "text": null, + "groupId": "1", + "id": "346807655446085635" + }, + { + "label": "photo_author", + "score": 0.20760225, + "box": { + "X1": 0.7536848, + "X2": 0.7876984, + "Y1": 0.7720081, + "Y2": 0.78701824 + }, + "text": null, + "groupId": "1", + "id": "346807655446085636" + }, + { + "label": "title", + "score": 0.7521728, + "box": { + "X1": 0.40079364, + "X2": 0.42091838, + "Y1": 0.08235294, + "Y2": 0.09492901 + }, + "text": null, + "groupId": "2", + "id": "346807655446085637" + }, + { + "label": "text", + "score": 0.58257806, + "box": { + "X1": 0.3973923, + "X2": 0.4727891, + "Y1": 0.10466532, + "Y2": 0.47058824 + }, + "text": null, + "groupId": "2", + "id": "346807655446085638" + }, + { + "label": "author", + "score": 0.5376272, + "box": { + "X1": 0.41666666, + "X2": 0.4260204, + "Y1": 0.45882353, + "Y2": 0.46896553 + }, + "text": null, + "groupId": "2", + "id": "346807655446085639" + }, + { + "label": "image", + "score": 0.9374786, + "box": { + "X1": 0.13718821, + "X2": 0.24178004, + "Y1": 0.57160246, + "Y2": 0.67626774 + }, + "text": null, + "groupId": "3", + "id": "346807655446085640" + }, + { + "label": "text", + "score": 0.91197884, + "box": { + "X1": 0.026927438, + "X2": 0.13151927, + "Y1": 0.56957406, + "Y2": 0.9464503 + }, + "text": null, + "groupId": "3", + "id": "346807655450279936" + }, + { + "label": "text", + "score": 0.89039826, + "box": { + "X1": 0.13718821, + "X2": 0.24206349, + "Y1": 0.6929006, + "Y2": 0.94685596 + }, + "text": null, + "groupId": "3", + "id": "346807655450279937" + }, + { + "label": "title", + "score": 0.72500765, + "box": { + "X1": 0.031746034, + "X2": 0.23752834, + "Y1": 0.5087221, + "Y2": 0.5387424 + }, + "text": null, + "groupId": "3", + "id": "346807655450279938" + }, + { + "label": "title", + "score": 0.3557134, + "box": { + "X1": 0.028628118, + "X2": 0.23696145, + "Y1": 0.5338742, + "Y2": 0.5659229 + }, + "text": null, + "groupId": "3", + "id": "346807655450279939" + }, + { + "label": "subtitle", + "score": 0.26402617, + "box": { + "X1": 0.028628118, + "X2": 0.23696145, + "Y1": 0.5338742, + "Y2": 0.5659229 + }, + "text": null, + "groupId": "3", + "id": "346807655450279940" + }, + { + "label": "text", + "score": 0.84798753, + "box": { + "X1": 0.021825397, + "X2": 0.106292516, + "Y1": 0.18093306, + "Y2": 0.47870183 + }, + "text": null, + "groupId": "4", + "id": "346807655450279941" + }, + { + "label": "title", + "score": 0.7572905, + "box": { + "X1": 0.022108844, + "X2": 0.3761338, + "Y1": 0.06409736, + "Y2": 0.18336713 + }, + "text": null, + "groupId": "4", + "id": "346807655450279942" + }, + { + "label": "text", + "score": 0.6824378, + "box": { + "X1": 0.114795916, + "X2": 0.19897959, + "Y1": 0.18336713, + "Y2": 0.4795132 + }, + "text": null, + "groupId": "4", + "id": "346807655450279943" + }, + { + "label": "text", + "score": 0.678557, + "box": { + "X1": 0.3010204, + "X2": 0.38520408, + "Y1": 0.1841785, + "Y2": 0.4791075 + }, + "text": null, + "groupId": "4", + "id": "346807655450279944" + }, + { + "label": "text", + "score": 0.5985618, + "box": { + "X1": 0.207483, + "X2": 0.2910998, + "Y1": 0.37890467, + "Y2": 0.47789046 + }, + "text": null, + "groupId": "4", + "id": "346807655450279945" + }, + { + "label": "appendix", + "score": 0.5925568, + "box": { + "X1": 0.20719954, + "X2": 0.29081634, + "Y1": 0.18742393, + "Y2": 0.3760649 + }, + "text": null, + "groupId": "4", + "id": "346807655454474240" + }, + { + "label": "author", + "score": 0.45872068, + "box": { + "X1": 0.32851472, + "X2": 0.33815193, + "Y1": 0.4693712, + "Y2": 0.4791075 + }, + "text": null, + "groupId": "4", + "id": "346807655454474241" + }, + { + "label": "appendix", + "score": 0.33514544, + "box": { + "X1": 0.20975056, + "X2": 0.28826532, + "Y1": 0.18336713, + "Y2": 0.19837728 + }, + "text": null, + "groupId": "4", + "id": "346807655454474242" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.78988814, + "Y1": 0.07101793, + "Y2": 0.13865404 + }, + "text": "[{\"label\":\"title\",\"text\":\"Zkuste štěstí u dikdiků\"}]", + "groupId": "0", + "id": "346807661909508096" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7064104, + "X2": 0.79067564, + "Y1": 0.11610867, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807661909508097" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.77571267, + "X2": 0.78988814, + "Y1": 0.46894377, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "0", + "id": "346807661909508098" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.9481808, + "Y1": 0.48134372, + "Y2": 0.56250703 + }, + "text": "[{\"label\":\"title\",\"text\":\"Ross chtěl Rachel i mimo plac\"}]", + "groupId": "1", + "id": "346807662970667008" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.60875726, + "Y1": 0.54108894, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807662970667009" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70168525, + "Y1": 0.77556086, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807662974861312" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.7946133, + "Y1": 0.77556086, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807662974861313" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7977634, + "X2": 0.8867538, + "Y1": 0.7687972, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807662974861314" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.89147896, + "X2": 0.9796818, + "Y1": 0.5433435, + "Y2": 0.9266148 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807662974861315" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.61584496, + "X2": 0.7568121, + "Y1": 0.6718521, + "Y2": 0.7868335 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Přátelé po mnoha letech\"}]", + "groupId": "1", + "id": "346807662974861316" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.6166325, + "X2": 0.75208694, + "Y1": 0.76767, + "Y2": 0.7902153 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Přátelé po mnoha letech\"}]", + "groupId": "1", + "id": "346807662974861317" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.7512994, + "X2": 0.78988814, + "Y1": 0.6684703, + "Y2": 0.7857063 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"HBO GO\"}]", + "groupId": "1", + "id": "346807662974861318" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.7512994, + "X2": 0.78988814, + "Y1": 0.7687972, + "Y2": 0.7902153 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"HBO GO\"}]", + "groupId": "1", + "id": "346807662979055616" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.79697585, + "X2": 0.8867538, + "Y1": 0.55574346, + "Y2": 0.7868335 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Legendární šestice Přátelé (v anglickém originále Friends) je americký televizní sitcom o skupině přátel žijící v newyorské čtvrti Greenwich Village. První epizodu odvysílali na ● stanici NBC 22. září 1994, poslední 6. května 2004. Seriál byl vysílán byl ve více ● než sto zemích. Poslední epizodu seriálu sledovalo v USA 51,1 milionu lidí. Úvodní píseň „I’ll Be There ● for You“ je od skupiny The Rembrandts.\"}]", + "groupId": "1", + "id": "346807662979055617" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.9119546, + "X2": 0.95920616, + "Y1": 0.9175967, + "Y2": 0.9491602 + }, + "text": "[{\"label\":\"author\",\"text\":\"FILIP JAROŠEVSKÝ\"}]", + "groupId": "1", + "id": "346807662979055618" + }, + { + "label": "about_author", + "score": 0.99, + "box": { + "X1": 0.91352963, + "X2": 0.9655063, + "Y1": 0.9423966, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"about_author\",\"text\":\"filip.jarosevsky@metro.cz\"}]", + "groupId": "1", + "id": "346807662979055619" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.39848793, + "X2": 0.4229012, + "Y1": 0.06650885, + "Y2": 0.09807237 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "2", + "id": "346807663297822720" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39533782, + "X2": 0.47487792, + "Y1": 0.08905423, + "Y2": 0.47345284 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807663297822721" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.41423845, + "X2": 0.4284139, + "Y1": 0.45541653, + "Y2": 0.47232556 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "2", + "id": "346807663297822722" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.029138446, + "X2": 0.2401953, + "Y1": 0.49261642, + "Y2": 0.54221624 + }, + "text": "[{\"label\":\"title\",\"text\":\"Pivovar Holba získal dvojnásobné zlato\"}]", + "groupId": "3", + "id": "346807663742418944" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.025988344, + "X2": 0.23940778, + "Y1": 0.5185436, + "Y2": 0.5692707 + }, + "text": "[{\"label\":\"title\",\"text\":\"v European Beer Challenge 2021\"}]", + "groupId": "3", + "id": "346807663742418945" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.025988344, + "X2": 0.23940778, + "Y1": 0.5309435, + "Y2": 0.5692707 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"v European Beer Challenge 2021\"}]", + "groupId": "3", + "id": "346807663746613248" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.024413293, + "X2": 0.13387935, + "Y1": 0.5534889, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807663746613249" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.13466688, + "X2": 0.24413292, + "Y1": 0.67748845, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807663746613250" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.3787998, + "Y1": 0.048472553, + "Y2": 0.18712659 + }, + "text": "[{\"label\":\"title\",\"text\":\"Zákon o vzdálenosti od cyklistů podpořil Senát\"}]", + "groupId": "4", + "id": "346807664472227840" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.1657085, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807664472227841" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.16796303, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807664472227842" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.20475665, + "X2": 0.29374704, + "Y1": 0.3629805, + "Y2": 0.48134372 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807664472227843" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.2984722, + "X2": 0.3874626, + "Y1": 0.16796303, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807664472227844" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.20711923, + "X2": 0.29059693, + "Y1": 0.18036298, + "Y2": 0.2017811 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Exekuce\"}]", + "groupId": "4", + "id": "346807664472227845" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.20475665, + "X2": 0.2929595, + "Y1": 0.18374479, + "Y2": 0.37988955 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Exekuce Zastavování dlouhodobých bezvýsledných exekucí by se mělo týkat podle Senátu i starších případů, nikoli jen nových. Novelu exekučního řádu ● horní komora vrátila i s dalšími změnami k opětovnému projednání poslancům. Sporné zavedení místní příslušnosti exekutorů podle krajů s principem, aby měl jeden dlužník jednoho exekutora, se mezi ně nedostalo.\"}]", + "groupId": "4", + "id": "346807664472227846" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.3260356, + "X2": 0.34021103, + "Y1": 0.46556196, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "4", + "id": "346807664472227847" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "7" + }] + }, + { + "id": "eb28a64e-db70-40d2-a3f6-8e4ba67e1e37", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.24885808, + "Y1": 0.48359826, + "Y2": 0.6752339 + }, + "text": "[{\"label\":\"title\",\"text\":\"Víkend plný akce: Metropole Zličín hostí největší parkourovou show roku\"}]", + "groupId": "0", + "id": "346807682998468608" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.2464955, + "Y1": 0.67072487, + "Y2": 0.7902153 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Sportovní výkony i umění, to je parkour. Užijte si víkend plný akce, v Metropoli Zličín na vás budou v sobotu 4. a neděli 5. září čekat české špičky tohoto streetového oboru, vstup je zdarma.\"}]", + "groupId": "0", + "id": "346807682998468609" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.24570797, + "Y1": 0.6583249, + "Y2": 0.7902153 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807683002662912" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.13387935, + "Y1": 0.78345174, + "Y2": 0.9491602 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807683002662913" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.1354544, + "X2": 0.24885808, + "Y1": 0.78345174, + "Y2": 0.9491602 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807683002662914" + } + ] + }, + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.94643056, + "box": { + "X1": 0.02239229, + "X2": 0.13123582, + "Y1": 0.79959434, + "Y2": 0.9460446 + }, + "text": null, + "groupId": "0", + "id": "346807667060113408" + }, + { + "label": "text", + "score": 0.92791384, + "box": { + "X1": 0.1377551, + "X2": 0.24659865, + "Y1": 0.79959434, + "Y2": 0.94563895 + }, + "text": null, + "groupId": "0", + "id": "346807667060113409" + }, + { + "label": "text", + "score": 0.75476676, + "box": { + "X1": 0.02239229, + "X2": 0.24348073, + "Y1": 0.674645, + "Y2": 0.78701824 + }, + "text": null, + "groupId": "0", + "id": "346807667064307712" + }, + { + "label": "title", + "score": 0.74142283, + "box": { + "X1": 0.02239229, + "X2": 0.24688208, + "Y1": 0.4989858, + "Y2": 0.6713996 + }, + "text": null, + "groupId": "0", + "id": "346807667064307713" + }, + { + "label": "subtitle", + "score": 0.26484483, + "box": { + "X1": 0.022108844, + "X2": 0.24433106, + "Y1": 0.67423934, + "Y2": 0.7866126 + }, + "text": null, + "groupId": "0", + "id": "346807667064307714" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "8" + }] + }, + { + "id": "ee8a642d-6dfe-4a43-900d-0a2af5452856", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "text", + "score": 0.9644686, + "box": { + "X1": 0.8010204, + "X2": 0.88492066, + "Y1": 0.16348885, + "Y2": 0.4888438 + }, + "text": null, + "groupId": "0", + "id": "346807714506080256" + }, + { + "label": "title", + "score": 0.9553174, + "box": { + "X1": 0.80130386, + "X2": 0.9424603, + "Y1": 0.06855984, + "Y2": 0.16389452 + }, + "text": null, + "groupId": "0", + "id": "346807714506080257" + }, + { + "label": "image", + "score": 0.9395892, + "box": { + "X1": 0.89399093, + "X2": 0.9781746, + "Y1": 0.16389452, + "Y2": 0.29655173 + }, + "text": null, + "groupId": "0", + "id": "346807714506080258" + }, + { + "label": "text", + "score": 0.9240492, + "box": { + "X1": 0.8931406, + "X2": 0.9776077, + "Y1": 0.30912778, + "Y2": 0.48803246 + }, + "text": null, + "groupId": "0", + "id": "346807714506080259" + }, + { + "label": "author", + "score": 0.87558347, + "box": { + "X1": 0.9322562, + "X2": 0.9421769, + "Y1": 0.4791075, + "Y2": 0.4892495 + }, + "text": null, + "groupId": "0", + "id": "346807714506080260" + }, + { + "label": "subtitle", + "score": 0.40393695, + "box": { + "X1": 0.79903626, + "X2": 0.885771, + "Y1": 0.06693712, + "Y2": 0.118052736 + }, + "text": null, + "groupId": "0", + "id": "346807714506080261" + }, + { + "label": "photo_caption", + "score": 0.29176152, + "box": { + "X1": 0.89455783, + "X2": 0.96201813, + "Y1": 0.23083164, + "Y2": 0.30993915 + }, + "text": null, + "groupId": "0", + "id": "346807714506080262" + }, + { + "label": "photo_caption", + "score": 0.290976, + "box": { + "X1": 0.89370745, + "X2": 0.9606009, + "Y1": 0.29614604, + "Y2": 0.30993915 + }, + "text": null, + "groupId": "0", + "id": "346807714510274560" + }, + { + "label": "photo_author", + "score": 0.21602198, + "box": { + "X1": 0.96286845, + "X2": 0.9776077, + "Y1": 0.29655173, + "Y2": 0.31034482 + }, + "text": null, + "groupId": "0", + "id": "346807714510274561" + }, + { + "label": "image", + "score": 0.7223743, + "box": { + "X1": 0.11564626, + "X2": 0.38520408, + "Y1": 0.4259635, + "Y2": 0.9549696 + }, + "text": null, + "groupId": "1", + "id": "346807714510274562" + }, + { + "label": "title", + "score": 0.7335226, + "box": { + "X1": 0.021825397, + "X2": 0.44075963, + "Y1": 0.30831644, + "Y2": 0.6831643 + }, + "text": null, + "groupId": "1", + "id": "346807714510274563" + }, + { + "label": "image", + "score": 0.71095574, + "box": { + "X1": 0.02154195, + "X2": 0.41581634, + "Y1": 0.6876268, + "Y2": 0.956998 + }, + "text": null, + "groupId": "1", + "id": "346807714510274564" + }, + { + "label": "author", + "score": 0.82228553, + "box": { + "X1": 0.4163832, + "X2": 0.43849206, + "Y1": 0.92413795, + "Y2": 0.9472617 + }, + "text": null, + "groupId": "1", + "id": "346807714510274565" + }, + { + "label": "text", + "score": 0.6314264, + "box": { + "X1": 0.115079366, + "X2": 0.19926304, + "Y1": 0.73103446, + "Y2": 0.9557809 + }, + "text": null, + "groupId": "1", + "id": "346807714510274566" + }, + { + "label": "interview", + "score": 0.58613396, + "box": { + "X1": 0.207483, + "X2": 0.47732428, + "Y1": 0.42839757, + "Y2": 0.95537525 + }, + "text": null, + "groupId": "1", + "id": "346807714514468864" + }, + { + "label": "text", + "score": 0.47725698, + "box": { + "X1": 0.3010204, + "X2": 0.38492063, + "Y1": 0.42474645, + "Y2": 0.956998 + }, + "text": null, + "groupId": "1", + "id": "346807714514468865" + }, + { + "label": "text", + "score": 0.4517802, + "box": { + "X1": 0.39342403, + "X2": 0.47732428, + "Y1": 0.42718053, + "Y2": 0.9172414 + }, + "text": null, + "groupId": "1", + "id": "346807714514468866" + }, + { + "label": "interview", + "score": 0.43290746, + "box": { + "X1": 0.2080499, + "X2": 0.29223356, + "Y1": 0.73103446, + "Y2": 0.9557809 + }, + "text": null, + "groupId": "1", + "id": "346807714514468867" + }, + { + "label": "interview", + "score": 0.41722128, + "box": { + "X1": 0.114795916, + "X2": 0.19897959, + "Y1": 0.73184586, + "Y2": 0.9549696 + }, + "text": null, + "groupId": "1", + "id": "346807714514468868" + }, + { + "label": "photo_caption", + "score": 0.37923133, + "box": { + "X1": 0.11819728, + "X2": 0.24404761, + "Y1": 0.61298174, + "Y2": 0.7208925 + }, + "text": null, + "groupId": "1", + "id": "346807714514468869" + }, + { + "label": "photo_author", + "score": 0.31928614, + "box": { + "X1": 0.24518141, + "X2": 0.28741497, + "Y1": 0.6048682, + "Y2": 0.7217038 + }, + "text": null, + "groupId": "1", + "id": "346807714514468870" + }, + { + "label": "photo_caption", + "score": 0.26238614, + "box": { + "X1": 0.117913835, + "X2": 0.24319728, + "Y1": 0.7107505, + "Y2": 0.7261663 + }, + "text": null, + "groupId": "1", + "id": "346807714514468871" + }, + { + "label": "photo_author", + "score": 0.24625352, + "box": { + "X1": 0.24319728, + "X2": 0.28769842, + "Y1": 0.7107505, + "Y2": 0.72657204 + }, + "text": null, + "groupId": "1", + "id": "346807714514468872" + }, + { + "label": "text", + "score": 0.95522326, + "box": { + "X1": 0.5274943, + "X2": 0.6950113, + "Y1": 0.36186612, + "Y2": 0.48235294 + }, + "text": null, + "groupId": "2", + "id": "346807714518663168" + }, + { + "label": "image", + "score": 0.9424874, + "box": { + "X1": 0.5272109, + "X2": 0.6933107, + "Y1": 0.093711965, + "Y2": 0.3383367 + }, + "text": null, + "groupId": "2", + "id": "346807714518663169" + }, + { + "label": "title", + "score": 0.9246649, + "box": { + "X1": 0.5269274, + "X2": 0.68424034, + "Y1": 0.33549696, + "Y2": 0.36389452 + }, + "text": null, + "groupId": "2", + "id": "346807714518663170" + }, + { + "label": "author", + "score": 0.7932058, + "box": { + "X1": 0.68594104, + "X2": 0.6947279, + "Y1": 0.47261664, + "Y2": 0.4827586 + }, + "text": null, + "groupId": "2", + "id": "346807714518663171" + }, + { + "label": "photo_caption", + "score": 0.37732133, + "box": { + "X1": 0.66156465, + "X2": 0.6921769, + "Y1": 0.3286004, + "Y2": 0.33711967 + }, + "text": null, + "groupId": "2", + "id": "346807714518663172" + }, + { + "label": "photo_author", + "score": 0.32939684, + "box": { + "X1": 0.66128117, + "X2": 0.6921769, + "Y1": 0.3286004, + "Y2": 0.33711967 + }, + "text": null, + "groupId": "2", + "id": "346807714518663173" + }, + { + "label": "subtitle", + "score": 0.27945745, + "box": { + "X1": 0.66156465, + "X2": 0.6918934, + "Y1": 0.32900608, + "Y2": 0.33711967 + }, + "text": null, + "groupId": "2", + "id": "346807714518663174" + }, + { + "label": "text", + "score": 0.9318502, + "box": { + "X1": 0.71145123, + "X2": 0.7893991, + "Y1": 0.10466532, + "Y2": 0.47991887 + }, + "text": null, + "groupId": "3", + "id": "346807714518663175" + }, + { + "label": "author", + "score": 0.73489165, + "box": { + "X1": 0.7253401, + "X2": 0.7349773, + "Y1": 0.4693712, + "Y2": 0.4791075 + }, + "text": null, + "groupId": "3", + "id": "346807714518663176" + }, + { + "label": "title", + "score": 0.7215215, + "box": { + "X1": 0.71513605, + "X2": 0.7344104, + "Y1": 0.08235294, + "Y2": 0.09492901 + }, + "text": null, + "groupId": "3", + "id": "346807714522857472" + }, + { + "label": "text", + "score": 0.96529114, + "box": { + "X1": 0.61507934, + "X2": 0.6989796, + "Y1": 0.82231236, + "Y2": 0.95537525 + }, + "text": null, + "groupId": "4", + "id": "346807714522857473" + }, + { + "label": "text", + "score": 0.96310544, + "box": { + "X1": 0.7080499, + "X2": 0.7922336, + "Y1": 0.822718, + "Y2": 0.95537525 + }, + "text": null, + "groupId": "4", + "id": "346807714522857474" + }, + { + "label": "image", + "score": 0.96059424, + "box": { + "X1": 0.61507934, + "X2": 0.792517, + "Y1": 0.63002026, + "Y2": 0.8044625 + }, + "text": null, + "groupId": "4", + "id": "346807714522857475" + }, + { + "label": "text", + "score": 0.96017426, + "box": { + "X1": 0.52210885, + "X2": 0.60629255, + "Y1": 0.62677485, + "Y2": 0.95537525 + }, + "text": null, + "groupId": "4", + "id": "346807714522857476" + }, + { + "label": "title", + "score": 0.9495571, + "box": { + "X1": 0.5229592, + "X2": 0.9180839, + "Y1": 0.48843813, + "Y2": 0.62880325 + }, + "text": null, + "groupId": "4", + "id": "346807714522857477" + }, + { + "label": "appendix", + "score": 0.9202925, + "box": { + "X1": 0.80073696, + "X2": 0.88548756, + "Y1": 0.64908725, + "Y2": 0.80689657 + }, + "text": null, + "groupId": "4", + "id": "346807714522857478" + }, + { + "label": "text", + "score": 0.91476005, + "box": { + "X1": 0.80045354, + "X2": 0.8846372, + "Y1": 0.81703854, + "Y2": 0.9549696 + }, + "text": null, + "groupId": "4", + "id": "346807714522857479" + }, + { + "label": "text", + "score": 0.905016, + "box": { + "X1": 0.89285713, + "X2": 0.9776077, + "Y1": 0.81460446, + "Y2": 0.9549696 + }, + "text": null, + "groupId": "4", + "id": "346807714522857480" + }, + { + "label": "appendix", + "score": 0.9027912, + "box": { + "X1": 0.89285713, + "X2": 0.9776077, + "Y1": 0.64908725, + "Y2": 0.8117647 + }, + "text": null, + "groupId": "4", + "id": "346807714527051776" + }, + { + "label": "author", + "score": 0.8855748, + "box": { + "X1": 0.9143991, + "X2": 0.94756234, + "Y1": 0.94563895, + "Y2": 0.9557809 + }, + "text": null, + "groupId": "4", + "id": "346807714527051777" + }, + { + "label": "appendix", + "score": 0.7723749, + "box": { + "X1": 0.8069728, + "X2": 0.91071427, + "Y1": 0.63002026, + "Y2": 0.64178497 + }, + "text": null, + "groupId": "4", + "id": "346807714527051778" + }, + { + "label": "photo_caption", + "score": 0.57681656, + "box": { + "X1": 0.61791384, + "X2": 0.74234694, + "Y1": 0.7184584, + "Y2": 0.8121704 + }, + "text": null, + "groupId": "4", + "id": "346807714527051779" + }, + { + "label": "photo_author", + "score": 0.5332762, + "box": { + "X1": 0.74404764, + "X2": 0.78741497, + "Y1": 0.71643, + "Y2": 0.8117647 + }, + "text": null, + "groupId": "4", + "id": "346807714527051780" + }, + { + "label": "photo_caption", + "score": 0.28987965, + "box": { + "X1": 0.61848074, + "X2": 0.74291384, + "Y1": 0.8020284, + "Y2": 0.81703854 + }, + "text": null, + "groupId": "4", + "id": "346807714527051781" + }, + { + "label": "photo_author", + "score": 0.23453161, + "box": { + "X1": 0.74348074, + "X2": 0.78741497, + "Y1": 0.8020284, + "Y2": 0.81703854 + }, + "text": null, + "groupId": "4", + "id": "346807714527051782" + }, + { + "label": "text", + "score": 0.91199076, + "box": { + "X1": 0.39427438, + "X2": 0.473356, + "Y1": 0.1010142, + "Y2": 0.29655173 + }, + "text": null, + "groupId": "5", + "id": "346807714527051783" + }, + { + "label": "text", + "score": 0.86981416, + "box": { + "X1": 0.3047052, + "X2": 0.38577098, + "Y1": 0.0989858, + "Y2": 0.29574037 + }, + "text": null, + "groupId": "5", + "id": "346807714527051784" + }, + { + "label": "author", + "score": 0.8298321, + "box": { + "X1": 0.46031746, + "X2": 0.46995464, + "Y1": 0.2868154, + "Y2": 0.2969574 + }, + "text": null, + "groupId": "5", + "id": "346807714531246080" + }, + { + "label": "title", + "score": 0.7562458, + "box": { + "X1": 0.30810657, + "X2": 0.32794785, + "Y1": 0.08235294, + "Y2": 0.09492901 + }, + "text": null, + "groupId": "5", + "id": "346807714531246081" + }, + { + "label": "title", + "score": 0.85045666, + "box": { + "X1": 0.026927438, + "X2": 0.0952381, + "Y1": 0.08640973, + "Y2": 0.1346856 + }, + "text": null, + "groupId": "6", + "id": "346807714531246082" + }, + { + "label": "text", + "score": 0.8430349, + "box": { + "X1": 0.026643991, + "X2": 0.10515873, + "Y1": 0.13225152, + "Y2": 0.30101418 + }, + "text": null, + "groupId": "6", + "id": "346807714531246083" + }, + { + "label": "image", + "score": 0.84141105, + "box": { + "X1": 0.11564626, + "X2": 0.28798187, + "Y1": 0.093711965, + "Y2": 0.30020285 + }, + "text": null, + "groupId": "6", + "id": "346807714531246084" + }, + { + "label": "author", + "score": 0.6087661, + "box": { + "X1": 0.09750567, + "X2": 0.10685941, + "Y1": 0.29006085, + "Y2": 0.30020285 + }, + "text": null, + "groupId": "6", + "id": "346807714531246085" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.79697585, + "X2": 0.88832885, + "Y1": 0.06312705, + "Y2": 0.12174501 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Papež.\"}]", + "groupId": "0", + "id": "346807720034172928" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.9450307, + "Y1": 0.052981626, + "Y2": 0.16683576 + }, + "text": "[{\"label\":\"title\",\"text\":\"Papež. Med i ventilátor\"}]", + "groupId": "0", + "id": "346807720034172929" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8875413, + "Y1": 0.14767219, + "Y2": 0.49261642 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807720038367232" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.9796818, + "Y1": 0.29308984, + "Y2": 0.49148914 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807720038367233" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.89226645, + "X2": 0.9647188, + "Y1": 0.22770827, + "Y2": 0.3133807 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Papež a prezidentka\"}]", + "groupId": "0", + "id": "346807720038367234" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.89147896, + "X2": 0.96314377, + "Y1": 0.29308984, + "Y2": 0.3133807 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Papež a prezidentka\"}]", + "groupId": "0", + "id": "346807720038367235" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.9300677, + "X2": 0.94424313, + "Y1": 0.47570738, + "Y2": 0.49261642 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "0", + "id": "346807720038367236" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.9607812, + "X2": 0.9796818, + "Y1": 0.29308984, + "Y2": 0.3133807 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"AP\"}]", + "groupId": "0", + "id": "346807720038367237" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.4433769, + "Y1": 0.29308984, + "Y2": 0.6865066 + }, + "text": "[{\"label\":\"title\",\"text\":\"Zájem o solární elektrárny roste. Pořídit si ji je snadné Zájem stále roste. V Česku mostí je také záruka na jed- změny podmíne bylo v roce 2019 na střechách notlivé části elektrárny. So- každý měsíc. Mo rodinných domů vybudová- lární panely jsou konstrukč- na našich web no celkem 2905 nových solár- ně poměrně jednoduchá zaří- kách. ních instalací. O rok později zení, přesto se dá hodně věcí bylo instalováno celkem pokazit. Důležité je nejen to, Kdo má na star 6293 nových solárních elek- na co se má dodavatel zeptat a následnou lik tráren. Počet instalovaných vás, ale i jeho ochota odpoví- lárních panelů? fotovoltaických elektráren se dat na vaše dotazy a připo- Spolehlivá sp za loňský rok tedy téměř mínky. Ta je také znakem vám měla vysvě zdvojnásobil. Za prvních šest vhodné firmy. nout plán údržby měsíců letošního roku vznik- solární elektrárn lo po celé republice přes Pomůže mi firma s legisla- povinnost prová 3800 nových fotovoltaických tivním procesem, nebo si ně revize elektric elektráren. „Malou překáž- vše musím vyřídit sám? ní. Po uplynutí kou mohou být vikýře, které Vhodná instalační firma by pro převážnou v zabírají místo, a vysoké komí- vám měla v případě vašeho lací čtyři roky, m ny, které vrhají stín na pane- zájmu vše zajistit, včetně vyří- tel FVE povinno ly a snižují tak množství vyro- zení dotace. Chcete-li se o to covat periodic bené energie,“ říká v rozhovo- raději postarat sami, je při žá- o revizi elektric ru pro deník Metro o instala- dání o dotaci na pořízení FVE ní. Kromě zcela p ci solárních panelů na stře- určitě dobré myslet na něko- ky bezpečnosti j chy domů Jan Krčmář, předse- lik podmínek. Rodinný dům telná i stránka e da představenstva Solární nesmí být v exekuci, mini- Bez revize je n asociace. mální účinnost solárních pa- možné se domá\"}]", + "groupId": "1", + "id": "346807721258909696" + }, + { + "label": "interview", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.7282156, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"interview\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807721258909697" + }, + { + "label": "interview", + "score": 0.99, + "box": { + "X1": 0.20475665, + "X2": 0.47960308, + "Y1": 0.42498028, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"interview\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807721258909698" + }, + { + "label": "interview", + "score": 0.99, + "box": { + "X1": 0.20554417, + "X2": 0.29453456, + "Y1": 0.7282156, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"interview\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807721263104000" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.11576626, + "X2": 0.2464955, + "Y1": 0.6098524, + "Y2": 0.7248337 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Jan Krčmář, předseda představenstva\"}]", + "groupId": "1", + "id": "346807721263104001" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.11576626, + "X2": 0.24570797, + "Y1": 0.7079247, + "Y2": 0.7293428 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Jan Krčmář, předseda představenstva\"}]", + "groupId": "1", + "id": "346807721263104002" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.7158156, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807721263104003" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.2984722, + "X2": 0.3874626, + "Y1": 0.40919852, + "Y2": 0.9604329 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807721263104004" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.47960308, + "Y1": 0.41145307, + "Y2": 0.9209785 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807721263104005" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.24098282, + "X2": 0.2898094, + "Y1": 0.7079247, + "Y2": 0.7304701 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"SOLÁRNÍ ASOCIACE\"}]", + "groupId": "1", + "id": "346807721263104006" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.24255787, + "X2": 0.2898094, + "Y1": 0.6019615, + "Y2": 0.7248337 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"SOLÁRNÍ ASOCIACE\"}]", + "groupId": "1", + "id": "346807721263104007" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.41423845, + "X2": 0.44101432, + "Y1": 0.9209785, + "Y2": 0.95028746 + }, + "text": "[{\"label\":\"author\",\"text\":\"MAREK HÝŘ\"}]", + "groupId": "1", + "id": "346807721263104008" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.524492, + "X2": 0.6867223, + "Y1": 0.3201443, + "Y2": 0.36748958 + }, + "text": "[{\"label\":\"title\",\"text\":\"LAURA WEISSO Cesta z covidové temnoty\"}]", + "groupId": "2", + "id": "346807721783197696" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5252795, + "X2": 0.69774765, + "Y1": 0.34607148, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "2", + "id": "346807721783197697" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.6591589, + "X2": 0.69459754, + "Y1": 0.32578063, + "Y2": 0.34043515 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"LAURA WEISSOVÁ\"}]", + "groupId": "2", + "id": "346807721783197698" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.6591589, + "X2": 0.69459754, + "Y1": 0.32578063, + "Y2": 0.34043515 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"LAURA WEISSOVÁ\"}]", + "groupId": "2", + "id": "346807721783197699" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.6591589, + "X2": 0.69459754, + "Y1": 0.32578063, + "Y2": 0.34043515 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"LAURA WEISSOVÁ\"}]", + "groupId": "2", + "id": "346807721783197700" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.6835722, + "X2": 0.69696015, + "Y1": 0.46894377, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "2", + "id": "346807721783197701" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.708773, + "X2": 0.7914632, + "Y1": 0.08905423, + "Y2": 0.48359826 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "3", + "id": "346807722055827456" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.7127106, + "X2": 0.7371239, + "Y1": 0.06650885, + "Y2": 0.09807237 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "3", + "id": "346807722055827457" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.7229485, + "X2": 0.7371239, + "Y1": 0.46556196, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "3", + "id": "346807722055827458" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.5205544, + "X2": 0.9206174, + "Y1": 0.47232556, + "Y2": 0.6323977 + }, + "text": "[{\"label\":\"title\",\"text\":\"ČTK od roku 2003, vyvrcholí zítra rezervov Videohry už „suplují“ seriózní zpravodajství\"}]", + "groupId": "4", + "id": "346807723247009792" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.60875726, + "Y1": 0.6109796, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807723247009793" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70168525, + "Y1": 0.8059971, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807723247009794" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.7946133, + "Y1": 0.8071244, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807723251204096" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7977634, + "X2": 0.8867538, + "Y1": 0.80148804, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807723251204097" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.9796818, + "Y1": 0.7992335, + "Y2": 0.95817834 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "4", + "id": "346807723251204098" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.61584496, + "X2": 0.7449992, + "Y1": 0.7146883, + "Y2": 0.81501526 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Česká hra Arma 3 vychází již od roku 2013.\"}]", + "groupId": "4", + "id": "346807723251204099" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.61584496, + "X2": 0.7449992, + "Y1": 0.7981062, + "Y2": 0.8206516 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Česká hra Arma 3 vychází již od roku 2013.\"}]", + "groupId": "4", + "id": "346807723251204100" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.74184906, + "X2": 0.78988814, + "Y1": 0.71356106, + "Y2": 0.81501526 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"BOHEMIA INTERACTIVE\"}]", + "groupId": "4", + "id": "346807723251204101" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.74106157, + "X2": 0.78988814, + "Y1": 0.7981062, + "Y2": 0.8206516 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"BOHEMIA INTERACTIVE\"}]", + "groupId": "4", + "id": "346807723251204102" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8875413, + "Y1": 0.6459249, + "Y2": 0.81050617 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Česko je v kvalitě digitálního prostředí na 28. místě na světě, proti loňsku si polepšilo o čtyři příčky. Studie zkoumala pět oblastí ● digitálního prostředí – dostupnost internetového připojení, jeho kvalitu, digitální infrastrukturu, digitální bezpečnost a eGovernment, tedy správu věcí veřejných pomocí moderních technologií. Česko se ve výsledném žebříč●\"}]", + "groupId": "4", + "id": "346807723251204103" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.8048511, + "X2": 0.91274214, + "Y1": 0.6267614, + "Y2": 0.6447977 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"Nejlepší jsou skandinávci a Korejci\"}]", + "groupId": "4", + "id": "346807723251204104" + }, + { + "label": "appendix", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.9796818, + "Y1": 0.6459249, + "Y2": 0.81501526 + }, + "text": "[{\"label\":\"appendix\",\"text\":\"ku umístilo jako druhá nejlepší země ve střední a východní Evropě – lepší než ČR bylo Polsko, které skončilo na 25. příčce a ve srovnání s loňským rokem si polepšilo o 18 míst. Na prvních třech místech se ● umístily Dánsko, Jižní Korea a Finsko. Česko nejvíc zabodovalo ● v hodnocení digitální bezpečnosti, kde skončilo druhé za Řeckem.\"}]", + "groupId": "4", + "id": "346807723251204105" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.9119546, + "X2": 0.94975585, + "Y1": 0.9423966, + "Y2": 0.95930564 + }, + "text": "[{\"label\":\"author\",\"text\":\"HAL a iDNES.cz\"}]", + "groupId": "4", + "id": "346807723251204106" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.30240983, + "X2": 0.3882501, + "Y1": 0.08341788, + "Y2": 0.2987262 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807723607719936" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.39218774, + "X2": 0.47566545, + "Y1": 0.085672416, + "Y2": 0.29985347 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "5", + "id": "346807723607719937" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.30555993, + "X2": 0.32997322, + "Y1": 0.06650885, + "Y2": 0.09807237 + }, + "text": "[{\"label\":\"title\",\"text\":\"Krátce\"}]", + "groupId": "5", + "id": "346807723607719938" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.45833987, + "X2": 0.47251534, + "Y1": 0.28294444, + "Y2": 0.29985347 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "5", + "id": "346807723607719939" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.024413293, + "X2": 0.09765317, + "Y1": 0.07101793, + "Y2": 0.13752678 + }, + "text": "[{\"label\":\"title\",\"text\":\"Buďte ohleduplní\"}]", + "groupId": "6", + "id": "346807723867766784" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.024413293, + "X2": 0.107891, + "Y1": 0.11610867, + "Y2": 0.30436254 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "6", + "id": "346807723867766785" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.095290594, + "X2": 0.10946605, + "Y1": 0.28632623, + "Y2": 0.30323526 + }, + "text": "[{\"label\":\"author\",\"text\":\"ČTK\"}]", + "groupId": "6", + "id": "346807723867766786" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "9" + }] + }, + { + "id": "f87db9ab-b4d7-47ad-a8c8-400d5476e3c7", + "fullsize": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "thumbnail": { + "key": "https://www.gannett-cdn.com/presto/2022/01/12/NJDN/8088720b-446d-4693-be62-4dfdf1c3046f-DailyNewsSaturday.jpg?width=660&height=1253&fit=crop&format=pjpg&auto=webp", + }, + "modelResults": { + "v1": [ + { + "modelFamily": "segmentation-engine", + "name": "segmentation-engine", + "results": [ + { + "label": "image", + "score": 0.9279786, + "box": { + "X1": 0.89342403, + "X2": 0.97789115, + "Y1": 0.2985801, + "Y2": 0.43042597 + }, + "text": null, + "groupId": "0", + "id": "346807691898781696" + }, + { + "label": "text", + "score": 0.8922923, + "box": { + "X1": 0.89370745, + "X2": 0.9776077, + "Y1": 0.17525356, + "Y2": 0.29249492 + }, + "text": null, + "groupId": "0", + "id": "346807691898781697" + }, + { + "label": "text", + "score": 0.8433991, + "box": { + "X1": 0.89342403, + "X2": 0.9776077, + "Y1": 0.43732253, + "Y2": 0.75334686 + }, + "text": null, + "groupId": "0", + "id": "346807691898781698" + }, + { + "label": "title", + "score": 0.76103795, + "box": { + "X1": 0.52154195, + "X2": 0.97732425, + "Y1": 0.059634887, + "Y2": 0.17768763 + }, + "text": null, + "groupId": "0", + "id": "346807691898781699" + }, + { + "label": "text", + "score": 0.62992674, + "box": { + "X1": 0.52267575, + "X2": 0.6068594, + "Y1": 0.46612576, + "Y2": 0.7070994 + }, + "text": null, + "groupId": "0", + "id": "346807691898781700" + }, + { + "label": "text", + "score": 0.58828664, + "box": { + "X1": 0.8010204, + "X2": 0.88435376, + "Y1": 0.17525356, + "Y2": 0.36551723 + }, + "text": null, + "groupId": "0", + "id": "346807691902976000" + }, + { + "label": "image", + "score": 0.58717805, + "box": { + "X1": 0.66354877, + "X2": 0.789966, + "Y1": 0.17606491, + "Y2": 0.37890467 + }, + "text": null, + "groupId": "0", + "id": "346807691902976001" + }, + { + "label": "image", + "score": 0.5607075, + "box": { + "X1": 0.8010204, + "X2": 0.9781746, + "Y1": 0.75537527, + "Y2": 0.9565923 + }, + "text": null, + "groupId": "0", + "id": "346807691902976002" + }, + { + "label": "image", + "score": 0.5072677, + "box": { + "X1": 0.52210885, + "X2": 0.60629255, + "Y1": 0.34766734, + "Y2": 0.45882353 + }, + "text": null, + "groupId": "0", + "id": "346807691902976003" + }, + { + "label": "text", + "score": 0.50654954, + "box": { + "X1": 0.5243764, + "X2": 0.6944444, + "Y1": 0.17525356, + "Y2": 0.27099392 + }, + "text": null, + "groupId": "0", + "id": "346807691902976004" + }, + { + "label": "text", + "score": 0.49772814, + "box": { + "X1": 0.7077664, + "X2": 0.7916667, + "Y1": 0.35902637, + "Y2": 0.6555781 + }, + "text": null, + "groupId": "0", + "id": "346807691902976005" + }, + { + "label": "image", + "score": 0.48828793, + "box": { + "X1": 0.61507934, + "X2": 0.69982994, + "Y1": 0.5574036, + "Y2": 0.6689655 + }, + "text": null, + "groupId": "0", + "id": "346807691902976006" + }, + { + "label": "text", + "score": 0.4388903, + "box": { + "X1": 0.6153628, + "X2": 0.69869614, + "Y1": 0.29736307, + "Y2": 0.5505071 + }, + "text": null, + "groupId": "0", + "id": "346807691902976007" + }, + { + "label": "image", + "score": 0.4298366, + "box": { + "X1": 0.79988664, + "X2": 0.88548756, + "Y1": 0.36511156, + "Y2": 0.62271804 + }, + "text": null, + "groupId": "0", + "id": "346807691902976008" + }, + { + "label": "text", + "score": 0.40935895, + "box": { + "X1": 0.80045354, + "X2": 0.88492066, + "Y1": 0.6255578, + "Y2": 0.7529412 + }, + "text": null, + "groupId": "0", + "id": "346807691907170304" + }, + { + "label": "image", + "score": 0.4044514, + "box": { + "X1": 0.5229592, + "X2": 0.69926304, + "Y1": 0.7111562, + "Y2": 0.8807302 + }, + "text": null, + "groupId": "0", + "id": "346807691907170305" + }, + { + "label": "image", + "score": 0.37821788, + "box": { + "X1": 0.7080499, + "X2": 0.7930839, + "Y1": 0.6612576, + "Y2": 0.7529412 + }, + "text": null, + "groupId": "0", + "id": "346807691907170306" + }, + { + "label": "subtitle", + "score": 0.3243145, + "box": { + "X1": 0.5223923, + "X2": 0.69812924, + "Y1": 0.17484787, + "Y2": 0.2713996 + }, + "text": null, + "groupId": "0", + "id": "346807691907170307" + }, + { + "label": "author", + "score": 0.20053318, + "box": { + "X1": 0.75623584, + "X2": 0.7922336, + "Y1": 0.93793106, + "Y2": 0.94929004 + }, + "text": null, + "groupId": "0", + "id": "346807691907170308" + }, + { + "label": "title", + "score": 0.94557744, + "box": { + "X1": 0.021825397, + "X2": 0.47959185, + "Y1": 0.064503044, + "Y2": 0.1841785 + }, + "text": null, + "groupId": "1", + "id": "346807691907170309" + }, + { + "label": "text", + "score": 0.9299429, + "box": { + "X1": 0.115079366, + "X2": 0.19897959, + "Y1": 0.18377282, + "Y2": 0.4791075 + }, + "text": null, + "groupId": "1", + "id": "346807691907170310" + }, + { + "label": "text", + "score": 0.9272119, + "box": { + "X1": 0.022108844, + "X2": 0.106292516, + "Y1": 0.18133874, + "Y2": 0.47870183 + }, + "text": null, + "groupId": "1", + "id": "346807691907170311" + }, + { + "label": "image", + "score": 0.9253601, + "box": { + "X1": 0.39370748, + "X2": 0.47789115, + "Y1": 0.18458419, + "Y2": 0.336714 + }, + "text": null, + "groupId": "1", + "id": "346807691907170312" + }, + { + "label": "text", + "score": 0.92165273, + "box": { + "X1": 0.2080499, + "X2": 0.29223356, + "Y1": 0.18336713, + "Y2": 0.4795132 + }, + "text": null, + "groupId": "1", + "id": "346807691907170313" + }, + { + "label": "image", + "score": 0.88449395, + "box": { + "X1": 0.39342403, + "X2": 0.47732428, + "Y1": 0.3464503, + "Y2": 0.46855983 + }, + "text": null, + "groupId": "1", + "id": "346807691911364608" + }, + { + "label": "text", + "score": 0.8814627, + "box": { + "X1": 0.3010204, + "X2": 0.38520408, + "Y1": 0.18296146, + "Y2": 0.44016227 + }, + "text": null, + "groupId": "1", + "id": "346807691911364609" + }, + { + "label": "image", + "score": 0.8645206, + "box": { + "X1": 0.3010204, + "X2": 0.32256237, + "Y1": 0.44827586, + "Y2": 0.47870183 + }, + "text": null, + "groupId": "1", + "id": "346807691911364610" + }, + { + "label": "about_author", + "score": 0.68778026, + "box": { + "X1": 0.3234127, + "X2": 0.3701814, + "Y1": 0.46896553, + "Y2": 0.47829616 + }, + "text": null, + "groupId": "1", + "id": "346807691911364611" + }, + { + "label": "author", + "score": 0.5857708, + "box": { + "X1": 0.32199547, + "X2": 0.36337867, + "Y1": 0.44421905, + "Y2": 0.46977687 + }, + "text": null, + "groupId": "1", + "id": "346807691911364612" + }, + { + "label": "photo_caption", + "score": 0.2394161, + "box": { + "X1": 0.39370748, + "X2": 0.44756237, + "Y1": 0.4060852, + "Y2": 0.47870183 + }, + "text": null, + "groupId": "1", + "id": "346807691911364613" + }, + { + "label": "photo_caption", + "score": 0.23665377, + "box": { + "X1": 0.39399093, + "X2": 0.44104308, + "Y1": 0.4673428, + "Y2": 0.48235294 + }, + "text": null, + "groupId": "1", + "id": "346807691911364614" + }, + { + "label": "photo_author", + "score": 0.21158966, + "box": { + "X1": 0.4484127, + "X2": 0.47420636, + "Y1": 0.4677485, + "Y2": 0.4827586 + }, + "text": null, + "groupId": "1", + "id": "346807691911364615" + }, + { + "label": "photo_author", + "score": 0.20804049, + "box": { + "X1": 0.4484127, + "X2": 0.47363946, + "Y1": 0.40567952, + "Y2": 0.47870183 + }, + "text": null, + "groupId": "1", + "id": "346807691911364616" + } + ] + }, + { + "modelFamily": "extraction-engine", + "name": "extraction-engine", + "results": [ + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.5189794, + "X2": 0.9796818, + "Y1": 0.043963477, + "Y2": 0.18149026 + }, + "text": "[{\"label\":\"text\",\"text\":\"komerční příloha čtvrtek 29. dubna 2021 Robotické sekačky na trávu - nový pohled na sekání trávy\"}]", + "groupId": "0", + "id": "346807698131517440" + }, + { + "label": "subtitle", + "score": 0.99, + "box": { + "X1": 0.51976687, + "X2": 0.7001102, + "Y1": 0.17134483, + "Y2": 0.27505356 + }, + "text": "[{\"label\":\"subtitle\",\"text\":\"Udržet trávník v perfektním stavu, znamená věnovat mu ohromné množství času a cítit se neustále odpovědný za jeho stav. Znamená to nepopulární, mnohdy obtížnou, časově náročnou práci a také starost o likvidaci zahradního odpadu. Dobrou zprávou je, že robotická sekačka na trávu všechny tyto věci obstará za Vás.\"}]", + "groupId": "0", + "id": "346807698131517441" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5221295, + "X2": 0.69696015, + "Y1": 0.15894488, + "Y2": 0.2739263 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698131517442" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.5205544, + "X2": 0.6095448, + "Y1": 0.45090747, + "Y2": 0.71017927 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698131517443" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.61269486, + "X2": 0.70089775, + "Y1": 0.28181717, + "Y2": 0.5534889 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698131517444" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7056229, + "X2": 0.79382575, + "Y1": 0.34268966, + "Y2": 0.65945214 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698131517445" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7985509, + "X2": 0.8867538, + "Y1": 0.15894488, + "Y2": 0.36861685 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698131517446" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.7977634, + "X2": 0.8875413, + "Y1": 0.6098524, + "Y2": 0.75639725 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698131517447" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.89147896, + "X2": 0.9796818, + "Y1": 0.15894488, + "Y2": 0.29534438 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698135711744" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.8906914, + "X2": 0.9796818, + "Y1": 0.42159846, + "Y2": 0.75639725 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "0", + "id": "346807698135711745" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.753662, + "X2": 0.7946133, + "Y1": 0.9345057, + "Y2": 0.952542 + }, + "text": "[{\"label\":\"author\",\"text\":\"pracovního\"}]", + "groupId": "0", + "id": "346807698135711746" + }, + { + "label": "title", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.48196563, + "Y1": 0.048472553, + "Y2": 0.18712659 + }, + "text": "[{\"label\":\"title\",\"text\":\"O nedělích se tu nepracovalo. „Podle Boha se má odpočívat“\"}]", + "groupId": "1", + "id": "346807698886492160" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.019688139, + "X2": 0.10867853, + "Y1": 0.1657085, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807698886492161" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.11261616, + "X2": 0.20160654, + "Y1": 0.16796303, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807698886492162" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.20554417, + "X2": 0.29453456, + "Y1": 0.16796303, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807698886492163" + }, + { + "label": "text", + "score": 0.99, + "box": { + "X1": 0.2984722, + "X2": 0.3874626, + "Y1": 0.16683576, + "Y2": 0.4430166 + }, + "text": "[{\"label\":\"text\",\"text\":\"\"}]", + "groupId": "1", + "id": "346807698886492164" + }, + { + "label": "author", + "score": 0.99, + "box": { + "X1": 0.31973538, + "X2": 0.36541185, + "Y1": 0.44076204, + "Y2": 0.47345284 + }, + "text": "[{\"label\":\"author\",\"text\":\"FILIP JAROŠEVSKÝ\"}]", + "groupId": "1", + "id": "346807698890686464" + }, + { + "label": "about_author", + "score": 0.99, + "box": { + "X1": 0.32131043, + "X2": 0.3724996, + "Y1": 0.46556196, + "Y2": 0.48134372 + }, + "text": "[{\"label\":\"about_author\",\"text\":\"filip.jarosevsky@metro.cz\"}]", + "groupId": "1", + "id": "346807698890686465" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.4496771, + "Y1": 0.40243492, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Nový kostel\"}]", + "groupId": "1", + "id": "346807698890686466" + }, + { + "label": "photo_caption", + "score": 0.99, + "box": { + "X1": 0.39140022, + "X2": 0.4433769, + "Y1": 0.46443468, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"photo_caption\",\"text\":\"Nový kostel\"}]", + "groupId": "1", + "id": "346807698890686467" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.44573948, + "X2": 0.47566545, + "Y1": 0.40243492, + "Y2": 0.482471 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"2x METRO\"}]", + "groupId": "1", + "id": "346807698890686468" + }, + { + "label": "photo_author", + "score": 0.99, + "box": { + "X1": 0.44573948, + "X2": 0.47645298, + "Y1": 0.46443468, + "Y2": 0.48585278 + }, + "text": "[{\"label\":\"photo_author\",\"text\":\"2x METRO\"}]", + "groupId": "1", + "id": "346807698890686469" + } + ] + } + ] + }, + "metadata": [{ + "key": "page", + "value": "10" + }] + } +] + + +export default examplePhotos diff --git a/src/Annotator/index.js b/src/Annotator/index.js index e4795c94..bef19ba6 100644 --- a/src/Annotator/index.js +++ b/src/Annotator/index.js @@ -6,10 +6,12 @@ import type { MainLayoutState, Mode, ToolEnum, + Metadata, + MetadataConfig } from "../MainLayout/types" -import React, { useEffect, useReducer } from "react" +import React, { useCallback, useEffect, useReducer } from "react" import makeImmutable, { without } from "seamless-immutable" - +import intersection from "lodash/intersection" import type { KeypointsDefinition } from "../ImageCanvas/region-tools" import MainLayout from "../MainLayout" import type { Node } from "react" @@ -21,9 +23,12 @@ import historyHandler from "./reducers/history-handler.js" import imageReducer from "./reducers/image-reducer.js" import useEventCallback from "use-event-callback" import videoReducer from "./reducers/video-reducer.js" +import { reacalcActionsEnum } from "../utils/saveable-actions-enum" +import sleep from '../utils/sleep'; type Props = { taskDescription?: string, + help?: string, allowedArea?: { x: number, y: number, w: number, h: number }, regionTagList?: Array, regionClsList?: Array, @@ -45,16 +50,34 @@ type Props = { keypointDefinitions: KeypointsDefinition, fullImageSegmentationMode?: boolean, autoSegmentationOptions?: - | {| type: "simple" |} - | {| type: "autoseg", maxClusters?: number, slicWeightFactor?: number |}, - hideHeader?: boolean, - hideHeaderText?: boolean, - hideNext?: boolean, - hidePrev?: boolean, - hideClone?: boolean, - hideSettings?: boolean, - hideFullScreen?: boolean, - hideSave?: boolean, + | {| type: "simple" |} + | {| type: "autoseg", maxClusters ?: number, slicWeightFactor ?: number |}, +hideHeader ?: boolean, + hideHeaderText ?: boolean, + hideNext ?: boolean, + hidePrev ?: boolean, + hideClone ?: boolean, + hideSettings ?: boolean, + hideFullScreen ?: boolean, + hideSave ?: boolean, + onImagesChange ?: (any) => any, + groups ?: Array < any >, + onGroupSelect ?: (any) => any, + hideHistory ?: boolean, + hideNotEditingLabel ?: boolean, + showEditor ?: boolean, + showPageSelector ?: boolean, + clsColors ?: Object, + groupColors ?: Array < string >, + onSelectedImageChange ?: (any) => any, + albumMetadata ?: Array < Metadata >, + metadataConfigs ? : Array < MetadataConfig >, + save : (any) => any, + fetchImage : (any) => any, + updatedBy ?: ?string, + mediaPresenterLeaseUntil ?: ?string, + humanProcessorConfirmation ?: ?{ confirmedAt?: string, confirmedBy?: string }, + onHumanProcessorConfirmationChange ?: (boolean) => any, } export const Annotator = ({ @@ -80,6 +103,7 @@ export const Annotator = ({ imageClsList = [], keyframes = {}, taskDescription = "", + help = "", fullImageSegmentationMode = false, RegionEditLabel, videoSrc, @@ -99,6 +123,24 @@ export const Annotator = ({ hideFullScreen, hideSave, allowComments, + onImagesChange, + groups, + onGroupSelect, + hideHistory, + hideNotEditingLabel, + showEditor, + showPageSelector, + clsColors = {}, + groupColors, + onSelectedImageChange, + albumMetadata, + metadataConfigs, + save = () => { }, + fetchImage = () => { }, + updatedBy, + mediaPresenterLeaseUntil, + humanProcessorConfirmation, + onHumanProcessorConfirmationChange, }: Props) => { if (typeof selectedImage === "string") { selectedImage = (images || []).findIndex((img) => img.src === selectedImage) @@ -123,6 +165,7 @@ export const Annotator = ({ autoSegmentationOptions, mode: null, taskDescription, + help, showMask: true, labelImages: imageClsList.length > 0 || imageTagList.length > 0, regionClsList, @@ -137,15 +180,21 @@ export const Annotator = ({ allowComments, ...(annotationType === "image" ? { - selectedImage, - images, - selectedImageFrameTime: - images && images.length > 0 ? images[0].frameTime : undefined, - } + selectedImage, + images, + selectedImageFrameTime: + images && images.length > 0 ? images[0].frameTime : undefined, + } : { - videoSrc, - keyframes, - }), + videoSrc, + keyframes, + }), + imagesUpdatedAt: null, + imagesSavedAt: null, + albumMetadata, + metadataConfigs, + toPollImages: [...images.filter(i => i.lockedUntil).map(i => i.id)], + toSaveImage: null, }) ) @@ -169,6 +218,159 @@ export const Annotator = ({ }) }) + const handleMetadataChange = (params) => { + dispatchToReducer({ + type: "UPDATE_METADATA", + ...params + }) + } + + const handleAddGroup = (group) => { + dispatchToReducer({ + type: "ADD_GROUP", + group + }) + } + + const handleRecalcClicked = useCallback(({ imageId }) => { + dispatchToReducer({ + type: "RECALC_CLICKED", + imageId + }) + }, [dispatchToReducer]) + + // detect on page change if anything changed, if so trigger save and recalc + useEffect(() => { + const { selectedImage, previouslySelectedImage, lastAction } = state; + if (lastAction?.type === 'SELECT_IMAGE' && selectedImage !== previouslySelectedImage) { + // save if previously selected image has any changes + if (state.images[previouslySelectedImage]?.saveableActions?.length > 0) { + // decide wheather recalc is needed + const triggerRecalc = intersection(reacalcActionsEnum, state.images[previouslySelectedImage].saveableActions).length > 0; + + // decide whether album metadata should be updated + let toSaveMetadata = []; + if (state.images[previouslySelectedImage]?.saveableActions?.includes("UPDATE_ALBUM_METADATA")) { + toSaveMetadata = state.albumMetadata + } + + // set this image to be saved + dispatchToReducer({ + type: "SAVE_IMAGE", + image: { ...state.images[previouslySelectedImage] }, + triggerRecalc, + toSaveMetadata + }) + } + } + }, [state.previouslySelectedImage, state.selectedImage, state.images, state, save]) + + // Automatically save image shortly after specific metadata fields change + // (ArticleType, PreviousArticleId, Section), but debounce so we don't save on every keystroke. + useEffect(() => { + const { lastAction } = state + if ( + !lastAction || + lastAction.type !== "UPDATE_METADATA" || + (lastAction.name !== "articleType" && lastAction.name !== "previousArticleId" && lastAction.name !== "section") || + isNaN(lastAction.imageIndex) + ) { + return + } + + const imageIndex = lastAction.imageIndex + const image = state.images?.[imageIndex] + if (!image) return + + const timeoutId = setTimeout(() => { + const latestImage = state.images?.[imageIndex] + if (!latestImage) return + + dispatchToReducer({ + type: "SAVE_IMAGE", + image: { ...latestImage }, + triggerRecalc: false, + toSaveMetadata: [], + }) + }, 3000) + + return () => { + clearTimeout(timeoutId) + } + }, [state.lastAction, state.images]) + + // handle save of image + useEffect(() => { + if (state.toSaveImage !== null) { + // metadata on album level + const saveHandler = async (image, triggerRecalc, albumMetadata) => { + dispatchToReducer({ + type: "IMAGE_UPDATE_INIT", + imageId: image.id + }) + + try { + const { lockedUntil } = await save({ image, triggerRecalc, albumMetadata }); + dispatchToReducer({ + type: "IMAGE_UPDATE_SUCCESS", + imageId: image.id, + lockedUntil, + }) + } catch (error) { + dispatchToReducer({ + type: "IMAGE_UPDATE_FAIL", + imageId: image.id, + error, + }) + } + } + + const { image, triggerRecalc, toSaveMetadata } = state.toSaveImage; + saveHandler(image, triggerRecalc, toSaveMetadata); + } + }, [save, state.toSaveImage]) + + // polling of images + useEffect(() => { + if (state.toPollImages.length > 0) { + const polledImages = state.toPollImages.reduce((acc, imageId) => { + + async function pollImage(fetchImage, imageId, tries = 5) { + if (tries === 0) { + dispatchToReducer({ + type: "IMAGE_POLL_TIMEOUT", + imageId, + }) + return; + } + + const { image } = await fetchImage({ imageId }); + if (!image.lockedUntil) { + dispatchToReducer({ + type: "IMAGE_POLL_SUCCESS", + image, + }) + return; + } + + await sleep(5000); + + return await pollImage(fetchImage, imageId, tries - 1); + } + + // make recursive calling of polling function + pollImage(fetchImage, imageId, 10); + + return imageId; + }, []) + + dispatchToReducer({ + type: "IMAGE_POLL_INIT", + imageIds: polledImages + }) + } + }, [fetchImage, state.toPollImages]) + useEffect(() => { if (selectedImage === undefined) return dispatchToReducer({ @@ -176,13 +378,16 @@ export const Annotator = ({ imageIndex: selectedImage, image: state.images[selectedImage], }) - }, [selectedImage, state.images]) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [onImagesChange, selectedImage]) if (!images && !videoSrc) return 'Missing required prop "images" or "videoSrc"' + const [recalcActive, saveActive] = state.imagesSavedAt < state.imagesUpdatedAt ? [true, true] : [false, false]; + return ( - + ) diff --git a/src/Annotator/index.story.js b/src/Annotator/index.story.js index dae1ece0..9374319b 100644 --- a/src/Annotator/index.story.js +++ b/src/Annotator/index.story.js @@ -12,7 +12,10 @@ import { defaultKeyMap } from "../ShortcutsManager" import Annotator from "./" -import { testRegions } from "../ImageCanvas/index.story" +import { testRegions, testRegionsBoxes } from "../ImageCanvas/index.story" +import photosToImages from "../utils/photosToImages" +import examplePhotos from "./examplePhotos" +import exampleImages from './exampleImages'; const middlewares = [ (store) => (next) => (action) => { @@ -52,6 +55,191 @@ storiesOf("Annotator", module) ]} /> )) + .add("Basic with onImagesChange", () => { + const [humanProcessorConfirmation, setHumanProcessorConfirmation] = useState(null) + const handleHumanProcessorConfirmationChange = (confirmed) => { + console.log("[onHumanProcessorConfirmationChange] triggered:", confirmed) + return new Promise((resolve) => setTimeout(resolve, 800)).then(() => + setHumanProcessorConfirmation( + confirmed + ? { confirmedAt: new Date().toISOString(), confirmedBy: "story.user@example.com" } + : null + ) + ) + } + return ( + +
+
+ console.log("[images changed to]:", images)} + images={photosToImages([examplePhotos[0]])} + clsColors={{ + title: "#f70202", + subtitle: "#ffb405", + text: "#14deef", + author: "#f8d51e", + appendix: "#bfede2", + photo_author: "#9a17bb", + photo_caption: "#ff84f6", + advertisement: "#ffb201", + other_graphics: "#ff5400", + unknown: "#bfede2", + about_author: "#9a17bb", + image: "#14deef", + interview: "#23b20f", + table: "#02b4ba", + continuation_ref: '#FF33CC', + cover_clip: '#669966', + page_id: '#4433AA', + continuation_mark: '#660066', + follow_up_mark: '#873e23', + article_termination_mark: '#873e23', + page_splitting_stripe: '#873e23', + column_id_stripe: '#873e23', + prev_page_reference: '#f3a864', + section_subcategory: '#442c55', + + }} + // groupColors={[ + // "#3853F1", + // "#F6E54C", + // "#39D33C", + // "#CF24CF", + // "#22E3ED", + // "#EF3029", + // ]} + enabledTools={[]} + groupColors={['#343434', '#989898', '#dcdcdc']} + onGroupSelect={(groupId) => console.log('selected groupid:', groupId)} + hideHeader={true} + hideHistory={true} + hideNotEditingLabel={true} + showEditor={true} + showPageSelector={true} + albumMetadata={[{ + key: "issueNumber", value: "12" + }, { + key: "issueType", value: "news" + }]} + metadataConfigs={[{ + key: "issueNumber", + level: "album", + options: [] + }, { + key: "issueType", + level: "album", + options: ['news', 'magazine', 'q&a'] + }, { + key: "mutation", + level: "photo", + options: ['Morava', 'Slezsko', 'Cechy'] + }, { + key: "previousArticleId", + level: "photo_metadata-engine", + options: [{ + value: "alpha", + label: "0 - alpha" + }, { + value: "beta", + label: "1 - beta" + }, { + value: "gamma", + label: "2 - gamma" + }] + }, { + key: "pageNumber", + level: "photo", + options: [] + }, { + key: "articleType", + level: "photo_metadata-engine", + // options: ['news', 'ads', 'interview'] + selectable: true, + options: [{ + value: "alpha", + label: "0 - alpha" + }, { + value: "beta", + label: "1 - beta" + }, { + value: "gamma", + label: "2 - gamma" + }] + }, { + key: "section", + level: "photo_metadata-engine", + options: ['editorial', 'article', 'last page'] + }]} + onSelectedImageChange={(d) => console.log("[onSelectedImageChange] triggered:", d)} + onExit={(s) => console.log('[onExit] triggered:', s)} + save={async ({ image, triggerRecalc, albumMetadata }) => { + console.log(`[SYNC] image ${image.id} saving... recalc: ${triggerRecalc} albumMetadata: ${albumMetadata.length}`) + return new Promise((resolve, reject) => { + setTimeout(() => { + let lockedUntil = null; + if (triggerRecalc) { + var now = new Date(); + now.setSeconds(now.getSeconds() + 60); + lockedUntil = now + } + resolve({ lockedUntil }) + }, 3000) + }) + }} + fetchImage={async ({ imageId }) => { + console.log(`[SYNC] image ${imageId} fetching...`) + return new Promise((resolve, reject) => { + setTimeout(() => { + console.log(`[SYNC] image ${imageId} fetched`,) + // resolve({ + // image: { ...exampleImages[0], lockedUntil: new Date().toISOString(), id: imageId } + // }) + resolve({ + image: { ...exampleImages[0], lockedUntil: null, id: imageId } + }) + }, 5000) + }) + }} + updatedBy="AGGREGATOR" + humanProcessorConfirmation={humanProcessorConfirmation} + onHumanProcessorConfirmationChange={handleHumanProcessorConfirmationChange} + /> +
+
+
+ ) + }) .add("Basic - Allow Comments", () => ( Math.random().toString().split(".")[1] @@ -107,8 +111,18 @@ export default (state: MainLayoutState, action: Action) => { ) } + const addSaveableAction = (state: MainLayoutState, action: string) => { + if (currentImageIndex === null) return state + return setIn( + state, + [...pathToActiveImage, "saveableActions"], + [...(activeImage.saveableActions || []), action] + ) + } + const setNewImage = (img: string | Object, index: number) => { let { src, frameTime } = typeof img === "object" ? img : { src: img } + state = setIn(state, ["previouslySelectedImage"], state.selectedImage) return setIn( setIn(state, ["selectedImage"], index), ["selectedImageFrameTime"], @@ -124,6 +138,22 @@ export default (state: MainLayoutState, action: Action) => { return setNewImage(action.image, action.imageIndex) } case "SELECT_CLASSIFICATION": { + // if there is selected region, set its cls + const selectedRegionId = state.images[state.selectedImage].regions.find(r => r.highlighted === true)?.id + if (selectedRegionId) { + const newRegions = activeImage.regions.map(r => { + if (r.id === selectedRegionId) { + return { + ...r, + cls: action.cls + } + } else { + return r + } + }) + state = setIn(state, [...pathToActiveImage, "regions"], newRegions) + } + state = addSaveableAction(state, "SELECT_CLASSIFICATION") return setIn(state, ["selectedCls"], action.cls) } case "CHANGE_REGION": { @@ -144,6 +174,7 @@ export default (state: MainLayoutState, action: Action) => { if (!isEqual(oldRegion.comment, action.region.comment)) { state = saveToHistory(state, "Change Region Comment") } + state = addSaveableAction(state, "CHANGE_REGION") return setIn( state, [...pathToActiveImage, "regions", regionIndex], @@ -167,8 +198,17 @@ export default (state: MainLayoutState, action: Action) => { const regions = [...(activeImage.regions || [])].map((r) => ({ ...r, highlighted: r.id === region.id, - editingLabels: r.id === region.id, + groupHighlighted: (r.groupId && r.groupId === region.groupId) ? true : false, + editingLabels: region.ctrlKey ? r.id === region.id : false, })) + + const selectedGroupIds = regions.filter(i => i.highlighted).map(r => r.groupId || '').filter(onlyUnique); + if (selectedGroupIds.length === 1) { + state = setIn(state, [...pathToActiveImage, "selectedGroupId"], selectedGroupIds[0]) + } + if (selectedGroupIds.length === 0) { + state = setIn(state, [...pathToActiveImage, "selectedGroupId"], null) + } return setIn(state, [...pathToActiveImage, "regions"], regions) } case "BEGIN_MOVE_POINT": { @@ -240,7 +280,6 @@ export default (state: MainLayoutState, action: Action) => { } case "MOUSE_MOVE": { const { x, y } = action - if (!state.mode) return state if (!activeImage) return state const { mouseDownAt } = state @@ -310,15 +349,15 @@ export default (state: MainLayoutState, action: Action) => { xFree === 0 ? ow : xFree === -1 - ? ow + (ox - dx) - : Math.max(0, ow + (x - ox - ow)) + ? ow + (ox - dx) + : Math.max(0, ow + (x - ox - ow)) const dy = yFree === 0 ? oy : yFree === -1 ? Math.min(oy + oh, y) : oy const dh = yFree === 0 ? oh : yFree === -1 - ? oh + (oy - dy) - : Math.max(0, oh + (y - oy - oh)) + ? oh + (oy - dy) + : Math.max(0, oh + (y - oy - oh)) // determine if we should switch the freedom if (dw <= 0.001) { @@ -524,7 +563,7 @@ export default (state: MainLayoutState, action: Action) => { } let newRegion - let defaultRegionCls = state.selectedCls, + let defaultRegionCls = state.selectedCls || state.regionClsList?.[0], defaultRegionColor = "#ff0000" const clsIndex = (state.regionClsList || []).indexOf(defaultRegionCls) @@ -548,6 +587,14 @@ export default (state: MainLayoutState, action: Action) => { break } case "create-box": { + let groupId = state?.images[state.selectedImage]?.regions?.find(r => r.highlighted === true)?.groupId; + let groupSelected = true; + let isNewRegion = false; + if (groupId === undefined) { + isNewRegion = true; + groupId = nextGroupId(); + groupSelected = false; + } state = saveToHistory(state, "Create Box") newRegion = { type: "box", @@ -560,10 +607,45 @@ export default (state: MainLayoutState, action: Action) => { color: defaultRegionColor, cls: defaultRegionCls, id: getRandomId(), + groupHighlighted: true, + groupId, } + + if (isNewRegion) { + const selectedImageIdx = state.selectedImage; + + const metadataTextValue = state?.metadataConfigs + .filter(metadataConfig => metadataConfig.level === "photo_metadata-engine") + .map(metadataConfig => ({ key: metadataConfig.key, value: "", metadataId: getRandomId() })); + + const newRegionMetadata = { + cls: "metadata", + editingLabels: false, + groupHighlighted: false, + groupId, + x: 0, + y: 0, + w: 1, + h: 1, + highlighted: false, + id: getRandomId(), + text: JSON.stringify(metadataTextValue), + type: "box", + undefined: false, + visible: false, + } + + state = addSaveableAction(state, "ADD_METADATA") + state = setIn( + state, + ["images", selectedImageIdx, "regions"], + [...state.images[selectedImageIdx].regions, newRegionMetadata] + ) + } + state = setIn(state, ["mode"], { mode: "RESIZE_BOX", - editLabelEditorAfter: true, + editLabelEditorAfter: !groupSelected, regionId: newRegion.id, freedom: [1, 1], original: { x, y, w: newRegion.w, h: newRegion.h }, @@ -636,18 +718,18 @@ export default (state: MainLayoutState, action: Action) => { const [[keypointsDefinitionId, { landmarks, connections }]] = (Object.entries(state.keypointDefinitions): any) - newRegion = { - type: "keypoints", - keypointsDefinitionId, - points: getLandmarksWithTransform({ - landmarks, - center: { x, y }, - scale: 1, - }), - highlighted: true, - editingLabels: false, - id: getRandomId(), - } + newRegion = { + type: "keypoints", + keypointsDefinitionId, + points: getLandmarksWithTransform({ + landmarks, + center: { x, y }, + scale: 1, + }), + highlighted: true, + editingLabels: false, + id: getRandomId(), + } state = setIn(state, ["mode"], { mode: "RESIZE_KEYPOINTS", landmarks, @@ -664,10 +746,12 @@ export default (state: MainLayoutState, action: Action) => { const regions = [...(getIn(state, pathToActiveImage).regions || [])] .map((r) => - setIn(r, ["editingLabels"], false).setIn(["highlighted"], false) + setIn(r, ["editingLabels"], false).setIn(["highlighted"], false).setIn([state.selectedTool === 'create-box' ? undefined : 'groupHighlighted'], false) ) .concat(newRegion ? [newRegion] : []) + state = setIn(state, [...pathToActiveImage, "selectedGroupId"], null) + return setIn(state, [...pathToActiveImage, "regions"], regions) } case "MOUSE_UP": { @@ -678,11 +762,13 @@ export default (state: MainLayoutState, action: Action) => { state = setIn(state, ["mouseDownAt"], null) switch (state.mode.mode) { case "RESIZE_BOX": { + state = setIn(state, ["selectedTool"], 'select') if (state.mode.isNew) { if ( Math.abs(state.mode.original.x - x) < 0.002 || Math.abs(state.mode.original.y - y) < 0.002 ) { + state = addSaveableAction(state, "MOUSE_UP_RESIZE_BOX") return setIn( modifyRegion(state.mode.regionId, null), ["mode"], @@ -691,6 +777,7 @@ export default (state: MainLayoutState, action: Action) => { } } if (state.mode.editLabelEditorAfter) { + state = addSaveableAction(state, "MOUSE_UP_RESIZE_BOX") return { ...modifyRegion(state.mode.regionId, { editingLabels: true }), mode: null, @@ -700,6 +787,7 @@ export default (state: MainLayoutState, action: Action) => { case "MOVE_REGION": case "RESIZE_KEYPOINTS": case "MOVE_POLYGON_POINT": { + state = addSaveableAction(state, "MOUSE_UP_MOVE_REGION") return { ...state, mode: null } } case "MOVE_KEYPOINT": { @@ -784,13 +872,41 @@ export default (state: MainLayoutState, action: Action) => { case "DELETE_REGION": { const regionIndex = getRegionIndex(action.region) if (regionIndex === null) return state + state = saveToHistory(state, "Delete region") + state = addSaveableAction(state, "DELETE_REGION") return setIn( state, [...pathToActiveImage, "regions"], (activeImage.regions || []).filter((r) => r.id !== action.region.id) ) } + case "DELETE_ALL_REGIONS": { + // Delete all non-metadata regions (frames) and article-level metadata, + // but keep page-level/global metadata (metadata without groupId). + state = saveToHistory(state, "Delete all regions") + state = addSaveableAction(state, "DELETE_REGION") + return setIn( + state, + [...pathToActiveImage, "regions"], + (activeImage.regions || []).filter( + (r) => r.cls === "metadata" && (r.groupId === null || r.groupId === undefined) + ) + ) + } + case "DELETE_GROUP": { + const { groupId } = action + if (groupId === null || groupId === undefined) return state + state = saveToHistory(state, "Delete group") + state = addSaveableAction(state, "DELETE_GROUP") + return setIn( + state, + [...pathToActiveImage, "regions"], + (activeImage.regions || []).filter((r) => r.groupId !== groupId) + ) + } case "DELETE_SELECTED_REGION": { + state = saveToHistory(state, "Delete selected region") + state = addSaveableAction(state, "DELETE_SELECTED_REGION") return setIn( state, [...pathToActiveImage, "regions"], @@ -907,6 +1023,252 @@ export default (state: MainLayoutState, action: Action) => { } break } + case "UPDATE_REGIONS": { + const { imageIndex, regions: newRegions } = action; + const updatedRegions = state.images[imageIndex].regions.map(r => { + const updatedRegion = newRegions.find(i => i.id === r.id) + if (!updatedRegion) { + return r + } + return { + ...r, + cls: updatedRegion.cls, + text: updatedRegion.text + } + }) + // TODO: add mutation of order and deletion of regions - SI-1967 + state = addSaveableAction(state, "UPDATE_REGIONS") + return setIn( + state, + ["images", imageIndex, "regions"], + updatedRegions + ) + } + case "IMAGES_UPDATED": { + const { updatedAt } = action; + return setIn( + state, + ["imagesUpdatedAt"], + updatedAt + ) + } + case "IMAGES_SAVED": { + const { savedAt } = action; + return setIn( + state, + ["imagesSavedAt"], + savedAt + ) + } + case "IMAGES_RECALCULATED": { + const { recalculatedAt } = action; + return setIn( + state, + ["imagesSavedAt"], + recalculatedAt + ) + } + case "UPDATE_METADATA": { + const { name, value, imageIndex, groupId, metadataId } = action; + if (isNaN(imageIndex)) { + // update global/album metadata + const metadataIndex = state.albumMetadata?.findIndex(mt => mt.key === name) + if (metadataIndex < 0) { + console.error(`can't find metadata by key "${name}"`) + return state; + } + state = addSaveableAction(state, "UPDATE_ALBUM_METADATA") + return setIn( + state, + ["albumMetadata", metadataIndex], + { + key: name, + value: value + } + ) + } else { + // update metadata of article + if (groupId) { + const articleMetadataRegionIdx = state.images[imageIndex]?.regions.findIndex(r => r.cls === 'metadata' && r.groupId === groupId) + if (articleMetadataRegionIdx < 0) { + console.error(`can't find article metadata for goupId "${groupId}"`) + return state + } + + const articleRegionToUpdate = state.images[imageIndex]?.regions[articleMetadataRegionIdx] + const articleMetadata = JSON.parse(articleRegionToUpdate.text) + const toBeUpdatedMetadataIdx = articleMetadata.findIndex(i => i.metadataId === metadataId) + if (toBeUpdatedMetadataIdx < 0) { + console.error(`can't find metadata field in article metadata for key "${name}"`) + return state + } + + articleMetadata[toBeUpdatedMetadataIdx].value = value + state = addSaveableAction(state, "UPDATE_METADATA") + return setIn( + state, + ["images", imageIndex, "regions", articleMetadataRegionIdx], + { + ...articleRegionToUpdate, + text: JSON.stringify(articleMetadata) + } + ) + } + + // update metadata of image + const metadataIndex = state.images[imageIndex]?.metadata?.findIndex(mt => mt.key === name) + if (metadataIndex < 0) { + console.error(`can't find photo metadata by key "${name}"`) + return state + } + state = addSaveableAction(state, "UPDATE_METADATA") + return setIn( + state, + ["images", imageIndex, "metadata", metadataIndex], + { + key: name, + value: value + } + ) + } + } + case "ADD_GROUP": { + // FIXME: remove this branch + return state + // const { group } = action; + // const newAllowedGroups = [] + // return setIn( + // state, + // ["allowedGroups"], + // newAllowedGroups + // ) + } + case "SAVE_IMAGE": { + const { image, triggerRecalc, toSaveMetadata } = action; + return setIn(state, ["toSaveImage"], { image, triggerRecalc, toSaveMetadata }); + } + case "RECALC_CLICKED": { + const { imageId } = action; + const imageIdx = state.images.findIndex(i => i.id === imageId); + if (imageIdx < 0) { + throw new Error(`failed to find index of image with id ${imageId}`) + } + const image = { ...state.images[imageIdx] } + return setIn(state, ["toSaveImage"], { image, triggerRecalc: true, toSaveMetadata: [] }); + } + case "IMAGE_UPDATE_INIT": { + const { imageId } = action; + const imageIdx = state.images.findIndex(i => i.id === imageId); + if (imageIdx < 0) { + throw new Error(`failed to find index of image with id ${imageId}`) + } + + state = setIn(state, ["toSaveImage"], null); + + return setIn( + state, + ["images", imageIdx], + { + ...state.images[imageIdx], + lockedUntil: defaultLockedUntil(), + syncError: null, + saveableActions: [], + } + ) + } + case "IMAGE_UPDATE_SUCCESS": { + const { imageId, lockedUntil } = action; + const imageIdx = state.images.findIndex(i => i.id === imageId); + if (imageIdx < 0) { + throw new Error(`failed to find index of image with id ${imageId}`) + } + + // if there is lockedUntil set, it means we need to poll for updated + if (lockedUntil) { + state = setIn(state, ["toPollImages"], uniq([...state.toPollImages, imageId])) + } + + return setIn( + state, + ["images", imageIdx], + { + ...state.images[imageIdx], + lockedUntil, + syncError: null + } + ) + } + case "IMAGE_UPDATE_FAIL": { + const { imageId, error } = action; + const imageIdx = state.images.findIndex(i => i.id === imageId); + if (imageIdx < 0) { + throw new Error(`failed to find index of image with id ${imageId}`) + } + + return setIn( + state, + ["images", imageIdx], + { + ...state.images[imageIdx], + lockedUntil: null, + syncError: error + } + ) + } + case "IMAGE_POLL_INIT": { + const { imageIds } = action; + return setIn(state, ["toPollImages"], state.toPollImages.filter(i => !imageIds.includes(i))) + } + case "IMAGE_POLL_SUCCESS": { + const { image } = action; + const imageIdx = state.images.findIndex(i => i.id === image.id); + if (imageIdx < 0) { + throw new Error(`failed to find index of image with id ${image.id}`) + } + + return setIn( + state, + ["images", imageIdx], + { + ...state.images[imageIdx], + lockedUntil: null, + syncError: null, + ...image + } + ) + } + case "IMAGE_POLL_TIMEOUT": { + const { imageId } = action; + const imageIdx = state.images.findIndex(i => i.id === imageId); + if (imageIdx < 0) { + throw new Error(`failed to find index of image with id ${imageId}`) + } + + return setIn( + state, + ["images", imageIdx], + { + ...state.images[imageIdx], + lockedUntil: null, + syncError: new Error(`polling timeout`) + } + ) + } + case "ZOOM_RESET": + { + if (state.selectedImage === undefined || state.selectedImage === null) { + return state + } + + const deselectedRegions = state.images[state.selectedImage].regions.map(i => ({ + ...i, + highlighted: false, + groupHighlighted: false + })); + + state = setIn(state, ["selectedGroupId"], null); + return setIn(state, ["images", state.selectedImage, "regions"], deselectedRegions); + } default: break } diff --git a/src/Annotator/reducers/video-reducer.js b/src/Annotator/reducers/video-reducer.js index 4dea849b..54f29a58 100644 --- a/src/Annotator/reducers/video-reducer.js +++ b/src/Annotator/reducers/video-reducer.js @@ -28,6 +28,7 @@ export default (state: MainLayoutVideoAnnotationState, action: Action) => { if (typeof duration === "number") { return setIn(state, ["videoDuration"], duration * 1000) } + break } case "HEADER_BUTTON_CLICKED": { switch (action.buttonName.toLowerCase()) { @@ -35,7 +36,10 @@ export default (state: MainLayoutVideoAnnotationState, action: Action) => { return setIn(state, ["videoPlaying"], true) case "pause": return setIn(state, ["videoPlaying"], false) + default: + break } + break } case "CHANGE_VIDEO_TIME": { return setIn(state, ["currentVideoTime"], action.newTime) @@ -46,6 +50,9 @@ export default (state: MainLayoutVideoAnnotationState, action: Action) => { case "DELETE_KEYFRAME": { return setIn(state, ["keyframes"], without(state.keyframes, action.time)) } + case "DELETE_ALL_KEYFRAMES": { + return setIn(state, ["keyframes"], {}) + } default: break } diff --git a/src/ClassSelectionMenu/index.js b/src/ClassSelectionMenu/index.js index e584520b..55f1bc3d 100644 --- a/src/ClassSelectionMenu/index.js +++ b/src/ClassSelectionMenu/index.js @@ -4,10 +4,10 @@ import { createTheme, ThemeProvider } from "@mui/material/styles" import Box from "@mui/material/Box" import * as muiColors from "@mui/material/colors" import SidebarBoxContainer from "../SidebarBoxContainer" -import colors from "../colors" import BallotIcon from "@mui/icons-material/Ballot" import capitalize from "lodash/capitalize" import classnames from "classnames" +import useColors from "../hooks/use-colors" const theme = createTheme() const LabelContainer = styled("div")(({ theme }) => ({ @@ -58,6 +58,9 @@ export const ClassSelectionMenu = ({ regionClsList, onSelectCls, }) => { + const { clsColor } = useColors() + + useEffect(() => { const keyMapping = {} for (let i = 0; i < 9 && i < regionClsList.length; i++) { @@ -84,11 +87,12 @@ export const ClassSelectionMenu = ({ > {regionClsList.map((label, index) => ( onSelectCls(label)} >