diff --git a/.env b/.env new file mode 100644 index 000000000..3783fbb71 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ + +REACT_APP_API_URL=https://showniq.ocmg.vn/api/backoffice +REACT_APP_API_ROOT="" + \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index c5b7294ea..48082f72f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -11.15.0 +12 diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 000000000..a03d4b7d0 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + bracketSpacing: false, + jsxBracketSameLine: true, + singleQuote: true, + trailingComma: 'none', + tabWidth: 4 +}; diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..c14ab72f3 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..3ae6ade6d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# Create image based on the official Node image from dockerhub +FROM node:14.17.6 as cache-image +WORKDIR /usr/src/app +# RUN npm install + +# Build frontend +FROM cache-image as builder +WORKDIR /usr/src/app +COPY . /usr/src/app + +# RUN yarn build +COPY package.json ./ +RUN npm install +RUN npm rebuild node-sass +RUN export PUBLIC_URL=http://localhost:3000/labeler +# Build frontend +# FROM cache-image as builder +# WORKDIR /usr/src/app +COPY . . +CMD ["npm", "start"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..101227b9d --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,62 @@ +// pipeline { +// agent { +// docker { +// image 'node:14-alpine' +// args '-p 3005:3005' +// label 'support_ubuntu_docker' +// } +// } +// environment { +// HOME = '.' +// CI = 'true' +// } +// stages { +// stage('Build') { +// steps { +// // sh 'npm cache clean --force' +// sh 'npm install' +// } +// } + +// stage('Deliver') { +// steps { +// sh "chmod +x -R ${env.WORKSPACE}" +// sh './jenkins/scripts/deliver.sh' +// // input message: 'Finished using the web site? (Click "Proceed" to continue)' +// // sh './jenkins/scripts/kill.sh' +// } +// } + +// } +// } + +pipeline { + // options { + // timeout(time: 1, unit: 'HOURS') + // } + agent { + dockerfile { + filename "Dockerfile" + args '-p 3005:3005' + label "java-docker-slave" + additionalBuildArgs "-t my-custom-node:latest" + } + } + environment { + HOME = '.' + CI = 'true' + } + stages { + stage("Test") { + steps { + sh "chmod +x -R ${env.WORKSPACE}" + sh "docker stop mydocker2" + sh "docker rm mydocker2" + sh "docker run -dit -p 3005:3005 --name=mydocker2 --restart=always my-custom-node " + script { + echo "test" + } + } + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index add554574..8089670bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3908,6 +3908,27 @@ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==" }, + "axios": { + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.1.tgz", + "integrity": "sha512-ePNMai55xo5GsXajb/k756AqZqpqeDaGwGcdvbZLSSELbbYwsIn2jNmGfUPEwd8j/yu4OoMstLLIVa4t0MneEA==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -4862,9 +4883,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001252", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", - "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==" + "version": "1.0.30001370", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", + "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==" }, "capture-exit": { "version": "2.0.0", @@ -7099,9 +7120,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", + "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==" }, "eslint-plugin-testing-library": { "version": "3.10.2", @@ -7843,9 +7864,9 @@ } }, "follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==" + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, "for-in": { "version": "1.0.2", @@ -11758,6 +11779,11 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -14613,11 +14639,56 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, + "react-icons": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz", + "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==" + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "react-modal-resizable-draggable": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/react-modal-resizable-draggable/-/react-modal-resizable-draggable-0.1.6.tgz", + "integrity": "sha512-xNpmEE47WtlCQpFOiqcyZ/3e/PzPO7iIMoKHugNLWm53U1y4OCRwlOqSX7IzdjceE8bEnLmf5vJDt/pNJf/+HA==", + "requires": { + "react": "^17.0.0", + "react-dom": "^17.0.1", + "react-icons": "^4.2.0", + "react-motion": "^0.5.2", + "react-transition-group": "^4.4.1" + }, + "dependencies": { + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "react-motion": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", + "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", + "requires": { + "performance-now": "^0.2.0", + "prop-types": "^15.5.8", + "raf": "^3.1.0" + }, + "dependencies": { + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" + } + } + }, "react-redux": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", @@ -14730,6 +14801,20 @@ } } }, + "react-select": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.3.0.tgz", + "integrity": "sha512-GM6Fbv1+X+kb3e5Fc4oNeyOJkCIesY/D4NBiReKlGY4RxoeztFYm3J0KREgwMaIKQqwTiuLqTlpUBY3SYw5goQ==", + "requires": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.1.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0" + } + }, "react-spinners": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.11.0.tgz", @@ -14832,6 +14917,11 @@ "@babel/runtime": "^7.9.2" } }, + "redux-thunk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==" + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", diff --git a/package.json b/package.json index b17923e8e..df973688d 100644 --- a/package.json +++ b/package.json @@ -1,72 +1,84 @@ { - "name": "make-sense", - "version": "1.0.0", - "private": true, - "dependencies": { - "@material-ui/core": "^4.12.3", - "@tensorflow-models/coco-ssd": "^2.2.2", - "@tensorflow-models/posenet": "^2.2.2", - "@tensorflow/tfjs": "^3.8.0", - "@tensorflow/tfjs-backend-cpu": "^3.9.0", - "@tensorflow/tfjs-backend-webgl": "^3.9.0", - "@tensorflow/tfjs-core": "^3.9.0", - "@tensorflow/tfjs-node": "^3.9.0", - "@types/jest": "27.0.1", - "@types/node": "16.7.6", - "@types/react": "17.0.19", - "@types/react-dom": "17.0.9", - "classnames": "^2.3.1", - "file-saver": "^2.0.5", - "jszip": "^3.7.1", - "lodash": "^4.17.21", - "mobile-detect": "^1.4.5", - "moment": "^2.29.1", - "node-sass": "^6.0.1", - "react": "^16.8.6", - "react-custom-scrollbars": "^4.2.1", - "react-dom": "^17.0.2", - "react-dropzone": "^11.3.4", - "react-redux": "^7.2.4", - "react-scripts": "^4.0.3", - "react-spinners": "^0.11.0", - "redux": "^4.1.1", - "typescript": "4.4.2", - "uuid": "^8.3.2" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "test:coverage": "npm test -- --coverage", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - "@types/file-saver": "^2.0.3", - "@types/lodash": "^4.14.172", - "@types/react-custom-scrollbars": "^4.0.8", - "@types/react-redux": "^7.1.18", - "@types/uuid": "^8.3.1", - "prettier": "^2.3.2", - "@redux-devtools/core": "^3.9.0", - "tslint": "^6.1.3", - "tslint-react": "^5.0.0" - } + "name": "make-sense", + "version": "1.0.0", + "private": true, + "dependencies": { + "@material-ui/core": "^4.12.3", + "@tensorflow-models/coco-ssd": "^2.2.2", + "@tensorflow-models/posenet": "^2.2.2", + "@tensorflow/tfjs": "^3.8.0", + "@tensorflow/tfjs-backend-cpu": "^3.9.0", + "@tensorflow/tfjs-backend-webgl": "^3.9.0", + "@tensorflow/tfjs-core": "^3.9.0", + "@tensorflow/tfjs-node": "^3.9.0", + "@types/jest": "27.0.1", + "@types/node": "16.7.6", + "@types/react": "17.0.19", + "@types/react-dom": "17.0.9", + "axios": "^0.27.1", + "classnames": "^2.3.1", + "file-saver": "^2.0.5", + "jszip": "^3.7.1", + "lodash": "^4.17.21", + "mobile-detect": "^1.4.5", + "moment": "^2.29.1", + "node-sass": "^6.0.1", + "react": "^16.8.6", + "react-custom-scrollbars": "^4.2.1", + "react-dom": "^17.0.2", + "react-dropzone": "^11.3.4", + "react-modal-resizable-draggable": "^0.1.6", + "react-redux": "^7.2.4", + "react-scripts": "^4.0.3", + "react-select": "^5.3.0", + "react-spinners": "^0.11.0", + "redux": "^4.1.1", + "redux-thunk": "^2.4.1", + "typescript": "4.4.2", + "uuid": "^8.3.2" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "test:coverage": "npm test -- --coverage", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "plugins": [ + "react-hooks" + ], + "extends": [ + "react-app", + "react-app/jest" + ], + "rules": { + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn" + } + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@redux-devtools/core": "^3.9.0", + "@types/file-saver": "^2.0.3", + "@types/lodash": "^4.14.172", + "@types/react-custom-scrollbars": "^4.0.8", + "@types/react-redux": "^7.1.18", + "@types/uuid": "^8.3.1", + "eslint-plugin-react-hooks": "^4.4.0", + "prettier": "^2.3.2", + "tslint": "^6.1.3", + "tslint-react": "^5.0.0" + } } diff --git a/public/guides/1/1_1/1.jpg b/public/guides/1/1_1/1.jpg new file mode 100644 index 000000000..5e0268d6f Binary files /dev/null and b/public/guides/1/1_1/1.jpg differ diff --git a/public/guides/1/1_1/1_s.png b/public/guides/1/1_1/1_s.png new file mode 100644 index 000000000..84009b332 Binary files /dev/null and b/public/guides/1/1_1/1_s.png differ diff --git a/public/guides/1/1_1/2.jpg b/public/guides/1/1_1/2.jpg new file mode 100644 index 000000000..9bdc9b7de Binary files /dev/null and b/public/guides/1/1_1/2.jpg differ diff --git a/public/guides/1/1_1/3.jpg b/public/guides/1/1_1/3.jpg new file mode 100644 index 000000000..9e5e3e737 Binary files /dev/null and b/public/guides/1/1_1/3.jpg differ diff --git a/public/guides/1/1_1/4.jpg b/public/guides/1/1_1/4.jpg new file mode 100644 index 000000000..3a1655e7d Binary files /dev/null and b/public/guides/1/1_1/4.jpg differ diff --git a/public/guides/1/1_1/5.jpg b/public/guides/1/1_1/5.jpg new file mode 100644 index 000000000..085204275 Binary files /dev/null and b/public/guides/1/1_1/5.jpg differ diff --git a/public/guides/1/1_2/1.jpg b/public/guides/1/1_2/1.jpg new file mode 100644 index 000000000..184a61a01 Binary files /dev/null and b/public/guides/1/1_2/1.jpg differ diff --git a/public/guides/1/1_2/2.jpg b/public/guides/1/1_2/2.jpg new file mode 100644 index 000000000..bfa414b56 Binary files /dev/null and b/public/guides/1/1_2/2.jpg differ diff --git a/public/guides/1/1_2/3.jpg b/public/guides/1/1_2/3.jpg new file mode 100644 index 000000000..663047962 Binary files /dev/null and b/public/guides/1/1_2/3.jpg differ diff --git a/public/guides/1/1_2/4.jpg b/public/guides/1/1_2/4.jpg new file mode 100644 index 000000000..5383340ca Binary files /dev/null and b/public/guides/1/1_2/4.jpg differ diff --git a/public/guides/1/1_2/5.jpg b/public/guides/1/1_2/5.jpg new file mode 100644 index 000000000..25ca966e4 Binary files /dev/null and b/public/guides/1/1_2/5.jpg differ diff --git "a/public/guides/1/1_GENDER_\354\204\261\353\263\204 \354\235\270\354\213\235\352\270\260.jpg" "b/public/guides/1/1_GENDER_\354\204\261\353\263\204 \354\235\270\354\213\235\352\270\260.jpg" new file mode 100644 index 000000000..7478ccf4f Binary files /dev/null and "b/public/guides/1/1_GENDER_\354\204\261\353\263\204 \354\235\270\354\213\235\352\270\260.jpg" differ diff --git a/public/guides/2/2_18/1.jpg b/public/guides/2/2_18/1.jpg new file mode 100644 index 000000000..91ca4317d Binary files /dev/null and b/public/guides/2/2_18/1.jpg differ diff --git a/public/guides/2/2_18/2.jpg b/public/guides/2/2_18/2.jpg new file mode 100644 index 000000000..412103fef Binary files /dev/null and b/public/guides/2/2_18/2.jpg differ diff --git a/public/guides/2/2_18/3.jpg b/public/guides/2/2_18/3.jpg new file mode 100644 index 000000000..ceddd3aeb Binary files /dev/null and b/public/guides/2/2_18/3.jpg differ diff --git a/public/guides/2/2_18/4.jpg b/public/guides/2/2_18/4.jpg new file mode 100644 index 000000000..1020dc0d2 Binary files /dev/null and b/public/guides/2/2_18/4.jpg differ diff --git a/public/guides/2/2_18/5.jpg b/public/guides/2/2_18/5.jpg new file mode 100644 index 000000000..3b4361a50 Binary files /dev/null and b/public/guides/2/2_18/5.jpg differ diff --git a/public/guides/2/2_21/1.jpg b/public/guides/2/2_21/1.jpg new file mode 100644 index 000000000..6edbcbda5 Binary files /dev/null and b/public/guides/2/2_21/1.jpg differ diff --git a/public/guides/2/2_21/2.jpg b/public/guides/2/2_21/2.jpg new file mode 100644 index 000000000..0fbac44a4 Binary files /dev/null and b/public/guides/2/2_21/2.jpg differ diff --git a/public/guides/2/2_21/3.jpg b/public/guides/2/2_21/3.jpg new file mode 100644 index 000000000..da6cad079 Binary files /dev/null and b/public/guides/2/2_21/3.jpg differ diff --git a/public/guides/2/2_21/4.jpg b/public/guides/2/2_21/4.jpg new file mode 100644 index 000000000..2072baca1 Binary files /dev/null and b/public/guides/2/2_21/4.jpg differ diff --git a/public/guides/2/2_21/5.jpg b/public/guides/2/2_21/5.jpg new file mode 100644 index 000000000..191a6c448 Binary files /dev/null and b/public/guides/2/2_21/5.jpg differ diff --git a/public/guides/2/2_22/1.jpg b/public/guides/2/2_22/1.jpg new file mode 100644 index 000000000..88b1795f5 Binary files /dev/null and b/public/guides/2/2_22/1.jpg differ diff --git a/public/guides/2/2_22/2.jpg b/public/guides/2/2_22/2.jpg new file mode 100644 index 000000000..92008e5b3 Binary files /dev/null and b/public/guides/2/2_22/2.jpg differ diff --git a/public/guides/2/2_22/3.jpg b/public/guides/2/2_22/3.jpg new file mode 100644 index 000000000..4e21a4e8e Binary files /dev/null and b/public/guides/2/2_22/3.jpg differ diff --git a/public/guides/2/2_22/4.jpg b/public/guides/2/2_22/4.jpg new file mode 100644 index 000000000..062a099bb Binary files /dev/null and b/public/guides/2/2_22/4.jpg differ diff --git a/public/guides/2/2_22/5.jpg b/public/guides/2/2_22/5.jpg new file mode 100644 index 000000000..efbb1a87d Binary files /dev/null and b/public/guides/2/2_22/5.jpg differ diff --git a/public/guides/2/2_23/1.jpg b/public/guides/2/2_23/1.jpg new file mode 100644 index 000000000..8d822dffb Binary files /dev/null and b/public/guides/2/2_23/1.jpg differ diff --git a/public/guides/2/2_23/2.jpg b/public/guides/2/2_23/2.jpg new file mode 100644 index 000000000..b6a70c440 Binary files /dev/null and b/public/guides/2/2_23/2.jpg differ diff --git a/public/guides/2/2_23/3.jpg b/public/guides/2/2_23/3.jpg new file mode 100644 index 000000000..796d69045 Binary files /dev/null and b/public/guides/2/2_23/3.jpg differ diff --git a/public/guides/2/2_23/4.jpg b/public/guides/2/2_23/4.jpg new file mode 100644 index 000000000..fd3ee4e88 Binary files /dev/null and b/public/guides/2/2_23/4.jpg differ diff --git a/public/guides/2/2_23/5.jpg b/public/guides/2/2_23/5.jpg new file mode 100644 index 000000000..a813666b5 Binary files /dev/null and b/public/guides/2/2_23/5.jpg differ diff --git a/public/guides/2/2_24/1.jpg b/public/guides/2/2_24/1.jpg new file mode 100644 index 000000000..1e04c60fd Binary files /dev/null and b/public/guides/2/2_24/1.jpg differ diff --git a/public/guides/2/2_24/2.jpg b/public/guides/2/2_24/2.jpg new file mode 100644 index 000000000..d27510a89 Binary files /dev/null and b/public/guides/2/2_24/2.jpg differ diff --git a/public/guides/2/2_24/3.jpg b/public/guides/2/2_24/3.jpg new file mode 100644 index 000000000..ddf9e062e Binary files /dev/null and b/public/guides/2/2_24/3.jpg differ diff --git a/public/guides/2/2_24/4.jpg b/public/guides/2/2_24/4.jpg new file mode 100644 index 000000000..edf33951e Binary files /dev/null and b/public/guides/2/2_24/4.jpg differ diff --git a/public/guides/2/2_24/5.jpg b/public/guides/2/2_24/5.jpg new file mode 100644 index 000000000..1fec358f2 Binary files /dev/null and b/public/guides/2/2_24/5.jpg differ diff --git a/public/guides/2/2_27/1.jpg b/public/guides/2/2_27/1.jpg new file mode 100644 index 000000000..a0402d517 Binary files /dev/null and b/public/guides/2/2_27/1.jpg differ diff --git a/public/guides/2/2_27/2.jpg b/public/guides/2/2_27/2.jpg new file mode 100644 index 000000000..e086cc6d2 Binary files /dev/null and b/public/guides/2/2_27/2.jpg differ diff --git a/public/guides/2/2_27/3.jpg b/public/guides/2/2_27/3.jpg new file mode 100644 index 000000000..a8873cda7 Binary files /dev/null and b/public/guides/2/2_27/3.jpg differ diff --git a/public/guides/2/2_27/4.jpg b/public/guides/2/2_27/4.jpg new file mode 100644 index 000000000..a0129e122 Binary files /dev/null and b/public/guides/2/2_27/4.jpg differ diff --git a/public/guides/2/2_27/5.jpg b/public/guides/2/2_27/5.jpg new file mode 100644 index 000000000..ac02ef92a Binary files /dev/null and b/public/guides/2/2_27/5.jpg differ diff --git a/public/guides/2/2_28/1.jpg b/public/guides/2/2_28/1.jpg new file mode 100644 index 000000000..7286c91d3 Binary files /dev/null and b/public/guides/2/2_28/1.jpg differ diff --git a/public/guides/2/2_28/2.jpg b/public/guides/2/2_28/2.jpg new file mode 100644 index 000000000..979281ba7 Binary files /dev/null and b/public/guides/2/2_28/2.jpg differ diff --git a/public/guides/2/2_28/3.jpg b/public/guides/2/2_28/3.jpg new file mode 100644 index 000000000..1d66761a4 Binary files /dev/null and b/public/guides/2/2_28/3.jpg differ diff --git a/public/guides/2/2_28/4.jpg b/public/guides/2/2_28/4.jpg new file mode 100644 index 000000000..1f7cba2be Binary files /dev/null and b/public/guides/2/2_28/4.jpg differ diff --git a/public/guides/2/2_28/5.jpg b/public/guides/2/2_28/5.jpg new file mode 100644 index 000000000..e69c868dc Binary files /dev/null and b/public/guides/2/2_28/5.jpg differ diff --git a/public/guides/2/2_29/1.jpg b/public/guides/2/2_29/1.jpg new file mode 100644 index 000000000..e72b20c44 Binary files /dev/null and b/public/guides/2/2_29/1.jpg differ diff --git a/public/guides/2/2_29/2.jpg b/public/guides/2/2_29/2.jpg new file mode 100644 index 000000000..471116145 Binary files /dev/null and b/public/guides/2/2_29/2.jpg differ diff --git a/public/guides/2/2_29/3.jpg b/public/guides/2/2_29/3.jpg new file mode 100644 index 000000000..de7a286b6 Binary files /dev/null and b/public/guides/2/2_29/3.jpg differ diff --git a/public/guides/2/2_29/4.jpg b/public/guides/2/2_29/4.jpg new file mode 100644 index 000000000..89e9eb059 Binary files /dev/null and b/public/guides/2/2_29/4.jpg differ diff --git a/public/guides/2/2_29/5.jpg b/public/guides/2/2_29/5.jpg new file mode 100644 index 000000000..cb8c9d345 Binary files /dev/null and b/public/guides/2/2_29/5.jpg differ diff --git a/public/guides/2/2_30/1.jpg b/public/guides/2/2_30/1.jpg new file mode 100644 index 000000000..9f949562a Binary files /dev/null and b/public/guides/2/2_30/1.jpg differ diff --git a/public/guides/2/2_30/2.jpg b/public/guides/2/2_30/2.jpg new file mode 100644 index 000000000..4521db805 Binary files /dev/null and b/public/guides/2/2_30/2.jpg differ diff --git a/public/guides/2/2_30/3.jpg b/public/guides/2/2_30/3.jpg new file mode 100644 index 000000000..8b7ba7b23 Binary files /dev/null and b/public/guides/2/2_30/3.jpg differ diff --git a/public/guides/2/2_30/4.jpg b/public/guides/2/2_30/4.jpg new file mode 100644 index 000000000..8fa9c9914 Binary files /dev/null and b/public/guides/2/2_30/4.jpg differ diff --git a/public/guides/2/2_30/5.jpg b/public/guides/2/2_30/5.jpg new file mode 100644 index 000000000..5d1440492 Binary files /dev/null and b/public/guides/2/2_30/5.jpg differ diff --git a/public/guides/2/2_31/1.jpg b/public/guides/2/2_31/1.jpg new file mode 100644 index 000000000..df026653d Binary files /dev/null and b/public/guides/2/2_31/1.jpg differ diff --git a/public/guides/2/2_31/2.jpg b/public/guides/2/2_31/2.jpg new file mode 100644 index 000000000..9929fb87e Binary files /dev/null and b/public/guides/2/2_31/2.jpg differ diff --git a/public/guides/2/2_31/3.jpg b/public/guides/2/2_31/3.jpg new file mode 100644 index 000000000..0b4f66719 Binary files /dev/null and b/public/guides/2/2_31/3.jpg differ diff --git a/public/guides/2/2_31/4.jpg b/public/guides/2/2_31/4.jpg new file mode 100644 index 000000000..70df646b3 Binary files /dev/null and b/public/guides/2/2_31/4.jpg differ diff --git a/public/guides/2/2_31/5.jpg b/public/guides/2/2_31/5.jpg new file mode 100644 index 000000000..a7fa8c798 Binary files /dev/null and b/public/guides/2/2_31/5.jpg differ diff --git "a/public/guides/2/2_MAN_style \353\202\250\354\204\261 \354\212\244\355\203\200\354\235\274 \354\235\270\354\213\235\352\270\260.jpg" "b/public/guides/2/2_MAN_style \353\202\250\354\204\261 \354\212\244\355\203\200\354\235\274 \354\235\270\354\213\235\352\270\260.jpg" new file mode 100644 index 000000000..1f53e3345 Binary files /dev/null and "b/public/guides/2/2_MAN_style \353\202\250\354\204\261 \354\212\244\355\203\200\354\235\274 \354\235\270\354\213\235\352\270\260.jpg" differ diff --git a/public/guides/3/3_18/1.jpg b/public/guides/3/3_18/1.jpg new file mode 100644 index 000000000..bcd26b3b9 Binary files /dev/null and b/public/guides/3/3_18/1.jpg differ diff --git a/public/guides/3/3_18/2.jpg b/public/guides/3/3_18/2.jpg new file mode 100644 index 000000000..428bf593b Binary files /dev/null and b/public/guides/3/3_18/2.jpg differ diff --git a/public/guides/3/3_18/3.jpg b/public/guides/3/3_18/3.jpg new file mode 100644 index 000000000..04b4d7eec Binary files /dev/null and b/public/guides/3/3_18/3.jpg differ diff --git a/public/guides/3/3_18/4.jpg b/public/guides/3/3_18/4.jpg new file mode 100644 index 000000000..7ab3aaf43 Binary files /dev/null and b/public/guides/3/3_18/4.jpg differ diff --git a/public/guides/3/3_18/5.jpg b/public/guides/3/3_18/5.jpg new file mode 100644 index 000000000..f01324dfc Binary files /dev/null and b/public/guides/3/3_18/5.jpg differ diff --git a/public/guides/3/3_19/1.jpg b/public/guides/3/3_19/1.jpg new file mode 100644 index 000000000..45457b355 Binary files /dev/null and b/public/guides/3/3_19/1.jpg differ diff --git a/public/guides/3/3_19/2.jpg b/public/guides/3/3_19/2.jpg new file mode 100644 index 000000000..1d2e2b53c Binary files /dev/null and b/public/guides/3/3_19/2.jpg differ diff --git a/public/guides/3/3_19/3.jpg b/public/guides/3/3_19/3.jpg new file mode 100644 index 000000000..e75ed64fc Binary files /dev/null and b/public/guides/3/3_19/3.jpg differ diff --git a/public/guides/3/3_19/4.jpg b/public/guides/3/3_19/4.jpg new file mode 100644 index 000000000..2b8f33736 Binary files /dev/null and b/public/guides/3/3_19/4.jpg differ diff --git a/public/guides/3/3_19/5.jpg b/public/guides/3/3_19/5.jpg new file mode 100644 index 000000000..2e49b4cb5 Binary files /dev/null and b/public/guides/3/3_19/5.jpg differ diff --git a/public/guides/3/3_20/1.jpg b/public/guides/3/3_20/1.jpg new file mode 100644 index 000000000..1fb22aa17 Binary files /dev/null and b/public/guides/3/3_20/1.jpg differ diff --git a/public/guides/3/3_20/2.jpg b/public/guides/3/3_20/2.jpg new file mode 100644 index 000000000..b4302345d Binary files /dev/null and b/public/guides/3/3_20/2.jpg differ diff --git a/public/guides/3/3_20/3.jpg b/public/guides/3/3_20/3.jpg new file mode 100644 index 000000000..ac98cf18a Binary files /dev/null and b/public/guides/3/3_20/3.jpg differ diff --git a/public/guides/3/3_20/4.jpg b/public/guides/3/3_20/4.jpg new file mode 100644 index 000000000..6e8b3c0a1 Binary files /dev/null and b/public/guides/3/3_20/4.jpg differ diff --git a/public/guides/3/3_20/5.jpg b/public/guides/3/3_20/5.jpg new file mode 100644 index 000000000..c6a5f86d4 Binary files /dev/null and b/public/guides/3/3_20/5.jpg differ diff --git a/public/guides/3/3_21/1.jpg b/public/guides/3/3_21/1.jpg new file mode 100644 index 000000000..97b817aad Binary files /dev/null and b/public/guides/3/3_21/1.jpg differ diff --git a/public/guides/3/3_21/2.jpg b/public/guides/3/3_21/2.jpg new file mode 100644 index 000000000..31b1eefe0 Binary files /dev/null and b/public/guides/3/3_21/2.jpg differ diff --git a/public/guides/3/3_21/3.jpg b/public/guides/3/3_21/3.jpg new file mode 100644 index 000000000..e4b1f1065 Binary files /dev/null and b/public/guides/3/3_21/3.jpg differ diff --git a/public/guides/3/3_21/4.jpg b/public/guides/3/3_21/4.jpg new file mode 100644 index 000000000..4a4435003 Binary files /dev/null and b/public/guides/3/3_21/4.jpg differ diff --git a/public/guides/3/3_21/5.jpg b/public/guides/3/3_21/5.jpg new file mode 100644 index 000000000..473bb9ac4 Binary files /dev/null and b/public/guides/3/3_21/5.jpg differ diff --git a/public/guides/3/3_22/1.jpg b/public/guides/3/3_22/1.jpg new file mode 100644 index 000000000..5f5b0795c Binary files /dev/null and b/public/guides/3/3_22/1.jpg differ diff --git a/public/guides/3/3_22/2.jpg b/public/guides/3/3_22/2.jpg new file mode 100644 index 000000000..39139b63d Binary files /dev/null and b/public/guides/3/3_22/2.jpg differ diff --git a/public/guides/3/3_22/3.jpg b/public/guides/3/3_22/3.jpg new file mode 100644 index 000000000..1f0a7068a Binary files /dev/null and b/public/guides/3/3_22/3.jpg differ diff --git a/public/guides/3/3_22/4.jpg b/public/guides/3/3_22/4.jpg new file mode 100644 index 000000000..f71e61ce9 Binary files /dev/null and b/public/guides/3/3_22/4.jpg differ diff --git a/public/guides/3/3_22/5.jpg b/public/guides/3/3_22/5.jpg new file mode 100644 index 000000000..5f56daf59 Binary files /dev/null and b/public/guides/3/3_22/5.jpg differ diff --git a/public/guides/3/3_23/1.JPG b/public/guides/3/3_23/1.JPG new file mode 100644 index 000000000..22884bc20 Binary files /dev/null and b/public/guides/3/3_23/1.JPG differ diff --git a/public/guides/3/3_23/1.jpg b/public/guides/3/3_23/1.jpg new file mode 100644 index 000000000..22884bc20 Binary files /dev/null and b/public/guides/3/3_23/1.jpg differ diff --git a/public/guides/3/3_23/2.jpg b/public/guides/3/3_23/2.jpg new file mode 100644 index 000000000..eb8e6808b Binary files /dev/null and b/public/guides/3/3_23/2.jpg differ diff --git a/public/guides/3/3_23/3.jpg b/public/guides/3/3_23/3.jpg new file mode 100644 index 000000000..857f4c846 Binary files /dev/null and b/public/guides/3/3_23/3.jpg differ diff --git a/public/guides/3/3_23/4.JPG b/public/guides/3/3_23/4.JPG new file mode 100644 index 000000000..13032baf0 Binary files /dev/null and b/public/guides/3/3_23/4.JPG differ diff --git a/public/guides/3/3_23/4.jpg b/public/guides/3/3_23/4.jpg new file mode 100644 index 000000000..13032baf0 Binary files /dev/null and b/public/guides/3/3_23/4.jpg differ diff --git a/public/guides/3/3_23/5.JPG b/public/guides/3/3_23/5.JPG new file mode 100644 index 000000000..8ef19ea99 Binary files /dev/null and b/public/guides/3/3_23/5.JPG differ diff --git a/public/guides/3/3_23/5.jpg b/public/guides/3/3_23/5.jpg new file mode 100644 index 000000000..8ef19ea99 Binary files /dev/null and b/public/guides/3/3_23/5.jpg differ diff --git a/public/guides/3/3_24/1.jpg b/public/guides/3/3_24/1.jpg new file mode 100644 index 000000000..61baaec3d Binary files /dev/null and b/public/guides/3/3_24/1.jpg differ diff --git a/public/guides/3/3_24/2.jpg b/public/guides/3/3_24/2.jpg new file mode 100644 index 000000000..19477b3cf Binary files /dev/null and b/public/guides/3/3_24/2.jpg differ diff --git a/public/guides/3/3_24/3.jpg b/public/guides/3/3_24/3.jpg new file mode 100644 index 000000000..43fb8b7b1 Binary files /dev/null and b/public/guides/3/3_24/3.jpg differ diff --git a/public/guides/3/3_24/4.jpg b/public/guides/3/3_24/4.jpg new file mode 100644 index 000000000..89efa1c6d Binary files /dev/null and b/public/guides/3/3_24/4.jpg differ diff --git a/public/guides/3/3_24/5.jpg b/public/guides/3/3_24/5.jpg new file mode 100644 index 000000000..52bc30d05 Binary files /dev/null and b/public/guides/3/3_24/5.jpg differ diff --git a/public/guides/3/3_25/1.jpg b/public/guides/3/3_25/1.jpg new file mode 100644 index 000000000..05c92aac4 Binary files /dev/null and b/public/guides/3/3_25/1.jpg differ diff --git a/public/guides/3/3_25/2.jpg b/public/guides/3/3_25/2.jpg new file mode 100644 index 000000000..167ebd00e Binary files /dev/null and b/public/guides/3/3_25/2.jpg differ diff --git a/public/guides/3/3_25/3.jpg b/public/guides/3/3_25/3.jpg new file mode 100644 index 000000000..d45e5df64 Binary files /dev/null and b/public/guides/3/3_25/3.jpg differ diff --git a/public/guides/3/3_25/4.jpg b/public/guides/3/3_25/4.jpg new file mode 100644 index 000000000..8d0c619da Binary files /dev/null and b/public/guides/3/3_25/4.jpg differ diff --git a/public/guides/3/3_25/5.jpg b/public/guides/3/3_25/5.jpg new file mode 100644 index 000000000..4006972a2 Binary files /dev/null and b/public/guides/3/3_25/5.jpg differ diff --git a/public/guides/3/3_26/1.jpg b/public/guides/3/3_26/1.jpg new file mode 100644 index 000000000..e86ec657f Binary files /dev/null and b/public/guides/3/3_26/1.jpg differ diff --git a/public/guides/3/3_26/2.jpg b/public/guides/3/3_26/2.jpg new file mode 100644 index 000000000..d42aaa762 Binary files /dev/null and b/public/guides/3/3_26/2.jpg differ diff --git a/public/guides/3/3_26/3.jpg b/public/guides/3/3_26/3.jpg new file mode 100644 index 000000000..e6fa52a4a Binary files /dev/null and b/public/guides/3/3_26/3.jpg differ diff --git a/public/guides/3/3_26/4.jpg b/public/guides/3/3_26/4.jpg new file mode 100644 index 000000000..578347259 Binary files /dev/null and b/public/guides/3/3_26/4.jpg differ diff --git a/public/guides/3/3_26/5.jpg b/public/guides/3/3_26/5.jpg new file mode 100644 index 000000000..71190ba49 Binary files /dev/null and b/public/guides/3/3_26/5.jpg differ diff --git a/public/guides/3/3_28/1.jpg b/public/guides/3/3_28/1.jpg new file mode 100644 index 000000000..3c1fcecca Binary files /dev/null and b/public/guides/3/3_28/1.jpg differ diff --git a/public/guides/3/3_28/2.jpg b/public/guides/3/3_28/2.jpg new file mode 100644 index 000000000..e7ac54da4 Binary files /dev/null and b/public/guides/3/3_28/2.jpg differ diff --git a/public/guides/3/3_28/3.jpg b/public/guides/3/3_28/3.jpg new file mode 100644 index 000000000..2305c8127 Binary files /dev/null and b/public/guides/3/3_28/3.jpg differ diff --git a/public/guides/3/3_28/4.jpg b/public/guides/3/3_28/4.jpg new file mode 100644 index 000000000..e94c844fd Binary files /dev/null and b/public/guides/3/3_28/4.jpg differ diff --git a/public/guides/3/3_28/5.jpg b/public/guides/3/3_28/5.jpg new file mode 100644 index 000000000..43da7c704 Binary files /dev/null and b/public/guides/3/3_28/5.jpg differ diff --git a/public/guides/3/3_29/1.jpg b/public/guides/3/3_29/1.jpg new file mode 100644 index 000000000..8f1251e86 Binary files /dev/null and b/public/guides/3/3_29/1.jpg differ diff --git a/public/guides/3/3_29/2.jpg b/public/guides/3/3_29/2.jpg new file mode 100644 index 000000000..b80b2cbf5 Binary files /dev/null and b/public/guides/3/3_29/2.jpg differ diff --git a/public/guides/3/3_29/3.jpg b/public/guides/3/3_29/3.jpg new file mode 100644 index 000000000..aaa4d9e44 Binary files /dev/null and b/public/guides/3/3_29/3.jpg differ diff --git a/public/guides/3/3_29/4.jpg b/public/guides/3/3_29/4.jpg new file mode 100644 index 000000000..e596cffe9 Binary files /dev/null and b/public/guides/3/3_29/4.jpg differ diff --git a/public/guides/3/3_29/5.jpg b/public/guides/3/3_29/5.jpg new file mode 100644 index 000000000..a5c73d499 Binary files /dev/null and b/public/guides/3/3_29/5.jpg differ diff --git a/public/guides/3/3_30/1.jpg b/public/guides/3/3_30/1.jpg new file mode 100644 index 000000000..910fae967 Binary files /dev/null and b/public/guides/3/3_30/1.jpg differ diff --git a/public/guides/3/3_30/2.jpg b/public/guides/3/3_30/2.jpg new file mode 100644 index 000000000..9063228da Binary files /dev/null and b/public/guides/3/3_30/2.jpg differ diff --git a/public/guides/3/3_30/3.jpg b/public/guides/3/3_30/3.jpg new file mode 100644 index 000000000..0636c5187 Binary files /dev/null and b/public/guides/3/3_30/3.jpg differ diff --git a/public/guides/3/3_30/4.jpg b/public/guides/3/3_30/4.jpg new file mode 100644 index 000000000..0a391f44a Binary files /dev/null and b/public/guides/3/3_30/4.jpg differ diff --git a/public/guides/3/3_30/5.jpg b/public/guides/3/3_30/5.jpg new file mode 100644 index 000000000..95306b940 Binary files /dev/null and b/public/guides/3/3_30/5.jpg differ diff --git a/public/guides/3/3_31/1.jpg b/public/guides/3/3_31/1.jpg new file mode 100644 index 000000000..9c3b3ed04 Binary files /dev/null and b/public/guides/3/3_31/1.jpg differ diff --git a/public/guides/3/3_31/2.jpg b/public/guides/3/3_31/2.jpg new file mode 100644 index 000000000..7aadd7dc4 Binary files /dev/null and b/public/guides/3/3_31/2.jpg differ diff --git a/public/guides/3/3_31/3.jpg b/public/guides/3/3_31/3.jpg new file mode 100644 index 000000000..1b9652f99 Binary files /dev/null and b/public/guides/3/3_31/3.jpg differ diff --git a/public/guides/3/3_31/4.jpg b/public/guides/3/3_31/4.jpg new file mode 100644 index 000000000..617ca9f4f Binary files /dev/null and b/public/guides/3/3_31/4.jpg differ diff --git a/public/guides/3/3_31/5.jpg b/public/guides/3/3_31/5.jpg new file mode 100644 index 000000000..46a62772d Binary files /dev/null and b/public/guides/3/3_31/5.jpg differ diff --git "a/public/guides/3/3_WOMAN style_\354\227\254\354\204\261 \354\212\244\355\203\200\354\235\274 \354\235\270\354\213\235\352\270\260.jpg" "b/public/guides/3/3_WOMAN style_\354\227\254\354\204\261 \354\212\244\355\203\200\354\235\274 \354\235\270\354\213\235\352\270\260.jpg" new file mode 100644 index 000000000..8890e5bd5 Binary files /dev/null and "b/public/guides/3/3_WOMAN style_\354\227\254\354\204\261 \354\212\244\355\203\200\354\235\274 \354\235\270\354\213\235\352\270\260.jpg" differ diff --git a/public/guides/4/4_1/1.jpg b/public/guides/4/4_1/1.jpg new file mode 100644 index 000000000..fd9483e51 Binary files /dev/null and b/public/guides/4/4_1/1.jpg differ diff --git a/public/guides/4/4_1/2.jpg b/public/guides/4/4_1/2.jpg new file mode 100644 index 000000000..fccece6d0 Binary files /dev/null and b/public/guides/4/4_1/2.jpg differ diff --git a/public/guides/4/4_1/3.jpg b/public/guides/4/4_1/3.jpg new file mode 100644 index 000000000..4cd6f1174 Binary files /dev/null and b/public/guides/4/4_1/3.jpg differ diff --git a/public/guides/4/4_1/4.jpg b/public/guides/4/4_1/4.jpg new file mode 100644 index 000000000..b0ece44a2 Binary files /dev/null and b/public/guides/4/4_1/4.jpg differ diff --git a/public/guides/4/4_1/5.jpg b/public/guides/4/4_1/5.jpg new file mode 100644 index 000000000..fec9ea6e8 Binary files /dev/null and b/public/guides/4/4_1/5.jpg differ diff --git a/public/guides/4/4_10/1.jpg b/public/guides/4/4_10/1.jpg new file mode 100644 index 000000000..856a0e699 Binary files /dev/null and b/public/guides/4/4_10/1.jpg differ diff --git a/public/guides/4/4_10/2.jpg b/public/guides/4/4_10/2.jpg new file mode 100644 index 000000000..127f883f5 Binary files /dev/null and b/public/guides/4/4_10/2.jpg differ diff --git a/public/guides/4/4_10/3.jpg b/public/guides/4/4_10/3.jpg new file mode 100644 index 000000000..1c94f4896 Binary files /dev/null and b/public/guides/4/4_10/3.jpg differ diff --git a/public/guides/4/4_10/4.jpg b/public/guides/4/4_10/4.jpg new file mode 100644 index 000000000..bf8949813 Binary files /dev/null and b/public/guides/4/4_10/4.jpg differ diff --git a/public/guides/4/4_10/5.jpg b/public/guides/4/4_10/5.jpg new file mode 100644 index 000000000..04b388abe Binary files /dev/null and b/public/guides/4/4_10/5.jpg differ diff --git a/public/guides/4/4_11/1.jpg b/public/guides/4/4_11/1.jpg new file mode 100644 index 000000000..a75d2df82 Binary files /dev/null and b/public/guides/4/4_11/1.jpg differ diff --git a/public/guides/4/4_11/2.jpg b/public/guides/4/4_11/2.jpg new file mode 100644 index 000000000..e3e1cfd06 Binary files /dev/null and b/public/guides/4/4_11/2.jpg differ diff --git a/public/guides/4/4_11/3.jpg b/public/guides/4/4_11/3.jpg new file mode 100644 index 000000000..3b3ddf64c Binary files /dev/null and b/public/guides/4/4_11/3.jpg differ diff --git a/public/guides/4/4_11/4.jpg b/public/guides/4/4_11/4.jpg new file mode 100644 index 000000000..0ddd6c81a Binary files /dev/null and b/public/guides/4/4_11/4.jpg differ diff --git a/public/guides/4/4_11/5.jpg b/public/guides/4/4_11/5.jpg new file mode 100644 index 000000000..e9e8deed4 Binary files /dev/null and b/public/guides/4/4_11/5.jpg differ diff --git a/public/guides/4/4_12/1.jpg b/public/guides/4/4_12/1.jpg new file mode 100644 index 000000000..1976eb9cb Binary files /dev/null and b/public/guides/4/4_12/1.jpg differ diff --git a/public/guides/4/4_12/2.jpg b/public/guides/4/4_12/2.jpg new file mode 100644 index 000000000..4e12396d5 Binary files /dev/null and b/public/guides/4/4_12/2.jpg differ diff --git a/public/guides/4/4_12/3.jpg b/public/guides/4/4_12/3.jpg new file mode 100644 index 000000000..37be16674 Binary files /dev/null and b/public/guides/4/4_12/3.jpg differ diff --git a/public/guides/4/4_12/4.jpg b/public/guides/4/4_12/4.jpg new file mode 100644 index 000000000..baf0493ab Binary files /dev/null and b/public/guides/4/4_12/4.jpg differ diff --git a/public/guides/4/4_12/5.jpg b/public/guides/4/4_12/5.jpg new file mode 100644 index 000000000..c44a9ddb3 Binary files /dev/null and b/public/guides/4/4_12/5.jpg differ diff --git a/public/guides/4/4_2/1.jpg b/public/guides/4/4_2/1.jpg new file mode 100644 index 000000000..76bd96c00 Binary files /dev/null and b/public/guides/4/4_2/1.jpg differ diff --git a/public/guides/4/4_2/2.jpg b/public/guides/4/4_2/2.jpg new file mode 100644 index 000000000..29276655b Binary files /dev/null and b/public/guides/4/4_2/2.jpg differ diff --git a/public/guides/4/4_2/3.jpg b/public/guides/4/4_2/3.jpg new file mode 100644 index 000000000..beca78695 Binary files /dev/null and b/public/guides/4/4_2/3.jpg differ diff --git a/public/guides/4/4_2/4.jpg b/public/guides/4/4_2/4.jpg new file mode 100644 index 000000000..4eb6d51b4 Binary files /dev/null and b/public/guides/4/4_2/4.jpg differ diff --git a/public/guides/4/4_2/5.jpg b/public/guides/4/4_2/5.jpg new file mode 100644 index 000000000..d7b8b3203 Binary files /dev/null and b/public/guides/4/4_2/5.jpg differ diff --git a/public/guides/4/4_3/1.jpg b/public/guides/4/4_3/1.jpg new file mode 100644 index 000000000..25621724c Binary files /dev/null and b/public/guides/4/4_3/1.jpg differ diff --git a/public/guides/4/4_3/2.jpg b/public/guides/4/4_3/2.jpg new file mode 100644 index 000000000..33587e076 Binary files /dev/null and b/public/guides/4/4_3/2.jpg differ diff --git a/public/guides/4/4_3/3.jpg b/public/guides/4/4_3/3.jpg new file mode 100644 index 000000000..f87f3c0c8 Binary files /dev/null and b/public/guides/4/4_3/3.jpg differ diff --git a/public/guides/4/4_3/4.jpg b/public/guides/4/4_3/4.jpg new file mode 100644 index 000000000..cdb2d1cef Binary files /dev/null and b/public/guides/4/4_3/4.jpg differ diff --git a/public/guides/4/4_3/5.jpg b/public/guides/4/4_3/5.jpg new file mode 100644 index 000000000..ea06a148d Binary files /dev/null and b/public/guides/4/4_3/5.jpg differ diff --git a/public/guides/4/4_4/1.jpg b/public/guides/4/4_4/1.jpg new file mode 100644 index 000000000..f27b045de Binary files /dev/null and b/public/guides/4/4_4/1.jpg differ diff --git a/public/guides/4/4_4/2.jpg b/public/guides/4/4_4/2.jpg new file mode 100644 index 000000000..f29364a2f Binary files /dev/null and b/public/guides/4/4_4/2.jpg differ diff --git a/public/guides/4/4_4/3.jpg b/public/guides/4/4_4/3.jpg new file mode 100644 index 000000000..db6d4c045 Binary files /dev/null and b/public/guides/4/4_4/3.jpg differ diff --git a/public/guides/4/4_4/4.jpg b/public/guides/4/4_4/4.jpg new file mode 100644 index 000000000..55b6688f8 Binary files /dev/null and b/public/guides/4/4_4/4.jpg differ diff --git a/public/guides/4/4_4/5.jpg b/public/guides/4/4_4/5.jpg new file mode 100644 index 000000000..4459f3b9f Binary files /dev/null and b/public/guides/4/4_4/5.jpg differ diff --git a/public/guides/4/4_5/1.jpg b/public/guides/4/4_5/1.jpg new file mode 100644 index 000000000..2122e0922 Binary files /dev/null and b/public/guides/4/4_5/1.jpg differ diff --git a/public/guides/4/4_5/2.jpg b/public/guides/4/4_5/2.jpg new file mode 100644 index 000000000..c71f2c08e Binary files /dev/null and b/public/guides/4/4_5/2.jpg differ diff --git a/public/guides/4/4_5/3.jpg b/public/guides/4/4_5/3.jpg new file mode 100644 index 000000000..5676f62d7 Binary files /dev/null and b/public/guides/4/4_5/3.jpg differ diff --git a/public/guides/4/4_5/4.jpg b/public/guides/4/4_5/4.jpg new file mode 100644 index 000000000..f2386b1d0 Binary files /dev/null and b/public/guides/4/4_5/4.jpg differ diff --git a/public/guides/4/4_5/5.jpg b/public/guides/4/4_5/5.jpg new file mode 100644 index 000000000..0e74eceea Binary files /dev/null and b/public/guides/4/4_5/5.jpg differ diff --git a/public/guides/4/4_6/1.jpg b/public/guides/4/4_6/1.jpg new file mode 100644 index 000000000..5a12a2573 Binary files /dev/null and b/public/guides/4/4_6/1.jpg differ diff --git a/public/guides/4/4_6/2.jpg b/public/guides/4/4_6/2.jpg new file mode 100644 index 000000000..775c08888 Binary files /dev/null and b/public/guides/4/4_6/2.jpg differ diff --git a/public/guides/4/4_6/3.jpg b/public/guides/4/4_6/3.jpg new file mode 100644 index 000000000..bf6508095 Binary files /dev/null and b/public/guides/4/4_6/3.jpg differ diff --git a/public/guides/4/4_6/4.jpg b/public/guides/4/4_6/4.jpg new file mode 100644 index 000000000..5e34d7f72 Binary files /dev/null and b/public/guides/4/4_6/4.jpg differ diff --git a/public/guides/4/4_6/5.jpg b/public/guides/4/4_6/5.jpg new file mode 100644 index 000000000..1e93112d6 Binary files /dev/null and b/public/guides/4/4_6/5.jpg differ diff --git a/public/guides/4/4_7/1.jpg b/public/guides/4/4_7/1.jpg new file mode 100644 index 000000000..4878e3ef7 Binary files /dev/null and b/public/guides/4/4_7/1.jpg differ diff --git a/public/guides/4/4_7/2.jpg b/public/guides/4/4_7/2.jpg new file mode 100644 index 000000000..0bad68113 Binary files /dev/null and b/public/guides/4/4_7/2.jpg differ diff --git a/public/guides/4/4_7/3.jpg b/public/guides/4/4_7/3.jpg new file mode 100644 index 000000000..6253d8061 Binary files /dev/null and b/public/guides/4/4_7/3.jpg differ diff --git a/public/guides/4/4_7/4.jpg b/public/guides/4/4_7/4.jpg new file mode 100644 index 000000000..d736fa512 Binary files /dev/null and b/public/guides/4/4_7/4.jpg differ diff --git a/public/guides/4/4_7/5.jpg b/public/guides/4/4_7/5.jpg new file mode 100644 index 000000000..64c91398d Binary files /dev/null and b/public/guides/4/4_7/5.jpg differ diff --git a/public/guides/4/4_8/1.jpg b/public/guides/4/4_8/1.jpg new file mode 100644 index 000000000..71f54b63e Binary files /dev/null and b/public/guides/4/4_8/1.jpg differ diff --git a/public/guides/4/4_8/2.jpg b/public/guides/4/4_8/2.jpg new file mode 100644 index 000000000..6bced0082 Binary files /dev/null and b/public/guides/4/4_8/2.jpg differ diff --git a/public/guides/4/4_8/3.jpg b/public/guides/4/4_8/3.jpg new file mode 100644 index 000000000..edba75c4b Binary files /dev/null and b/public/guides/4/4_8/3.jpg differ diff --git a/public/guides/4/4_8/4.jpg b/public/guides/4/4_8/4.jpg new file mode 100644 index 000000000..c416f56c6 Binary files /dev/null and b/public/guides/4/4_8/4.jpg differ diff --git a/public/guides/4/4_8/5.jpg b/public/guides/4/4_8/5.jpg new file mode 100644 index 000000000..eb5b26d85 Binary files /dev/null and b/public/guides/4/4_8/5.jpg differ diff --git a/public/guides/4/4_9/1.jpg b/public/guides/4/4_9/1.jpg new file mode 100644 index 000000000..9576c4587 Binary files /dev/null and b/public/guides/4/4_9/1.jpg differ diff --git a/public/guides/4/4_9/2.jpg b/public/guides/4/4_9/2.jpg new file mode 100644 index 000000000..9e708ee14 Binary files /dev/null and b/public/guides/4/4_9/2.jpg differ diff --git a/public/guides/4/4_9/3.jpg b/public/guides/4/4_9/3.jpg new file mode 100644 index 000000000..68b38b2dd Binary files /dev/null and b/public/guides/4/4_9/3.jpg differ diff --git a/public/guides/4/4_9/4.jpg b/public/guides/4/4_9/4.jpg new file mode 100644 index 000000000..75fe547bb Binary files /dev/null and b/public/guides/4/4_9/4.jpg differ diff --git a/public/guides/4/4_9/5.jpg b/public/guides/4/4_9/5.jpg new file mode 100644 index 000000000..d2c6095c6 Binary files /dev/null and b/public/guides/4/4_9/5.jpg differ diff --git "a/public/guides/4/4_ITEM_TOP category_\355\222\210\353\252\251 \354\271\264\355\205\214\352\263\240\353\246\254.jpg" "b/public/guides/4/4_ITEM_TOP category_\355\222\210\353\252\251 \354\271\264\355\205\214\352\263\240\353\246\254.jpg" new file mode 100644 index 000000000..14712d771 Binary files /dev/null and "b/public/guides/4/4_ITEM_TOP category_\355\222\210\353\252\251 \354\271\264\355\205\214\352\263\240\353\246\254.jpg" differ diff --git a/public/guides/5/5_1/1.JPG b/public/guides/5/5_1/1.JPG new file mode 100644 index 000000000..b9523fff3 Binary files /dev/null and b/public/guides/5/5_1/1.JPG differ diff --git a/public/guides/5/5_1/1.jpg b/public/guides/5/5_1/1.jpg new file mode 100644 index 000000000..b9523fff3 Binary files /dev/null and b/public/guides/5/5_1/1.jpg differ diff --git a/public/guides/5/5_1/2.jpg b/public/guides/5/5_1/2.jpg new file mode 100644 index 000000000..21e189c7a Binary files /dev/null and b/public/guides/5/5_1/2.jpg differ diff --git a/public/guides/5/5_1/3.jpg b/public/guides/5/5_1/3.jpg new file mode 100644 index 000000000..ea5471e36 Binary files /dev/null and b/public/guides/5/5_1/3.jpg differ diff --git a/public/guides/5/5_1/4.jpg b/public/guides/5/5_1/4.jpg new file mode 100644 index 000000000..e0314f5cb Binary files /dev/null and b/public/guides/5/5_1/4.jpg differ diff --git a/public/guides/5/5_1/5.jpg b/public/guides/5/5_1/5.jpg new file mode 100644 index 000000000..29b7e011a Binary files /dev/null and b/public/guides/5/5_1/5.jpg differ diff --git a/public/guides/5/5_10/1.jpg b/public/guides/5/5_10/1.jpg new file mode 100644 index 000000000..7a5c54807 Binary files /dev/null and b/public/guides/5/5_10/1.jpg differ diff --git a/public/guides/5/5_10/2.jpg b/public/guides/5/5_10/2.jpg new file mode 100644 index 000000000..a9f159a8c Binary files /dev/null and b/public/guides/5/5_10/2.jpg differ diff --git a/public/guides/5/5_10/3.jpg b/public/guides/5/5_10/3.jpg new file mode 100644 index 000000000..b73fbb190 Binary files /dev/null and b/public/guides/5/5_10/3.jpg differ diff --git a/public/guides/5/5_10/4.jpg b/public/guides/5/5_10/4.jpg new file mode 100644 index 000000000..fa38d5d5b Binary files /dev/null and b/public/guides/5/5_10/4.jpg differ diff --git a/public/guides/5/5_10/5.jpg b/public/guides/5/5_10/5.jpg new file mode 100644 index 000000000..49b934467 Binary files /dev/null and b/public/guides/5/5_10/5.jpg differ diff --git a/public/guides/5/5_11/1.jpg b/public/guides/5/5_11/1.jpg new file mode 100644 index 000000000..982075387 Binary files /dev/null and b/public/guides/5/5_11/1.jpg differ diff --git a/public/guides/5/5_11/2.jpg b/public/guides/5/5_11/2.jpg new file mode 100644 index 000000000..dcab1d930 Binary files /dev/null and b/public/guides/5/5_11/2.jpg differ diff --git a/public/guides/5/5_11/3.jpg b/public/guides/5/5_11/3.jpg new file mode 100644 index 000000000..8dbf6f94d Binary files /dev/null and b/public/guides/5/5_11/3.jpg differ diff --git a/public/guides/5/5_11/4.jpg b/public/guides/5/5_11/4.jpg new file mode 100644 index 000000000..e46069e6f Binary files /dev/null and b/public/guides/5/5_11/4.jpg differ diff --git a/public/guides/5/5_11/5.jpg b/public/guides/5/5_11/5.jpg new file mode 100644 index 000000000..3cc50ce60 Binary files /dev/null and b/public/guides/5/5_11/5.jpg differ diff --git a/public/guides/5/5_12/1.JPG b/public/guides/5/5_12/1.JPG new file mode 100644 index 000000000..ab4caf20f Binary files /dev/null and b/public/guides/5/5_12/1.JPG differ diff --git a/public/guides/5/5_12/1.jpg b/public/guides/5/5_12/1.jpg new file mode 100644 index 000000000..ab4caf20f Binary files /dev/null and b/public/guides/5/5_12/1.jpg differ diff --git a/public/guides/5/5_12/2.JPG b/public/guides/5/5_12/2.JPG new file mode 100644 index 000000000..45fcd71dd Binary files /dev/null and b/public/guides/5/5_12/2.JPG differ diff --git a/public/guides/5/5_12/2.jpg b/public/guides/5/5_12/2.jpg new file mode 100644 index 000000000..45fcd71dd Binary files /dev/null and b/public/guides/5/5_12/2.jpg differ diff --git a/public/guides/5/5_12/3.jpg b/public/guides/5/5_12/3.jpg new file mode 100644 index 000000000..cb407f34f Binary files /dev/null and b/public/guides/5/5_12/3.jpg differ diff --git a/public/guides/5/5_12/4.JPG b/public/guides/5/5_12/4.JPG new file mode 100644 index 000000000..7a34a0f71 Binary files /dev/null and b/public/guides/5/5_12/4.JPG differ diff --git a/public/guides/5/5_12/4.jpg b/public/guides/5/5_12/4.jpg new file mode 100644 index 000000000..7a34a0f71 Binary files /dev/null and b/public/guides/5/5_12/4.jpg differ diff --git a/public/guides/5/5_12/5.jpg b/public/guides/5/5_12/5.jpg new file mode 100644 index 000000000..8a435cb19 Binary files /dev/null and b/public/guides/5/5_12/5.jpg differ diff --git a/public/guides/5/5_13/1.jpg b/public/guides/5/5_13/1.jpg new file mode 100644 index 000000000..7a9485c7d Binary files /dev/null and b/public/guides/5/5_13/1.jpg differ diff --git a/public/guides/5/5_13/2.jpg b/public/guides/5/5_13/2.jpg new file mode 100644 index 000000000..544f419a0 Binary files /dev/null and b/public/guides/5/5_13/2.jpg differ diff --git a/public/guides/5/5_13/3.jpg b/public/guides/5/5_13/3.jpg new file mode 100644 index 000000000..e407a5728 Binary files /dev/null and b/public/guides/5/5_13/3.jpg differ diff --git a/public/guides/5/5_13/4.JPG b/public/guides/5/5_13/4.JPG new file mode 100644 index 000000000..037157ebd Binary files /dev/null and b/public/guides/5/5_13/4.JPG differ diff --git a/public/guides/5/5_13/4.jpg b/public/guides/5/5_13/4.jpg new file mode 100644 index 000000000..037157ebd Binary files /dev/null and b/public/guides/5/5_13/4.jpg differ diff --git a/public/guides/5/5_13/5.jpg b/public/guides/5/5_13/5.jpg new file mode 100644 index 000000000..5cd544fc1 Binary files /dev/null and b/public/guides/5/5_13/5.jpg differ diff --git a/public/guides/5/5_14/1.JPG b/public/guides/5/5_14/1.JPG new file mode 100644 index 000000000..eb28ad590 Binary files /dev/null and b/public/guides/5/5_14/1.JPG differ diff --git a/public/guides/5/5_14/1.jpg b/public/guides/5/5_14/1.jpg new file mode 100644 index 000000000..eb28ad590 Binary files /dev/null and b/public/guides/5/5_14/1.jpg differ diff --git a/public/guides/5/5_14/2.JPG b/public/guides/5/5_14/2.JPG new file mode 100644 index 000000000..a95c0508c Binary files /dev/null and b/public/guides/5/5_14/2.JPG differ diff --git a/public/guides/5/5_14/2.jpg b/public/guides/5/5_14/2.jpg new file mode 100644 index 000000000..a95c0508c Binary files /dev/null and b/public/guides/5/5_14/2.jpg differ diff --git a/public/guides/5/5_14/3.JPG b/public/guides/5/5_14/3.JPG new file mode 100644 index 000000000..8ce9e868f Binary files /dev/null and b/public/guides/5/5_14/3.JPG differ diff --git a/public/guides/5/5_14/3.jpg b/public/guides/5/5_14/3.jpg new file mode 100644 index 000000000..8ce9e868f Binary files /dev/null and b/public/guides/5/5_14/3.jpg differ diff --git a/public/guides/5/5_14/4.JPG b/public/guides/5/5_14/4.JPG new file mode 100644 index 000000000..ebfb9e6c4 Binary files /dev/null and b/public/guides/5/5_14/4.JPG differ diff --git a/public/guides/5/5_14/4.jpg b/public/guides/5/5_14/4.jpg new file mode 100644 index 000000000..ebfb9e6c4 Binary files /dev/null and b/public/guides/5/5_14/4.jpg differ diff --git a/public/guides/5/5_14/5.JPG b/public/guides/5/5_14/5.JPG new file mode 100644 index 000000000..75dfd7933 Binary files /dev/null and b/public/guides/5/5_14/5.JPG differ diff --git a/public/guides/5/5_14/5.jpg b/public/guides/5/5_14/5.jpg new file mode 100644 index 000000000..75dfd7933 Binary files /dev/null and b/public/guides/5/5_14/5.jpg differ diff --git a/public/guides/5/5_15/1.JPG b/public/guides/5/5_15/1.JPG new file mode 100644 index 000000000..7f53e4e26 Binary files /dev/null and b/public/guides/5/5_15/1.JPG differ diff --git a/public/guides/5/5_15/1.jpg b/public/guides/5/5_15/1.jpg new file mode 100644 index 000000000..7f53e4e26 Binary files /dev/null and b/public/guides/5/5_15/1.jpg differ diff --git a/public/guides/5/5_15/2.JPG b/public/guides/5/5_15/2.JPG new file mode 100644 index 000000000..6c7e276a1 Binary files /dev/null and b/public/guides/5/5_15/2.JPG differ diff --git a/public/guides/5/5_15/2.jpg b/public/guides/5/5_15/2.jpg new file mode 100644 index 000000000..6c7e276a1 Binary files /dev/null and b/public/guides/5/5_15/2.jpg differ diff --git a/public/guides/5/5_15/3.JPG b/public/guides/5/5_15/3.JPG new file mode 100644 index 000000000..ac923cefe Binary files /dev/null and b/public/guides/5/5_15/3.JPG differ diff --git a/public/guides/5/5_15/3.jpg b/public/guides/5/5_15/3.jpg new file mode 100644 index 000000000..ac923cefe Binary files /dev/null and b/public/guides/5/5_15/3.jpg differ diff --git a/public/guides/5/5_15/4.JPG b/public/guides/5/5_15/4.JPG new file mode 100644 index 000000000..1a93ca9b5 Binary files /dev/null and b/public/guides/5/5_15/4.JPG differ diff --git a/public/guides/5/5_15/4.jpg b/public/guides/5/5_15/4.jpg new file mode 100644 index 000000000..1a93ca9b5 Binary files /dev/null and b/public/guides/5/5_15/4.jpg differ diff --git a/public/guides/5/5_15/5.JPG b/public/guides/5/5_15/5.JPG new file mode 100644 index 000000000..0c7e00178 Binary files /dev/null and b/public/guides/5/5_15/5.JPG differ diff --git a/public/guides/5/5_15/5.jpg b/public/guides/5/5_15/5.jpg new file mode 100644 index 000000000..0c7e00178 Binary files /dev/null and b/public/guides/5/5_15/5.jpg differ diff --git a/public/guides/5/5_16/1.JPG b/public/guides/5/5_16/1.JPG new file mode 100644 index 000000000..7090711fb Binary files /dev/null and b/public/guides/5/5_16/1.JPG differ diff --git a/public/guides/5/5_16/1.jpg b/public/guides/5/5_16/1.jpg new file mode 100644 index 000000000..7090711fb Binary files /dev/null and b/public/guides/5/5_16/1.jpg differ diff --git a/public/guides/5/5_16/2.JPG b/public/guides/5/5_16/2.JPG new file mode 100644 index 000000000..4b14447a0 Binary files /dev/null and b/public/guides/5/5_16/2.JPG differ diff --git a/public/guides/5/5_16/2.jpg b/public/guides/5/5_16/2.jpg new file mode 100644 index 000000000..4b14447a0 Binary files /dev/null and b/public/guides/5/5_16/2.jpg differ diff --git a/public/guides/5/5_16/3.JPG b/public/guides/5/5_16/3.JPG new file mode 100644 index 000000000..7d36a36b0 Binary files /dev/null and b/public/guides/5/5_16/3.JPG differ diff --git a/public/guides/5/5_16/3.jpg b/public/guides/5/5_16/3.jpg new file mode 100644 index 000000000..7d36a36b0 Binary files /dev/null and b/public/guides/5/5_16/3.jpg differ diff --git a/public/guides/5/5_16/4.JPG b/public/guides/5/5_16/4.JPG new file mode 100644 index 000000000..255ad8fb9 Binary files /dev/null and b/public/guides/5/5_16/4.JPG differ diff --git a/public/guides/5/5_16/4.jpg b/public/guides/5/5_16/4.jpg new file mode 100644 index 000000000..255ad8fb9 Binary files /dev/null and b/public/guides/5/5_16/4.jpg differ diff --git a/public/guides/5/5_16/5.JPG b/public/guides/5/5_16/5.JPG new file mode 100644 index 000000000..04235a1ce Binary files /dev/null and b/public/guides/5/5_16/5.JPG differ diff --git a/public/guides/5/5_16/5.jpg b/public/guides/5/5_16/5.jpg new file mode 100644 index 000000000..04235a1ce Binary files /dev/null and b/public/guides/5/5_16/5.jpg differ diff --git a/public/guides/5/5_17/1.JPG b/public/guides/5/5_17/1.JPG new file mode 100644 index 000000000..20f9f6b36 Binary files /dev/null and b/public/guides/5/5_17/1.JPG differ diff --git a/public/guides/5/5_17/1.jpg b/public/guides/5/5_17/1.jpg new file mode 100644 index 000000000..20f9f6b36 Binary files /dev/null and b/public/guides/5/5_17/1.jpg differ diff --git a/public/guides/5/5_17/2.jpg b/public/guides/5/5_17/2.jpg new file mode 100644 index 000000000..98b89b29d Binary files /dev/null and b/public/guides/5/5_17/2.jpg differ diff --git a/public/guides/5/5_17/3.jpg b/public/guides/5/5_17/3.jpg new file mode 100644 index 000000000..1bff48e05 Binary files /dev/null and b/public/guides/5/5_17/3.jpg differ diff --git a/public/guides/5/5_17/4.JPG b/public/guides/5/5_17/4.JPG new file mode 100644 index 000000000..73e3367f8 Binary files /dev/null and b/public/guides/5/5_17/4.JPG differ diff --git a/public/guides/5/5_17/4.jpg b/public/guides/5/5_17/4.jpg new file mode 100644 index 000000000..73e3367f8 Binary files /dev/null and b/public/guides/5/5_17/4.jpg differ diff --git a/public/guides/5/5_17/5.JPG b/public/guides/5/5_17/5.JPG new file mode 100644 index 000000000..599cdd381 Binary files /dev/null and b/public/guides/5/5_17/5.JPG differ diff --git a/public/guides/5/5_17/5.jpg b/public/guides/5/5_17/5.jpg new file mode 100644 index 000000000..599cdd381 Binary files /dev/null and b/public/guides/5/5_17/5.jpg differ diff --git a/public/guides/5/5_18/1.JPG b/public/guides/5/5_18/1.JPG new file mode 100644 index 000000000..19b42aaa3 Binary files /dev/null and b/public/guides/5/5_18/1.JPG differ diff --git a/public/guides/5/5_18/1.jpg b/public/guides/5/5_18/1.jpg new file mode 100644 index 000000000..19b42aaa3 Binary files /dev/null and b/public/guides/5/5_18/1.jpg differ diff --git a/public/guides/5/5_18/2.JPG b/public/guides/5/5_18/2.JPG new file mode 100644 index 000000000..d3b2c0999 Binary files /dev/null and b/public/guides/5/5_18/2.JPG differ diff --git a/public/guides/5/5_18/2.jpg b/public/guides/5/5_18/2.jpg new file mode 100644 index 000000000..d3b2c0999 Binary files /dev/null and b/public/guides/5/5_18/2.jpg differ diff --git a/public/guides/5/5_18/3.JPG b/public/guides/5/5_18/3.JPG new file mode 100644 index 000000000..133e39a4d Binary files /dev/null and b/public/guides/5/5_18/3.JPG differ diff --git a/public/guides/5/5_18/3.jpg b/public/guides/5/5_18/3.jpg new file mode 100644 index 000000000..133e39a4d Binary files /dev/null and b/public/guides/5/5_18/3.jpg differ diff --git a/public/guides/5/5_18/4.JPG b/public/guides/5/5_18/4.JPG new file mode 100644 index 000000000..2fef78282 Binary files /dev/null and b/public/guides/5/5_18/4.JPG differ diff --git a/public/guides/5/5_18/4.jpg b/public/guides/5/5_18/4.jpg new file mode 100644 index 000000000..2fef78282 Binary files /dev/null and b/public/guides/5/5_18/4.jpg differ diff --git a/public/guides/5/5_18/5.JPG b/public/guides/5/5_18/5.JPG new file mode 100644 index 000000000..d272176d0 Binary files /dev/null and b/public/guides/5/5_18/5.JPG differ diff --git a/public/guides/5/5_18/5.jpg b/public/guides/5/5_18/5.jpg new file mode 100644 index 000000000..d272176d0 Binary files /dev/null and b/public/guides/5/5_18/5.jpg differ diff --git a/public/guides/5/5_19/1.jpg b/public/guides/5/5_19/1.jpg new file mode 100644 index 000000000..02d9a3e04 Binary files /dev/null and b/public/guides/5/5_19/1.jpg differ diff --git a/public/guides/5/5_19/2.jpg b/public/guides/5/5_19/2.jpg new file mode 100644 index 000000000..95994dd82 Binary files /dev/null and b/public/guides/5/5_19/2.jpg differ diff --git a/public/guides/5/5_19/3.JPG b/public/guides/5/5_19/3.JPG new file mode 100644 index 000000000..38a5cb1bb Binary files /dev/null and b/public/guides/5/5_19/3.JPG differ diff --git a/public/guides/5/5_19/3.jpg b/public/guides/5/5_19/3.jpg new file mode 100644 index 000000000..38a5cb1bb Binary files /dev/null and b/public/guides/5/5_19/3.jpg differ diff --git a/public/guides/5/5_19/4.JPG b/public/guides/5/5_19/4.JPG new file mode 100644 index 000000000..93b24e70f Binary files /dev/null and b/public/guides/5/5_19/4.JPG differ diff --git a/public/guides/5/5_19/4.jpg b/public/guides/5/5_19/4.jpg new file mode 100644 index 000000000..93b24e70f Binary files /dev/null and b/public/guides/5/5_19/4.jpg differ diff --git a/public/guides/5/5_19/5.JPG b/public/guides/5/5_19/5.JPG new file mode 100644 index 000000000..8a66a7f70 Binary files /dev/null and b/public/guides/5/5_19/5.JPG differ diff --git a/public/guides/5/5_19/5.jpg b/public/guides/5/5_19/5.jpg new file mode 100644 index 000000000..8a66a7f70 Binary files /dev/null and b/public/guides/5/5_19/5.jpg differ diff --git a/public/guides/5/5_2/1.jpg b/public/guides/5/5_2/1.jpg new file mode 100644 index 000000000..e2d353d84 Binary files /dev/null and b/public/guides/5/5_2/1.jpg differ diff --git a/public/guides/5/5_2/2.jpg b/public/guides/5/5_2/2.jpg new file mode 100644 index 000000000..707f50eee Binary files /dev/null and b/public/guides/5/5_2/2.jpg differ diff --git a/public/guides/5/5_2/3.jpg b/public/guides/5/5_2/3.jpg new file mode 100644 index 000000000..1c7df70aa Binary files /dev/null and b/public/guides/5/5_2/3.jpg differ diff --git a/public/guides/5/5_2/4.jpg b/public/guides/5/5_2/4.jpg new file mode 100644 index 000000000..70c122aa8 Binary files /dev/null and b/public/guides/5/5_2/4.jpg differ diff --git a/public/guides/5/5_2/5.jpg b/public/guides/5/5_2/5.jpg new file mode 100644 index 000000000..9a5dd9f70 Binary files /dev/null and b/public/guides/5/5_2/5.jpg differ diff --git a/public/guides/5/5_20/1.jpg b/public/guides/5/5_20/1.jpg new file mode 100644 index 000000000..06b01b74c Binary files /dev/null and b/public/guides/5/5_20/1.jpg differ diff --git a/public/guides/5/5_20/2.jpg b/public/guides/5/5_20/2.jpg new file mode 100644 index 000000000..bcf17c799 Binary files /dev/null and b/public/guides/5/5_20/2.jpg differ diff --git a/public/guides/5/5_20/3.JPG b/public/guides/5/5_20/3.JPG new file mode 100644 index 000000000..2e92c4700 Binary files /dev/null and b/public/guides/5/5_20/3.JPG differ diff --git a/public/guides/5/5_20/3.jpg b/public/guides/5/5_20/3.jpg new file mode 100644 index 000000000..2e92c4700 Binary files /dev/null and b/public/guides/5/5_20/3.jpg differ diff --git a/public/guides/5/5_20/4.JPG b/public/guides/5/5_20/4.JPG new file mode 100644 index 000000000..323c93b1e Binary files /dev/null and b/public/guides/5/5_20/4.JPG differ diff --git a/public/guides/5/5_20/4.jpg b/public/guides/5/5_20/4.jpg new file mode 100644 index 000000000..323c93b1e Binary files /dev/null and b/public/guides/5/5_20/4.jpg differ diff --git a/public/guides/5/5_20/5.JPG b/public/guides/5/5_20/5.JPG new file mode 100644 index 000000000..214bace9e Binary files /dev/null and b/public/guides/5/5_20/5.JPG differ diff --git a/public/guides/5/5_20/5.jpg b/public/guides/5/5_20/5.jpg new file mode 100644 index 000000000..214bace9e Binary files /dev/null and b/public/guides/5/5_20/5.jpg differ diff --git a/public/guides/5/5_21/1.JPG b/public/guides/5/5_21/1.JPG new file mode 100644 index 000000000..01cb58f28 Binary files /dev/null and b/public/guides/5/5_21/1.JPG differ diff --git a/public/guides/5/5_21/1.jpg b/public/guides/5/5_21/1.jpg new file mode 100644 index 000000000..01cb58f28 Binary files /dev/null and b/public/guides/5/5_21/1.jpg differ diff --git a/public/guides/5/5_21/2.JPG b/public/guides/5/5_21/2.JPG new file mode 100644 index 000000000..3d437bb08 Binary files /dev/null and b/public/guides/5/5_21/2.JPG differ diff --git a/public/guides/5/5_21/2.jpg b/public/guides/5/5_21/2.jpg new file mode 100644 index 000000000..3d437bb08 Binary files /dev/null and b/public/guides/5/5_21/2.jpg differ diff --git a/public/guides/5/5_21/3.JPG b/public/guides/5/5_21/3.JPG new file mode 100644 index 000000000..cc792cfff Binary files /dev/null and b/public/guides/5/5_21/3.JPG differ diff --git a/public/guides/5/5_21/3.jpg b/public/guides/5/5_21/3.jpg new file mode 100644 index 000000000..cc792cfff Binary files /dev/null and b/public/guides/5/5_21/3.jpg differ diff --git a/public/guides/5/5_21/4.JPG b/public/guides/5/5_21/4.JPG new file mode 100644 index 000000000..7768e4622 Binary files /dev/null and b/public/guides/5/5_21/4.JPG differ diff --git a/public/guides/5/5_21/4.jpg b/public/guides/5/5_21/4.jpg new file mode 100644 index 000000000..7768e4622 Binary files /dev/null and b/public/guides/5/5_21/4.jpg differ diff --git a/public/guides/5/5_21/5.JPG b/public/guides/5/5_21/5.JPG new file mode 100644 index 000000000..1358adde6 Binary files /dev/null and b/public/guides/5/5_21/5.JPG differ diff --git a/public/guides/5/5_21/5.jpg b/public/guides/5/5_21/5.jpg new file mode 100644 index 000000000..1358adde6 Binary files /dev/null and b/public/guides/5/5_21/5.jpg differ diff --git a/public/guides/5/5_22/1.JPG b/public/guides/5/5_22/1.JPG new file mode 100644 index 000000000..bd77bf13f Binary files /dev/null and b/public/guides/5/5_22/1.JPG differ diff --git a/public/guides/5/5_22/1.jpg b/public/guides/5/5_22/1.jpg new file mode 100644 index 000000000..bd77bf13f Binary files /dev/null and b/public/guides/5/5_22/1.jpg differ diff --git a/public/guides/5/5_22/2.JPG b/public/guides/5/5_22/2.JPG new file mode 100644 index 000000000..793ad3697 Binary files /dev/null and b/public/guides/5/5_22/2.JPG differ diff --git a/public/guides/5/5_22/2.jpg b/public/guides/5/5_22/2.jpg new file mode 100644 index 000000000..793ad3697 Binary files /dev/null and b/public/guides/5/5_22/2.jpg differ diff --git a/public/guides/5/5_22/3.JPG b/public/guides/5/5_22/3.JPG new file mode 100644 index 000000000..ae017aa99 Binary files /dev/null and b/public/guides/5/5_22/3.JPG differ diff --git a/public/guides/5/5_22/3.jpg b/public/guides/5/5_22/3.jpg new file mode 100644 index 000000000..ae017aa99 Binary files /dev/null and b/public/guides/5/5_22/3.jpg differ diff --git a/public/guides/5/5_22/4.JPG b/public/guides/5/5_22/4.JPG new file mode 100644 index 000000000..ce7a3084c Binary files /dev/null and b/public/guides/5/5_22/4.JPG differ diff --git a/public/guides/5/5_22/4.jpg b/public/guides/5/5_22/4.jpg new file mode 100644 index 000000000..ce7a3084c Binary files /dev/null and b/public/guides/5/5_22/4.jpg differ diff --git a/public/guides/5/5_22/5.JPG b/public/guides/5/5_22/5.JPG new file mode 100644 index 000000000..5dee3ea52 Binary files /dev/null and b/public/guides/5/5_22/5.JPG differ diff --git a/public/guides/5/5_22/5.jpg b/public/guides/5/5_22/5.jpg new file mode 100644 index 000000000..5dee3ea52 Binary files /dev/null and b/public/guides/5/5_22/5.jpg differ diff --git a/public/guides/5/5_23/1.JPG b/public/guides/5/5_23/1.JPG new file mode 100644 index 000000000..156fd411c Binary files /dev/null and b/public/guides/5/5_23/1.JPG differ diff --git a/public/guides/5/5_23/1.jpg b/public/guides/5/5_23/1.jpg new file mode 100644 index 000000000..156fd411c Binary files /dev/null and b/public/guides/5/5_23/1.jpg differ diff --git a/public/guides/5/5_23/2.JPG b/public/guides/5/5_23/2.JPG new file mode 100644 index 000000000..9822c2adf Binary files /dev/null and b/public/guides/5/5_23/2.JPG differ diff --git a/public/guides/5/5_23/2.jpg b/public/guides/5/5_23/2.jpg new file mode 100644 index 000000000..9822c2adf Binary files /dev/null and b/public/guides/5/5_23/2.jpg differ diff --git a/public/guides/5/5_23/3.JPG b/public/guides/5/5_23/3.JPG new file mode 100644 index 000000000..57bd7ae96 Binary files /dev/null and b/public/guides/5/5_23/3.JPG differ diff --git a/public/guides/5/5_23/3.jpg b/public/guides/5/5_23/3.jpg new file mode 100644 index 000000000..57bd7ae96 Binary files /dev/null and b/public/guides/5/5_23/3.jpg differ diff --git a/public/guides/5/5_23/4.JPG b/public/guides/5/5_23/4.JPG new file mode 100644 index 000000000..2f667f6ca Binary files /dev/null and b/public/guides/5/5_23/4.JPG differ diff --git a/public/guides/5/5_23/4.jpg b/public/guides/5/5_23/4.jpg new file mode 100644 index 000000000..2f667f6ca Binary files /dev/null and b/public/guides/5/5_23/4.jpg differ diff --git a/public/guides/5/5_23/5.JPG b/public/guides/5/5_23/5.JPG new file mode 100644 index 000000000..dca0b7b4a Binary files /dev/null and b/public/guides/5/5_23/5.JPG differ diff --git a/public/guides/5/5_23/5.jpg b/public/guides/5/5_23/5.jpg new file mode 100644 index 000000000..dca0b7b4a Binary files /dev/null and b/public/guides/5/5_23/5.jpg differ diff --git a/public/guides/5/5_24/1.JPG b/public/guides/5/5_24/1.JPG new file mode 100644 index 000000000..640d70b30 Binary files /dev/null and b/public/guides/5/5_24/1.JPG differ diff --git a/public/guides/5/5_24/1.jpg b/public/guides/5/5_24/1.jpg new file mode 100644 index 000000000..640d70b30 Binary files /dev/null and b/public/guides/5/5_24/1.jpg differ diff --git a/public/guides/5/5_24/2.JPG b/public/guides/5/5_24/2.JPG new file mode 100644 index 000000000..7a95d9cae Binary files /dev/null and b/public/guides/5/5_24/2.JPG differ diff --git a/public/guides/5/5_24/2.jpg b/public/guides/5/5_24/2.jpg new file mode 100644 index 000000000..7a95d9cae Binary files /dev/null and b/public/guides/5/5_24/2.jpg differ diff --git a/public/guides/5/5_24/3.JPG b/public/guides/5/5_24/3.JPG new file mode 100644 index 000000000..b00918bbc Binary files /dev/null and b/public/guides/5/5_24/3.JPG differ diff --git a/public/guides/5/5_24/3.jpg b/public/guides/5/5_24/3.jpg new file mode 100644 index 000000000..b00918bbc Binary files /dev/null and b/public/guides/5/5_24/3.jpg differ diff --git a/public/guides/5/5_24/4.JPG b/public/guides/5/5_24/4.JPG new file mode 100644 index 000000000..72a893202 Binary files /dev/null and b/public/guides/5/5_24/4.JPG differ diff --git a/public/guides/5/5_24/4.jpg b/public/guides/5/5_24/4.jpg new file mode 100644 index 000000000..72a893202 Binary files /dev/null and b/public/guides/5/5_24/4.jpg differ diff --git a/public/guides/5/5_24/5.JPG b/public/guides/5/5_24/5.JPG new file mode 100644 index 000000000..7b08d640a Binary files /dev/null and b/public/guides/5/5_24/5.JPG differ diff --git a/public/guides/5/5_24/5.jpg b/public/guides/5/5_24/5.jpg new file mode 100644 index 000000000..7b08d640a Binary files /dev/null and b/public/guides/5/5_24/5.jpg differ diff --git a/public/guides/5/5_25/1.JPG b/public/guides/5/5_25/1.JPG new file mode 100644 index 000000000..0447e1772 Binary files /dev/null and b/public/guides/5/5_25/1.JPG differ diff --git a/public/guides/5/5_25/1.jpg b/public/guides/5/5_25/1.jpg new file mode 100644 index 000000000..0447e1772 Binary files /dev/null and b/public/guides/5/5_25/1.jpg differ diff --git a/public/guides/5/5_25/2.JPG b/public/guides/5/5_25/2.JPG new file mode 100644 index 000000000..b241024c1 Binary files /dev/null and b/public/guides/5/5_25/2.JPG differ diff --git a/public/guides/5/5_25/2.jpg b/public/guides/5/5_25/2.jpg new file mode 100644 index 000000000..b241024c1 Binary files /dev/null and b/public/guides/5/5_25/2.jpg differ diff --git a/public/guides/5/5_25/3.JPG b/public/guides/5/5_25/3.JPG new file mode 100644 index 000000000..71051d256 Binary files /dev/null and b/public/guides/5/5_25/3.JPG differ diff --git a/public/guides/5/5_25/3.jpg b/public/guides/5/5_25/3.jpg new file mode 100644 index 000000000..71051d256 Binary files /dev/null and b/public/guides/5/5_25/3.jpg differ diff --git a/public/guides/5/5_25/4.JPG b/public/guides/5/5_25/4.JPG new file mode 100644 index 000000000..d5117ce3c Binary files /dev/null and b/public/guides/5/5_25/4.JPG differ diff --git a/public/guides/5/5_25/4.jpg b/public/guides/5/5_25/4.jpg new file mode 100644 index 000000000..d5117ce3c Binary files /dev/null and b/public/guides/5/5_25/4.jpg differ diff --git a/public/guides/5/5_25/5.JPG b/public/guides/5/5_25/5.JPG new file mode 100644 index 000000000..42436dfdc Binary files /dev/null and b/public/guides/5/5_25/5.JPG differ diff --git a/public/guides/5/5_25/5.jpg b/public/guides/5/5_25/5.jpg new file mode 100644 index 000000000..42436dfdc Binary files /dev/null and b/public/guides/5/5_25/5.jpg differ diff --git a/public/guides/5/5_26/1.JPG b/public/guides/5/5_26/1.JPG new file mode 100644 index 000000000..c744228f9 Binary files /dev/null and b/public/guides/5/5_26/1.JPG differ diff --git a/public/guides/5/5_26/1.jpg b/public/guides/5/5_26/1.jpg new file mode 100644 index 000000000..c744228f9 Binary files /dev/null and b/public/guides/5/5_26/1.jpg differ diff --git a/public/guides/5/5_26/2.JPG b/public/guides/5/5_26/2.JPG new file mode 100644 index 000000000..6836e1b69 Binary files /dev/null and b/public/guides/5/5_26/2.JPG differ diff --git a/public/guides/5/5_26/2.jpg b/public/guides/5/5_26/2.jpg new file mode 100644 index 000000000..6836e1b69 Binary files /dev/null and b/public/guides/5/5_26/2.jpg differ diff --git a/public/guides/5/5_26/3.JPG b/public/guides/5/5_26/3.JPG new file mode 100644 index 000000000..8fb0b275b Binary files /dev/null and b/public/guides/5/5_26/3.JPG differ diff --git a/public/guides/5/5_26/3.jpg b/public/guides/5/5_26/3.jpg new file mode 100644 index 000000000..8fb0b275b Binary files /dev/null and b/public/guides/5/5_26/3.jpg differ diff --git a/public/guides/5/5_26/4.JPG b/public/guides/5/5_26/4.JPG new file mode 100644 index 000000000..cc86e453b Binary files /dev/null and b/public/guides/5/5_26/4.JPG differ diff --git a/public/guides/5/5_26/4.jpg b/public/guides/5/5_26/4.jpg new file mode 100644 index 000000000..cc86e453b Binary files /dev/null and b/public/guides/5/5_26/4.jpg differ diff --git a/public/guides/5/5_26/5.JPG b/public/guides/5/5_26/5.JPG new file mode 100644 index 000000000..9114f029e Binary files /dev/null and b/public/guides/5/5_26/5.JPG differ diff --git a/public/guides/5/5_26/5.jpg b/public/guides/5/5_26/5.jpg new file mode 100644 index 000000000..9114f029e Binary files /dev/null and b/public/guides/5/5_26/5.jpg differ diff --git a/public/guides/5/5_27/1.JPG b/public/guides/5/5_27/1.JPG new file mode 100644 index 000000000..544b252e0 Binary files /dev/null and b/public/guides/5/5_27/1.JPG differ diff --git a/public/guides/5/5_27/1.jpg b/public/guides/5/5_27/1.jpg new file mode 100644 index 000000000..544b252e0 Binary files /dev/null and b/public/guides/5/5_27/1.jpg differ diff --git a/public/guides/5/5_27/2.JPG b/public/guides/5/5_27/2.JPG new file mode 100644 index 000000000..97bbc3189 Binary files /dev/null and b/public/guides/5/5_27/2.JPG differ diff --git a/public/guides/5/5_27/2.jpg b/public/guides/5/5_27/2.jpg new file mode 100644 index 000000000..97bbc3189 Binary files /dev/null and b/public/guides/5/5_27/2.jpg differ diff --git a/public/guides/5/5_27/3.JPG b/public/guides/5/5_27/3.JPG new file mode 100644 index 000000000..d71703d17 Binary files /dev/null and b/public/guides/5/5_27/3.JPG differ diff --git a/public/guides/5/5_27/3.jpg b/public/guides/5/5_27/3.jpg new file mode 100644 index 000000000..d71703d17 Binary files /dev/null and b/public/guides/5/5_27/3.jpg differ diff --git a/public/guides/5/5_27/4.JPG b/public/guides/5/5_27/4.JPG new file mode 100644 index 000000000..7f4981903 Binary files /dev/null and b/public/guides/5/5_27/4.JPG differ diff --git a/public/guides/5/5_27/4.jpg b/public/guides/5/5_27/4.jpg new file mode 100644 index 000000000..7f4981903 Binary files /dev/null and b/public/guides/5/5_27/4.jpg differ diff --git a/public/guides/5/5_27/5.JPG b/public/guides/5/5_27/5.JPG new file mode 100644 index 000000000..8649f0324 Binary files /dev/null and b/public/guides/5/5_27/5.JPG differ diff --git a/public/guides/5/5_27/5.jpg b/public/guides/5/5_27/5.jpg new file mode 100644 index 000000000..8649f0324 Binary files /dev/null and b/public/guides/5/5_27/5.jpg differ diff --git a/public/guides/5/5_28/1.JPG b/public/guides/5/5_28/1.JPG new file mode 100644 index 000000000..0ead47b6f Binary files /dev/null and b/public/guides/5/5_28/1.JPG differ diff --git a/public/guides/5/5_28/1.jpg b/public/guides/5/5_28/1.jpg new file mode 100644 index 000000000..0ead47b6f Binary files /dev/null and b/public/guides/5/5_28/1.jpg differ diff --git a/public/guides/5/5_28/2.JPG b/public/guides/5/5_28/2.JPG new file mode 100644 index 000000000..e3967d166 Binary files /dev/null and b/public/guides/5/5_28/2.JPG differ diff --git a/public/guides/5/5_28/2.jpg b/public/guides/5/5_28/2.jpg new file mode 100644 index 000000000..e3967d166 Binary files /dev/null and b/public/guides/5/5_28/2.jpg differ diff --git a/public/guides/5/5_28/3.JPG b/public/guides/5/5_28/3.JPG new file mode 100644 index 000000000..13871614a Binary files /dev/null and b/public/guides/5/5_28/3.JPG differ diff --git a/public/guides/5/5_28/3.jpg b/public/guides/5/5_28/3.jpg new file mode 100644 index 000000000..13871614a Binary files /dev/null and b/public/guides/5/5_28/3.jpg differ diff --git a/public/guides/5/5_28/4.JPG b/public/guides/5/5_28/4.JPG new file mode 100644 index 000000000..5ea21e7c5 Binary files /dev/null and b/public/guides/5/5_28/4.JPG differ diff --git a/public/guides/5/5_28/4.jpg b/public/guides/5/5_28/4.jpg new file mode 100644 index 000000000..5ea21e7c5 Binary files /dev/null and b/public/guides/5/5_28/4.jpg differ diff --git a/public/guides/5/5_28/5.JPG b/public/guides/5/5_28/5.JPG new file mode 100644 index 000000000..f7bd75bcf Binary files /dev/null and b/public/guides/5/5_28/5.JPG differ diff --git a/public/guides/5/5_28/5.jpg b/public/guides/5/5_28/5.jpg new file mode 100644 index 000000000..f7bd75bcf Binary files /dev/null and b/public/guides/5/5_28/5.jpg differ diff --git a/public/guides/5/5_29/1.JPG b/public/guides/5/5_29/1.JPG new file mode 100644 index 000000000..980b0e702 Binary files /dev/null and b/public/guides/5/5_29/1.JPG differ diff --git a/public/guides/5/5_29/1.jpg b/public/guides/5/5_29/1.jpg new file mode 100644 index 000000000..980b0e702 Binary files /dev/null and b/public/guides/5/5_29/1.jpg differ diff --git a/public/guides/5/5_29/2.JPG b/public/guides/5/5_29/2.JPG new file mode 100644 index 000000000..ebdb0a32f Binary files /dev/null and b/public/guides/5/5_29/2.JPG differ diff --git a/public/guides/5/5_29/2.jpg b/public/guides/5/5_29/2.jpg new file mode 100644 index 000000000..ebdb0a32f Binary files /dev/null and b/public/guides/5/5_29/2.jpg differ diff --git a/public/guides/5/5_29/3.JPG b/public/guides/5/5_29/3.JPG new file mode 100644 index 000000000..63ec4ff47 Binary files /dev/null and b/public/guides/5/5_29/3.JPG differ diff --git a/public/guides/5/5_29/3.jpg b/public/guides/5/5_29/3.jpg new file mode 100644 index 000000000..63ec4ff47 Binary files /dev/null and b/public/guides/5/5_29/3.jpg differ diff --git a/public/guides/5/5_29/4.JPG b/public/guides/5/5_29/4.JPG new file mode 100644 index 000000000..0ccc94046 Binary files /dev/null and b/public/guides/5/5_29/4.JPG differ diff --git a/public/guides/5/5_29/4.jpg b/public/guides/5/5_29/4.jpg new file mode 100644 index 000000000..0ccc94046 Binary files /dev/null and b/public/guides/5/5_29/4.jpg differ diff --git a/public/guides/5/5_29/5.JPG b/public/guides/5/5_29/5.JPG new file mode 100644 index 000000000..8d08bfa64 Binary files /dev/null and b/public/guides/5/5_29/5.JPG differ diff --git a/public/guides/5/5_29/5.jpg b/public/guides/5/5_29/5.jpg new file mode 100644 index 000000000..8d08bfa64 Binary files /dev/null and b/public/guides/5/5_29/5.jpg differ diff --git a/public/guides/5/5_3/1.JPG b/public/guides/5/5_3/1.JPG new file mode 100644 index 000000000..bcf9b10e3 Binary files /dev/null and b/public/guides/5/5_3/1.JPG differ diff --git a/public/guides/5/5_3/1.jpg b/public/guides/5/5_3/1.jpg new file mode 100644 index 000000000..bcf9b10e3 Binary files /dev/null and b/public/guides/5/5_3/1.jpg differ diff --git a/public/guides/5/5_3/2.JPG b/public/guides/5/5_3/2.JPG new file mode 100644 index 000000000..b43689467 Binary files /dev/null and b/public/guides/5/5_3/2.JPG differ diff --git a/public/guides/5/5_3/2.jpg b/public/guides/5/5_3/2.jpg new file mode 100644 index 000000000..b43689467 Binary files /dev/null and b/public/guides/5/5_3/2.jpg differ diff --git a/public/guides/5/5_3/3.JPG b/public/guides/5/5_3/3.JPG new file mode 100644 index 000000000..ef5106703 Binary files /dev/null and b/public/guides/5/5_3/3.JPG differ diff --git a/public/guides/5/5_3/3.jpg b/public/guides/5/5_3/3.jpg new file mode 100644 index 000000000..ef5106703 Binary files /dev/null and b/public/guides/5/5_3/3.jpg differ diff --git a/public/guides/5/5_3/4.jpg b/public/guides/5/5_3/4.jpg new file mode 100644 index 000000000..896f3d2c1 Binary files /dev/null and b/public/guides/5/5_3/4.jpg differ diff --git a/public/guides/5/5_3/5.jpg b/public/guides/5/5_3/5.jpg new file mode 100644 index 000000000..7285d03ed Binary files /dev/null and b/public/guides/5/5_3/5.jpg differ diff --git a/public/guides/5/5_30/1.JPG b/public/guides/5/5_30/1.JPG new file mode 100644 index 000000000..ed16d4a01 Binary files /dev/null and b/public/guides/5/5_30/1.JPG differ diff --git a/public/guides/5/5_30/1.jpg b/public/guides/5/5_30/1.jpg new file mode 100644 index 000000000..ed16d4a01 Binary files /dev/null and b/public/guides/5/5_30/1.jpg differ diff --git a/public/guides/5/5_30/2.JPG b/public/guides/5/5_30/2.JPG new file mode 100644 index 000000000..2ddfd6f70 Binary files /dev/null and b/public/guides/5/5_30/2.JPG differ diff --git a/public/guides/5/5_30/2.jpg b/public/guides/5/5_30/2.jpg new file mode 100644 index 000000000..2ddfd6f70 Binary files /dev/null and b/public/guides/5/5_30/2.jpg differ diff --git a/public/guides/5/5_30/3.JPG b/public/guides/5/5_30/3.JPG new file mode 100644 index 000000000..a78fb2d33 Binary files /dev/null and b/public/guides/5/5_30/3.JPG differ diff --git a/public/guides/5/5_30/3.jpg b/public/guides/5/5_30/3.jpg new file mode 100644 index 000000000..a78fb2d33 Binary files /dev/null and b/public/guides/5/5_30/3.jpg differ diff --git a/public/guides/5/5_30/4.JPG b/public/guides/5/5_30/4.JPG new file mode 100644 index 000000000..c2be94076 Binary files /dev/null and b/public/guides/5/5_30/4.JPG differ diff --git a/public/guides/5/5_30/4.jpg b/public/guides/5/5_30/4.jpg new file mode 100644 index 000000000..c2be94076 Binary files /dev/null and b/public/guides/5/5_30/4.jpg differ diff --git a/public/guides/5/5_30/5.JPG b/public/guides/5/5_30/5.JPG new file mode 100644 index 000000000..fd84e5d38 Binary files /dev/null and b/public/guides/5/5_30/5.JPG differ diff --git a/public/guides/5/5_30/5.jpg b/public/guides/5/5_30/5.jpg new file mode 100644 index 000000000..fd84e5d38 Binary files /dev/null and b/public/guides/5/5_30/5.jpg differ diff --git a/public/guides/5/5_31/1.JPG b/public/guides/5/5_31/1.JPG new file mode 100644 index 000000000..dc7f94b46 Binary files /dev/null and b/public/guides/5/5_31/1.JPG differ diff --git a/public/guides/5/5_31/1.jpg b/public/guides/5/5_31/1.jpg new file mode 100644 index 000000000..dc7f94b46 Binary files /dev/null and b/public/guides/5/5_31/1.jpg differ diff --git a/public/guides/5/5_31/2.JPG b/public/guides/5/5_31/2.JPG new file mode 100644 index 000000000..229a62074 Binary files /dev/null and b/public/guides/5/5_31/2.JPG differ diff --git a/public/guides/5/5_31/2.jpg b/public/guides/5/5_31/2.jpg new file mode 100644 index 000000000..229a62074 Binary files /dev/null and b/public/guides/5/5_31/2.jpg differ diff --git a/public/guides/5/5_31/3.JPG b/public/guides/5/5_31/3.JPG new file mode 100644 index 000000000..b027c681b Binary files /dev/null and b/public/guides/5/5_31/3.JPG differ diff --git a/public/guides/5/5_31/3.jpg b/public/guides/5/5_31/3.jpg new file mode 100644 index 000000000..b027c681b Binary files /dev/null and b/public/guides/5/5_31/3.jpg differ diff --git a/public/guides/5/5_31/4.JPG b/public/guides/5/5_31/4.JPG new file mode 100644 index 000000000..fa01a01b6 Binary files /dev/null and b/public/guides/5/5_31/4.JPG differ diff --git a/public/guides/5/5_31/4.jpg b/public/guides/5/5_31/4.jpg new file mode 100644 index 000000000..fa01a01b6 Binary files /dev/null and b/public/guides/5/5_31/4.jpg differ diff --git a/public/guides/5/5_31/5.JPG b/public/guides/5/5_31/5.JPG new file mode 100644 index 000000000..19b31fab5 Binary files /dev/null and b/public/guides/5/5_31/5.JPG differ diff --git a/public/guides/5/5_31/5.jpg b/public/guides/5/5_31/5.jpg new file mode 100644 index 000000000..19b31fab5 Binary files /dev/null and b/public/guides/5/5_31/5.jpg differ diff --git a/public/guides/5/5_32/1.JPG b/public/guides/5/5_32/1.JPG new file mode 100644 index 000000000..38474f7b5 Binary files /dev/null and b/public/guides/5/5_32/1.JPG differ diff --git a/public/guides/5/5_32/1.jpg b/public/guides/5/5_32/1.jpg new file mode 100644 index 000000000..38474f7b5 Binary files /dev/null and b/public/guides/5/5_32/1.jpg differ diff --git a/public/guides/5/5_32/2.JPG b/public/guides/5/5_32/2.JPG new file mode 100644 index 000000000..ba37b57b0 Binary files /dev/null and b/public/guides/5/5_32/2.JPG differ diff --git a/public/guides/5/5_32/2.jpg b/public/guides/5/5_32/2.jpg new file mode 100644 index 000000000..ba37b57b0 Binary files /dev/null and b/public/guides/5/5_32/2.jpg differ diff --git a/public/guides/5/5_32/3.JPG b/public/guides/5/5_32/3.JPG new file mode 100644 index 000000000..1b75a6f84 Binary files /dev/null and b/public/guides/5/5_32/3.JPG differ diff --git a/public/guides/5/5_32/3.jpg b/public/guides/5/5_32/3.jpg new file mode 100644 index 000000000..1b75a6f84 Binary files /dev/null and b/public/guides/5/5_32/3.jpg differ diff --git a/public/guides/5/5_32/4.JPG b/public/guides/5/5_32/4.JPG new file mode 100644 index 000000000..a64d2b28f Binary files /dev/null and b/public/guides/5/5_32/4.JPG differ diff --git a/public/guides/5/5_32/4.jpg b/public/guides/5/5_32/4.jpg new file mode 100644 index 000000000..a64d2b28f Binary files /dev/null and b/public/guides/5/5_32/4.jpg differ diff --git a/public/guides/5/5_32/5.JPG b/public/guides/5/5_32/5.JPG new file mode 100644 index 000000000..3066b9e51 Binary files /dev/null and b/public/guides/5/5_32/5.JPG differ diff --git a/public/guides/5/5_32/5.jpg b/public/guides/5/5_32/5.jpg new file mode 100644 index 000000000..3066b9e51 Binary files /dev/null and b/public/guides/5/5_32/5.jpg differ diff --git a/public/guides/5/5_33/1.JPG b/public/guides/5/5_33/1.JPG new file mode 100644 index 000000000..bc4a15372 Binary files /dev/null and b/public/guides/5/5_33/1.JPG differ diff --git a/public/guides/5/5_33/1.jpg b/public/guides/5/5_33/1.jpg new file mode 100644 index 000000000..bc4a15372 Binary files /dev/null and b/public/guides/5/5_33/1.jpg differ diff --git a/public/guides/5/5_33/2.JPG b/public/guides/5/5_33/2.JPG new file mode 100644 index 000000000..c5232792a Binary files /dev/null and b/public/guides/5/5_33/2.JPG differ diff --git a/public/guides/5/5_33/2.jpg b/public/guides/5/5_33/2.jpg new file mode 100644 index 000000000..c5232792a Binary files /dev/null and b/public/guides/5/5_33/2.jpg differ diff --git a/public/guides/5/5_33/3.JPG b/public/guides/5/5_33/3.JPG new file mode 100644 index 000000000..4709e84df Binary files /dev/null and b/public/guides/5/5_33/3.JPG differ diff --git a/public/guides/5/5_33/3.jpg b/public/guides/5/5_33/3.jpg new file mode 100644 index 000000000..4709e84df Binary files /dev/null and b/public/guides/5/5_33/3.jpg differ diff --git a/public/guides/5/5_33/4.JPG b/public/guides/5/5_33/4.JPG new file mode 100644 index 000000000..ffa8c61e7 Binary files /dev/null and b/public/guides/5/5_33/4.JPG differ diff --git a/public/guides/5/5_33/4.jpg b/public/guides/5/5_33/4.jpg new file mode 100644 index 000000000..ffa8c61e7 Binary files /dev/null and b/public/guides/5/5_33/4.jpg differ diff --git a/public/guides/5/5_33/5.JPG b/public/guides/5/5_33/5.JPG new file mode 100644 index 000000000..403b8a9ec Binary files /dev/null and b/public/guides/5/5_33/5.JPG differ diff --git a/public/guides/5/5_33/5.jpg b/public/guides/5/5_33/5.jpg new file mode 100644 index 000000000..403b8a9ec Binary files /dev/null and b/public/guides/5/5_33/5.jpg differ diff --git a/public/guides/5/5_34/1.JPG b/public/guides/5/5_34/1.JPG new file mode 100644 index 000000000..b77f67f34 Binary files /dev/null and b/public/guides/5/5_34/1.JPG differ diff --git a/public/guides/5/5_34/1.jpg b/public/guides/5/5_34/1.jpg new file mode 100644 index 000000000..b77f67f34 Binary files /dev/null and b/public/guides/5/5_34/1.jpg differ diff --git a/public/guides/5/5_34/2.JPG b/public/guides/5/5_34/2.JPG new file mode 100644 index 000000000..edc767add Binary files /dev/null and b/public/guides/5/5_34/2.JPG differ diff --git a/public/guides/5/5_34/2.jpg b/public/guides/5/5_34/2.jpg new file mode 100644 index 000000000..edc767add Binary files /dev/null and b/public/guides/5/5_34/2.jpg differ diff --git a/public/guides/5/5_34/3.JPG b/public/guides/5/5_34/3.JPG new file mode 100644 index 000000000..c308de8fa Binary files /dev/null and b/public/guides/5/5_34/3.JPG differ diff --git a/public/guides/5/5_34/3.jpg b/public/guides/5/5_34/3.jpg new file mode 100644 index 000000000..c308de8fa Binary files /dev/null and b/public/guides/5/5_34/3.jpg differ diff --git a/public/guides/5/5_34/4.JPG b/public/guides/5/5_34/4.JPG new file mode 100644 index 000000000..9218aa8ae Binary files /dev/null and b/public/guides/5/5_34/4.JPG differ diff --git a/public/guides/5/5_34/4.jpg b/public/guides/5/5_34/4.jpg new file mode 100644 index 000000000..9218aa8ae Binary files /dev/null and b/public/guides/5/5_34/4.jpg differ diff --git a/public/guides/5/5_34/5.JPG b/public/guides/5/5_34/5.JPG new file mode 100644 index 000000000..6f254aa02 Binary files /dev/null and b/public/guides/5/5_34/5.JPG differ diff --git a/public/guides/5/5_34/5.jpg b/public/guides/5/5_34/5.jpg new file mode 100644 index 000000000..6f254aa02 Binary files /dev/null and b/public/guides/5/5_34/5.jpg differ diff --git a/public/guides/5/5_35/1.JPG b/public/guides/5/5_35/1.JPG new file mode 100644 index 000000000..c83f604bd Binary files /dev/null and b/public/guides/5/5_35/1.JPG differ diff --git a/public/guides/5/5_35/1.jpg b/public/guides/5/5_35/1.jpg new file mode 100644 index 000000000..c83f604bd Binary files /dev/null and b/public/guides/5/5_35/1.jpg differ diff --git a/public/guides/5/5_35/2.JPG b/public/guides/5/5_35/2.JPG new file mode 100644 index 000000000..759e7487a Binary files /dev/null and b/public/guides/5/5_35/2.JPG differ diff --git a/public/guides/5/5_35/2.jpg b/public/guides/5/5_35/2.jpg new file mode 100644 index 000000000..759e7487a Binary files /dev/null and b/public/guides/5/5_35/2.jpg differ diff --git a/public/guides/5/5_35/3.JPG b/public/guides/5/5_35/3.JPG new file mode 100644 index 000000000..b2afa0141 Binary files /dev/null and b/public/guides/5/5_35/3.JPG differ diff --git a/public/guides/5/5_35/3.jpg b/public/guides/5/5_35/3.jpg new file mode 100644 index 000000000..b2afa0141 Binary files /dev/null and b/public/guides/5/5_35/3.jpg differ diff --git a/public/guides/5/5_35/4.JPG b/public/guides/5/5_35/4.JPG new file mode 100644 index 000000000..477ec523e Binary files /dev/null and b/public/guides/5/5_35/4.JPG differ diff --git a/public/guides/5/5_35/4.jpg b/public/guides/5/5_35/4.jpg new file mode 100644 index 000000000..477ec523e Binary files /dev/null and b/public/guides/5/5_35/4.jpg differ diff --git a/public/guides/5/5_35/5.JPG b/public/guides/5/5_35/5.JPG new file mode 100644 index 000000000..f11c61689 Binary files /dev/null and b/public/guides/5/5_35/5.JPG differ diff --git a/public/guides/5/5_35/5.jpg b/public/guides/5/5_35/5.jpg new file mode 100644 index 000000000..f11c61689 Binary files /dev/null and b/public/guides/5/5_35/5.jpg differ diff --git a/public/guides/5/5_36/1.JPG b/public/guides/5/5_36/1.JPG new file mode 100644 index 000000000..16b76687a Binary files /dev/null and b/public/guides/5/5_36/1.JPG differ diff --git a/public/guides/5/5_36/1.jpg b/public/guides/5/5_36/1.jpg new file mode 100644 index 000000000..16b76687a Binary files /dev/null and b/public/guides/5/5_36/1.jpg differ diff --git a/public/guides/5/5_36/2.JPG b/public/guides/5/5_36/2.JPG new file mode 100644 index 000000000..01ca94593 Binary files /dev/null and b/public/guides/5/5_36/2.JPG differ diff --git a/public/guides/5/5_36/2.jpg b/public/guides/5/5_36/2.jpg new file mode 100644 index 000000000..01ca94593 Binary files /dev/null and b/public/guides/5/5_36/2.jpg differ diff --git a/public/guides/5/5_36/3.JPG b/public/guides/5/5_36/3.JPG new file mode 100644 index 000000000..7dab1c5de Binary files /dev/null and b/public/guides/5/5_36/3.JPG differ diff --git a/public/guides/5/5_36/3.jpg b/public/guides/5/5_36/3.jpg new file mode 100644 index 000000000..7dab1c5de Binary files /dev/null and b/public/guides/5/5_36/3.jpg differ diff --git a/public/guides/5/5_36/4.JPG b/public/guides/5/5_36/4.JPG new file mode 100644 index 000000000..b8fcab3e0 Binary files /dev/null and b/public/guides/5/5_36/4.JPG differ diff --git a/public/guides/5/5_36/4.jpg b/public/guides/5/5_36/4.jpg new file mode 100644 index 000000000..b8fcab3e0 Binary files /dev/null and b/public/guides/5/5_36/4.jpg differ diff --git a/public/guides/5/5_36/5.JPG b/public/guides/5/5_36/5.JPG new file mode 100644 index 000000000..08e334705 Binary files /dev/null and b/public/guides/5/5_36/5.JPG differ diff --git a/public/guides/5/5_36/5.jpg b/public/guides/5/5_36/5.jpg new file mode 100644 index 000000000..08e334705 Binary files /dev/null and b/public/guides/5/5_36/5.jpg differ diff --git a/public/guides/5/5_37/1.JPG b/public/guides/5/5_37/1.JPG new file mode 100644 index 000000000..f1de0b4df Binary files /dev/null and b/public/guides/5/5_37/1.JPG differ diff --git a/public/guides/5/5_37/1.jpg b/public/guides/5/5_37/1.jpg new file mode 100644 index 000000000..f1de0b4df Binary files /dev/null and b/public/guides/5/5_37/1.jpg differ diff --git a/public/guides/5/5_37/2.JPG b/public/guides/5/5_37/2.JPG new file mode 100644 index 000000000..920db317d Binary files /dev/null and b/public/guides/5/5_37/2.JPG differ diff --git a/public/guides/5/5_37/2.jpg b/public/guides/5/5_37/2.jpg new file mode 100644 index 000000000..920db317d Binary files /dev/null and b/public/guides/5/5_37/2.jpg differ diff --git a/public/guides/5/5_37/3.JPG b/public/guides/5/5_37/3.JPG new file mode 100644 index 000000000..6886385e9 Binary files /dev/null and b/public/guides/5/5_37/3.JPG differ diff --git a/public/guides/5/5_37/3.jpg b/public/guides/5/5_37/3.jpg new file mode 100644 index 000000000..6886385e9 Binary files /dev/null and b/public/guides/5/5_37/3.jpg differ diff --git a/public/guides/5/5_37/4.JPG b/public/guides/5/5_37/4.JPG new file mode 100644 index 000000000..9ddee047e Binary files /dev/null and b/public/guides/5/5_37/4.JPG differ diff --git a/public/guides/5/5_37/4.jpg b/public/guides/5/5_37/4.jpg new file mode 100644 index 000000000..9ddee047e Binary files /dev/null and b/public/guides/5/5_37/4.jpg differ diff --git a/public/guides/5/5_37/5.JPG b/public/guides/5/5_37/5.JPG new file mode 100644 index 000000000..0e2e18916 Binary files /dev/null and b/public/guides/5/5_37/5.JPG differ diff --git a/public/guides/5/5_37/5.jpg b/public/guides/5/5_37/5.jpg new file mode 100644 index 000000000..0e2e18916 Binary files /dev/null and b/public/guides/5/5_37/5.jpg differ diff --git a/public/guides/5/5_38/1.JPG b/public/guides/5/5_38/1.JPG new file mode 100644 index 000000000..0d439c4a3 Binary files /dev/null and b/public/guides/5/5_38/1.JPG differ diff --git a/public/guides/5/5_38/1.jpg b/public/guides/5/5_38/1.jpg new file mode 100644 index 000000000..0d439c4a3 Binary files /dev/null and b/public/guides/5/5_38/1.jpg differ diff --git a/public/guides/5/5_38/2.JPG b/public/guides/5/5_38/2.JPG new file mode 100644 index 000000000..686f24a2d Binary files /dev/null and b/public/guides/5/5_38/2.JPG differ diff --git a/public/guides/5/5_38/2.jpg b/public/guides/5/5_38/2.jpg new file mode 100644 index 000000000..686f24a2d Binary files /dev/null and b/public/guides/5/5_38/2.jpg differ diff --git a/public/guides/5/5_38/3.JPG b/public/guides/5/5_38/3.JPG new file mode 100644 index 000000000..3e4ed4ed5 Binary files /dev/null and b/public/guides/5/5_38/3.JPG differ diff --git a/public/guides/5/5_38/3.jpg b/public/guides/5/5_38/3.jpg new file mode 100644 index 000000000..3e4ed4ed5 Binary files /dev/null and b/public/guides/5/5_38/3.jpg differ diff --git a/public/guides/5/5_38/4.jpg b/public/guides/5/5_38/4.jpg new file mode 100644 index 000000000..688a06471 Binary files /dev/null and b/public/guides/5/5_38/4.jpg differ diff --git a/public/guides/5/5_38/5.JPG b/public/guides/5/5_38/5.JPG new file mode 100644 index 000000000..ee517f2f8 Binary files /dev/null and b/public/guides/5/5_38/5.JPG differ diff --git a/public/guides/5/5_38/5.jpg b/public/guides/5/5_38/5.jpg new file mode 100644 index 000000000..ee517f2f8 Binary files /dev/null and b/public/guides/5/5_38/5.jpg differ diff --git a/public/guides/5/5_39/1.JPG b/public/guides/5/5_39/1.JPG new file mode 100644 index 000000000..c36025326 Binary files /dev/null and b/public/guides/5/5_39/1.JPG differ diff --git a/public/guides/5/5_39/1.jpg b/public/guides/5/5_39/1.jpg new file mode 100644 index 000000000..c36025326 Binary files /dev/null and b/public/guides/5/5_39/1.jpg differ diff --git a/public/guides/5/5_39/2.JPG b/public/guides/5/5_39/2.JPG new file mode 100644 index 000000000..f93801c16 Binary files /dev/null and b/public/guides/5/5_39/2.JPG differ diff --git a/public/guides/5/5_39/2.jpg b/public/guides/5/5_39/2.jpg new file mode 100644 index 000000000..f93801c16 Binary files /dev/null and b/public/guides/5/5_39/2.jpg differ diff --git a/public/guides/5/5_39/3.JPG b/public/guides/5/5_39/3.JPG new file mode 100644 index 000000000..217c1b447 Binary files /dev/null and b/public/guides/5/5_39/3.JPG differ diff --git a/public/guides/5/5_39/3.jpg b/public/guides/5/5_39/3.jpg new file mode 100644 index 000000000..217c1b447 Binary files /dev/null and b/public/guides/5/5_39/3.jpg differ diff --git a/public/guides/5/5_39/4.JPG b/public/guides/5/5_39/4.JPG new file mode 100644 index 000000000..b0a4cc991 Binary files /dev/null and b/public/guides/5/5_39/4.JPG differ diff --git a/public/guides/5/5_39/4.jpg b/public/guides/5/5_39/4.jpg new file mode 100644 index 000000000..b0a4cc991 Binary files /dev/null and b/public/guides/5/5_39/4.jpg differ diff --git a/public/guides/5/5_39/5.JPG b/public/guides/5/5_39/5.JPG new file mode 100644 index 000000000..fcac5ec31 Binary files /dev/null and b/public/guides/5/5_39/5.JPG differ diff --git a/public/guides/5/5_39/5.jpg b/public/guides/5/5_39/5.jpg new file mode 100644 index 000000000..fcac5ec31 Binary files /dev/null and b/public/guides/5/5_39/5.jpg differ diff --git a/public/guides/5/5_4/1.jpg b/public/guides/5/5_4/1.jpg new file mode 100644 index 000000000..fe0f40c58 Binary files /dev/null and b/public/guides/5/5_4/1.jpg differ diff --git a/public/guides/5/5_4/2.jpg b/public/guides/5/5_4/2.jpg new file mode 100644 index 000000000..304e1f456 Binary files /dev/null and b/public/guides/5/5_4/2.jpg differ diff --git a/public/guides/5/5_4/3.JPG b/public/guides/5/5_4/3.JPG new file mode 100644 index 000000000..c6f9a86c6 Binary files /dev/null and b/public/guides/5/5_4/3.JPG differ diff --git a/public/guides/5/5_4/3.jpg b/public/guides/5/5_4/3.jpg new file mode 100644 index 000000000..c6f9a86c6 Binary files /dev/null and b/public/guides/5/5_4/3.jpg differ diff --git a/public/guides/5/5_4/4.jpg b/public/guides/5/5_4/4.jpg new file mode 100644 index 000000000..f0ffd12c8 Binary files /dev/null and b/public/guides/5/5_4/4.jpg differ diff --git a/public/guides/5/5_4/5.jpg b/public/guides/5/5_4/5.jpg new file mode 100644 index 000000000..b27406574 Binary files /dev/null and b/public/guides/5/5_4/5.jpg differ diff --git a/public/guides/5/5_40/1.jpg b/public/guides/5/5_40/1.jpg new file mode 100644 index 000000000..d5683fb3f Binary files /dev/null and b/public/guides/5/5_40/1.jpg differ diff --git a/public/guides/5/5_40/2.jpg b/public/guides/5/5_40/2.jpg new file mode 100644 index 000000000..99a43a237 Binary files /dev/null and b/public/guides/5/5_40/2.jpg differ diff --git a/public/guides/5/5_40/3.jpg b/public/guides/5/5_40/3.jpg new file mode 100644 index 000000000..571e13e69 Binary files /dev/null and b/public/guides/5/5_40/3.jpg differ diff --git a/public/guides/5/5_40/4.jpg b/public/guides/5/5_40/4.jpg new file mode 100644 index 000000000..2a81d0aa7 Binary files /dev/null and b/public/guides/5/5_40/4.jpg differ diff --git a/public/guides/5/5_40/5.jpg b/public/guides/5/5_40/5.jpg new file mode 100644 index 000000000..067b4776a Binary files /dev/null and b/public/guides/5/5_40/5.jpg differ diff --git a/public/guides/5/5_41/1.jpg b/public/guides/5/5_41/1.jpg new file mode 100644 index 000000000..4e392e73b Binary files /dev/null and b/public/guides/5/5_41/1.jpg differ diff --git a/public/guides/5/5_41/2.jpg b/public/guides/5/5_41/2.jpg new file mode 100644 index 000000000..d28248de4 Binary files /dev/null and b/public/guides/5/5_41/2.jpg differ diff --git a/public/guides/5/5_41/3.jpg b/public/guides/5/5_41/3.jpg new file mode 100644 index 000000000..f61534d91 Binary files /dev/null and b/public/guides/5/5_41/3.jpg differ diff --git a/public/guides/5/5_41/4.jpg b/public/guides/5/5_41/4.jpg new file mode 100644 index 000000000..1ee68a70e Binary files /dev/null and b/public/guides/5/5_41/4.jpg differ diff --git a/public/guides/5/5_41/5.jpg b/public/guides/5/5_41/5.jpg new file mode 100644 index 000000000..8d5aac20f Binary files /dev/null and b/public/guides/5/5_41/5.jpg differ diff --git a/public/guides/5/5_42/1.jpg b/public/guides/5/5_42/1.jpg new file mode 100644 index 000000000..1937128b3 Binary files /dev/null and b/public/guides/5/5_42/1.jpg differ diff --git a/public/guides/5/5_42/2.jpg b/public/guides/5/5_42/2.jpg new file mode 100644 index 000000000..ab9a58eee Binary files /dev/null and b/public/guides/5/5_42/2.jpg differ diff --git a/public/guides/5/5_42/3.JPG b/public/guides/5/5_42/3.JPG new file mode 100644 index 000000000..78b2b12f8 Binary files /dev/null and b/public/guides/5/5_42/3.JPG differ diff --git a/public/guides/5/5_42/3.jpg b/public/guides/5/5_42/3.jpg new file mode 100644 index 000000000..78b2b12f8 Binary files /dev/null and b/public/guides/5/5_42/3.jpg differ diff --git a/public/guides/5/5_42/4.jpg b/public/guides/5/5_42/4.jpg new file mode 100644 index 000000000..ed50fb3a8 Binary files /dev/null and b/public/guides/5/5_42/4.jpg differ diff --git a/public/guides/5/5_42/5.jpg b/public/guides/5/5_42/5.jpg new file mode 100644 index 000000000..44d50806b Binary files /dev/null and b/public/guides/5/5_42/5.jpg differ diff --git a/public/guides/5/5_43/1.jpg b/public/guides/5/5_43/1.jpg new file mode 100644 index 000000000..7e552e63e Binary files /dev/null and b/public/guides/5/5_43/1.jpg differ diff --git a/public/guides/5/5_43/2.jpg b/public/guides/5/5_43/2.jpg new file mode 100644 index 000000000..20e9a8533 Binary files /dev/null and b/public/guides/5/5_43/2.jpg differ diff --git a/public/guides/5/5_43/3.jpg b/public/guides/5/5_43/3.jpg new file mode 100644 index 000000000..34f2f9b78 Binary files /dev/null and b/public/guides/5/5_43/3.jpg differ diff --git a/public/guides/5/5_43/4.jpg b/public/guides/5/5_43/4.jpg new file mode 100644 index 000000000..c88cf04c6 Binary files /dev/null and b/public/guides/5/5_43/4.jpg differ diff --git a/public/guides/5/5_43/5.jpg b/public/guides/5/5_43/5.jpg new file mode 100644 index 000000000..ae2ea9659 Binary files /dev/null and b/public/guides/5/5_43/5.jpg differ diff --git a/public/guides/5/5_44/1.jpg b/public/guides/5/5_44/1.jpg new file mode 100644 index 000000000..6c593056e Binary files /dev/null and b/public/guides/5/5_44/1.jpg differ diff --git a/public/guides/5/5_44/2.jpg b/public/guides/5/5_44/2.jpg new file mode 100644 index 000000000..41ef4b5f8 Binary files /dev/null and b/public/guides/5/5_44/2.jpg differ diff --git a/public/guides/5/5_44/3.jpg b/public/guides/5/5_44/3.jpg new file mode 100644 index 000000000..4c9c0f000 Binary files /dev/null and b/public/guides/5/5_44/3.jpg differ diff --git a/public/guides/5/5_44/4.jpg b/public/guides/5/5_44/4.jpg new file mode 100644 index 000000000..89a44e268 Binary files /dev/null and b/public/guides/5/5_44/4.jpg differ diff --git a/public/guides/5/5_44/5.jpg b/public/guides/5/5_44/5.jpg new file mode 100644 index 000000000..0ed8e731e Binary files /dev/null and b/public/guides/5/5_44/5.jpg differ diff --git a/public/guides/5/5_45/1.jpg b/public/guides/5/5_45/1.jpg new file mode 100644 index 000000000..36c5b2455 Binary files /dev/null and b/public/guides/5/5_45/1.jpg differ diff --git a/public/guides/5/5_45/2.jpg b/public/guides/5/5_45/2.jpg new file mode 100644 index 000000000..042c4ff30 Binary files /dev/null and b/public/guides/5/5_45/2.jpg differ diff --git a/public/guides/5/5_45/3.jpg b/public/guides/5/5_45/3.jpg new file mode 100644 index 000000000..1f6ee7723 Binary files /dev/null and b/public/guides/5/5_45/3.jpg differ diff --git a/public/guides/5/5_45/4.JPG b/public/guides/5/5_45/4.JPG new file mode 100644 index 000000000..a2edaee24 Binary files /dev/null and b/public/guides/5/5_45/4.JPG differ diff --git a/public/guides/5/5_45/4.jpg b/public/guides/5/5_45/4.jpg new file mode 100644 index 000000000..a2edaee24 Binary files /dev/null and b/public/guides/5/5_45/4.jpg differ diff --git a/public/guides/5/5_45/5.jpg b/public/guides/5/5_45/5.jpg new file mode 100644 index 000000000..b83b36cc5 Binary files /dev/null and b/public/guides/5/5_45/5.jpg differ diff --git a/public/guides/5/5_46/1.jpg b/public/guides/5/5_46/1.jpg new file mode 100644 index 000000000..3f4c09c93 Binary files /dev/null and b/public/guides/5/5_46/1.jpg differ diff --git a/public/guides/5/5_46/2.jpg b/public/guides/5/5_46/2.jpg new file mode 100644 index 000000000..89b7f8255 Binary files /dev/null and b/public/guides/5/5_46/2.jpg differ diff --git a/public/guides/5/5_46/3.jpg b/public/guides/5/5_46/3.jpg new file mode 100644 index 000000000..9da356ff8 Binary files /dev/null and b/public/guides/5/5_46/3.jpg differ diff --git a/public/guides/5/5_46/4.jpg b/public/guides/5/5_46/4.jpg new file mode 100644 index 000000000..86192fc3a Binary files /dev/null and b/public/guides/5/5_46/4.jpg differ diff --git a/public/guides/5/5_46/5.jpg b/public/guides/5/5_46/5.jpg new file mode 100644 index 000000000..c180aebd5 Binary files /dev/null and b/public/guides/5/5_46/5.jpg differ diff --git a/public/guides/5/5_47/1.jpg b/public/guides/5/5_47/1.jpg new file mode 100644 index 000000000..c3cb021da Binary files /dev/null and b/public/guides/5/5_47/1.jpg differ diff --git a/public/guides/5/5_47/2.jpg b/public/guides/5/5_47/2.jpg new file mode 100644 index 000000000..2914c1a4f Binary files /dev/null and b/public/guides/5/5_47/2.jpg differ diff --git a/public/guides/5/5_47/3.jpg b/public/guides/5/5_47/3.jpg new file mode 100644 index 000000000..b8a2820a1 Binary files /dev/null and b/public/guides/5/5_47/3.jpg differ diff --git a/public/guides/5/5_47/4.jpg b/public/guides/5/5_47/4.jpg new file mode 100644 index 000000000..6be686ce4 Binary files /dev/null and b/public/guides/5/5_47/4.jpg differ diff --git a/public/guides/5/5_47/5.jpg b/public/guides/5/5_47/5.jpg new file mode 100644 index 000000000..f44e2cc97 Binary files /dev/null and b/public/guides/5/5_47/5.jpg differ diff --git a/public/guides/5/5_48/1.jpg b/public/guides/5/5_48/1.jpg new file mode 100644 index 000000000..8ad71d848 Binary files /dev/null and b/public/guides/5/5_48/1.jpg differ diff --git a/public/guides/5/5_48/2.jpg b/public/guides/5/5_48/2.jpg new file mode 100644 index 000000000..6991d9e7a Binary files /dev/null and b/public/guides/5/5_48/2.jpg differ diff --git a/public/guides/5/5_48/3.JPG b/public/guides/5/5_48/3.JPG new file mode 100644 index 000000000..208699ace Binary files /dev/null and b/public/guides/5/5_48/3.JPG differ diff --git a/public/guides/5/5_48/3.jpg b/public/guides/5/5_48/3.jpg new file mode 100644 index 000000000..208699ace Binary files /dev/null and b/public/guides/5/5_48/3.jpg differ diff --git a/public/guides/5/5_48/4.jpg b/public/guides/5/5_48/4.jpg new file mode 100644 index 000000000..b6d89e7ca Binary files /dev/null and b/public/guides/5/5_48/4.jpg differ diff --git a/public/guides/5/5_48/5.jpg b/public/guides/5/5_48/5.jpg new file mode 100644 index 000000000..49cd0ec27 Binary files /dev/null and b/public/guides/5/5_48/5.jpg differ diff --git a/public/guides/5/5_49/1.JPG b/public/guides/5/5_49/1.JPG new file mode 100644 index 000000000..ffd204f6d Binary files /dev/null and b/public/guides/5/5_49/1.JPG differ diff --git a/public/guides/5/5_49/1.jpg b/public/guides/5/5_49/1.jpg new file mode 100644 index 000000000..ffd204f6d Binary files /dev/null and b/public/guides/5/5_49/1.jpg differ diff --git a/public/guides/5/5_49/2.JPG b/public/guides/5/5_49/2.JPG new file mode 100644 index 000000000..68afe9348 Binary files /dev/null and b/public/guides/5/5_49/2.JPG differ diff --git a/public/guides/5/5_49/2.jpg b/public/guides/5/5_49/2.jpg new file mode 100644 index 000000000..68afe9348 Binary files /dev/null and b/public/guides/5/5_49/2.jpg differ diff --git a/public/guides/5/5_49/3.JPG b/public/guides/5/5_49/3.JPG new file mode 100644 index 000000000..2d1119831 Binary files /dev/null and b/public/guides/5/5_49/3.JPG differ diff --git a/public/guides/5/5_49/3.jpg b/public/guides/5/5_49/3.jpg new file mode 100644 index 000000000..2d1119831 Binary files /dev/null and b/public/guides/5/5_49/3.jpg differ diff --git a/public/guides/5/5_49/4.JPG b/public/guides/5/5_49/4.JPG new file mode 100644 index 000000000..1e829c91b Binary files /dev/null and b/public/guides/5/5_49/4.JPG differ diff --git a/public/guides/5/5_49/4.jpg b/public/guides/5/5_49/4.jpg new file mode 100644 index 000000000..1e829c91b Binary files /dev/null and b/public/guides/5/5_49/4.jpg differ diff --git a/public/guides/5/5_49/5.JPG b/public/guides/5/5_49/5.JPG new file mode 100644 index 000000000..f6674a615 Binary files /dev/null and b/public/guides/5/5_49/5.JPG differ diff --git a/public/guides/5/5_49/5.jpg b/public/guides/5/5_49/5.jpg new file mode 100644 index 000000000..f6674a615 Binary files /dev/null and b/public/guides/5/5_49/5.jpg differ diff --git a/public/guides/5/5_5/1.jpg b/public/guides/5/5_5/1.jpg new file mode 100644 index 000000000..73e9e5ab8 Binary files /dev/null and b/public/guides/5/5_5/1.jpg differ diff --git a/public/guides/5/5_5/2.jpg b/public/guides/5/5_5/2.jpg new file mode 100644 index 000000000..8f5015a58 Binary files /dev/null and b/public/guides/5/5_5/2.jpg differ diff --git a/public/guides/5/5_5/3.jpg b/public/guides/5/5_5/3.jpg new file mode 100644 index 000000000..f328b128a Binary files /dev/null and b/public/guides/5/5_5/3.jpg differ diff --git a/public/guides/5/5_5/4.jpg b/public/guides/5/5_5/4.jpg new file mode 100644 index 000000000..349799ab1 Binary files /dev/null and b/public/guides/5/5_5/4.jpg differ diff --git a/public/guides/5/5_5/5.jpg b/public/guides/5/5_5/5.jpg new file mode 100644 index 000000000..afde67ae8 Binary files /dev/null and b/public/guides/5/5_5/5.jpg differ diff --git a/public/guides/5/5_50/1.JPG b/public/guides/5/5_50/1.JPG new file mode 100644 index 000000000..ce5aad963 Binary files /dev/null and b/public/guides/5/5_50/1.JPG differ diff --git a/public/guides/5/5_50/1.jpg b/public/guides/5/5_50/1.jpg new file mode 100644 index 000000000..ce5aad963 Binary files /dev/null and b/public/guides/5/5_50/1.jpg differ diff --git a/public/guides/5/5_50/2.JPG b/public/guides/5/5_50/2.JPG new file mode 100644 index 000000000..8dd427776 Binary files /dev/null and b/public/guides/5/5_50/2.JPG differ diff --git a/public/guides/5/5_50/2.jpg b/public/guides/5/5_50/2.jpg new file mode 100644 index 000000000..8dd427776 Binary files /dev/null and b/public/guides/5/5_50/2.jpg differ diff --git a/public/guides/5/5_50/3.JPG b/public/guides/5/5_50/3.JPG new file mode 100644 index 000000000..7468f36a3 Binary files /dev/null and b/public/guides/5/5_50/3.JPG differ diff --git a/public/guides/5/5_50/3.jpg b/public/guides/5/5_50/3.jpg new file mode 100644 index 000000000..7468f36a3 Binary files /dev/null and b/public/guides/5/5_50/3.jpg differ diff --git a/public/guides/5/5_50/4.JPG b/public/guides/5/5_50/4.JPG new file mode 100644 index 000000000..a6b5c0efa Binary files /dev/null and b/public/guides/5/5_50/4.JPG differ diff --git a/public/guides/5/5_50/4.jpg b/public/guides/5/5_50/4.jpg new file mode 100644 index 000000000..a6b5c0efa Binary files /dev/null and b/public/guides/5/5_50/4.jpg differ diff --git a/public/guides/5/5_50/5.JPG b/public/guides/5/5_50/5.JPG new file mode 100644 index 000000000..b84fb8cd1 Binary files /dev/null and b/public/guides/5/5_50/5.JPG differ diff --git a/public/guides/5/5_50/5.jpg b/public/guides/5/5_50/5.jpg new file mode 100644 index 000000000..b84fb8cd1 Binary files /dev/null and b/public/guides/5/5_50/5.jpg differ diff --git a/public/guides/5/5_51/1.JPG b/public/guides/5/5_51/1.JPG new file mode 100644 index 000000000..76ad77d07 Binary files /dev/null and b/public/guides/5/5_51/1.JPG differ diff --git a/public/guides/5/5_51/1.jpg b/public/guides/5/5_51/1.jpg new file mode 100644 index 000000000..76ad77d07 Binary files /dev/null and b/public/guides/5/5_51/1.jpg differ diff --git a/public/guides/5/5_51/2.jpg b/public/guides/5/5_51/2.jpg new file mode 100644 index 000000000..712864d21 Binary files /dev/null and b/public/guides/5/5_51/2.jpg differ diff --git a/public/guides/5/5_51/3.JPG b/public/guides/5/5_51/3.JPG new file mode 100644 index 000000000..5b6b7798a Binary files /dev/null and b/public/guides/5/5_51/3.JPG differ diff --git a/public/guides/5/5_51/3.jpg b/public/guides/5/5_51/3.jpg new file mode 100644 index 000000000..5b6b7798a Binary files /dev/null and b/public/guides/5/5_51/3.jpg differ diff --git a/public/guides/5/5_51/4.jpg b/public/guides/5/5_51/4.jpg new file mode 100644 index 000000000..137f75490 Binary files /dev/null and b/public/guides/5/5_51/4.jpg differ diff --git a/public/guides/5/5_51/5.JPG b/public/guides/5/5_51/5.JPG new file mode 100644 index 000000000..c736069bc Binary files /dev/null and b/public/guides/5/5_51/5.JPG differ diff --git a/public/guides/5/5_51/5.jpg b/public/guides/5/5_51/5.jpg new file mode 100644 index 000000000..c736069bc Binary files /dev/null and b/public/guides/5/5_51/5.jpg differ diff --git a/public/guides/5/5_52/1.jpg b/public/guides/5/5_52/1.jpg new file mode 100644 index 000000000..2cdabffdb Binary files /dev/null and b/public/guides/5/5_52/1.jpg differ diff --git a/public/guides/5/5_52/2.jpg b/public/guides/5/5_52/2.jpg new file mode 100644 index 000000000..90cdd52a6 Binary files /dev/null and b/public/guides/5/5_52/2.jpg differ diff --git a/public/guides/5/5_52/3.JPG b/public/guides/5/5_52/3.JPG new file mode 100644 index 000000000..885671f02 Binary files /dev/null and b/public/guides/5/5_52/3.JPG differ diff --git a/public/guides/5/5_52/3.jpg b/public/guides/5/5_52/3.jpg new file mode 100644 index 000000000..885671f02 Binary files /dev/null and b/public/guides/5/5_52/3.jpg differ diff --git a/public/guides/5/5_52/4.JPG b/public/guides/5/5_52/4.JPG new file mode 100644 index 000000000..4cc7d7d59 Binary files /dev/null and b/public/guides/5/5_52/4.JPG differ diff --git a/public/guides/5/5_52/4.jpg b/public/guides/5/5_52/4.jpg new file mode 100644 index 000000000..4cc7d7d59 Binary files /dev/null and b/public/guides/5/5_52/4.jpg differ diff --git a/public/guides/5/5_52/5.jpg b/public/guides/5/5_52/5.jpg new file mode 100644 index 000000000..afe9068fd Binary files /dev/null and b/public/guides/5/5_52/5.jpg differ diff --git a/public/guides/5/5_53/1.jpg b/public/guides/5/5_53/1.jpg new file mode 100644 index 000000000..d138f9d98 Binary files /dev/null and b/public/guides/5/5_53/1.jpg differ diff --git a/public/guides/5/5_53/2.jpg b/public/guides/5/5_53/2.jpg new file mode 100644 index 000000000..e59f59084 Binary files /dev/null and b/public/guides/5/5_53/2.jpg differ diff --git a/public/guides/5/5_53/3.JPG b/public/guides/5/5_53/3.JPG new file mode 100644 index 000000000..76a953cdb Binary files /dev/null and b/public/guides/5/5_53/3.JPG differ diff --git a/public/guides/5/5_53/3.jpg b/public/guides/5/5_53/3.jpg new file mode 100644 index 000000000..76a953cdb Binary files /dev/null and b/public/guides/5/5_53/3.jpg differ diff --git a/public/guides/5/5_53/4.jpg b/public/guides/5/5_53/4.jpg new file mode 100644 index 000000000..b5908ee3f Binary files /dev/null and b/public/guides/5/5_53/4.jpg differ diff --git a/public/guides/5/5_53/5.jpg b/public/guides/5/5_53/5.jpg new file mode 100644 index 000000000..f115043ca Binary files /dev/null and b/public/guides/5/5_53/5.jpg differ diff --git a/public/guides/5/5_54/1.jpg b/public/guides/5/5_54/1.jpg new file mode 100644 index 000000000..b5c403dd1 Binary files /dev/null and b/public/guides/5/5_54/1.jpg differ diff --git a/public/guides/5/5_54/2.JPG b/public/guides/5/5_54/2.JPG new file mode 100644 index 000000000..23cfabcbe Binary files /dev/null and b/public/guides/5/5_54/2.JPG differ diff --git a/public/guides/5/5_54/2.jpg b/public/guides/5/5_54/2.jpg new file mode 100644 index 000000000..23cfabcbe Binary files /dev/null and b/public/guides/5/5_54/2.jpg differ diff --git a/public/guides/5/5_54/3.jpg b/public/guides/5/5_54/3.jpg new file mode 100644 index 000000000..7dd4204fe Binary files /dev/null and b/public/guides/5/5_54/3.jpg differ diff --git a/public/guides/5/5_54/4.jpg b/public/guides/5/5_54/4.jpg new file mode 100644 index 000000000..21c03c885 Binary files /dev/null and b/public/guides/5/5_54/4.jpg differ diff --git a/public/guides/5/5_54/5.jpg b/public/guides/5/5_54/5.jpg new file mode 100644 index 000000000..966f0782e Binary files /dev/null and b/public/guides/5/5_54/5.jpg differ diff --git a/public/guides/5/5_55/1.jpg b/public/guides/5/5_55/1.jpg new file mode 100644 index 000000000..7e7df6ce3 Binary files /dev/null and b/public/guides/5/5_55/1.jpg differ diff --git a/public/guides/5/5_55/2.jpg b/public/guides/5/5_55/2.jpg new file mode 100644 index 000000000..c5ccb6e37 Binary files /dev/null and b/public/guides/5/5_55/2.jpg differ diff --git a/public/guides/5/5_55/3.jpg b/public/guides/5/5_55/3.jpg new file mode 100644 index 000000000..08fd0e47e Binary files /dev/null and b/public/guides/5/5_55/3.jpg differ diff --git a/public/guides/5/5_55/4.jpg b/public/guides/5/5_55/4.jpg new file mode 100644 index 000000000..6155e149c Binary files /dev/null and b/public/guides/5/5_55/4.jpg differ diff --git a/public/guides/5/5_55/5.jpg b/public/guides/5/5_55/5.jpg new file mode 100644 index 000000000..44472a025 Binary files /dev/null and b/public/guides/5/5_55/5.jpg differ diff --git a/public/guides/5/5_56/1.jpg b/public/guides/5/5_56/1.jpg new file mode 100644 index 000000000..ce8eafafa Binary files /dev/null and b/public/guides/5/5_56/1.jpg differ diff --git a/public/guides/5/5_56/2.jpg b/public/guides/5/5_56/2.jpg new file mode 100644 index 000000000..57aa96eaa Binary files /dev/null and b/public/guides/5/5_56/2.jpg differ diff --git a/public/guides/5/5_56/3.jpg b/public/guides/5/5_56/3.jpg new file mode 100644 index 000000000..3c75fd53e Binary files /dev/null and b/public/guides/5/5_56/3.jpg differ diff --git a/public/guides/5/5_56/4.jpg b/public/guides/5/5_56/4.jpg new file mode 100644 index 000000000..e2a32185a Binary files /dev/null and b/public/guides/5/5_56/4.jpg differ diff --git a/public/guides/5/5_56/5.jpg b/public/guides/5/5_56/5.jpg new file mode 100644 index 000000000..c55871e40 Binary files /dev/null and b/public/guides/5/5_56/5.jpg differ diff --git a/public/guides/5/5_57/1.JPG b/public/guides/5/5_57/1.JPG new file mode 100644 index 000000000..419bb9d02 Binary files /dev/null and b/public/guides/5/5_57/1.JPG differ diff --git a/public/guides/5/5_57/1.jpg b/public/guides/5/5_57/1.jpg new file mode 100644 index 000000000..419bb9d02 Binary files /dev/null and b/public/guides/5/5_57/1.jpg differ diff --git a/public/guides/5/5_57/2.jpg b/public/guides/5/5_57/2.jpg new file mode 100644 index 000000000..5ff3a69b4 Binary files /dev/null and b/public/guides/5/5_57/2.jpg differ diff --git a/public/guides/5/5_57/3.jpg b/public/guides/5/5_57/3.jpg new file mode 100644 index 000000000..f5b0876c3 Binary files /dev/null and b/public/guides/5/5_57/3.jpg differ diff --git a/public/guides/5/5_57/4.JPG b/public/guides/5/5_57/4.JPG new file mode 100644 index 000000000..a9a441d51 Binary files /dev/null and b/public/guides/5/5_57/4.JPG differ diff --git a/public/guides/5/5_57/4.jpg b/public/guides/5/5_57/4.jpg new file mode 100644 index 000000000..a9a441d51 Binary files /dev/null and b/public/guides/5/5_57/4.jpg differ diff --git a/public/guides/5/5_57/5.jpg b/public/guides/5/5_57/5.jpg new file mode 100644 index 000000000..e8ff59b78 Binary files /dev/null and b/public/guides/5/5_57/5.jpg differ diff --git a/public/guides/5/5_58/1.jpg b/public/guides/5/5_58/1.jpg new file mode 100644 index 000000000..0b3fef8ff Binary files /dev/null and b/public/guides/5/5_58/1.jpg differ diff --git a/public/guides/5/5_58/2.jpg b/public/guides/5/5_58/2.jpg new file mode 100644 index 000000000..a6afe0158 Binary files /dev/null and b/public/guides/5/5_58/2.jpg differ diff --git a/public/guides/5/5_58/3.jpg b/public/guides/5/5_58/3.jpg new file mode 100644 index 000000000..ed065cce7 Binary files /dev/null and b/public/guides/5/5_58/3.jpg differ diff --git a/public/guides/5/5_58/4.jpg b/public/guides/5/5_58/4.jpg new file mode 100644 index 000000000..1ebbd8509 Binary files /dev/null and b/public/guides/5/5_58/4.jpg differ diff --git a/public/guides/5/5_58/5.JPG b/public/guides/5/5_58/5.JPG new file mode 100644 index 000000000..2a45109ae Binary files /dev/null and b/public/guides/5/5_58/5.JPG differ diff --git a/public/guides/5/5_58/5.jpg b/public/guides/5/5_58/5.jpg new file mode 100644 index 000000000..2a45109ae Binary files /dev/null and b/public/guides/5/5_58/5.jpg differ diff --git a/public/guides/5/5_59/1.jpg b/public/guides/5/5_59/1.jpg new file mode 100644 index 000000000..48e1ed427 Binary files /dev/null and b/public/guides/5/5_59/1.jpg differ diff --git a/public/guides/5/5_59/2.jpg b/public/guides/5/5_59/2.jpg new file mode 100644 index 000000000..a910648b6 Binary files /dev/null and b/public/guides/5/5_59/2.jpg differ diff --git a/public/guides/5/5_59/3.jpg b/public/guides/5/5_59/3.jpg new file mode 100644 index 000000000..f9dab460f Binary files /dev/null and b/public/guides/5/5_59/3.jpg differ diff --git a/public/guides/5/5_59/4.jpg b/public/guides/5/5_59/4.jpg new file mode 100644 index 000000000..b5cff2321 Binary files /dev/null and b/public/guides/5/5_59/4.jpg differ diff --git a/public/guides/5/5_59/5.JPG b/public/guides/5/5_59/5.JPG new file mode 100644 index 000000000..6fa128d83 Binary files /dev/null and b/public/guides/5/5_59/5.JPG differ diff --git a/public/guides/5/5_59/5.jpg b/public/guides/5/5_59/5.jpg new file mode 100644 index 000000000..6fa128d83 Binary files /dev/null and b/public/guides/5/5_59/5.jpg differ diff --git a/public/guides/5/5_6/1.jpg b/public/guides/5/5_6/1.jpg new file mode 100644 index 000000000..402048ff0 Binary files /dev/null and b/public/guides/5/5_6/1.jpg differ diff --git a/public/guides/5/5_6/2.JPG b/public/guides/5/5_6/2.JPG new file mode 100644 index 000000000..7ddd1e4cb Binary files /dev/null and b/public/guides/5/5_6/2.JPG differ diff --git a/public/guides/5/5_6/2.jpg b/public/guides/5/5_6/2.jpg new file mode 100644 index 000000000..7ddd1e4cb Binary files /dev/null and b/public/guides/5/5_6/2.jpg differ diff --git a/public/guides/5/5_6/3.JPG b/public/guides/5/5_6/3.JPG new file mode 100644 index 000000000..32e307285 Binary files /dev/null and b/public/guides/5/5_6/3.JPG differ diff --git a/public/guides/5/5_6/3.jpg b/public/guides/5/5_6/3.jpg new file mode 100644 index 000000000..32e307285 Binary files /dev/null and b/public/guides/5/5_6/3.jpg differ diff --git a/public/guides/5/5_6/4.JPG b/public/guides/5/5_6/4.JPG new file mode 100644 index 000000000..596ba6496 Binary files /dev/null and b/public/guides/5/5_6/4.JPG differ diff --git a/public/guides/5/5_6/4.jpg b/public/guides/5/5_6/4.jpg new file mode 100644 index 000000000..596ba6496 Binary files /dev/null and b/public/guides/5/5_6/4.jpg differ diff --git a/public/guides/5/5_6/5.jpg b/public/guides/5/5_6/5.jpg new file mode 100644 index 000000000..533fbfb42 Binary files /dev/null and b/public/guides/5/5_6/5.jpg differ diff --git a/public/guides/5/5_60/1.JPG b/public/guides/5/5_60/1.JPG new file mode 100644 index 000000000..7e1764598 Binary files /dev/null and b/public/guides/5/5_60/1.JPG differ diff --git a/public/guides/5/5_60/1.jpg b/public/guides/5/5_60/1.jpg new file mode 100644 index 000000000..7e1764598 Binary files /dev/null and b/public/guides/5/5_60/1.jpg differ diff --git a/public/guides/5/5_60/2.JPG b/public/guides/5/5_60/2.JPG new file mode 100644 index 000000000..bbf273d83 Binary files /dev/null and b/public/guides/5/5_60/2.JPG differ diff --git a/public/guides/5/5_60/2.jpg b/public/guides/5/5_60/2.jpg new file mode 100644 index 000000000..bbf273d83 Binary files /dev/null and b/public/guides/5/5_60/2.jpg differ diff --git a/public/guides/5/5_60/3.jpg b/public/guides/5/5_60/3.jpg new file mode 100644 index 000000000..e8c68cabc Binary files /dev/null and b/public/guides/5/5_60/3.jpg differ diff --git a/public/guides/5/5_60/4.JPG b/public/guides/5/5_60/4.JPG new file mode 100644 index 000000000..f309daff3 Binary files /dev/null and b/public/guides/5/5_60/4.JPG differ diff --git a/public/guides/5/5_60/4.jpg b/public/guides/5/5_60/4.jpg new file mode 100644 index 000000000..f309daff3 Binary files /dev/null and b/public/guides/5/5_60/4.jpg differ diff --git a/public/guides/5/5_60/5.jpg b/public/guides/5/5_60/5.jpg new file mode 100644 index 000000000..e041d406c Binary files /dev/null and b/public/guides/5/5_60/5.jpg differ diff --git a/public/guides/5/5_61/1.jpg b/public/guides/5/5_61/1.jpg new file mode 100644 index 000000000..e33e699b1 Binary files /dev/null and b/public/guides/5/5_61/1.jpg differ diff --git a/public/guides/5/5_61/2.jpg b/public/guides/5/5_61/2.jpg new file mode 100644 index 000000000..1d9cdaef1 Binary files /dev/null and b/public/guides/5/5_61/2.jpg differ diff --git a/public/guides/5/5_61/3.jpg b/public/guides/5/5_61/3.jpg new file mode 100644 index 000000000..55f18d9df Binary files /dev/null and b/public/guides/5/5_61/3.jpg differ diff --git a/public/guides/5/5_61/4.jpg b/public/guides/5/5_61/4.jpg new file mode 100644 index 000000000..bcdfe1bf1 Binary files /dev/null and b/public/guides/5/5_61/4.jpg differ diff --git a/public/guides/5/5_61/5.jpg b/public/guides/5/5_61/5.jpg new file mode 100644 index 000000000..ce5740295 Binary files /dev/null and b/public/guides/5/5_61/5.jpg differ diff --git a/public/guides/5/5_62/1.jpg b/public/guides/5/5_62/1.jpg new file mode 100644 index 000000000..bf9be1426 Binary files /dev/null and b/public/guides/5/5_62/1.jpg differ diff --git a/public/guides/5/5_62/2.jpg b/public/guides/5/5_62/2.jpg new file mode 100644 index 000000000..da6bd3743 Binary files /dev/null and b/public/guides/5/5_62/2.jpg differ diff --git a/public/guides/5/5_62/3.jpg b/public/guides/5/5_62/3.jpg new file mode 100644 index 000000000..e1ed2bce8 Binary files /dev/null and b/public/guides/5/5_62/3.jpg differ diff --git a/public/guides/5/5_62/4.JPG b/public/guides/5/5_62/4.JPG new file mode 100644 index 000000000..71bccb0e8 Binary files /dev/null and b/public/guides/5/5_62/4.JPG differ diff --git a/public/guides/5/5_62/4.jpg b/public/guides/5/5_62/4.jpg new file mode 100644 index 000000000..71bccb0e8 Binary files /dev/null and b/public/guides/5/5_62/4.jpg differ diff --git a/public/guides/5/5_62/5.jpg b/public/guides/5/5_62/5.jpg new file mode 100644 index 000000000..9dbdc4d39 Binary files /dev/null and b/public/guides/5/5_62/5.jpg differ diff --git a/public/guides/5/5_63/1.JPG b/public/guides/5/5_63/1.JPG new file mode 100644 index 000000000..6a2d48e3d Binary files /dev/null and b/public/guides/5/5_63/1.JPG differ diff --git a/public/guides/5/5_63/1.jpg b/public/guides/5/5_63/1.jpg new file mode 100644 index 000000000..6a2d48e3d Binary files /dev/null and b/public/guides/5/5_63/1.jpg differ diff --git a/public/guides/5/5_63/2.jpg b/public/guides/5/5_63/2.jpg new file mode 100644 index 000000000..35953c89f Binary files /dev/null and b/public/guides/5/5_63/2.jpg differ diff --git a/public/guides/5/5_63/3.jpg b/public/guides/5/5_63/3.jpg new file mode 100644 index 000000000..92b2eed2e Binary files /dev/null and b/public/guides/5/5_63/3.jpg differ diff --git a/public/guides/5/5_63/4.JPG b/public/guides/5/5_63/4.JPG new file mode 100644 index 000000000..7ae5f9945 Binary files /dev/null and b/public/guides/5/5_63/4.JPG differ diff --git a/public/guides/5/5_63/4.jpg b/public/guides/5/5_63/4.jpg new file mode 100644 index 000000000..7ae5f9945 Binary files /dev/null and b/public/guides/5/5_63/4.jpg differ diff --git a/public/guides/5/5_63/5.jpg b/public/guides/5/5_63/5.jpg new file mode 100644 index 000000000..fff8fe9bf Binary files /dev/null and b/public/guides/5/5_63/5.jpg differ diff --git a/public/guides/5/5_64/1.jpg b/public/guides/5/5_64/1.jpg new file mode 100644 index 000000000..172b0a79e Binary files /dev/null and b/public/guides/5/5_64/1.jpg differ diff --git a/public/guides/5/5_64/2.jpg b/public/guides/5/5_64/2.jpg new file mode 100644 index 000000000..82f6762ab Binary files /dev/null and b/public/guides/5/5_64/2.jpg differ diff --git a/public/guides/5/5_64/3.jpg b/public/guides/5/5_64/3.jpg new file mode 100644 index 000000000..2ae3baadd Binary files /dev/null and b/public/guides/5/5_64/3.jpg differ diff --git a/public/guides/5/5_64/4.JPG b/public/guides/5/5_64/4.JPG new file mode 100644 index 000000000..b2a90de58 Binary files /dev/null and b/public/guides/5/5_64/4.JPG differ diff --git a/public/guides/5/5_64/4.jpg b/public/guides/5/5_64/4.jpg new file mode 100644 index 000000000..b2a90de58 Binary files /dev/null and b/public/guides/5/5_64/4.jpg differ diff --git a/public/guides/5/5_64/5.jpg b/public/guides/5/5_64/5.jpg new file mode 100644 index 000000000..0f832097f Binary files /dev/null and b/public/guides/5/5_64/5.jpg differ diff --git a/public/guides/5/5_65/1.jpg b/public/guides/5/5_65/1.jpg new file mode 100644 index 000000000..c5222e632 Binary files /dev/null and b/public/guides/5/5_65/1.jpg differ diff --git a/public/guides/5/5_65/2.jpg b/public/guides/5/5_65/2.jpg new file mode 100644 index 000000000..a3a27cd45 Binary files /dev/null and b/public/guides/5/5_65/2.jpg differ diff --git a/public/guides/5/5_65/3.jpg b/public/guides/5/5_65/3.jpg new file mode 100644 index 000000000..04e2d26b4 Binary files /dev/null and b/public/guides/5/5_65/3.jpg differ diff --git a/public/guides/5/5_65/4.jpg b/public/guides/5/5_65/4.jpg new file mode 100644 index 000000000..6eb0dd9b9 Binary files /dev/null and b/public/guides/5/5_65/4.jpg differ diff --git a/public/guides/5/5_65/5.jpg b/public/guides/5/5_65/5.jpg new file mode 100644 index 000000000..d9c51ef9d Binary files /dev/null and b/public/guides/5/5_65/5.jpg differ diff --git a/public/guides/5/5_7/1.jpg b/public/guides/5/5_7/1.jpg new file mode 100644 index 000000000..7bb6ce5e7 Binary files /dev/null and b/public/guides/5/5_7/1.jpg differ diff --git a/public/guides/5/5_7/2.jpg b/public/guides/5/5_7/2.jpg new file mode 100644 index 000000000..ff5d69fdb Binary files /dev/null and b/public/guides/5/5_7/2.jpg differ diff --git a/public/guides/5/5_7/3.jpg b/public/guides/5/5_7/3.jpg new file mode 100644 index 000000000..a8acbc3a3 Binary files /dev/null and b/public/guides/5/5_7/3.jpg differ diff --git a/public/guides/5/5_7/4.jpg b/public/guides/5/5_7/4.jpg new file mode 100644 index 000000000..ff088d943 Binary files /dev/null and b/public/guides/5/5_7/4.jpg differ diff --git a/public/guides/5/5_7/5.jpg b/public/guides/5/5_7/5.jpg new file mode 100644 index 000000000..71ba2d457 Binary files /dev/null and b/public/guides/5/5_7/5.jpg differ diff --git a/public/guides/5/5_8/1.jpg b/public/guides/5/5_8/1.jpg new file mode 100644 index 000000000..599c94c55 Binary files /dev/null and b/public/guides/5/5_8/1.jpg differ diff --git a/public/guides/5/5_8/2.jpg b/public/guides/5/5_8/2.jpg new file mode 100644 index 000000000..db5b224e1 Binary files /dev/null and b/public/guides/5/5_8/2.jpg differ diff --git a/public/guides/5/5_8/3.jpg b/public/guides/5/5_8/3.jpg new file mode 100644 index 000000000..de408ff99 Binary files /dev/null and b/public/guides/5/5_8/3.jpg differ diff --git a/public/guides/5/5_8/4.jpg b/public/guides/5/5_8/4.jpg new file mode 100644 index 000000000..f679af4d6 Binary files /dev/null and b/public/guides/5/5_8/4.jpg differ diff --git a/public/guides/5/5_8/5.jpg b/public/guides/5/5_8/5.jpg new file mode 100644 index 000000000..149ac4b57 Binary files /dev/null and b/public/guides/5/5_8/5.jpg differ diff --git a/public/guides/5/5_9/1.jpg b/public/guides/5/5_9/1.jpg new file mode 100644 index 000000000..a0516dc71 Binary files /dev/null and b/public/guides/5/5_9/1.jpg differ diff --git a/public/guides/5/5_9/2.jpg b/public/guides/5/5_9/2.jpg new file mode 100644 index 000000000..58d163ed6 Binary files /dev/null and b/public/guides/5/5_9/2.jpg differ diff --git a/public/guides/5/5_9/3.jpg b/public/guides/5/5_9/3.jpg new file mode 100644 index 000000000..795833f24 Binary files /dev/null and b/public/guides/5/5_9/3.jpg differ diff --git a/public/guides/5/5_9/4.jpg b/public/guides/5/5_9/4.jpg new file mode 100644 index 000000000..470790fa7 Binary files /dev/null and b/public/guides/5/5_9/4.jpg differ diff --git a/public/guides/5/5_9/5.jpg b/public/guides/5/5_9/5.jpg new file mode 100644 index 000000000..0dd66b5ec Binary files /dev/null and b/public/guides/5/5_9/5.jpg differ diff --git "a/public/guides/5/5_ITEM_SUB category_\355\222\210\353\252\251 \354\271\264\355\205\214\352\263\240\353\246\254.jpg" "b/public/guides/5/5_ITEM_SUB category_\355\222\210\353\252\251 \354\271\264\355\205\214\352\263\240\353\246\254.jpg" new file mode 100644 index 000000000..45ad0dc0c Binary files /dev/null and "b/public/guides/5/5_ITEM_SUB category_\355\222\210\353\252\251 \354\271\264\355\205\214\352\263\240\353\246\254.jpg" differ diff --git a/public/guides/6/6_1/1.jpg b/public/guides/6/6_1/1.jpg new file mode 100644 index 000000000..0618375c5 Binary files /dev/null and b/public/guides/6/6_1/1.jpg differ diff --git a/public/guides/6/6_1/2.JPG b/public/guides/6/6_1/2.JPG new file mode 100644 index 000000000..53b4bedda Binary files /dev/null and b/public/guides/6/6_1/2.JPG differ diff --git a/public/guides/6/6_1/2.jpg b/public/guides/6/6_1/2.jpg new file mode 100644 index 000000000..53b4bedda Binary files /dev/null and b/public/guides/6/6_1/2.jpg differ diff --git a/public/guides/6/6_1/3.JPG b/public/guides/6/6_1/3.JPG new file mode 100644 index 000000000..816fb61e5 Binary files /dev/null and b/public/guides/6/6_1/3.JPG differ diff --git a/public/guides/6/6_1/3.jpg b/public/guides/6/6_1/3.jpg new file mode 100644 index 000000000..816fb61e5 Binary files /dev/null and b/public/guides/6/6_1/3.jpg differ diff --git a/public/guides/6/6_1/4.JPG b/public/guides/6/6_1/4.JPG new file mode 100644 index 000000000..f5779b77b Binary files /dev/null and b/public/guides/6/6_1/4.JPG differ diff --git a/public/guides/6/6_1/4.jpg b/public/guides/6/6_1/4.jpg new file mode 100644 index 000000000..f5779b77b Binary files /dev/null and b/public/guides/6/6_1/4.jpg differ diff --git a/public/guides/6/6_1/5.JPG b/public/guides/6/6_1/5.JPG new file mode 100644 index 000000000..6e13a6cfb Binary files /dev/null and b/public/guides/6/6_1/5.JPG differ diff --git a/public/guides/6/6_1/5.jpg b/public/guides/6/6_1/5.jpg new file mode 100644 index 000000000..6e13a6cfb Binary files /dev/null and b/public/guides/6/6_1/5.jpg differ diff --git a/public/guides/6/6_10/1.JPG b/public/guides/6/6_10/1.JPG new file mode 100644 index 000000000..38e2888df Binary files /dev/null and b/public/guides/6/6_10/1.JPG differ diff --git a/public/guides/6/6_10/1.jpg b/public/guides/6/6_10/1.jpg new file mode 100644 index 000000000..38e2888df Binary files /dev/null and b/public/guides/6/6_10/1.jpg differ diff --git a/public/guides/6/6_10/2.JPG b/public/guides/6/6_10/2.JPG new file mode 100644 index 000000000..31b3896d6 Binary files /dev/null and b/public/guides/6/6_10/2.JPG differ diff --git a/public/guides/6/6_10/2.jpg b/public/guides/6/6_10/2.jpg new file mode 100644 index 000000000..31b3896d6 Binary files /dev/null and b/public/guides/6/6_10/2.jpg differ diff --git a/public/guides/6/6_10/3.JPG b/public/guides/6/6_10/3.JPG new file mode 100644 index 000000000..209b2424f Binary files /dev/null and b/public/guides/6/6_10/3.JPG differ diff --git a/public/guides/6/6_10/3.jpg b/public/guides/6/6_10/3.jpg new file mode 100644 index 000000000..209b2424f Binary files /dev/null and b/public/guides/6/6_10/3.jpg differ diff --git a/public/guides/6/6_10/4.jpg b/public/guides/6/6_10/4.jpg new file mode 100644 index 000000000..8124c2e8f Binary files /dev/null and b/public/guides/6/6_10/4.jpg differ diff --git a/public/guides/6/6_10/5.JPG b/public/guides/6/6_10/5.JPG new file mode 100644 index 000000000..5d5d7cd4b Binary files /dev/null and b/public/guides/6/6_10/5.JPG differ diff --git a/public/guides/6/6_10/5.jpg b/public/guides/6/6_10/5.jpg new file mode 100644 index 000000000..5d5d7cd4b Binary files /dev/null and b/public/guides/6/6_10/5.jpg differ diff --git a/public/guides/6/6_11/1.jpg b/public/guides/6/6_11/1.jpg new file mode 100644 index 000000000..9d12f4a16 Binary files /dev/null and b/public/guides/6/6_11/1.jpg differ diff --git a/public/guides/6/6_11/2.jpg b/public/guides/6/6_11/2.jpg new file mode 100644 index 000000000..8b552112b Binary files /dev/null and b/public/guides/6/6_11/2.jpg differ diff --git a/public/guides/6/6_11/3.jpg b/public/guides/6/6_11/3.jpg new file mode 100644 index 000000000..fceeae3ac Binary files /dev/null and b/public/guides/6/6_11/3.jpg differ diff --git a/public/guides/6/6_11/4.jpg b/public/guides/6/6_11/4.jpg new file mode 100644 index 000000000..710866098 Binary files /dev/null and b/public/guides/6/6_11/4.jpg differ diff --git a/public/guides/6/6_11/5.jpg b/public/guides/6/6_11/5.jpg new file mode 100644 index 000000000..91c784df3 Binary files /dev/null and b/public/guides/6/6_11/5.jpg differ diff --git a/public/guides/6/6_12/1.jpg b/public/guides/6/6_12/1.jpg new file mode 100644 index 000000000..6322e83cf Binary files /dev/null and b/public/guides/6/6_12/1.jpg differ diff --git a/public/guides/6/6_12/2.jpg b/public/guides/6/6_12/2.jpg new file mode 100644 index 000000000..7d265842a Binary files /dev/null and b/public/guides/6/6_12/2.jpg differ diff --git a/public/guides/6/6_12/3.jpg b/public/guides/6/6_12/3.jpg new file mode 100644 index 000000000..e5d379f73 Binary files /dev/null and b/public/guides/6/6_12/3.jpg differ diff --git a/public/guides/6/6_12/4.jpg b/public/guides/6/6_12/4.jpg new file mode 100644 index 000000000..56747529a Binary files /dev/null and b/public/guides/6/6_12/4.jpg differ diff --git a/public/guides/6/6_12/5.jpg b/public/guides/6/6_12/5.jpg new file mode 100644 index 000000000..2e9e39e22 Binary files /dev/null and b/public/guides/6/6_12/5.jpg differ diff --git a/public/guides/6/6_13/1.jpg b/public/guides/6/6_13/1.jpg new file mode 100644 index 000000000..67007cd91 Binary files /dev/null and b/public/guides/6/6_13/1.jpg differ diff --git a/public/guides/6/6_13/2.jpg b/public/guides/6/6_13/2.jpg new file mode 100644 index 000000000..f7ec7af77 Binary files /dev/null and b/public/guides/6/6_13/2.jpg differ diff --git a/public/guides/6/6_13/3.jpg b/public/guides/6/6_13/3.jpg new file mode 100644 index 000000000..8b046d7a3 Binary files /dev/null and b/public/guides/6/6_13/3.jpg differ diff --git a/public/guides/6/6_13/4.jpg b/public/guides/6/6_13/4.jpg new file mode 100644 index 000000000..aec920d9c Binary files /dev/null and b/public/guides/6/6_13/4.jpg differ diff --git a/public/guides/6/6_13/5.jpg b/public/guides/6/6_13/5.jpg new file mode 100644 index 000000000..be0395012 Binary files /dev/null and b/public/guides/6/6_13/5.jpg differ diff --git a/public/guides/6/6_14/1.jpg b/public/guides/6/6_14/1.jpg new file mode 100644 index 000000000..016536785 Binary files /dev/null and b/public/guides/6/6_14/1.jpg differ diff --git a/public/guides/6/6_14/2.jpg b/public/guides/6/6_14/2.jpg new file mode 100644 index 000000000..cd9bbc73a Binary files /dev/null and b/public/guides/6/6_14/2.jpg differ diff --git a/public/guides/6/6_14/3.jpg b/public/guides/6/6_14/3.jpg new file mode 100644 index 000000000..28b025836 Binary files /dev/null and b/public/guides/6/6_14/3.jpg differ diff --git a/public/guides/6/6_14/4.jpg b/public/guides/6/6_14/4.jpg new file mode 100644 index 000000000..be6dd1bdf Binary files /dev/null and b/public/guides/6/6_14/4.jpg differ diff --git a/public/guides/6/6_14/5.jpg b/public/guides/6/6_14/5.jpg new file mode 100644 index 000000000..6b9abe11e Binary files /dev/null and b/public/guides/6/6_14/5.jpg differ diff --git a/public/guides/6/6_15/1.jpg b/public/guides/6/6_15/1.jpg new file mode 100644 index 000000000..20784e764 Binary files /dev/null and b/public/guides/6/6_15/1.jpg differ diff --git a/public/guides/6/6_15/2.jpg b/public/guides/6/6_15/2.jpg new file mode 100644 index 000000000..77484970c Binary files /dev/null and b/public/guides/6/6_15/2.jpg differ diff --git a/public/guides/6/6_15/3.jpg b/public/guides/6/6_15/3.jpg new file mode 100644 index 000000000..b65a83043 Binary files /dev/null and b/public/guides/6/6_15/3.jpg differ diff --git a/public/guides/6/6_15/4.jpg b/public/guides/6/6_15/4.jpg new file mode 100644 index 000000000..730f2a5c5 Binary files /dev/null and b/public/guides/6/6_15/4.jpg differ diff --git a/public/guides/6/6_15/5.jpg b/public/guides/6/6_15/5.jpg new file mode 100644 index 000000000..d932f2bab Binary files /dev/null and b/public/guides/6/6_15/5.jpg differ diff --git a/public/guides/6/6_16/1.jpg b/public/guides/6/6_16/1.jpg new file mode 100644 index 000000000..561d88237 Binary files /dev/null and b/public/guides/6/6_16/1.jpg differ diff --git a/public/guides/6/6_16/2.jpg b/public/guides/6/6_16/2.jpg new file mode 100644 index 000000000..b678b4291 Binary files /dev/null and b/public/guides/6/6_16/2.jpg differ diff --git a/public/guides/6/6_16/3.jpg b/public/guides/6/6_16/3.jpg new file mode 100644 index 000000000..d5a860440 Binary files /dev/null and b/public/guides/6/6_16/3.jpg differ diff --git a/public/guides/6/6_16/4.jpg b/public/guides/6/6_16/4.jpg new file mode 100644 index 000000000..96a094563 Binary files /dev/null and b/public/guides/6/6_16/4.jpg differ diff --git a/public/guides/6/6_16/5.jpg b/public/guides/6/6_16/5.jpg new file mode 100644 index 000000000..86a648bb6 Binary files /dev/null and b/public/guides/6/6_16/5.jpg differ diff --git a/public/guides/6/6_17/1.jpg b/public/guides/6/6_17/1.jpg new file mode 100644 index 000000000..a35569d7a Binary files /dev/null and b/public/guides/6/6_17/1.jpg differ diff --git a/public/guides/6/6_17/2.jpg b/public/guides/6/6_17/2.jpg new file mode 100644 index 000000000..bee15b378 Binary files /dev/null and b/public/guides/6/6_17/2.jpg differ diff --git a/public/guides/6/6_17/3.jpg b/public/guides/6/6_17/3.jpg new file mode 100644 index 000000000..adac470ef Binary files /dev/null and b/public/guides/6/6_17/3.jpg differ diff --git a/public/guides/6/6_17/4.jpg b/public/guides/6/6_17/4.jpg new file mode 100644 index 000000000..3dac4e24e Binary files /dev/null and b/public/guides/6/6_17/4.jpg differ diff --git a/public/guides/6/6_17/5.jpg b/public/guides/6/6_17/5.jpg new file mode 100644 index 000000000..68ee0378d Binary files /dev/null and b/public/guides/6/6_17/5.jpg differ diff --git a/public/guides/6/6_18/1.jpg b/public/guides/6/6_18/1.jpg new file mode 100644 index 000000000..230dc6198 Binary files /dev/null and b/public/guides/6/6_18/1.jpg differ diff --git a/public/guides/6/6_18/2.jpg b/public/guides/6/6_18/2.jpg new file mode 100644 index 000000000..3852dc232 Binary files /dev/null and b/public/guides/6/6_18/2.jpg differ diff --git a/public/guides/6/6_18/3.jpg b/public/guides/6/6_18/3.jpg new file mode 100644 index 000000000..f93af0350 Binary files /dev/null and b/public/guides/6/6_18/3.jpg differ diff --git a/public/guides/6/6_18/4.jpg b/public/guides/6/6_18/4.jpg new file mode 100644 index 000000000..181f7efa4 Binary files /dev/null and b/public/guides/6/6_18/4.jpg differ diff --git a/public/guides/6/6_18/5.jpg b/public/guides/6/6_18/5.jpg new file mode 100644 index 000000000..3427d3dae Binary files /dev/null and b/public/guides/6/6_18/5.jpg differ diff --git a/public/guides/6/6_19/1.jpg b/public/guides/6/6_19/1.jpg new file mode 100644 index 000000000..06824af9f Binary files /dev/null and b/public/guides/6/6_19/1.jpg differ diff --git a/public/guides/6/6_19/2.jpg b/public/guides/6/6_19/2.jpg new file mode 100644 index 000000000..f1a3629f1 Binary files /dev/null and b/public/guides/6/6_19/2.jpg differ diff --git a/public/guides/6/6_19/3.JPG b/public/guides/6/6_19/3.JPG new file mode 100644 index 000000000..c3725ed67 Binary files /dev/null and b/public/guides/6/6_19/3.JPG differ diff --git a/public/guides/6/6_19/3.jpg b/public/guides/6/6_19/3.jpg new file mode 100644 index 000000000..c3725ed67 Binary files /dev/null and b/public/guides/6/6_19/3.jpg differ diff --git a/public/guides/6/6_19/4.jpg b/public/guides/6/6_19/4.jpg new file mode 100644 index 000000000..9e848bd82 Binary files /dev/null and b/public/guides/6/6_19/4.jpg differ diff --git a/public/guides/6/6_19/5.jpg b/public/guides/6/6_19/5.jpg new file mode 100644 index 000000000..7ea8d1a0b Binary files /dev/null and b/public/guides/6/6_19/5.jpg differ diff --git a/public/guides/6/6_2/1.jpg b/public/guides/6/6_2/1.jpg new file mode 100644 index 000000000..aec4d930c Binary files /dev/null and b/public/guides/6/6_2/1.jpg differ diff --git a/public/guides/6/6_2/2.JPG b/public/guides/6/6_2/2.JPG new file mode 100644 index 000000000..07fd0f2e8 Binary files /dev/null and b/public/guides/6/6_2/2.JPG differ diff --git a/public/guides/6/6_2/2.jpg b/public/guides/6/6_2/2.jpg new file mode 100644 index 000000000..07fd0f2e8 Binary files /dev/null and b/public/guides/6/6_2/2.jpg differ diff --git a/public/guides/6/6_2/3.JPG b/public/guides/6/6_2/3.JPG new file mode 100644 index 000000000..f76c669e0 Binary files /dev/null and b/public/guides/6/6_2/3.JPG differ diff --git a/public/guides/6/6_2/3.jpg b/public/guides/6/6_2/3.jpg new file mode 100644 index 000000000..f76c669e0 Binary files /dev/null and b/public/guides/6/6_2/3.jpg differ diff --git a/public/guides/6/6_2/4.JPG b/public/guides/6/6_2/4.JPG new file mode 100644 index 000000000..a31aa415a Binary files /dev/null and b/public/guides/6/6_2/4.JPG differ diff --git a/public/guides/6/6_2/4.jpg b/public/guides/6/6_2/4.jpg new file mode 100644 index 000000000..a31aa415a Binary files /dev/null and b/public/guides/6/6_2/4.jpg differ diff --git a/public/guides/6/6_2/5.JPG b/public/guides/6/6_2/5.JPG new file mode 100644 index 000000000..aa4fcbdae Binary files /dev/null and b/public/guides/6/6_2/5.JPG differ diff --git a/public/guides/6/6_2/5.jpg b/public/guides/6/6_2/5.jpg new file mode 100644 index 000000000..aa4fcbdae Binary files /dev/null and b/public/guides/6/6_2/5.jpg differ diff --git a/public/guides/6/6_20/1.jpg b/public/guides/6/6_20/1.jpg new file mode 100644 index 000000000..f6c0dcf15 Binary files /dev/null and b/public/guides/6/6_20/1.jpg differ diff --git a/public/guides/6/6_20/2.jpg b/public/guides/6/6_20/2.jpg new file mode 100644 index 000000000..85a137f11 Binary files /dev/null and b/public/guides/6/6_20/2.jpg differ diff --git a/public/guides/6/6_20/3.jpg b/public/guides/6/6_20/3.jpg new file mode 100644 index 000000000..65d2130d1 Binary files /dev/null and b/public/guides/6/6_20/3.jpg differ diff --git a/public/guides/6/6_20/4.jpg b/public/guides/6/6_20/4.jpg new file mode 100644 index 000000000..7928911fc Binary files /dev/null and b/public/guides/6/6_20/4.jpg differ diff --git a/public/guides/6/6_20/5.jpg b/public/guides/6/6_20/5.jpg new file mode 100644 index 000000000..f73445514 Binary files /dev/null and b/public/guides/6/6_20/5.jpg differ diff --git a/public/guides/6/6_21/1.jpg b/public/guides/6/6_21/1.jpg new file mode 100644 index 000000000..cf785c1c4 Binary files /dev/null and b/public/guides/6/6_21/1.jpg differ diff --git a/public/guides/6/6_21/2.jpg b/public/guides/6/6_21/2.jpg new file mode 100644 index 000000000..2572cb613 Binary files /dev/null and b/public/guides/6/6_21/2.jpg differ diff --git a/public/guides/6/6_21/3.jpg b/public/guides/6/6_21/3.jpg new file mode 100644 index 000000000..650522849 Binary files /dev/null and b/public/guides/6/6_21/3.jpg differ diff --git a/public/guides/6/6_21/4.jpg b/public/guides/6/6_21/4.jpg new file mode 100644 index 000000000..f3bf34b76 Binary files /dev/null and b/public/guides/6/6_21/4.jpg differ diff --git a/public/guides/6/6_21/5.jpg b/public/guides/6/6_21/5.jpg new file mode 100644 index 000000000..a32f275bb Binary files /dev/null and b/public/guides/6/6_21/5.jpg differ diff --git a/public/guides/6/6_22/1.JPG b/public/guides/6/6_22/1.JPG new file mode 100644 index 000000000..d3d132c07 Binary files /dev/null and b/public/guides/6/6_22/1.JPG differ diff --git a/public/guides/6/6_22/1.jpg b/public/guides/6/6_22/1.jpg new file mode 100644 index 000000000..d3d132c07 Binary files /dev/null and b/public/guides/6/6_22/1.jpg differ diff --git a/public/guides/6/6_22/2.jpg b/public/guides/6/6_22/2.jpg new file mode 100644 index 000000000..ede799ce6 Binary files /dev/null and b/public/guides/6/6_22/2.jpg differ diff --git a/public/guides/6/6_22/3.JPG b/public/guides/6/6_22/3.JPG new file mode 100644 index 000000000..2edd6e4da Binary files /dev/null and b/public/guides/6/6_22/3.JPG differ diff --git a/public/guides/6/6_22/3.jpg b/public/guides/6/6_22/3.jpg new file mode 100644 index 000000000..2edd6e4da Binary files /dev/null and b/public/guides/6/6_22/3.jpg differ diff --git a/public/guides/6/6_22/4.jpg b/public/guides/6/6_22/4.jpg new file mode 100644 index 000000000..b92a6d9ee Binary files /dev/null and b/public/guides/6/6_22/4.jpg differ diff --git a/public/guides/6/6_22/5.jpg b/public/guides/6/6_22/5.jpg new file mode 100644 index 000000000..3932f6a9d Binary files /dev/null and b/public/guides/6/6_22/5.jpg differ diff --git a/public/guides/6/6_3/1.JPG b/public/guides/6/6_3/1.JPG new file mode 100644 index 000000000..19c30caa1 Binary files /dev/null and b/public/guides/6/6_3/1.JPG differ diff --git a/public/guides/6/6_3/1.jpg b/public/guides/6/6_3/1.jpg new file mode 100644 index 000000000..19c30caa1 Binary files /dev/null and b/public/guides/6/6_3/1.jpg differ diff --git a/public/guides/6/6_3/2.JPG b/public/guides/6/6_3/2.JPG new file mode 100644 index 000000000..519831e9f Binary files /dev/null and b/public/guides/6/6_3/2.JPG differ diff --git a/public/guides/6/6_3/2.jpg b/public/guides/6/6_3/2.jpg new file mode 100644 index 000000000..519831e9f Binary files /dev/null and b/public/guides/6/6_3/2.jpg differ diff --git a/public/guides/6/6_3/3.jpg b/public/guides/6/6_3/3.jpg new file mode 100644 index 000000000..41be3b440 Binary files /dev/null and b/public/guides/6/6_3/3.jpg differ diff --git a/public/guides/6/6_3/4.JPG b/public/guides/6/6_3/4.JPG new file mode 100644 index 000000000..330bec5f3 Binary files /dev/null and b/public/guides/6/6_3/4.JPG differ diff --git a/public/guides/6/6_3/4.jpg b/public/guides/6/6_3/4.jpg new file mode 100644 index 000000000..330bec5f3 Binary files /dev/null and b/public/guides/6/6_3/4.jpg differ diff --git a/public/guides/6/6_3/5.jpg b/public/guides/6/6_3/5.jpg new file mode 100644 index 000000000..84d722cf5 Binary files /dev/null and b/public/guides/6/6_3/5.jpg differ diff --git a/public/guides/6/6_4/1.JPG b/public/guides/6/6_4/1.JPG new file mode 100644 index 000000000..cb7c00e5f Binary files /dev/null and b/public/guides/6/6_4/1.JPG differ diff --git a/public/guides/6/6_4/1.jpg b/public/guides/6/6_4/1.jpg new file mode 100644 index 000000000..cb7c00e5f Binary files /dev/null and b/public/guides/6/6_4/1.jpg differ diff --git a/public/guides/6/6_4/2.JPG b/public/guides/6/6_4/2.JPG new file mode 100644 index 000000000..c28e77cc6 Binary files /dev/null and b/public/guides/6/6_4/2.JPG differ diff --git a/public/guides/6/6_4/2.jpg b/public/guides/6/6_4/2.jpg new file mode 100644 index 000000000..c28e77cc6 Binary files /dev/null and b/public/guides/6/6_4/2.jpg differ diff --git a/public/guides/6/6_4/3.JPG b/public/guides/6/6_4/3.JPG new file mode 100644 index 000000000..6a1feed47 Binary files /dev/null and b/public/guides/6/6_4/3.JPG differ diff --git a/public/guides/6/6_4/3.jpg b/public/guides/6/6_4/3.jpg new file mode 100644 index 000000000..6a1feed47 Binary files /dev/null and b/public/guides/6/6_4/3.jpg differ diff --git a/public/guides/6/6_4/4.JPG b/public/guides/6/6_4/4.JPG new file mode 100644 index 000000000..d944f2dd8 Binary files /dev/null and b/public/guides/6/6_4/4.JPG differ diff --git a/public/guides/6/6_4/4.jpg b/public/guides/6/6_4/4.jpg new file mode 100644 index 000000000..d944f2dd8 Binary files /dev/null and b/public/guides/6/6_4/4.jpg differ diff --git a/public/guides/6/6_4/5.jpg b/public/guides/6/6_4/5.jpg new file mode 100644 index 000000000..b6a14e4b7 Binary files /dev/null and b/public/guides/6/6_4/5.jpg differ diff --git a/public/guides/6/6_5/1.jpg b/public/guides/6/6_5/1.jpg new file mode 100644 index 000000000..41e350663 Binary files /dev/null and b/public/guides/6/6_5/1.jpg differ diff --git a/public/guides/6/6_5/2.JPG b/public/guides/6/6_5/2.JPG new file mode 100644 index 000000000..ed4c96265 Binary files /dev/null and b/public/guides/6/6_5/2.JPG differ diff --git a/public/guides/6/6_5/2.jpg b/public/guides/6/6_5/2.jpg new file mode 100644 index 000000000..ed4c96265 Binary files /dev/null and b/public/guides/6/6_5/2.jpg differ diff --git a/public/guides/6/6_5/3.jpg b/public/guides/6/6_5/3.jpg new file mode 100644 index 000000000..f88850e25 Binary files /dev/null and b/public/guides/6/6_5/3.jpg differ diff --git a/public/guides/6/6_5/4.jpg b/public/guides/6/6_5/4.jpg new file mode 100644 index 000000000..3dc0abcec Binary files /dev/null and b/public/guides/6/6_5/4.jpg differ diff --git a/public/guides/6/6_5/5.JPG b/public/guides/6/6_5/5.JPG new file mode 100644 index 000000000..700d96b38 Binary files /dev/null and b/public/guides/6/6_5/5.JPG differ diff --git a/public/guides/6/6_5/5.jpg b/public/guides/6/6_5/5.jpg new file mode 100644 index 000000000..700d96b38 Binary files /dev/null and b/public/guides/6/6_5/5.jpg differ diff --git a/public/guides/6/6_6/1.JPG b/public/guides/6/6_6/1.JPG new file mode 100644 index 000000000..9e4a66472 Binary files /dev/null and b/public/guides/6/6_6/1.JPG differ diff --git a/public/guides/6/6_6/1.jpg b/public/guides/6/6_6/1.jpg new file mode 100644 index 000000000..9e4a66472 Binary files /dev/null and b/public/guides/6/6_6/1.jpg differ diff --git a/public/guides/6/6_6/2.JPG b/public/guides/6/6_6/2.JPG new file mode 100644 index 000000000..712e820e1 Binary files /dev/null and b/public/guides/6/6_6/2.JPG differ diff --git a/public/guides/6/6_6/2.jpg b/public/guides/6/6_6/2.jpg new file mode 100644 index 000000000..712e820e1 Binary files /dev/null and b/public/guides/6/6_6/2.jpg differ diff --git a/public/guides/6/6_6/3.JPG b/public/guides/6/6_6/3.JPG new file mode 100644 index 000000000..f5604c07a Binary files /dev/null and b/public/guides/6/6_6/3.JPG differ diff --git a/public/guides/6/6_6/3.jpg b/public/guides/6/6_6/3.jpg new file mode 100644 index 000000000..f5604c07a Binary files /dev/null and b/public/guides/6/6_6/3.jpg differ diff --git a/public/guides/6/6_6/4.JPG b/public/guides/6/6_6/4.JPG new file mode 100644 index 000000000..128620981 Binary files /dev/null and b/public/guides/6/6_6/4.JPG differ diff --git a/public/guides/6/6_6/4.jpg b/public/guides/6/6_6/4.jpg new file mode 100644 index 000000000..128620981 Binary files /dev/null and b/public/guides/6/6_6/4.jpg differ diff --git a/public/guides/6/6_6/5.JPG b/public/guides/6/6_6/5.JPG new file mode 100644 index 000000000..235d08d1f Binary files /dev/null and b/public/guides/6/6_6/5.JPG differ diff --git a/public/guides/6/6_6/5.jpg b/public/guides/6/6_6/5.jpg new file mode 100644 index 000000000..235d08d1f Binary files /dev/null and b/public/guides/6/6_6/5.jpg differ diff --git a/public/guides/6/6_7/1.JPG b/public/guides/6/6_7/1.JPG new file mode 100644 index 000000000..34945cd3d Binary files /dev/null and b/public/guides/6/6_7/1.JPG differ diff --git a/public/guides/6/6_7/1.jpg b/public/guides/6/6_7/1.jpg new file mode 100644 index 000000000..34945cd3d Binary files /dev/null and b/public/guides/6/6_7/1.jpg differ diff --git a/public/guides/6/6_7/2.JPG b/public/guides/6/6_7/2.JPG new file mode 100644 index 000000000..6b19b6248 Binary files /dev/null and b/public/guides/6/6_7/2.JPG differ diff --git a/public/guides/6/6_7/2.jpg b/public/guides/6/6_7/2.jpg new file mode 100644 index 000000000..6b19b6248 Binary files /dev/null and b/public/guides/6/6_7/2.jpg differ diff --git a/public/guides/6/6_7/3.JPG b/public/guides/6/6_7/3.JPG new file mode 100644 index 000000000..b9e790054 Binary files /dev/null and b/public/guides/6/6_7/3.JPG differ diff --git a/public/guides/6/6_7/3.jpg b/public/guides/6/6_7/3.jpg new file mode 100644 index 000000000..b9e790054 Binary files /dev/null and b/public/guides/6/6_7/3.jpg differ diff --git a/public/guides/6/6_7/4.JPG b/public/guides/6/6_7/4.JPG new file mode 100644 index 000000000..ffce7657f Binary files /dev/null and b/public/guides/6/6_7/4.JPG differ diff --git a/public/guides/6/6_7/4.jpg b/public/guides/6/6_7/4.jpg new file mode 100644 index 000000000..ffce7657f Binary files /dev/null and b/public/guides/6/6_7/4.jpg differ diff --git a/public/guides/6/6_7/5.JPG b/public/guides/6/6_7/5.JPG new file mode 100644 index 000000000..66cc6569b Binary files /dev/null and b/public/guides/6/6_7/5.JPG differ diff --git a/public/guides/6/6_7/5.jpg b/public/guides/6/6_7/5.jpg new file mode 100644 index 000000000..66cc6569b Binary files /dev/null and b/public/guides/6/6_7/5.jpg differ diff --git a/public/guides/6/6_8/1.JPG b/public/guides/6/6_8/1.JPG new file mode 100644 index 000000000..ec3d93175 Binary files /dev/null and b/public/guides/6/6_8/1.JPG differ diff --git a/public/guides/6/6_8/1.jpg b/public/guides/6/6_8/1.jpg new file mode 100644 index 000000000..ec3d93175 Binary files /dev/null and b/public/guides/6/6_8/1.jpg differ diff --git a/public/guides/6/6_8/2.JPG b/public/guides/6/6_8/2.JPG new file mode 100644 index 000000000..abf3109e5 Binary files /dev/null and b/public/guides/6/6_8/2.JPG differ diff --git a/public/guides/6/6_8/2.jpg b/public/guides/6/6_8/2.jpg new file mode 100644 index 000000000..abf3109e5 Binary files /dev/null and b/public/guides/6/6_8/2.jpg differ diff --git a/public/guides/6/6_8/3.JPG b/public/guides/6/6_8/3.JPG new file mode 100644 index 000000000..5ce469938 Binary files /dev/null and b/public/guides/6/6_8/3.JPG differ diff --git a/public/guides/6/6_8/3.jpg b/public/guides/6/6_8/3.jpg new file mode 100644 index 000000000..5ce469938 Binary files /dev/null and b/public/guides/6/6_8/3.jpg differ diff --git a/public/guides/6/6_8/4.jpg b/public/guides/6/6_8/4.jpg new file mode 100644 index 000000000..15dddabca Binary files /dev/null and b/public/guides/6/6_8/4.jpg differ diff --git a/public/guides/6/6_8/5.JPG b/public/guides/6/6_8/5.JPG new file mode 100644 index 000000000..0cf0bb6ad Binary files /dev/null and b/public/guides/6/6_8/5.JPG differ diff --git a/public/guides/6/6_8/5.jpg b/public/guides/6/6_8/5.jpg new file mode 100644 index 000000000..0cf0bb6ad Binary files /dev/null and b/public/guides/6/6_8/5.jpg differ diff --git a/public/guides/6/6_9/1.JPG b/public/guides/6/6_9/1.JPG new file mode 100644 index 000000000..1c6b8b254 Binary files /dev/null and b/public/guides/6/6_9/1.JPG differ diff --git a/public/guides/6/6_9/1.jpg b/public/guides/6/6_9/1.jpg new file mode 100644 index 000000000..1c6b8b254 Binary files /dev/null and b/public/guides/6/6_9/1.jpg differ diff --git a/public/guides/6/6_9/2.JPG b/public/guides/6/6_9/2.JPG new file mode 100644 index 000000000..885c42392 Binary files /dev/null and b/public/guides/6/6_9/2.JPG differ diff --git a/public/guides/6/6_9/2.jpg b/public/guides/6/6_9/2.jpg new file mode 100644 index 000000000..885c42392 Binary files /dev/null and b/public/guides/6/6_9/2.jpg differ diff --git a/public/guides/6/6_9/3.JPG b/public/guides/6/6_9/3.JPG new file mode 100644 index 000000000..649fb25a0 Binary files /dev/null and b/public/guides/6/6_9/3.JPG differ diff --git a/public/guides/6/6_9/3.jpg b/public/guides/6/6_9/3.jpg new file mode 100644 index 000000000..649fb25a0 Binary files /dev/null and b/public/guides/6/6_9/3.jpg differ diff --git a/public/guides/6/6_9/4.JPG b/public/guides/6/6_9/4.JPG new file mode 100644 index 000000000..9d14a18f7 Binary files /dev/null and b/public/guides/6/6_9/4.JPG differ diff --git a/public/guides/6/6_9/4.jpg b/public/guides/6/6_9/4.jpg new file mode 100644 index 000000000..9d14a18f7 Binary files /dev/null and b/public/guides/6/6_9/4.jpg differ diff --git a/public/guides/6/6_9/5.JPG b/public/guides/6/6_9/5.JPG new file mode 100644 index 000000000..fae73dca2 Binary files /dev/null and b/public/guides/6/6_9/5.JPG differ diff --git a/public/guides/6/6_9/5.jpg b/public/guides/6/6_9/5.jpg new file mode 100644 index 000000000..fae73dca2 Binary files /dev/null and b/public/guides/6/6_9/5.jpg differ diff --git "a/public/guides/6/6_COLOR_\354\203\211\354\203\201 \354\235\270\354\213\235\352\270\260.jpg" "b/public/guides/6/6_COLOR_\354\203\211\354\203\201 \354\235\270\354\213\235\352\270\260.jpg" new file mode 100644 index 000000000..8d12618a1 Binary files /dev/null and "b/public/guides/6/6_COLOR_\354\203\211\354\203\201 \354\235\270\354\213\235\352\270\260.jpg" differ diff --git a/public/guides/7/7_1/1.jpg b/public/guides/7/7_1/1.jpg new file mode 100644 index 000000000..e63406201 Binary files /dev/null and b/public/guides/7/7_1/1.jpg differ diff --git a/public/guides/7/7_1/2.jpg b/public/guides/7/7_1/2.jpg new file mode 100644 index 000000000..b397df9b2 Binary files /dev/null and b/public/guides/7/7_1/2.jpg differ diff --git a/public/guides/7/7_1/3.jpg b/public/guides/7/7_1/3.jpg new file mode 100644 index 000000000..79fc0dd47 Binary files /dev/null and b/public/guides/7/7_1/3.jpg differ diff --git a/public/guides/7/7_1/4.jpg b/public/guides/7/7_1/4.jpg new file mode 100644 index 000000000..9c92102ad Binary files /dev/null and b/public/guides/7/7_1/4.jpg differ diff --git a/public/guides/7/7_1/5.jpg b/public/guides/7/7_1/5.jpg new file mode 100644 index 000000000..effa1cf9f Binary files /dev/null and b/public/guides/7/7_1/5.jpg differ diff --git a/public/guides/7/7_10/1.jpg b/public/guides/7/7_10/1.jpg new file mode 100644 index 000000000..6dbc5a67a Binary files /dev/null and b/public/guides/7/7_10/1.jpg differ diff --git a/public/guides/7/7_10/2.jpg b/public/guides/7/7_10/2.jpg new file mode 100644 index 000000000..65d3423f1 Binary files /dev/null and b/public/guides/7/7_10/2.jpg differ diff --git a/public/guides/7/7_10/3.jpg b/public/guides/7/7_10/3.jpg new file mode 100644 index 000000000..ea68964e5 Binary files /dev/null and b/public/guides/7/7_10/3.jpg differ diff --git a/public/guides/7/7_10/4.jpg b/public/guides/7/7_10/4.jpg new file mode 100644 index 000000000..1f5335303 Binary files /dev/null and b/public/guides/7/7_10/4.jpg differ diff --git a/public/guides/7/7_10/5.jpg b/public/guides/7/7_10/5.jpg new file mode 100644 index 000000000..03dbb7cc8 Binary files /dev/null and b/public/guides/7/7_10/5.jpg differ diff --git a/public/guides/7/7_11/1.jpg b/public/guides/7/7_11/1.jpg new file mode 100644 index 000000000..cfd1148d5 Binary files /dev/null and b/public/guides/7/7_11/1.jpg differ diff --git a/public/guides/7/7_11/2.jpg b/public/guides/7/7_11/2.jpg new file mode 100644 index 000000000..9c87b4e5d Binary files /dev/null and b/public/guides/7/7_11/2.jpg differ diff --git a/public/guides/7/7_11/3.jpg b/public/guides/7/7_11/3.jpg new file mode 100644 index 000000000..71bebc294 Binary files /dev/null and b/public/guides/7/7_11/3.jpg differ diff --git a/public/guides/7/7_11/4.jpg b/public/guides/7/7_11/4.jpg new file mode 100644 index 000000000..bc25da5c7 Binary files /dev/null and b/public/guides/7/7_11/4.jpg differ diff --git a/public/guides/7/7_11/5.jpg b/public/guides/7/7_11/5.jpg new file mode 100644 index 000000000..315940e3a Binary files /dev/null and b/public/guides/7/7_11/5.jpg differ diff --git a/public/guides/7/7_12/1.JPG b/public/guides/7/7_12/1.JPG new file mode 100644 index 000000000..d3c7f8123 Binary files /dev/null and b/public/guides/7/7_12/1.JPG differ diff --git a/public/guides/7/7_12/1.jpg b/public/guides/7/7_12/1.jpg new file mode 100644 index 000000000..d3c7f8123 Binary files /dev/null and b/public/guides/7/7_12/1.jpg differ diff --git a/public/guides/7/7_12/2.jpg b/public/guides/7/7_12/2.jpg new file mode 100644 index 000000000..ca7f05c58 Binary files /dev/null and b/public/guides/7/7_12/2.jpg differ diff --git a/public/guides/7/7_12/3.jpg b/public/guides/7/7_12/3.jpg new file mode 100644 index 000000000..343749317 Binary files /dev/null and b/public/guides/7/7_12/3.jpg differ diff --git a/public/guides/7/7_12/4.jpg b/public/guides/7/7_12/4.jpg new file mode 100644 index 000000000..3d9855ff4 Binary files /dev/null and b/public/guides/7/7_12/4.jpg differ diff --git a/public/guides/7/7_12/5.jpg b/public/guides/7/7_12/5.jpg new file mode 100644 index 000000000..e11553008 Binary files /dev/null and b/public/guides/7/7_12/5.jpg differ diff --git a/public/guides/7/7_13/1.jpg b/public/guides/7/7_13/1.jpg new file mode 100644 index 000000000..4f1355b0e Binary files /dev/null and b/public/guides/7/7_13/1.jpg differ diff --git a/public/guides/7/7_13/2.jpg b/public/guides/7/7_13/2.jpg new file mode 100644 index 000000000..97fa33ca4 Binary files /dev/null and b/public/guides/7/7_13/2.jpg differ diff --git a/public/guides/7/7_13/3.jpg b/public/guides/7/7_13/3.jpg new file mode 100644 index 000000000..a7158488b Binary files /dev/null and b/public/guides/7/7_13/3.jpg differ diff --git a/public/guides/7/7_13/4.jpg b/public/guides/7/7_13/4.jpg new file mode 100644 index 000000000..5206cfbc8 Binary files /dev/null and b/public/guides/7/7_13/4.jpg differ diff --git a/public/guides/7/7_13/5.jpg b/public/guides/7/7_13/5.jpg new file mode 100644 index 000000000..a58e9a386 Binary files /dev/null and b/public/guides/7/7_13/5.jpg differ diff --git a/public/guides/7/7_14/1.jpg b/public/guides/7/7_14/1.jpg new file mode 100644 index 000000000..5440cd6b6 Binary files /dev/null and b/public/guides/7/7_14/1.jpg differ diff --git a/public/guides/7/7_14/2.jpg b/public/guides/7/7_14/2.jpg new file mode 100644 index 000000000..b3940498a Binary files /dev/null and b/public/guides/7/7_14/2.jpg differ diff --git a/public/guides/7/7_14/3.jpg b/public/guides/7/7_14/3.jpg new file mode 100644 index 000000000..652618f3d Binary files /dev/null and b/public/guides/7/7_14/3.jpg differ diff --git a/public/guides/7/7_14/4.jpg b/public/guides/7/7_14/4.jpg new file mode 100644 index 000000000..e11caeed8 Binary files /dev/null and b/public/guides/7/7_14/4.jpg differ diff --git a/public/guides/7/7_14/5.jpg b/public/guides/7/7_14/5.jpg new file mode 100644 index 000000000..d8eec48dc Binary files /dev/null and b/public/guides/7/7_14/5.jpg differ diff --git a/public/guides/7/7_15/1.jpg b/public/guides/7/7_15/1.jpg new file mode 100644 index 000000000..ce32ba409 Binary files /dev/null and b/public/guides/7/7_15/1.jpg differ diff --git a/public/guides/7/7_15/2.jpg b/public/guides/7/7_15/2.jpg new file mode 100644 index 000000000..b5fe64712 Binary files /dev/null and b/public/guides/7/7_15/2.jpg differ diff --git a/public/guides/7/7_15/3.jpg b/public/guides/7/7_15/3.jpg new file mode 100644 index 000000000..8f04bfaa1 Binary files /dev/null and b/public/guides/7/7_15/3.jpg differ diff --git a/public/guides/7/7_15/4.jpg b/public/guides/7/7_15/4.jpg new file mode 100644 index 000000000..953ecb389 Binary files /dev/null and b/public/guides/7/7_15/4.jpg differ diff --git a/public/guides/7/7_15/5.jpg b/public/guides/7/7_15/5.jpg new file mode 100644 index 000000000..c923ab46d Binary files /dev/null and b/public/guides/7/7_15/5.jpg differ diff --git a/public/guides/7/7_16/1.jpg b/public/guides/7/7_16/1.jpg new file mode 100644 index 000000000..96a1549cb Binary files /dev/null and b/public/guides/7/7_16/1.jpg differ diff --git a/public/guides/7/7_16/2.jpg b/public/guides/7/7_16/2.jpg new file mode 100644 index 000000000..e24e9c2f6 Binary files /dev/null and b/public/guides/7/7_16/2.jpg differ diff --git a/public/guides/7/7_16/3.jpg b/public/guides/7/7_16/3.jpg new file mode 100644 index 000000000..81ba0729b Binary files /dev/null and b/public/guides/7/7_16/3.jpg differ diff --git a/public/guides/7/7_16/4.jpg b/public/guides/7/7_16/4.jpg new file mode 100644 index 000000000..b5918cd29 Binary files /dev/null and b/public/guides/7/7_16/4.jpg differ diff --git a/public/guides/7/7_16/5.jpg b/public/guides/7/7_16/5.jpg new file mode 100644 index 000000000..7e434362f Binary files /dev/null and b/public/guides/7/7_16/5.jpg differ diff --git a/public/guides/7/7_17/1.jpg b/public/guides/7/7_17/1.jpg new file mode 100644 index 000000000..dfe7c8129 Binary files /dev/null and b/public/guides/7/7_17/1.jpg differ diff --git a/public/guides/7/7_17/2.jpg b/public/guides/7/7_17/2.jpg new file mode 100644 index 000000000..323ca28cf Binary files /dev/null and b/public/guides/7/7_17/2.jpg differ diff --git a/public/guides/7/7_17/3.jpg b/public/guides/7/7_17/3.jpg new file mode 100644 index 000000000..9fa7e7b61 Binary files /dev/null and b/public/guides/7/7_17/3.jpg differ diff --git a/public/guides/7/7_17/4.jpg b/public/guides/7/7_17/4.jpg new file mode 100644 index 000000000..f6fb3be44 Binary files /dev/null and b/public/guides/7/7_17/4.jpg differ diff --git a/public/guides/7/7_17/5.jpg b/public/guides/7/7_17/5.jpg new file mode 100644 index 000000000..153480503 Binary files /dev/null and b/public/guides/7/7_17/5.jpg differ diff --git a/public/guides/7/7_2/1.jpg b/public/guides/7/7_2/1.jpg new file mode 100644 index 000000000..0c004e8a7 Binary files /dev/null and b/public/guides/7/7_2/1.jpg differ diff --git a/public/guides/7/7_2/2.jpg b/public/guides/7/7_2/2.jpg new file mode 100644 index 000000000..88f76ae9b Binary files /dev/null and b/public/guides/7/7_2/2.jpg differ diff --git a/public/guides/7/7_2/3.jpg b/public/guides/7/7_2/3.jpg new file mode 100644 index 000000000..99afe803f Binary files /dev/null and b/public/guides/7/7_2/3.jpg differ diff --git a/public/guides/7/7_2/4.jpg b/public/guides/7/7_2/4.jpg new file mode 100644 index 000000000..8998307f4 Binary files /dev/null and b/public/guides/7/7_2/4.jpg differ diff --git a/public/guides/7/7_2/5.jpg b/public/guides/7/7_2/5.jpg new file mode 100644 index 000000000..8095de63a Binary files /dev/null and b/public/guides/7/7_2/5.jpg differ diff --git a/public/guides/7/7_3/1.jpg b/public/guides/7/7_3/1.jpg new file mode 100644 index 000000000..a61d15920 Binary files /dev/null and b/public/guides/7/7_3/1.jpg differ diff --git a/public/guides/7/7_3/2.jpg b/public/guides/7/7_3/2.jpg new file mode 100644 index 000000000..3deca0d3c Binary files /dev/null and b/public/guides/7/7_3/2.jpg differ diff --git a/public/guides/7/7_3/3.jpg b/public/guides/7/7_3/3.jpg new file mode 100644 index 000000000..cfdb254f7 Binary files /dev/null and b/public/guides/7/7_3/3.jpg differ diff --git a/public/guides/7/7_3/4.jpg b/public/guides/7/7_3/4.jpg new file mode 100644 index 000000000..f4eafb0fe Binary files /dev/null and b/public/guides/7/7_3/4.jpg differ diff --git a/public/guides/7/7_3/5.jpg b/public/guides/7/7_3/5.jpg new file mode 100644 index 000000000..f7104058c Binary files /dev/null and b/public/guides/7/7_3/5.jpg differ diff --git a/public/guides/7/7_4/1.jpg b/public/guides/7/7_4/1.jpg new file mode 100644 index 000000000..67d27580b Binary files /dev/null and b/public/guides/7/7_4/1.jpg differ diff --git a/public/guides/7/7_4/2.jpg b/public/guides/7/7_4/2.jpg new file mode 100644 index 000000000..75d5e668b Binary files /dev/null and b/public/guides/7/7_4/2.jpg differ diff --git a/public/guides/7/7_4/3.jpg b/public/guides/7/7_4/3.jpg new file mode 100644 index 000000000..853e9b4af Binary files /dev/null and b/public/guides/7/7_4/3.jpg differ diff --git a/public/guides/7/7_4/4.jpg b/public/guides/7/7_4/4.jpg new file mode 100644 index 000000000..c2b90807c Binary files /dev/null and b/public/guides/7/7_4/4.jpg differ diff --git a/public/guides/7/7_4/5.jpg b/public/guides/7/7_4/5.jpg new file mode 100644 index 000000000..b50e13f3f Binary files /dev/null and b/public/guides/7/7_4/5.jpg differ diff --git a/public/guides/7/7_5/1.jpg b/public/guides/7/7_5/1.jpg new file mode 100644 index 000000000..f099749ab Binary files /dev/null and b/public/guides/7/7_5/1.jpg differ diff --git a/public/guides/7/7_5/2.jpg b/public/guides/7/7_5/2.jpg new file mode 100644 index 000000000..c01a2d910 Binary files /dev/null and b/public/guides/7/7_5/2.jpg differ diff --git a/public/guides/7/7_5/3.jpg b/public/guides/7/7_5/3.jpg new file mode 100644 index 000000000..667e03ebf Binary files /dev/null and b/public/guides/7/7_5/3.jpg differ diff --git a/public/guides/7/7_5/4.jpg b/public/guides/7/7_5/4.jpg new file mode 100644 index 000000000..9e757c9f5 Binary files /dev/null and b/public/guides/7/7_5/4.jpg differ diff --git a/public/guides/7/7_5/5.jpg b/public/guides/7/7_5/5.jpg new file mode 100644 index 000000000..154ad15fa Binary files /dev/null and b/public/guides/7/7_5/5.jpg differ diff --git a/public/guides/7/7_6/1.jpg b/public/guides/7/7_6/1.jpg new file mode 100644 index 000000000..52ed8bd69 Binary files /dev/null and b/public/guides/7/7_6/1.jpg differ diff --git a/public/guides/7/7_6/2.jpg b/public/guides/7/7_6/2.jpg new file mode 100644 index 000000000..a1c465ee2 Binary files /dev/null and b/public/guides/7/7_6/2.jpg differ diff --git a/public/guides/7/7_6/3.jpg b/public/guides/7/7_6/3.jpg new file mode 100644 index 000000000..d51385edb Binary files /dev/null and b/public/guides/7/7_6/3.jpg differ diff --git a/public/guides/7/7_6/4.jpg b/public/guides/7/7_6/4.jpg new file mode 100644 index 000000000..b3496002a Binary files /dev/null and b/public/guides/7/7_6/4.jpg differ diff --git a/public/guides/7/7_6/5.jpg b/public/guides/7/7_6/5.jpg new file mode 100644 index 000000000..8633eee68 Binary files /dev/null and b/public/guides/7/7_6/5.jpg differ diff --git a/public/guides/7/7_7/1.jpg b/public/guides/7/7_7/1.jpg new file mode 100644 index 000000000..d9e57b8d7 Binary files /dev/null and b/public/guides/7/7_7/1.jpg differ diff --git a/public/guides/7/7_7/2.jpg b/public/guides/7/7_7/2.jpg new file mode 100644 index 000000000..97789dbef Binary files /dev/null and b/public/guides/7/7_7/2.jpg differ diff --git a/public/guides/7/7_7/3.jpg b/public/guides/7/7_7/3.jpg new file mode 100644 index 000000000..ccc2f8a4a Binary files /dev/null and b/public/guides/7/7_7/3.jpg differ diff --git a/public/guides/7/7_7/4.jpg b/public/guides/7/7_7/4.jpg new file mode 100644 index 000000000..cd94c8ee0 Binary files /dev/null and b/public/guides/7/7_7/4.jpg differ diff --git a/public/guides/7/7_7/5.jpg b/public/guides/7/7_7/5.jpg new file mode 100644 index 000000000..4e05ace3e Binary files /dev/null and b/public/guides/7/7_7/5.jpg differ diff --git a/public/guides/7/7_8/1.jpg b/public/guides/7/7_8/1.jpg new file mode 100644 index 000000000..8dcf4053e Binary files /dev/null and b/public/guides/7/7_8/1.jpg differ diff --git a/public/guides/7/7_8/2.jpg b/public/guides/7/7_8/2.jpg new file mode 100644 index 000000000..812469156 Binary files /dev/null and b/public/guides/7/7_8/2.jpg differ diff --git a/public/guides/7/7_8/3.jpg b/public/guides/7/7_8/3.jpg new file mode 100644 index 000000000..91366972d Binary files /dev/null and b/public/guides/7/7_8/3.jpg differ diff --git a/public/guides/7/7_8/4.jpg b/public/guides/7/7_8/4.jpg new file mode 100644 index 000000000..b67901548 Binary files /dev/null and b/public/guides/7/7_8/4.jpg differ diff --git a/public/guides/7/7_8/5.JPG b/public/guides/7/7_8/5.JPG new file mode 100644 index 000000000..ceb94f809 Binary files /dev/null and b/public/guides/7/7_8/5.JPG differ diff --git a/public/guides/7/7_8/5.jpg b/public/guides/7/7_8/5.jpg new file mode 100644 index 000000000..ceb94f809 Binary files /dev/null and b/public/guides/7/7_8/5.jpg differ diff --git a/public/guides/7/7_9/1.jpg b/public/guides/7/7_9/1.jpg new file mode 100644 index 000000000..88b41eb04 Binary files /dev/null and b/public/guides/7/7_9/1.jpg differ diff --git a/public/guides/7/7_9/2.jpg b/public/guides/7/7_9/2.jpg new file mode 100644 index 000000000..4c956a5af Binary files /dev/null and b/public/guides/7/7_9/2.jpg differ diff --git a/public/guides/7/7_9/3.jpg b/public/guides/7/7_9/3.jpg new file mode 100644 index 000000000..eb4a4c0cd Binary files /dev/null and b/public/guides/7/7_9/3.jpg differ diff --git a/public/guides/7/7_9/4.jpg b/public/guides/7/7_9/4.jpg new file mode 100644 index 000000000..ee346a9ca Binary files /dev/null and b/public/guides/7/7_9/4.jpg differ diff --git a/public/guides/7/7_9/5.jpg b/public/guides/7/7_9/5.jpg new file mode 100644 index 000000000..ff55fdb45 Binary files /dev/null and b/public/guides/7/7_9/5.jpg differ diff --git "a/public/guides/7/7_PATTERN_ \353\254\270\354\226\221 \354\206\215\354\204\261 \354\235\270\354\213\235\352\270\260.jpg" "b/public/guides/7/7_PATTERN_ \353\254\270\354\226\221 \354\206\215\354\204\261 \354\235\270\354\213\235\352\270\260.jpg" new file mode 100644 index 000000000..7b4db7e4b Binary files /dev/null and "b/public/guides/7/7_PATTERN_ \353\254\270\354\226\221 \354\206\215\354\204\261 \354\235\270\354\213\235\352\270\260.jpg" differ diff --git "a/public/guides/SHOWNIQ_\353\266\204\353\245\230\353\217\204\352\265\254_\353\214\200\355\221\234\354\235\264\353\257\270\354\247\200(\355\217\264\353\215\224\353\263\204 5\354\236\245\354\224\251).jpg" "b/public/guides/SHOWNIQ_\353\266\204\353\245\230\353\217\204\352\265\254_\353\214\200\355\221\234\354\235\264\353\257\270\354\247\200(\355\217\264\353\215\224\353\263\204 5\354\236\245\354\224\251).jpg" new file mode 100644 index 000000000..4e64a2c3d Binary files /dev/null and "b/public/guides/SHOWNIQ_\353\266\204\353\245\230\353\217\204\352\265\254_\353\214\200\355\221\234\354\235\264\353\257\270\354\247\200(\355\217\264\353\215\224\353\263\204 5\354\236\245\354\224\251).jpg" differ diff --git a/public/guides/icons/colors/1.png b/public/guides/icons/colors/1.png new file mode 100644 index 000000000..6147ad6b8 Binary files /dev/null and b/public/guides/icons/colors/1.png differ diff --git a/public/guides/icons/colors/10.png b/public/guides/icons/colors/10.png new file mode 100644 index 000000000..441b6c61e Binary files /dev/null and b/public/guides/icons/colors/10.png differ diff --git a/public/guides/icons/colors/10_s.png b/public/guides/icons/colors/10_s.png new file mode 100644 index 000000000..2a479c4d9 Binary files /dev/null and b/public/guides/icons/colors/10_s.png differ diff --git a/public/guides/icons/colors/11.png b/public/guides/icons/colors/11.png new file mode 100644 index 000000000..735349918 Binary files /dev/null and b/public/guides/icons/colors/11.png differ diff --git a/public/guides/icons/colors/11_s.png b/public/guides/icons/colors/11_s.png new file mode 100644 index 000000000..2a8a70336 Binary files /dev/null and b/public/guides/icons/colors/11_s.png differ diff --git a/public/guides/icons/colors/12.png b/public/guides/icons/colors/12.png new file mode 100644 index 000000000..59cb47dbf Binary files /dev/null and b/public/guides/icons/colors/12.png differ diff --git a/public/guides/icons/colors/12_s.png b/public/guides/icons/colors/12_s.png new file mode 100644 index 000000000..88b79fc1c Binary files /dev/null and b/public/guides/icons/colors/12_s.png differ diff --git a/public/guides/icons/colors/13.png b/public/guides/icons/colors/13.png new file mode 100644 index 000000000..bc0bc4ccf Binary files /dev/null and b/public/guides/icons/colors/13.png differ diff --git a/public/guides/icons/colors/13_s.png b/public/guides/icons/colors/13_s.png new file mode 100644 index 000000000..5b11b83c5 Binary files /dev/null and b/public/guides/icons/colors/13_s.png differ diff --git a/public/guides/icons/colors/14.png b/public/guides/icons/colors/14.png new file mode 100644 index 000000000..8cf1b10cf Binary files /dev/null and b/public/guides/icons/colors/14.png differ diff --git a/public/guides/icons/colors/14_s.png b/public/guides/icons/colors/14_s.png new file mode 100644 index 000000000..2743d01da Binary files /dev/null and b/public/guides/icons/colors/14_s.png differ diff --git a/public/guides/icons/colors/15.png b/public/guides/icons/colors/15.png new file mode 100644 index 000000000..f07ab0e3e Binary files /dev/null and b/public/guides/icons/colors/15.png differ diff --git a/public/guides/icons/colors/15_s.png b/public/guides/icons/colors/15_s.png new file mode 100644 index 000000000..359d452b5 Binary files /dev/null and b/public/guides/icons/colors/15_s.png differ diff --git a/public/guides/icons/colors/16.png b/public/guides/icons/colors/16.png new file mode 100644 index 000000000..27977f192 Binary files /dev/null and b/public/guides/icons/colors/16.png differ diff --git a/public/guides/icons/colors/16_s.png b/public/guides/icons/colors/16_s.png new file mode 100644 index 000000000..5866ef5d6 Binary files /dev/null and b/public/guides/icons/colors/16_s.png differ diff --git a/public/guides/icons/colors/17.png b/public/guides/icons/colors/17.png new file mode 100644 index 000000000..d049b08d9 Binary files /dev/null and b/public/guides/icons/colors/17.png differ diff --git a/public/guides/icons/colors/17_s.png b/public/guides/icons/colors/17_s.png new file mode 100644 index 000000000..7f8bc429a Binary files /dev/null and b/public/guides/icons/colors/17_s.png differ diff --git a/public/guides/icons/colors/18.png b/public/guides/icons/colors/18.png new file mode 100644 index 000000000..5ebb14a2d Binary files /dev/null and b/public/guides/icons/colors/18.png differ diff --git a/public/guides/icons/colors/18_s.png b/public/guides/icons/colors/18_s.png new file mode 100644 index 000000000..1addfdc1c Binary files /dev/null and b/public/guides/icons/colors/18_s.png differ diff --git a/public/guides/icons/colors/19.png b/public/guides/icons/colors/19.png new file mode 100644 index 000000000..eca44e956 Binary files /dev/null and b/public/guides/icons/colors/19.png differ diff --git a/public/guides/icons/colors/19_s.png b/public/guides/icons/colors/19_s.png new file mode 100644 index 000000000..579bce373 Binary files /dev/null and b/public/guides/icons/colors/19_s.png differ diff --git a/public/guides/icons/colors/1_s.png b/public/guides/icons/colors/1_s.png new file mode 100644 index 000000000..1226eb764 Binary files /dev/null and b/public/guides/icons/colors/1_s.png differ diff --git a/public/guides/icons/colors/2.png b/public/guides/icons/colors/2.png new file mode 100644 index 000000000..be224c1dc Binary files /dev/null and b/public/guides/icons/colors/2.png differ diff --git a/public/guides/icons/colors/20.png b/public/guides/icons/colors/20.png new file mode 100644 index 000000000..1724b5ef3 Binary files /dev/null and b/public/guides/icons/colors/20.png differ diff --git a/public/guides/icons/colors/20_s.png b/public/guides/icons/colors/20_s.png new file mode 100644 index 000000000..688217155 Binary files /dev/null and b/public/guides/icons/colors/20_s.png differ diff --git a/public/guides/icons/colors/21.png b/public/guides/icons/colors/21.png new file mode 100644 index 000000000..c14b474fc Binary files /dev/null and b/public/guides/icons/colors/21.png differ diff --git a/public/guides/icons/colors/21_s.png b/public/guides/icons/colors/21_s.png new file mode 100644 index 000000000..928a791db Binary files /dev/null and b/public/guides/icons/colors/21_s.png differ diff --git a/public/guides/icons/colors/22.png b/public/guides/icons/colors/22.png new file mode 100644 index 000000000..3949aab84 Binary files /dev/null and b/public/guides/icons/colors/22.png differ diff --git a/public/guides/icons/colors/22_s.png b/public/guides/icons/colors/22_s.png new file mode 100644 index 000000000..c38986fee Binary files /dev/null and b/public/guides/icons/colors/22_s.png differ diff --git a/public/guides/icons/colors/23.png b/public/guides/icons/colors/23.png new file mode 100644 index 000000000..651cbaf89 Binary files /dev/null and b/public/guides/icons/colors/23.png differ diff --git a/public/guides/icons/colors/23_s.png b/public/guides/icons/colors/23_s.png new file mode 100644 index 000000000..5497630ce Binary files /dev/null and b/public/guides/icons/colors/23_s.png differ diff --git a/public/guides/icons/colors/2_s.png b/public/guides/icons/colors/2_s.png new file mode 100644 index 000000000..06a4dac5b Binary files /dev/null and b/public/guides/icons/colors/2_s.png differ diff --git a/public/guides/icons/colors/3.png b/public/guides/icons/colors/3.png new file mode 100644 index 000000000..1ea0d1385 Binary files /dev/null and b/public/guides/icons/colors/3.png differ diff --git a/public/guides/icons/colors/3_s.png b/public/guides/icons/colors/3_s.png new file mode 100644 index 000000000..ccb853cf7 Binary files /dev/null and b/public/guides/icons/colors/3_s.png differ diff --git a/public/guides/icons/colors/4.png b/public/guides/icons/colors/4.png new file mode 100644 index 000000000..5b375669a Binary files /dev/null and b/public/guides/icons/colors/4.png differ diff --git a/public/guides/icons/colors/4_s.png b/public/guides/icons/colors/4_s.png new file mode 100644 index 000000000..e79397277 Binary files /dev/null and b/public/guides/icons/colors/4_s.png differ diff --git a/public/guides/icons/colors/5.png b/public/guides/icons/colors/5.png new file mode 100644 index 000000000..9dfac0f2d Binary files /dev/null and b/public/guides/icons/colors/5.png differ diff --git a/public/guides/icons/colors/5_s.png b/public/guides/icons/colors/5_s.png new file mode 100644 index 000000000..8e4278081 Binary files /dev/null and b/public/guides/icons/colors/5_s.png differ diff --git a/public/guides/icons/colors/6.png b/public/guides/icons/colors/6.png new file mode 100644 index 000000000..cd9934648 Binary files /dev/null and b/public/guides/icons/colors/6.png differ diff --git a/public/guides/icons/colors/6_s.png b/public/guides/icons/colors/6_s.png new file mode 100644 index 000000000..a5bc2f0a0 Binary files /dev/null and b/public/guides/icons/colors/6_s.png differ diff --git a/public/guides/icons/colors/7.png b/public/guides/icons/colors/7.png new file mode 100644 index 000000000..9ea0afe3e Binary files /dev/null and b/public/guides/icons/colors/7.png differ diff --git a/public/guides/icons/colors/7_s.png b/public/guides/icons/colors/7_s.png new file mode 100644 index 000000000..f6bb12937 Binary files /dev/null and b/public/guides/icons/colors/7_s.png differ diff --git a/public/guides/icons/colors/8.png b/public/guides/icons/colors/8.png new file mode 100644 index 000000000..e7f2d545c Binary files /dev/null and b/public/guides/icons/colors/8.png differ diff --git a/public/guides/icons/colors/8_s.png b/public/guides/icons/colors/8_s.png new file mode 100644 index 000000000..a88c6a8d0 Binary files /dev/null and b/public/guides/icons/colors/8_s.png differ diff --git a/public/guides/icons/colors/9.png b/public/guides/icons/colors/9.png new file mode 100644 index 000000000..84e1f2fd9 Binary files /dev/null and b/public/guides/icons/colors/9.png differ diff --git a/public/guides/icons/colors/9_s.png b/public/guides/icons/colors/9_s.png new file mode 100644 index 000000000..e89907ea8 Binary files /dev/null and b/public/guides/icons/colors/9_s.png differ diff --git a/public/guides/icons/genders/1.png b/public/guides/icons/genders/1.png new file mode 100644 index 000000000..c1ab6906b Binary files /dev/null and b/public/guides/icons/genders/1.png differ diff --git a/public/guides/icons/genders/1_s.png b/public/guides/icons/genders/1_s.png new file mode 100644 index 000000000..0e0f6f4b1 Binary files /dev/null and b/public/guides/icons/genders/1_s.png differ diff --git a/public/guides/icons/genders/2.png b/public/guides/icons/genders/2.png new file mode 100644 index 000000000..1c6e01af1 Binary files /dev/null and b/public/guides/icons/genders/2.png differ diff --git a/public/guides/icons/genders/2_s.png b/public/guides/icons/genders/2_s.png new file mode 100644 index 000000000..ca5fdba90 Binary files /dev/null and b/public/guides/icons/genders/2_s.png differ diff --git a/public/guides/icons/main_cats/1.png b/public/guides/icons/main_cats/1.png new file mode 100644 index 000000000..0cccaa374 Binary files /dev/null and b/public/guides/icons/main_cats/1.png differ diff --git a/public/guides/icons/main_cats/10.png b/public/guides/icons/main_cats/10.png new file mode 100644 index 000000000..2ec887d8f Binary files /dev/null and b/public/guides/icons/main_cats/10.png differ diff --git a/public/guides/icons/main_cats/10_s.png b/public/guides/icons/main_cats/10_s.png new file mode 100644 index 000000000..46b643506 Binary files /dev/null and b/public/guides/icons/main_cats/10_s.png differ diff --git a/public/guides/icons/main_cats/11.png b/public/guides/icons/main_cats/11.png new file mode 100644 index 000000000..44148a007 Binary files /dev/null and b/public/guides/icons/main_cats/11.png differ diff --git a/public/guides/icons/main_cats/11_s.png b/public/guides/icons/main_cats/11_s.png new file mode 100644 index 000000000..fdd420907 Binary files /dev/null and b/public/guides/icons/main_cats/11_s.png differ diff --git a/public/guides/icons/main_cats/12.png b/public/guides/icons/main_cats/12.png new file mode 100644 index 000000000..07d2a9e86 Binary files /dev/null and b/public/guides/icons/main_cats/12.png differ diff --git a/public/guides/icons/main_cats/12_s.png b/public/guides/icons/main_cats/12_s.png new file mode 100644 index 000000000..5c8d11a3c Binary files /dev/null and b/public/guides/icons/main_cats/12_s.png differ diff --git a/public/guides/icons/main_cats/1_s.png b/public/guides/icons/main_cats/1_s.png new file mode 100644 index 000000000..2642639ce Binary files /dev/null and b/public/guides/icons/main_cats/1_s.png differ diff --git a/public/guides/icons/main_cats/2.png b/public/guides/icons/main_cats/2.png new file mode 100644 index 000000000..3e6c46c67 Binary files /dev/null and b/public/guides/icons/main_cats/2.png differ diff --git a/public/guides/icons/main_cats/2_s.png b/public/guides/icons/main_cats/2_s.png new file mode 100644 index 000000000..267d9bcc7 Binary files /dev/null and b/public/guides/icons/main_cats/2_s.png differ diff --git a/public/guides/icons/main_cats/3.png b/public/guides/icons/main_cats/3.png new file mode 100644 index 000000000..492c8a496 Binary files /dev/null and b/public/guides/icons/main_cats/3.png differ diff --git a/public/guides/icons/main_cats/3_s.png b/public/guides/icons/main_cats/3_s.png new file mode 100644 index 000000000..d66da6c5f Binary files /dev/null and b/public/guides/icons/main_cats/3_s.png differ diff --git a/public/guides/icons/main_cats/4.png b/public/guides/icons/main_cats/4.png new file mode 100644 index 000000000..364ef9c8d Binary files /dev/null and b/public/guides/icons/main_cats/4.png differ diff --git a/public/guides/icons/main_cats/4_s.png b/public/guides/icons/main_cats/4_s.png new file mode 100644 index 000000000..6492444eb Binary files /dev/null and b/public/guides/icons/main_cats/4_s.png differ diff --git a/public/guides/icons/main_cats/5.png b/public/guides/icons/main_cats/5.png new file mode 100644 index 000000000..94a82e806 Binary files /dev/null and b/public/guides/icons/main_cats/5.png differ diff --git a/public/guides/icons/main_cats/5_s.png b/public/guides/icons/main_cats/5_s.png new file mode 100644 index 000000000..5f69e6f2f Binary files /dev/null and b/public/guides/icons/main_cats/5_s.png differ diff --git a/public/guides/icons/main_cats/6.png b/public/guides/icons/main_cats/6.png new file mode 100644 index 000000000..d748e9e0e Binary files /dev/null and b/public/guides/icons/main_cats/6.png differ diff --git a/public/guides/icons/main_cats/6_s.png b/public/guides/icons/main_cats/6_s.png new file mode 100644 index 000000000..7db54086e Binary files /dev/null and b/public/guides/icons/main_cats/6_s.png differ diff --git a/public/guides/icons/main_cats/7.png b/public/guides/icons/main_cats/7.png new file mode 100644 index 000000000..f03868e6c Binary files /dev/null and b/public/guides/icons/main_cats/7.png differ diff --git a/public/guides/icons/main_cats/7_s.png b/public/guides/icons/main_cats/7_s.png new file mode 100644 index 000000000..cae9a3e45 Binary files /dev/null and b/public/guides/icons/main_cats/7_s.png differ diff --git a/public/guides/icons/main_cats/8.png b/public/guides/icons/main_cats/8.png new file mode 100644 index 000000000..28e05f61e Binary files /dev/null and b/public/guides/icons/main_cats/8.png differ diff --git a/public/guides/icons/main_cats/8_s.png b/public/guides/icons/main_cats/8_s.png new file mode 100644 index 000000000..b6b9a1bfa Binary files /dev/null and b/public/guides/icons/main_cats/8_s.png differ diff --git a/public/guides/icons/main_cats/9.png b/public/guides/icons/main_cats/9.png new file mode 100644 index 000000000..93d6fd266 Binary files /dev/null and b/public/guides/icons/main_cats/9.png differ diff --git a/public/guides/icons/main_cats/9_s.png b/public/guides/icons/main_cats/9_s.png new file mode 100644 index 000000000..029eec7e4 Binary files /dev/null and b/public/guides/icons/main_cats/9_s.png differ diff --git a/public/guides/icons/man_style/1.png b/public/guides/icons/man_style/1.png new file mode 100644 index 000000000..e69d6f4b3 Binary files /dev/null and b/public/guides/icons/man_style/1.png differ diff --git a/public/guides/icons/man_style/10.png b/public/guides/icons/man_style/10.png new file mode 100644 index 000000000..b746f0930 Binary files /dev/null and b/public/guides/icons/man_style/10.png differ diff --git a/public/guides/icons/man_style/10_s.png b/public/guides/icons/man_style/10_s.png new file mode 100644 index 000000000..e14c99719 Binary files /dev/null and b/public/guides/icons/man_style/10_s.png differ diff --git a/public/guides/icons/man_style/1_s.png b/public/guides/icons/man_style/1_s.png new file mode 100644 index 000000000..14da721dd Binary files /dev/null and b/public/guides/icons/man_style/1_s.png differ diff --git a/public/guides/icons/man_style/2.png b/public/guides/icons/man_style/2.png new file mode 100644 index 000000000..0adb720ad Binary files /dev/null and b/public/guides/icons/man_style/2.png differ diff --git a/public/guides/icons/man_style/2_s.png b/public/guides/icons/man_style/2_s.png new file mode 100644 index 000000000..306da31d2 Binary files /dev/null and b/public/guides/icons/man_style/2_s.png differ diff --git a/public/guides/icons/man_style/3.png b/public/guides/icons/man_style/3.png new file mode 100644 index 000000000..51dbedc83 Binary files /dev/null and b/public/guides/icons/man_style/3.png differ diff --git a/public/guides/icons/man_style/3_s.png b/public/guides/icons/man_style/3_s.png new file mode 100644 index 000000000..c1eeabbb2 Binary files /dev/null and b/public/guides/icons/man_style/3_s.png differ diff --git a/public/guides/icons/man_style/4.png b/public/guides/icons/man_style/4.png new file mode 100644 index 000000000..c910924b5 Binary files /dev/null and b/public/guides/icons/man_style/4.png differ diff --git a/public/guides/icons/man_style/4_s.png b/public/guides/icons/man_style/4_s.png new file mode 100644 index 000000000..7c0406b97 Binary files /dev/null and b/public/guides/icons/man_style/4_s.png differ diff --git a/public/guides/icons/man_style/5.png b/public/guides/icons/man_style/5.png new file mode 100644 index 000000000..dca4e35c8 Binary files /dev/null and b/public/guides/icons/man_style/5.png differ diff --git a/public/guides/icons/man_style/5_s.png b/public/guides/icons/man_style/5_s.png new file mode 100644 index 000000000..cd1259cf9 Binary files /dev/null and b/public/guides/icons/man_style/5_s.png differ diff --git a/public/guides/icons/man_style/6.png b/public/guides/icons/man_style/6.png new file mode 100644 index 000000000..12f668084 Binary files /dev/null and b/public/guides/icons/man_style/6.png differ diff --git a/public/guides/icons/man_style/6_s.png b/public/guides/icons/man_style/6_s.png new file mode 100644 index 000000000..323d00e06 Binary files /dev/null and b/public/guides/icons/man_style/6_s.png differ diff --git a/public/guides/icons/man_style/7.png b/public/guides/icons/man_style/7.png new file mode 100644 index 000000000..aaded0888 Binary files /dev/null and b/public/guides/icons/man_style/7.png differ diff --git a/public/guides/icons/man_style/7_s.png b/public/guides/icons/man_style/7_s.png new file mode 100644 index 000000000..d35d84648 Binary files /dev/null and b/public/guides/icons/man_style/7_s.png differ diff --git a/public/guides/icons/man_style/8.png b/public/guides/icons/man_style/8.png new file mode 100644 index 000000000..80d1ea1ab Binary files /dev/null and b/public/guides/icons/man_style/8.png differ diff --git a/public/guides/icons/man_style/8_s.png b/public/guides/icons/man_style/8_s.png new file mode 100644 index 000000000..bbdb1315d Binary files /dev/null and b/public/guides/icons/man_style/8_s.png differ diff --git a/public/guides/icons/man_style/9.png b/public/guides/icons/man_style/9.png new file mode 100644 index 000000000..bc2847507 Binary files /dev/null and b/public/guides/icons/man_style/9.png differ diff --git a/public/guides/icons/man_style/9_s.png b/public/guides/icons/man_style/9_s.png new file mode 100644 index 000000000..bdcce8e71 Binary files /dev/null and b/public/guides/icons/man_style/9_s.png differ diff --git a/public/guides/icons/patterns/1.png b/public/guides/icons/patterns/1.png new file mode 100644 index 000000000..3cfd6f973 Binary files /dev/null and b/public/guides/icons/patterns/1.png differ diff --git a/public/guides/icons/patterns/10.png b/public/guides/icons/patterns/10.png new file mode 100644 index 000000000..66aff8313 Binary files /dev/null and b/public/guides/icons/patterns/10.png differ diff --git a/public/guides/icons/patterns/10_s.png b/public/guides/icons/patterns/10_s.png new file mode 100644 index 000000000..b0d52e988 Binary files /dev/null and b/public/guides/icons/patterns/10_s.png differ diff --git a/public/guides/icons/patterns/11.png b/public/guides/icons/patterns/11.png new file mode 100644 index 000000000..d2ff5b363 Binary files /dev/null and b/public/guides/icons/patterns/11.png differ diff --git a/public/guides/icons/patterns/11_s.png b/public/guides/icons/patterns/11_s.png new file mode 100644 index 000000000..09b1d2748 Binary files /dev/null and b/public/guides/icons/patterns/11_s.png differ diff --git a/public/guides/icons/patterns/12.png b/public/guides/icons/patterns/12.png new file mode 100644 index 000000000..666afe8a2 Binary files /dev/null and b/public/guides/icons/patterns/12.png differ diff --git a/public/guides/icons/patterns/12_s.png b/public/guides/icons/patterns/12_s.png new file mode 100644 index 000000000..88dd8df8d Binary files /dev/null and b/public/guides/icons/patterns/12_s.png differ diff --git a/public/guides/icons/patterns/13.png b/public/guides/icons/patterns/13.png new file mode 100644 index 000000000..f55ff542c Binary files /dev/null and b/public/guides/icons/patterns/13.png differ diff --git a/public/guides/icons/patterns/13_s.png b/public/guides/icons/patterns/13_s.png new file mode 100644 index 000000000..74c34c731 Binary files /dev/null and b/public/guides/icons/patterns/13_s.png differ diff --git a/public/guides/icons/patterns/14.png b/public/guides/icons/patterns/14.png new file mode 100644 index 000000000..d788925cd Binary files /dev/null and b/public/guides/icons/patterns/14.png differ diff --git a/public/guides/icons/patterns/14_s.png b/public/guides/icons/patterns/14_s.png new file mode 100644 index 000000000..f0e7d23a4 Binary files /dev/null and b/public/guides/icons/patterns/14_s.png differ diff --git a/public/guides/icons/patterns/15.png b/public/guides/icons/patterns/15.png new file mode 100644 index 000000000..8c040dd3b Binary files /dev/null and b/public/guides/icons/patterns/15.png differ diff --git a/public/guides/icons/patterns/15_s.png b/public/guides/icons/patterns/15_s.png new file mode 100644 index 000000000..74aec6539 Binary files /dev/null and b/public/guides/icons/patterns/15_s.png differ diff --git a/public/guides/icons/patterns/16.png b/public/guides/icons/patterns/16.png new file mode 100644 index 000000000..d47123c9e Binary files /dev/null and b/public/guides/icons/patterns/16.png differ diff --git a/public/guides/icons/patterns/16_s.png b/public/guides/icons/patterns/16_s.png new file mode 100644 index 000000000..673432073 Binary files /dev/null and b/public/guides/icons/patterns/16_s.png differ diff --git a/public/guides/icons/patterns/17.png b/public/guides/icons/patterns/17.png new file mode 100644 index 000000000..76ef7fe56 Binary files /dev/null and b/public/guides/icons/patterns/17.png differ diff --git a/public/guides/icons/patterns/17_s.png b/public/guides/icons/patterns/17_s.png new file mode 100644 index 000000000..60b8a8e3d Binary files /dev/null and b/public/guides/icons/patterns/17_s.png differ diff --git a/public/guides/icons/patterns/18.png b/public/guides/icons/patterns/18.png new file mode 100644 index 000000000..0c7b071dc Binary files /dev/null and b/public/guides/icons/patterns/18.png differ diff --git a/public/guides/icons/patterns/18_s.png b/public/guides/icons/patterns/18_s.png new file mode 100644 index 000000000..799ab84bd Binary files /dev/null and b/public/guides/icons/patterns/18_s.png differ diff --git a/public/guides/icons/patterns/1_s.png b/public/guides/icons/patterns/1_s.png new file mode 100644 index 000000000..41c20c3d3 Binary files /dev/null and b/public/guides/icons/patterns/1_s.png differ diff --git a/public/guides/icons/patterns/2.png b/public/guides/icons/patterns/2.png new file mode 100644 index 000000000..498604bd3 Binary files /dev/null and b/public/guides/icons/patterns/2.png differ diff --git a/public/guides/icons/patterns/2_s.png b/public/guides/icons/patterns/2_s.png new file mode 100644 index 000000000..1703ccbde Binary files /dev/null and b/public/guides/icons/patterns/2_s.png differ diff --git a/public/guides/icons/patterns/3.png b/public/guides/icons/patterns/3.png new file mode 100644 index 000000000..6d1acb415 Binary files /dev/null and b/public/guides/icons/patterns/3.png differ diff --git a/public/guides/icons/patterns/3_s.png b/public/guides/icons/patterns/3_s.png new file mode 100644 index 000000000..6f05ec6ac Binary files /dev/null and b/public/guides/icons/patterns/3_s.png differ diff --git a/public/guides/icons/patterns/4.png b/public/guides/icons/patterns/4.png new file mode 100644 index 000000000..9cfb0b17a Binary files /dev/null and b/public/guides/icons/patterns/4.png differ diff --git a/public/guides/icons/patterns/4_s.png b/public/guides/icons/patterns/4_s.png new file mode 100644 index 000000000..0ad0c2b45 Binary files /dev/null and b/public/guides/icons/patterns/4_s.png differ diff --git a/public/guides/icons/patterns/5.png b/public/guides/icons/patterns/5.png new file mode 100644 index 000000000..69bb9084b Binary files /dev/null and b/public/guides/icons/patterns/5.png differ diff --git a/public/guides/icons/patterns/5_s.png b/public/guides/icons/patterns/5_s.png new file mode 100644 index 000000000..4d17ee388 Binary files /dev/null and b/public/guides/icons/patterns/5_s.png differ diff --git a/public/guides/icons/patterns/6.png b/public/guides/icons/patterns/6.png new file mode 100644 index 000000000..e347bb4eb Binary files /dev/null and b/public/guides/icons/patterns/6.png differ diff --git a/public/guides/icons/patterns/6_s.png b/public/guides/icons/patterns/6_s.png new file mode 100644 index 000000000..87f964d14 Binary files /dev/null and b/public/guides/icons/patterns/6_s.png differ diff --git a/public/guides/icons/patterns/7.png b/public/guides/icons/patterns/7.png new file mode 100644 index 000000000..486f04751 Binary files /dev/null and b/public/guides/icons/patterns/7.png differ diff --git a/public/guides/icons/patterns/7_s.png b/public/guides/icons/patterns/7_s.png new file mode 100644 index 000000000..701ad7275 Binary files /dev/null and b/public/guides/icons/patterns/7_s.png differ diff --git a/public/guides/icons/patterns/8.png b/public/guides/icons/patterns/8.png new file mode 100644 index 000000000..369c6c030 Binary files /dev/null and b/public/guides/icons/patterns/8.png differ diff --git a/public/guides/icons/patterns/8_s.png b/public/guides/icons/patterns/8_s.png new file mode 100644 index 000000000..8d9233d93 Binary files /dev/null and b/public/guides/icons/patterns/8_s.png differ diff --git a/public/guides/icons/patterns/9.png b/public/guides/icons/patterns/9.png new file mode 100644 index 000000000..c0b4de7b7 Binary files /dev/null and b/public/guides/icons/patterns/9.png differ diff --git a/public/guides/icons/patterns/9_s.png b/public/guides/icons/patterns/9_s.png new file mode 100644 index 000000000..fb7b58ff0 Binary files /dev/null and b/public/guides/icons/patterns/9_s.png differ diff --git a/public/guides/icons/sources/0.png b/public/guides/icons/sources/0.png new file mode 100644 index 000000000..4f2433272 Binary files /dev/null and b/public/guides/icons/sources/0.png differ diff --git a/public/guides/icons/sources/0_s.png b/public/guides/icons/sources/0_s.png new file mode 100644 index 000000000..ad05a5cdb Binary files /dev/null and b/public/guides/icons/sources/0_s.png differ diff --git a/public/guides/icons/sources/1.png b/public/guides/icons/sources/1.png new file mode 100644 index 000000000..bfd47b431 Binary files /dev/null and b/public/guides/icons/sources/1.png differ diff --git a/public/guides/icons/sources/1_s.png b/public/guides/icons/sources/1_s.png new file mode 100644 index 000000000..b2662d39d Binary files /dev/null and b/public/guides/icons/sources/1_s.png differ diff --git a/public/guides/icons/sources/2.png b/public/guides/icons/sources/2.png new file mode 100644 index 000000000..2d0af4b3d Binary files /dev/null and b/public/guides/icons/sources/2.png differ diff --git a/public/guides/icons/sources/2_s.png b/public/guides/icons/sources/2_s.png new file mode 100644 index 000000000..73ad3e7d1 Binary files /dev/null and b/public/guides/icons/sources/2_s.png differ diff --git a/public/guides/icons/sub_cats/1.png b/public/guides/icons/sub_cats/1.png new file mode 100644 index 000000000..5abc3e112 Binary files /dev/null and b/public/guides/icons/sub_cats/1.png differ diff --git a/public/guides/icons/sub_cats/10.png b/public/guides/icons/sub_cats/10.png new file mode 100644 index 000000000..892b58c3d Binary files /dev/null and b/public/guides/icons/sub_cats/10.png differ diff --git a/public/guides/icons/sub_cats/10_s.png b/public/guides/icons/sub_cats/10_s.png new file mode 100644 index 000000000..b5cac375f Binary files /dev/null and b/public/guides/icons/sub_cats/10_s.png differ diff --git a/public/guides/icons/sub_cats/11.png b/public/guides/icons/sub_cats/11.png new file mode 100644 index 000000000..41b744024 Binary files /dev/null and b/public/guides/icons/sub_cats/11.png differ diff --git a/public/guides/icons/sub_cats/11_s.png b/public/guides/icons/sub_cats/11_s.png new file mode 100644 index 000000000..b19143293 Binary files /dev/null and b/public/guides/icons/sub_cats/11_s.png differ diff --git a/public/guides/icons/sub_cats/12.png b/public/guides/icons/sub_cats/12.png new file mode 100644 index 000000000..e52aed939 Binary files /dev/null and b/public/guides/icons/sub_cats/12.png differ diff --git a/public/guides/icons/sub_cats/12_s.png b/public/guides/icons/sub_cats/12_s.png new file mode 100644 index 000000000..d1851ff71 Binary files /dev/null and b/public/guides/icons/sub_cats/12_s.png differ diff --git a/public/guides/icons/sub_cats/13.png b/public/guides/icons/sub_cats/13.png new file mode 100644 index 000000000..af3b9225a Binary files /dev/null and b/public/guides/icons/sub_cats/13.png differ diff --git a/public/guides/icons/sub_cats/13_s.png b/public/guides/icons/sub_cats/13_s.png new file mode 100644 index 000000000..1af031fa9 Binary files /dev/null and b/public/guides/icons/sub_cats/13_s.png differ diff --git a/public/guides/icons/sub_cats/14.png b/public/guides/icons/sub_cats/14.png new file mode 100644 index 000000000..a73bd95ce Binary files /dev/null and b/public/guides/icons/sub_cats/14.png differ diff --git a/public/guides/icons/sub_cats/14_s.png b/public/guides/icons/sub_cats/14_s.png new file mode 100644 index 000000000..8ebdb8152 Binary files /dev/null and b/public/guides/icons/sub_cats/14_s.png differ diff --git a/public/guides/icons/sub_cats/15.png b/public/guides/icons/sub_cats/15.png new file mode 100644 index 000000000..15287ea2d Binary files /dev/null and b/public/guides/icons/sub_cats/15.png differ diff --git a/public/guides/icons/sub_cats/15_s.png b/public/guides/icons/sub_cats/15_s.png new file mode 100644 index 000000000..5347d52df Binary files /dev/null and b/public/guides/icons/sub_cats/15_s.png differ diff --git a/public/guides/icons/sub_cats/16.png b/public/guides/icons/sub_cats/16.png new file mode 100644 index 000000000..ac749f36b Binary files /dev/null and b/public/guides/icons/sub_cats/16.png differ diff --git a/public/guides/icons/sub_cats/16_s.png b/public/guides/icons/sub_cats/16_s.png new file mode 100644 index 000000000..816c6511e Binary files /dev/null and b/public/guides/icons/sub_cats/16_s.png differ diff --git a/public/guides/icons/sub_cats/17.png b/public/guides/icons/sub_cats/17.png new file mode 100644 index 000000000..921fa984d Binary files /dev/null and b/public/guides/icons/sub_cats/17.png differ diff --git a/public/guides/icons/sub_cats/17_s.png b/public/guides/icons/sub_cats/17_s.png new file mode 100644 index 000000000..73ac98f2e Binary files /dev/null and b/public/guides/icons/sub_cats/17_s.png differ diff --git a/public/guides/icons/sub_cats/18.png b/public/guides/icons/sub_cats/18.png new file mode 100644 index 000000000..2e6bdc8bf Binary files /dev/null and b/public/guides/icons/sub_cats/18.png differ diff --git a/public/guides/icons/sub_cats/18_s.png b/public/guides/icons/sub_cats/18_s.png new file mode 100644 index 000000000..83947dc7a Binary files /dev/null and b/public/guides/icons/sub_cats/18_s.png differ diff --git a/public/guides/icons/sub_cats/19.png b/public/guides/icons/sub_cats/19.png new file mode 100644 index 000000000..86ee0a37b Binary files /dev/null and b/public/guides/icons/sub_cats/19.png differ diff --git a/public/guides/icons/sub_cats/19_s.png b/public/guides/icons/sub_cats/19_s.png new file mode 100644 index 000000000..7c4fa0969 Binary files /dev/null and b/public/guides/icons/sub_cats/19_s.png differ diff --git a/public/guides/icons/sub_cats/1_s.png b/public/guides/icons/sub_cats/1_s.png new file mode 100644 index 000000000..669183c21 Binary files /dev/null and b/public/guides/icons/sub_cats/1_s.png differ diff --git a/public/guides/icons/sub_cats/2.png b/public/guides/icons/sub_cats/2.png new file mode 100644 index 000000000..b90b5d289 Binary files /dev/null and b/public/guides/icons/sub_cats/2.png differ diff --git a/public/guides/icons/sub_cats/20.png b/public/guides/icons/sub_cats/20.png new file mode 100644 index 000000000..c5f7bbd12 Binary files /dev/null and b/public/guides/icons/sub_cats/20.png differ diff --git a/public/guides/icons/sub_cats/20_s.png b/public/guides/icons/sub_cats/20_s.png new file mode 100644 index 000000000..e1a1bc0c6 Binary files /dev/null and b/public/guides/icons/sub_cats/20_s.png differ diff --git a/public/guides/icons/sub_cats/21.png b/public/guides/icons/sub_cats/21.png new file mode 100644 index 000000000..135dfa455 Binary files /dev/null and b/public/guides/icons/sub_cats/21.png differ diff --git a/public/guides/icons/sub_cats/21_s.png b/public/guides/icons/sub_cats/21_s.png new file mode 100644 index 000000000..724bf0126 Binary files /dev/null and b/public/guides/icons/sub_cats/21_s.png differ diff --git a/public/guides/icons/sub_cats/22.png b/public/guides/icons/sub_cats/22.png new file mode 100644 index 000000000..65f54253d Binary files /dev/null and b/public/guides/icons/sub_cats/22.png differ diff --git a/public/guides/icons/sub_cats/22_s.png b/public/guides/icons/sub_cats/22_s.png new file mode 100644 index 000000000..087b2dbb6 Binary files /dev/null and b/public/guides/icons/sub_cats/22_s.png differ diff --git a/public/guides/icons/sub_cats/23.png b/public/guides/icons/sub_cats/23.png new file mode 100644 index 000000000..0575ef518 Binary files /dev/null and b/public/guides/icons/sub_cats/23.png differ diff --git a/public/guides/icons/sub_cats/23_s.png b/public/guides/icons/sub_cats/23_s.png new file mode 100644 index 000000000..39225ebf5 Binary files /dev/null and b/public/guides/icons/sub_cats/23_s.png differ diff --git a/public/guides/icons/sub_cats/24.png b/public/guides/icons/sub_cats/24.png new file mode 100644 index 000000000..381d7fa46 Binary files /dev/null and b/public/guides/icons/sub_cats/24.png differ diff --git a/public/guides/icons/sub_cats/24_s.png b/public/guides/icons/sub_cats/24_s.png new file mode 100644 index 000000000..4b366757d Binary files /dev/null and b/public/guides/icons/sub_cats/24_s.png differ diff --git a/public/guides/icons/sub_cats/25.png b/public/guides/icons/sub_cats/25.png new file mode 100644 index 000000000..a825e1b50 Binary files /dev/null and b/public/guides/icons/sub_cats/25.png differ diff --git a/public/guides/icons/sub_cats/25_s.png b/public/guides/icons/sub_cats/25_s.png new file mode 100644 index 000000000..96734bf0f Binary files /dev/null and b/public/guides/icons/sub_cats/25_s.png differ diff --git a/public/guides/icons/sub_cats/26.png b/public/guides/icons/sub_cats/26.png new file mode 100644 index 000000000..f642f7652 Binary files /dev/null and b/public/guides/icons/sub_cats/26.png differ diff --git a/public/guides/icons/sub_cats/26_s.png b/public/guides/icons/sub_cats/26_s.png new file mode 100644 index 000000000..7db54086e Binary files /dev/null and b/public/guides/icons/sub_cats/26_s.png differ diff --git a/public/guides/icons/sub_cats/27.png b/public/guides/icons/sub_cats/27.png new file mode 100644 index 000000000..44be04a10 Binary files /dev/null and b/public/guides/icons/sub_cats/27.png differ diff --git a/public/guides/icons/sub_cats/27_s.png b/public/guides/icons/sub_cats/27_s.png new file mode 100644 index 000000000..27dee1e04 Binary files /dev/null and b/public/guides/icons/sub_cats/27_s.png differ diff --git a/public/guides/icons/sub_cats/28.png b/public/guides/icons/sub_cats/28.png new file mode 100644 index 000000000..c9b01db01 Binary files /dev/null and b/public/guides/icons/sub_cats/28.png differ diff --git a/public/guides/icons/sub_cats/28_s.png b/public/guides/icons/sub_cats/28_s.png new file mode 100644 index 000000000..acd3d2f1c Binary files /dev/null and b/public/guides/icons/sub_cats/28_s.png differ diff --git a/public/guides/icons/sub_cats/29.png b/public/guides/icons/sub_cats/29.png new file mode 100644 index 000000000..d42fe4c14 Binary files /dev/null and b/public/guides/icons/sub_cats/29.png differ diff --git a/public/guides/icons/sub_cats/29_s.png b/public/guides/icons/sub_cats/29_s.png new file mode 100644 index 000000000..09cb113c2 Binary files /dev/null and b/public/guides/icons/sub_cats/29_s.png differ diff --git a/public/guides/icons/sub_cats/2_s.png b/public/guides/icons/sub_cats/2_s.png new file mode 100644 index 000000000..5c85a1b95 Binary files /dev/null and b/public/guides/icons/sub_cats/2_s.png differ diff --git a/public/guides/icons/sub_cats/3.png b/public/guides/icons/sub_cats/3.png new file mode 100644 index 000000000..70ae5a9c7 Binary files /dev/null and b/public/guides/icons/sub_cats/3.png differ diff --git a/public/guides/icons/sub_cats/30.png b/public/guides/icons/sub_cats/30.png new file mode 100644 index 000000000..b94497fa7 Binary files /dev/null and b/public/guides/icons/sub_cats/30.png differ diff --git a/public/guides/icons/sub_cats/30_s.png b/public/guides/icons/sub_cats/30_s.png new file mode 100644 index 000000000..ea0eac308 Binary files /dev/null and b/public/guides/icons/sub_cats/30_s.png differ diff --git a/public/guides/icons/sub_cats/31.png b/public/guides/icons/sub_cats/31.png new file mode 100644 index 000000000..823bd584f Binary files /dev/null and b/public/guides/icons/sub_cats/31.png differ diff --git a/public/guides/icons/sub_cats/31_s.png b/public/guides/icons/sub_cats/31_s.png new file mode 100644 index 000000000..9fb3ed6c0 Binary files /dev/null and b/public/guides/icons/sub_cats/31_s.png differ diff --git a/public/guides/icons/sub_cats/32.png b/public/guides/icons/sub_cats/32.png new file mode 100644 index 000000000..4e96affbd Binary files /dev/null and b/public/guides/icons/sub_cats/32.png differ diff --git a/public/guides/icons/sub_cats/32_s.png b/public/guides/icons/sub_cats/32_s.png new file mode 100644 index 000000000..dfc713c6e Binary files /dev/null and b/public/guides/icons/sub_cats/32_s.png differ diff --git a/public/guides/icons/sub_cats/33.png b/public/guides/icons/sub_cats/33.png new file mode 100644 index 000000000..10c32fe7c Binary files /dev/null and b/public/guides/icons/sub_cats/33.png differ diff --git a/public/guides/icons/sub_cats/33_s.png b/public/guides/icons/sub_cats/33_s.png new file mode 100644 index 000000000..574ed4bb7 Binary files /dev/null and b/public/guides/icons/sub_cats/33_s.png differ diff --git a/public/guides/icons/sub_cats/34.png b/public/guides/icons/sub_cats/34.png new file mode 100644 index 000000000..a2ebae820 Binary files /dev/null and b/public/guides/icons/sub_cats/34.png differ diff --git a/public/guides/icons/sub_cats/34_s.png b/public/guides/icons/sub_cats/34_s.png new file mode 100644 index 000000000..d88882066 Binary files /dev/null and b/public/guides/icons/sub_cats/34_s.png differ diff --git a/public/guides/icons/sub_cats/35.png b/public/guides/icons/sub_cats/35.png new file mode 100644 index 000000000..d66318c6b Binary files /dev/null and b/public/guides/icons/sub_cats/35.png differ diff --git a/public/guides/icons/sub_cats/35_s.png b/public/guides/icons/sub_cats/35_s.png new file mode 100644 index 000000000..26b8aca4e Binary files /dev/null and b/public/guides/icons/sub_cats/35_s.png differ diff --git a/public/guides/icons/sub_cats/36.png b/public/guides/icons/sub_cats/36.png new file mode 100644 index 000000000..fb5553a0b Binary files /dev/null and b/public/guides/icons/sub_cats/36.png differ diff --git a/public/guides/icons/sub_cats/36_s.png b/public/guides/icons/sub_cats/36_s.png new file mode 100644 index 000000000..878bf649f Binary files /dev/null and b/public/guides/icons/sub_cats/36_s.png differ diff --git a/public/guides/icons/sub_cats/37.png b/public/guides/icons/sub_cats/37.png new file mode 100644 index 000000000..034877117 Binary files /dev/null and b/public/guides/icons/sub_cats/37.png differ diff --git a/public/guides/icons/sub_cats/37_s.png b/public/guides/icons/sub_cats/37_s.png new file mode 100644 index 000000000..e9871b16a Binary files /dev/null and b/public/guides/icons/sub_cats/37_s.png differ diff --git a/public/guides/icons/sub_cats/38.png b/public/guides/icons/sub_cats/38.png new file mode 100644 index 000000000..3f78c5301 Binary files /dev/null and b/public/guides/icons/sub_cats/38.png differ diff --git a/public/guides/icons/sub_cats/38_s.png b/public/guides/icons/sub_cats/38_s.png new file mode 100644 index 000000000..97d4b1889 Binary files /dev/null and b/public/guides/icons/sub_cats/38_s.png differ diff --git a/public/guides/icons/sub_cats/39.png b/public/guides/icons/sub_cats/39.png new file mode 100644 index 000000000..cf6d5628a Binary files /dev/null and b/public/guides/icons/sub_cats/39.png differ diff --git a/public/guides/icons/sub_cats/39_s.png b/public/guides/icons/sub_cats/39_s.png new file mode 100644 index 000000000..90da63614 Binary files /dev/null and b/public/guides/icons/sub_cats/39_s.png differ diff --git a/public/guides/icons/sub_cats/3_s.png b/public/guides/icons/sub_cats/3_s.png new file mode 100644 index 000000000..5291411ff Binary files /dev/null and b/public/guides/icons/sub_cats/3_s.png differ diff --git a/public/guides/icons/sub_cats/4.png b/public/guides/icons/sub_cats/4.png new file mode 100644 index 000000000..9bb6798e6 Binary files /dev/null and b/public/guides/icons/sub_cats/4.png differ diff --git a/public/guides/icons/sub_cats/40.png b/public/guides/icons/sub_cats/40.png new file mode 100644 index 000000000..bd200a6db Binary files /dev/null and b/public/guides/icons/sub_cats/40.png differ diff --git a/public/guides/icons/sub_cats/40_s.png b/public/guides/icons/sub_cats/40_s.png new file mode 100644 index 000000000..3ee99fa7e Binary files /dev/null and b/public/guides/icons/sub_cats/40_s.png differ diff --git a/public/guides/icons/sub_cats/41.png b/public/guides/icons/sub_cats/41.png new file mode 100644 index 000000000..3ba95f519 Binary files /dev/null and b/public/guides/icons/sub_cats/41.png differ diff --git a/public/guides/icons/sub_cats/41_s.png b/public/guides/icons/sub_cats/41_s.png new file mode 100644 index 000000000..334406c13 Binary files /dev/null and b/public/guides/icons/sub_cats/41_s.png differ diff --git a/public/guides/icons/sub_cats/42.png b/public/guides/icons/sub_cats/42.png new file mode 100644 index 000000000..636a7ffe1 Binary files /dev/null and b/public/guides/icons/sub_cats/42.png differ diff --git a/public/guides/icons/sub_cats/42_s.png b/public/guides/icons/sub_cats/42_s.png new file mode 100644 index 000000000..de2850cba Binary files /dev/null and b/public/guides/icons/sub_cats/42_s.png differ diff --git a/public/guides/icons/sub_cats/43.png b/public/guides/icons/sub_cats/43.png new file mode 100644 index 000000000..8612f2dc4 Binary files /dev/null and b/public/guides/icons/sub_cats/43.png differ diff --git a/public/guides/icons/sub_cats/43_s.png b/public/guides/icons/sub_cats/43_s.png new file mode 100644 index 000000000..410488535 Binary files /dev/null and b/public/guides/icons/sub_cats/43_s.png differ diff --git a/public/guides/icons/sub_cats/44.png b/public/guides/icons/sub_cats/44.png new file mode 100644 index 000000000..1d8a8d97f Binary files /dev/null and b/public/guides/icons/sub_cats/44.png differ diff --git a/public/guides/icons/sub_cats/44_s.png b/public/guides/icons/sub_cats/44_s.png new file mode 100644 index 000000000..3064f4084 Binary files /dev/null and b/public/guides/icons/sub_cats/44_s.png differ diff --git a/public/guides/icons/sub_cats/45.png b/public/guides/icons/sub_cats/45.png new file mode 100644 index 000000000..93d6fd266 Binary files /dev/null and b/public/guides/icons/sub_cats/45.png differ diff --git a/public/guides/icons/sub_cats/45_s.png b/public/guides/icons/sub_cats/45_s.png new file mode 100644 index 000000000..2da8023f2 Binary files /dev/null and b/public/guides/icons/sub_cats/45_s.png differ diff --git a/public/guides/icons/sub_cats/46.png b/public/guides/icons/sub_cats/46.png new file mode 100644 index 000000000..ecad28eb0 Binary files /dev/null and b/public/guides/icons/sub_cats/46.png differ diff --git a/public/guides/icons/sub_cats/46_s.png b/public/guides/icons/sub_cats/46_s.png new file mode 100644 index 000000000..8746c25b6 Binary files /dev/null and b/public/guides/icons/sub_cats/46_s.png differ diff --git a/public/guides/icons/sub_cats/47.png b/public/guides/icons/sub_cats/47.png new file mode 100644 index 000000000..bfed04ac5 Binary files /dev/null and b/public/guides/icons/sub_cats/47.png differ diff --git a/public/guides/icons/sub_cats/47_s.png b/public/guides/icons/sub_cats/47_s.png new file mode 100644 index 000000000..36c0e5456 Binary files /dev/null and b/public/guides/icons/sub_cats/47_s.png differ diff --git a/public/guides/icons/sub_cats/48.png b/public/guides/icons/sub_cats/48.png new file mode 100644 index 000000000..1127c622a Binary files /dev/null and b/public/guides/icons/sub_cats/48.png differ diff --git a/public/guides/icons/sub_cats/48_s.png b/public/guides/icons/sub_cats/48_s.png new file mode 100644 index 000000000..460703e59 Binary files /dev/null and b/public/guides/icons/sub_cats/48_s.png differ diff --git a/public/guides/icons/sub_cats/49.png b/public/guides/icons/sub_cats/49.png new file mode 100644 index 000000000..4a4eac132 Binary files /dev/null and b/public/guides/icons/sub_cats/49.png differ diff --git a/public/guides/icons/sub_cats/49_s.png b/public/guides/icons/sub_cats/49_s.png new file mode 100644 index 000000000..8632b92d6 Binary files /dev/null and b/public/guides/icons/sub_cats/49_s.png differ diff --git a/public/guides/icons/sub_cats/4_s.png b/public/guides/icons/sub_cats/4_s.png new file mode 100644 index 000000000..3932d15fb Binary files /dev/null and b/public/guides/icons/sub_cats/4_s.png differ diff --git a/public/guides/icons/sub_cats/5.png b/public/guides/icons/sub_cats/5.png new file mode 100644 index 000000000..855d741a5 Binary files /dev/null and b/public/guides/icons/sub_cats/5.png differ diff --git a/public/guides/icons/sub_cats/50.png b/public/guides/icons/sub_cats/50.png new file mode 100644 index 000000000..ebccc204d Binary files /dev/null and b/public/guides/icons/sub_cats/50.png differ diff --git a/public/guides/icons/sub_cats/50_s.png b/public/guides/icons/sub_cats/50_s.png new file mode 100644 index 000000000..0b2e1df29 Binary files /dev/null and b/public/guides/icons/sub_cats/50_s.png differ diff --git a/public/guides/icons/sub_cats/51.png b/public/guides/icons/sub_cats/51.png new file mode 100644 index 000000000..602654f3d Binary files /dev/null and b/public/guides/icons/sub_cats/51.png differ diff --git a/public/guides/icons/sub_cats/51_s.png b/public/guides/icons/sub_cats/51_s.png new file mode 100644 index 000000000..7b05275cb Binary files /dev/null and b/public/guides/icons/sub_cats/51_s.png differ diff --git a/public/guides/icons/sub_cats/52.png b/public/guides/icons/sub_cats/52.png new file mode 100644 index 000000000..5e2117412 Binary files /dev/null and b/public/guides/icons/sub_cats/52.png differ diff --git a/public/guides/icons/sub_cats/52_s.png b/public/guides/icons/sub_cats/52_s.png new file mode 100644 index 000000000..7f6cc0b7f Binary files /dev/null and b/public/guides/icons/sub_cats/52_s.png differ diff --git a/public/guides/icons/sub_cats/53.png b/public/guides/icons/sub_cats/53.png new file mode 100644 index 000000000..c21976d90 Binary files /dev/null and b/public/guides/icons/sub_cats/53.png differ diff --git a/public/guides/icons/sub_cats/53_s.png b/public/guides/icons/sub_cats/53_s.png new file mode 100644 index 000000000..e5994679c Binary files /dev/null and b/public/guides/icons/sub_cats/53_s.png differ diff --git a/public/guides/icons/sub_cats/54.png b/public/guides/icons/sub_cats/54.png new file mode 100644 index 000000000..2f1debedf Binary files /dev/null and b/public/guides/icons/sub_cats/54.png differ diff --git a/public/guides/icons/sub_cats/54_s.png b/public/guides/icons/sub_cats/54_s.png new file mode 100644 index 000000000..5f7df01a1 Binary files /dev/null and b/public/guides/icons/sub_cats/54_s.png differ diff --git a/public/guides/icons/sub_cats/55.png b/public/guides/icons/sub_cats/55.png new file mode 100644 index 000000000..2937009d1 Binary files /dev/null and b/public/guides/icons/sub_cats/55.png differ diff --git a/public/guides/icons/sub_cats/55_s.png b/public/guides/icons/sub_cats/55_s.png new file mode 100644 index 000000000..edb4873bd Binary files /dev/null and b/public/guides/icons/sub_cats/55_s.png differ diff --git a/public/guides/icons/sub_cats/56.png b/public/guides/icons/sub_cats/56.png new file mode 100644 index 000000000..f907d8720 Binary files /dev/null and b/public/guides/icons/sub_cats/56.png differ diff --git a/public/guides/icons/sub_cats/56_s.png b/public/guides/icons/sub_cats/56_s.png new file mode 100644 index 000000000..415bba7c2 Binary files /dev/null and b/public/guides/icons/sub_cats/56_s.png differ diff --git a/public/guides/icons/sub_cats/57.png b/public/guides/icons/sub_cats/57.png new file mode 100644 index 000000000..c815e5b0f Binary files /dev/null and b/public/guides/icons/sub_cats/57.png differ diff --git a/public/guides/icons/sub_cats/57_s.png b/public/guides/icons/sub_cats/57_s.png new file mode 100644 index 000000000..92acc95d0 Binary files /dev/null and b/public/guides/icons/sub_cats/57_s.png differ diff --git a/public/guides/icons/sub_cats/58.png b/public/guides/icons/sub_cats/58.png new file mode 100644 index 000000000..aa4511b7d Binary files /dev/null and b/public/guides/icons/sub_cats/58.png differ diff --git a/public/guides/icons/sub_cats/58_s.png b/public/guides/icons/sub_cats/58_s.png new file mode 100644 index 000000000..7cf3151eb Binary files /dev/null and b/public/guides/icons/sub_cats/58_s.png differ diff --git a/public/guides/icons/sub_cats/59.png b/public/guides/icons/sub_cats/59.png new file mode 100644 index 000000000..82c2dc5d2 Binary files /dev/null and b/public/guides/icons/sub_cats/59.png differ diff --git a/public/guides/icons/sub_cats/59_s.png b/public/guides/icons/sub_cats/59_s.png new file mode 100644 index 000000000..fd00d8d6a Binary files /dev/null and b/public/guides/icons/sub_cats/59_s.png differ diff --git a/public/guides/icons/sub_cats/5_s.png b/public/guides/icons/sub_cats/5_s.png new file mode 100644 index 000000000..26a78bafb Binary files /dev/null and b/public/guides/icons/sub_cats/5_s.png differ diff --git a/public/guides/icons/sub_cats/6.png b/public/guides/icons/sub_cats/6.png new file mode 100644 index 000000000..18b55ba42 Binary files /dev/null and b/public/guides/icons/sub_cats/6.png differ diff --git a/public/guides/icons/sub_cats/60.png b/public/guides/icons/sub_cats/60.png new file mode 100644 index 000000000..a5ef3bc44 Binary files /dev/null and b/public/guides/icons/sub_cats/60.png differ diff --git a/public/guides/icons/sub_cats/60_s.png b/public/guides/icons/sub_cats/60_s.png new file mode 100644 index 000000000..1c6d6c5c6 Binary files /dev/null and b/public/guides/icons/sub_cats/60_s.png differ diff --git a/public/guides/icons/sub_cats/61.png b/public/guides/icons/sub_cats/61.png new file mode 100644 index 000000000..642e2bfb8 Binary files /dev/null and b/public/guides/icons/sub_cats/61.png differ diff --git a/public/guides/icons/sub_cats/61_s.png b/public/guides/icons/sub_cats/61_s.png new file mode 100644 index 000000000..eee6a2b62 Binary files /dev/null and b/public/guides/icons/sub_cats/61_s.png differ diff --git a/public/guides/icons/sub_cats/62.png b/public/guides/icons/sub_cats/62.png new file mode 100644 index 000000000..a5ff35b9e Binary files /dev/null and b/public/guides/icons/sub_cats/62.png differ diff --git a/public/guides/icons/sub_cats/62_s.png b/public/guides/icons/sub_cats/62_s.png new file mode 100644 index 000000000..c9b75f1d5 Binary files /dev/null and b/public/guides/icons/sub_cats/62_s.png differ diff --git a/public/guides/icons/sub_cats/63.png b/public/guides/icons/sub_cats/63.png new file mode 100644 index 000000000..509014195 Binary files /dev/null and b/public/guides/icons/sub_cats/63.png differ diff --git a/public/guides/icons/sub_cats/63_s.png b/public/guides/icons/sub_cats/63_s.png new file mode 100644 index 000000000..607287f03 Binary files /dev/null and b/public/guides/icons/sub_cats/63_s.png differ diff --git a/public/guides/icons/sub_cats/64.png b/public/guides/icons/sub_cats/64.png new file mode 100644 index 000000000..119f4f32c Binary files /dev/null and b/public/guides/icons/sub_cats/64.png differ diff --git a/public/guides/icons/sub_cats/64_s.png b/public/guides/icons/sub_cats/64_s.png new file mode 100644 index 000000000..cc2b81bf2 Binary files /dev/null and b/public/guides/icons/sub_cats/64_s.png differ diff --git a/public/guides/icons/sub_cats/65.png b/public/guides/icons/sub_cats/65.png new file mode 100644 index 000000000..898268542 Binary files /dev/null and b/public/guides/icons/sub_cats/65.png differ diff --git a/public/guides/icons/sub_cats/65_s.png b/public/guides/icons/sub_cats/65_s.png new file mode 100644 index 000000000..59acafaac Binary files /dev/null and b/public/guides/icons/sub_cats/65_s.png differ diff --git a/public/guides/icons/sub_cats/6_s.png b/public/guides/icons/sub_cats/6_s.png new file mode 100644 index 000000000..82fc68501 Binary files /dev/null and b/public/guides/icons/sub_cats/6_s.png differ diff --git a/public/guides/icons/sub_cats/7.png b/public/guides/icons/sub_cats/7.png new file mode 100644 index 000000000..10b212d7d Binary files /dev/null and b/public/guides/icons/sub_cats/7.png differ diff --git a/public/guides/icons/sub_cats/7_s.png b/public/guides/icons/sub_cats/7_s.png new file mode 100644 index 000000000..159121b2e Binary files /dev/null and b/public/guides/icons/sub_cats/7_s.png differ diff --git a/public/guides/icons/sub_cats/8.png b/public/guides/icons/sub_cats/8.png new file mode 100644 index 000000000..972c291ab Binary files /dev/null and b/public/guides/icons/sub_cats/8.png differ diff --git a/public/guides/icons/sub_cats/8_s.png b/public/guides/icons/sub_cats/8_s.png new file mode 100644 index 000000000..c06298250 Binary files /dev/null and b/public/guides/icons/sub_cats/8_s.png differ diff --git a/public/guides/icons/sub_cats/9.png b/public/guides/icons/sub_cats/9.png new file mode 100644 index 000000000..9f5fc25e5 Binary files /dev/null and b/public/guides/icons/sub_cats/9.png differ diff --git a/public/guides/icons/sub_cats/9_s.png b/public/guides/icons/sub_cats/9_s.png new file mode 100644 index 000000000..1462ba0f6 Binary files /dev/null and b/public/guides/icons/sub_cats/9_s.png differ diff --git a/public/guides/icons/unknown.png b/public/guides/icons/unknown.png new file mode 100644 index 000000000..e05648a94 Binary files /dev/null and b/public/guides/icons/unknown.png differ diff --git a/public/guides/icons/unknown_s.png b/public/guides/icons/unknown_s.png new file mode 100644 index 000000000..1b5472fba Binary files /dev/null and b/public/guides/icons/unknown_s.png differ diff --git a/public/guides/icons/woman_style/1.png b/public/guides/icons/woman_style/1.png new file mode 100644 index 000000000..907d8a1a4 Binary files /dev/null and b/public/guides/icons/woman_style/1.png differ diff --git a/public/guides/icons/woman_style/10.png b/public/guides/icons/woman_style/10.png new file mode 100644 index 000000000..00388ae8b Binary files /dev/null and b/public/guides/icons/woman_style/10.png differ diff --git a/public/guides/icons/woman_style/10_s.png b/public/guides/icons/woman_style/10_s.png new file mode 100644 index 000000000..e69a31680 Binary files /dev/null and b/public/guides/icons/woman_style/10_s.png differ diff --git a/public/guides/icons/woman_style/11.png b/public/guides/icons/woman_style/11.png new file mode 100644 index 000000000..c66e74f09 Binary files /dev/null and b/public/guides/icons/woman_style/11.png differ diff --git a/public/guides/icons/woman_style/11_s.png b/public/guides/icons/woman_style/11_s.png new file mode 100644 index 000000000..eeda5b14a Binary files /dev/null and b/public/guides/icons/woman_style/11_s.png differ diff --git a/public/guides/icons/woman_style/12.png b/public/guides/icons/woman_style/12.png new file mode 100644 index 000000000..f94de8727 Binary files /dev/null and b/public/guides/icons/woman_style/12.png differ diff --git a/public/guides/icons/woman_style/12_s.png b/public/guides/icons/woman_style/12_s.png new file mode 100644 index 000000000..f6f7f1b41 Binary files /dev/null and b/public/guides/icons/woman_style/12_s.png differ diff --git a/public/guides/icons/woman_style/13.png b/public/guides/icons/woman_style/13.png new file mode 100644 index 000000000..414f387c6 Binary files /dev/null and b/public/guides/icons/woman_style/13.png differ diff --git a/public/guides/icons/woman_style/13_s.png b/public/guides/icons/woman_style/13_s.png new file mode 100644 index 000000000..50b31e87f Binary files /dev/null and b/public/guides/icons/woman_style/13_s.png differ diff --git a/public/guides/icons/woman_style/1_s.png b/public/guides/icons/woman_style/1_s.png new file mode 100644 index 000000000..0811c5b19 Binary files /dev/null and b/public/guides/icons/woman_style/1_s.png differ diff --git a/public/guides/icons/woman_style/2.png b/public/guides/icons/woman_style/2.png new file mode 100644 index 000000000..f513bbaf0 Binary files /dev/null and b/public/guides/icons/woman_style/2.png differ diff --git a/public/guides/icons/woman_style/2_s.png b/public/guides/icons/woman_style/2_s.png new file mode 100644 index 000000000..e074c2833 Binary files /dev/null and b/public/guides/icons/woman_style/2_s.png differ diff --git a/public/guides/icons/woman_style/3.png b/public/guides/icons/woman_style/3.png new file mode 100644 index 000000000..50097fded Binary files /dev/null and b/public/guides/icons/woman_style/3.png differ diff --git a/public/guides/icons/woman_style/3_s.png b/public/guides/icons/woman_style/3_s.png new file mode 100644 index 000000000..09678fd70 Binary files /dev/null and b/public/guides/icons/woman_style/3_s.png differ diff --git a/public/guides/icons/woman_style/4.png b/public/guides/icons/woman_style/4.png new file mode 100644 index 000000000..aed8dfc1c Binary files /dev/null and b/public/guides/icons/woman_style/4.png differ diff --git a/public/guides/icons/woman_style/4_s.png b/public/guides/icons/woman_style/4_s.png new file mode 100644 index 000000000..bbc606ab2 Binary files /dev/null and b/public/guides/icons/woman_style/4_s.png differ diff --git a/public/guides/icons/woman_style/5.png b/public/guides/icons/woman_style/5.png new file mode 100644 index 000000000..8f4646552 Binary files /dev/null and b/public/guides/icons/woman_style/5.png differ diff --git a/public/guides/icons/woman_style/5_s.png b/public/guides/icons/woman_style/5_s.png new file mode 100644 index 000000000..19dbc68a9 Binary files /dev/null and b/public/guides/icons/woman_style/5_s.png differ diff --git a/public/guides/icons/woman_style/6.png b/public/guides/icons/woman_style/6.png new file mode 100644 index 000000000..c0a87d706 Binary files /dev/null and b/public/guides/icons/woman_style/6.png differ diff --git a/public/guides/icons/woman_style/6_s.png b/public/guides/icons/woman_style/6_s.png new file mode 100644 index 000000000..18a6e15f7 Binary files /dev/null and b/public/guides/icons/woman_style/6_s.png differ diff --git a/public/guides/icons/woman_style/7.png b/public/guides/icons/woman_style/7.png new file mode 100644 index 000000000..558b919e2 Binary files /dev/null and b/public/guides/icons/woman_style/7.png differ diff --git a/public/guides/icons/woman_style/7_s.png b/public/guides/icons/woman_style/7_s.png new file mode 100644 index 000000000..a241aee8a Binary files /dev/null and b/public/guides/icons/woman_style/7_s.png differ diff --git a/public/guides/icons/woman_style/8.png b/public/guides/icons/woman_style/8.png new file mode 100644 index 000000000..772461a56 Binary files /dev/null and b/public/guides/icons/woman_style/8.png differ diff --git a/public/guides/icons/woman_style/8_s.png b/public/guides/icons/woman_style/8_s.png new file mode 100644 index 000000000..17185e628 Binary files /dev/null and b/public/guides/icons/woman_style/8_s.png differ diff --git a/public/guides/icons/woman_style/9.png b/public/guides/icons/woman_style/9.png new file mode 100644 index 000000000..2d020cba5 Binary files /dev/null and b/public/guides/icons/woman_style/9.png differ diff --git a/public/guides/icons/woman_style/9_s.png b/public/guides/icons/woman_style/9_s.png new file mode 100644 index 000000000..323d00e06 Binary files /dev/null and b/public/guides/icons/woman_style/9_s.png differ diff --git a/public/ico/box.png b/public/ico/box.png new file mode 100644 index 000000000..8b6f9aa85 Binary files /dev/null and b/public/ico/box.png differ diff --git a/public/ico/cloud-upload.png b/public/ico/cloud-upload.png new file mode 100644 index 000000000..abd927662 Binary files /dev/null and b/public/ico/cloud-upload.png differ diff --git a/public/ico/cloud-uploading.png b/public/ico/cloud-uploading.png new file mode 100644 index 000000000..a8541fec1 Binary files /dev/null and b/public/ico/cloud-uploading.png differ diff --git a/public/ico/info.png b/public/ico/info.png new file mode 100644 index 000000000..80ee11c31 Binary files /dev/null and b/public/ico/info.png differ diff --git a/public/ico/outline-off.png b/public/ico/outline-off.png new file mode 100644 index 000000000..25641aec0 Binary files /dev/null and b/public/ico/outline-off.png differ diff --git a/public/ico/user.png b/public/ico/user.png new file mode 100644 index 000000000..41b069c1c Binary files /dev/null and b/public/ico/user.png differ diff --git a/public/index.html b/public/index.html index 42d0ee1c4..b687c764b 100644 --- a/public/index.html +++ b/public/index.html @@ -1,32 +1,52 @@ - + + + - + - gtag('config', 'UA-155837750-1'); - - - - - - - - - - - - Make Sense - - - - -
- - + --> diff --git a/public/showniq-icon.png b/public/showniq-icon.png new file mode 100644 index 000000000..18741adbd Binary files /dev/null and b/public/showniq-icon.png differ diff --git a/resizeImage.py b/resizeImage.py new file mode 100644 index 000000000..2275825ef --- /dev/null +++ b/resizeImage.py @@ -0,0 +1,29 @@ +from PIL import Image +import os, sys + +dir_path = "./public/guides/icons" + +def resize_im(path, size=(96,96)): + if os.path.isfile(path): + im = Image.open(path).resize(size, Image.ANTIALIAS) + im.save(path) + # parent_dir = os.path.dirname(path) + # img_name = os.path.basename(path).split('.')[0] + # im.save(os.path.join(parent_dir, img_name + 'r.jpg'), 'JPEG', quality=90) + +def resize_all(mydir): + for subdir , _ , fileList in os.walk(mydir): + for f in fileList: + try: + full_path = os.path.join(subdir,f) + if(full_path.endswith("_s.png")): + resize_im(full_path) + elif(full_path.endswith(".png")): + resize_im(full_path, size=(300, 300)) + else: + print("Not a png file: " + full_path) + except Exception as e: + print('Unable to resize %s. Skipping.' % full_path) + +if __name__ == '__main__': + resize_all(dir_path) \ No newline at end of file diff --git a/src/App.scss b/src/App.scss index 82b954c90..0e041fadc 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,13 +1,19 @@ @import './settings/_Settings'; .App { - --leading-color: #{$secondaryColor}; - --button-text-color: #{white}; - --hue-value: 172deg; + --leading-color: #{$secondaryColor}; + --button-text-color: #{white}; + --hue-value: 172deg; + --red-value: -15deg; + --green-value: 35deg; + position: relative; + margin-left: auto; + margin-right: auto; + max-width: 3840px; } .App.AI { - --leading-color: #{$primaryColor}; - --button-text-color: #{$darkThemeSecondColor}; - --hue-value: 120deg; -} \ No newline at end of file + --leading-color: #{$primaryColor}; + --button-text-color: #{$darkThemeSecondColor}; + --hue-value: 120deg; +} diff --git a/src/App.tsx b/src/App.tsx index b7705d05b..c03b768f0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {useEffect, useState} from 'react'; import './App.scss'; import EditorView from './views/EditorView/EditorView'; import MainView from './views/MainView/MainView'; @@ -13,47 +13,91 @@ import {SizeItUpView} from './views/SizeItUpView/SizeItUpView'; import {PlatformModel} from './staticModels/PlatformModel'; import classNames from 'classnames'; import NotificationsView from './views/NotificationsView/NotificationsView'; +import {updateActivePopupType} from './store/general/actionCreators'; +import {PopupWindowType} from './data/enums/PopupWindowType'; +import {updateAuthData} from './store/auth/actionCreators'; +import {AuthData} from './store/auth/types'; interface IProps { projectType: ProjectType; windowSize: ISize; ObjectDetectorLoaded: boolean; PoseDetectionLoaded: boolean; + updateAuthDataAction: (authData: AuthData) => any; + updateActivePopupTypeAction: (type: PopupWindowType) => void; + authData: AuthData; } -const App: React.FC = ({projectType, windowSize, ObjectDetectorLoaded, PoseDetectionLoaded}) => { +const App: React.FC = ({ + projectType, + windowSize, + ObjectDetectorLoaded, + PoseDetectionLoaded, + updateAuthDataAction, + updateActivePopupTypeAction, + authData +}) => { + + useEffect(() => { + const auth: AuthData = JSON.parse( + window.localStorage.getItem('@@auth') + ); + // console.log('auth = ', auth); + if (!auth) { + updateActivePopupTypeAction(PopupWindowType.LOGIN); + } else { + updateAuthDataAction(auth); + } + + return () => { + // second + }; + }, [authData.authToken]); + const selectRoute = () => { - if (!!PlatformModel.mobileDeviceData.manufacturer && !!PlatformModel.mobileDeviceData.os) - return ; - if (!projectType) - return ; + + if ( + !!PlatformModel.mobileDeviceData.manufacturer && + !!PlatformModel.mobileDeviceData.os + ) + return ; + if (!projectType) return ; else { - if (windowSize.height < Settings.EDITOR_MIN_HEIGHT || windowSize.width < Settings.EDITOR_MIN_WIDTH) { - return ; + if ( + windowSize.height < Settings.EDITOR_MIN_HEIGHT || + windowSize.width < Settings.EDITOR_MIN_WIDTH + ) { + return ; } else { - return ; + return ; } } }; - return ( -
+ return ( +
{selectRoute()} - - + +
- ); + ); +}; + +const mapDispatchToProps = { + updateAuthDataAction: updateAuthData, + updateActivePopupTypeAction: updateActivePopupType }; const mapStateToProps = (state: AppState) => ({ projectType: state.general.projectData.type, windowSize: state.general.windowSize, ObjectDetectorLoaded: state.ai.isObjectDetectorLoaded, - PoseDetectionLoaded: state.ai.isPoseDetectorLoaded + PoseDetectionLoaded: state.ai.isPoseDetectorLoaded, + authData: state.auth.authData }); -export default connect( - mapStateToProps -)(App); +export default connect(mapStateToProps, mapDispatchToProps)(App); diff --git a/src/assets/icons/LogoLogin.svg b/src/assets/icons/LogoLogin.svg new file mode 100644 index 000000000..bb751c4b6 --- /dev/null +++ b/src/assets/icons/LogoLogin.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/MoveIcon.svg b/src/assets/icons/MoveIcon.svg new file mode 100644 index 000000000..d67400f17 --- /dev/null +++ b/src/assets/icons/MoveIcon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/TextLogin.svg b/src/assets/icons/TextLogin.svg new file mode 100644 index 000000000..e227929ab --- /dev/null +++ b/src/assets/icons/TextLogin.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/bi_eye.svg b/src/assets/icons/bi_eye.svg new file mode 100644 index 000000000..8bb2f53e3 --- /dev/null +++ b/src/assets/icons/bi_eye.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/chevron-right-black.svg b/src/assets/icons/chevron-right-black.svg new file mode 100644 index 000000000..5704297ce --- /dev/null +++ b/src/assets/icons/chevron-right-black.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/chevron-right-white.svg b/src/assets/icons/chevron-right-white.svg new file mode 100644 index 000000000..b60acb8a7 --- /dev/null +++ b/src/assets/icons/chevron-right-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/codicon_account.svg b/src/assets/icons/codicon_account.svg new file mode 100644 index 000000000..380bae5d6 --- /dev/null +++ b/src/assets/icons/codicon_account.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/flag-svgrepo-com.svg b/src/assets/icons/flag-svgrepo-com.svg new file mode 100644 index 000000000..fffa0eebe --- /dev/null +++ b/src/assets/icons/flag-svgrepo-com.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js new file mode 100644 index 000000000..9b37d5abc --- /dev/null +++ b/src/assets/icons/index.js @@ -0,0 +1,10 @@ +export { ReactComponent as IconLogo } from "./logo.svg"; +export { ReactComponent as LogoLogin } from './LogoLogin.svg' +export { ReactComponent as TextLogin } from './TextLogin.svg' +export { ReactComponent as CodiconAccount } from './codicon_account.svg' +export { ReactComponent as Eye } from './bi_eye.svg' +export { ReactComponent as MoveIcon } from './MoveIcon.svg' +export { ReactComponent as Package } from './package.svg' +export { ReactComponent as ChevronRightBlack } from './chevron-right-black.svg' +export { ReactComponent as ChevronRightWhite } from './chevron-right-white.svg' +export { ReactComponent as FlagIcon } from './flag-svgrepo-com.svg' \ No newline at end of file diff --git a/src/assets/icons/logo.svg b/src/assets/icons/logo.svg new file mode 100644 index 000000000..0a5e0cc50 --- /dev/null +++ b/src/assets/icons/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/package.svg b/src/assets/icons/package.svg new file mode 100644 index 000000000..ec3985cdd --- /dev/null +++ b/src/assets/icons/package.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/img/backgroundImage.png b/src/assets/img/backgroundImage.png new file mode 100644 index 000000000..e1a7f5c8c Binary files /dev/null and b/src/assets/img/backgroundImage.png differ diff --git a/src/assets/img/groupPeople.png b/src/assets/img/groupPeople.png new file mode 100644 index 000000000..95e3c5614 Binary files /dev/null and b/src/assets/img/groupPeople.png differ diff --git a/src/components/WrapperLogin/index.scss b/src/components/WrapperLogin/index.scss new file mode 100644 index 000000000..fa2227978 --- /dev/null +++ b/src/components/WrapperLogin/index.scss @@ -0,0 +1,27 @@ + +.login { + &__container{ + height: 100vh ; + width: 100%; + } + + &__logoLogin{ + position: absolute; + top: 70px; + left: 147px; + } + &__textImageLogin{ + position: absolute; + left: 147px; + top: 236px; + } + + + + @media screen and (max-width: 768px) { + &__parent { + min-width: 100%; + } + } +} + diff --git a/src/components/WrapperLogin/index.tsx b/src/components/WrapperLogin/index.tsx new file mode 100644 index 000000000..28c73da2a --- /dev/null +++ b/src/components/WrapperLogin/index.tsx @@ -0,0 +1,18 @@ +import React from "react"; +import { TextLogin, LogoLogin } from "../../assets/icons" +import GroupImageSrc from "../../assets/img/groupPeople.png" +import "./index.scss" +function WrapperLogin(props) { + const { children } = props + return ( + <> + + +
+ {children} + img +
+ + ); +} +export default WrapperLogin; diff --git a/src/data/ExportFormatData.ts b/src/data/ExportFormatData.ts index 540536a58..2c6181289 100644 --- a/src/data/ExportFormatData.ts +++ b/src/data/ExportFormatData.ts @@ -6,6 +6,10 @@ export type ExportFormatDataMap = Record; export const ExportFormatData: ExportFormatDataMap = { [LabelType.RECT]: [ + { + type: AnnotationFormatType.JSON, + label: 'A .zip package containing files in Custom JSON format.' + }, { type: AnnotationFormatType.YOLO, label: 'A .zip package containing files in YOLO format.' @@ -51,4 +55,4 @@ export const ExportFormatData: ExportFormatDataMap = { label: 'Single JSON file.' } ] -} +}; diff --git a/src/data/ImportFormatData.ts b/src/data/ImportFormatData.ts index 46cc6ca1d..9d04417c1 100644 --- a/src/data/ImportFormatData.ts +++ b/src/data/ImportFormatData.ts @@ -2,10 +2,14 @@ import {LabelType} from './enums/LabelType'; import {ILabelFormatData} from '../interfaces/ILabelFormatData'; import {AnnotationFormatType} from './enums/AnnotationFormatType'; -export type ImportFormatDataMap = Record +export type ImportFormatDataMap = Record; export const ImportFormatData: ImportFormatDataMap = { [LabelType.RECT]: [ + { + type: AnnotationFormatType.MJ, + label: 'Multiple files in MJ JSON format.' + }, { type: AnnotationFormatType.COCO, label: 'Single file in COCO JSON format.' @@ -24,4 +28,4 @@ export const ImportFormatData: ImportFormatDataMap = { } ], [LabelType.IMAGE_RECOGNITION]: [] -} +}; diff --git a/src/data/ImporterSpecData.ts b/src/data/ImporterSpecData.ts index c2cd3fb28..23f6b8af2 100644 --- a/src/data/ImporterSpecData.ts +++ b/src/data/ImporterSpecData.ts @@ -2,9 +2,12 @@ import {AnnotationFormatType} from './enums/AnnotationFormatType'; import {AnnotationImporter} from '../logic/import/AnnotationImporter'; import {COCOImporter} from '../logic/import/coco/COCOImporter'; import {YOLOImporter} from '../logic/import/yolo/YOLOImporter'; +import {MJImporter} from '../logic/import/MJ/MJImporter'; -export type ImporterSpecDataMap = Record; - +export type ImporterSpecDataMap = Record< + AnnotationFormatType, + typeof AnnotationImporter +>; export const ImporterSpecData: ImporterSpecDataMap = { [AnnotationFormatType.COCO]: COCOImporter, @@ -12,5 +15,6 @@ export const ImporterSpecData: ImporterSpecDataMap = { [AnnotationFormatType.JSON]: undefined, [AnnotationFormatType.VGG]: undefined, [AnnotationFormatType.VOC]: undefined, - [AnnotationFormatType.YOLO]: YOLOImporter -} + [AnnotationFormatType.YOLO]: YOLOImporter, + [AnnotationFormatType.MJ]: MJImporter +}; diff --git a/src/data/enums/AnnotationFormatType.ts b/src/data/enums/AnnotationFormatType.ts index 2e98b2485..f3199fbc1 100644 --- a/src/data/enums/AnnotationFormatType.ts +++ b/src/data/enums/AnnotationFormatType.ts @@ -4,5 +4,6 @@ export enum AnnotationFormatType { CSV = 'CSV', JSON = 'JSON', VOC = 'VOC', - VGG = 'VGG' -} \ No newline at end of file + VGG = 'VGG', + MJ = 'MJ' +} diff --git a/src/data/enums/ContextType.ts b/src/data/enums/ContextType.ts index c806707c4..baf220127 100644 --- a/src/data/enums/ContextType.ts +++ b/src/data/enums/ContextType.ts @@ -1,7 +1,8 @@ export enum ContextType { - EDITOR = "EDITOR", - LEFT_NAVBAR = "LEFT_NAVBAR", - RIGHT_NAVBAR = "RIGHT_NAVBAR", - POPUP = "POPUP", - DROPDOWN = "DROPDOWN" -} \ No newline at end of file + EDITOR = 'EDITOR', + LEFT_NAVBAR = 'LEFT_NAVBAR', + GUIDE_NAVBAR = 'GUIDE_NAVBAR', + RIGHT_NAVBAR = 'RIGHT_NAVBAR', + POPUP = 'POPUP', + DROPDOWN = 'DROPDOWN' +} diff --git a/src/data/enums/ItemType.ts b/src/data/enums/ItemType.ts new file mode 100644 index 000000000..98e46c527 --- /dev/null +++ b/src/data/enums/ItemType.ts @@ -0,0 +1,500 @@ +import _ from 'lodash'; + +export enum ATTRIBUTE_TYPE { + GENDER = 'GENDER', + SOURCE = 'SOURCE', + FASHION_STYLE = 'FASHION_STYLE', + MAIN_CATEGORY = 'MAIN_CATEGORY', + SUB_CATEGORY = 'SUB_CATEGORY', + ITEM_COLOR = 'ITEM_COLOR', + ITEM_PATTERN = 'ITEM_PATTERN', + HUMAN_ID = 'HUMAN_ID', + GENDER_SCORE = 'GENDER_SCORE', + STYLE_SCORE = 'STYLE_SCORE', + ITEM_SCORE = 'ITEM_SCORE', + COLOR_SCORE = 'COLOR_SCORE', + PATTERN_SCORE = 'PATTERN_SCORE', +} + +export const GENDER = { + MAN: 1, + WOMAN: 2, + UNKNOWN: -1 +}; + +export const GENDER_CODE = { + '1': 'MAN', + '2': 'WOMAN', + '-1': 'UNKNOWN' +}; + +export const SOURCE = { + HUMAN: 0, + MANNEQUIN: 1, + STYLEBOOK: 2, + UNKNOWN: -1 +}; + +export const SOURCE_CODE = { + 0: 'HUMAN', + 1: 'MANNEQUIN', + 2: 'STYLEBOOK', + '-1': 'UNKNOWN' +}; + +export const FASHION_STYLE = [ + { + seq: 18, + name: 'Basic', + slug: 'basic', + gender: 'A', + status: 'A', + m: 10, + f: 13 + }, + { + seq: 19, + name: 'Elegance', + slug: 'elegance', + gender: 'F', + status: 'A', + f: 2 + }, + { + seq: 20, + name: 'Office', + slug: 'office', + gender: 'F', + status: 'A', + f: 1 + }, + { + seq: 21, + name: 'Minimalist', + slug: 'minimalist', + gender: 'A', + status: 'A', + m: 3, + f: 4 + }, + { + seq: 22, + name: 'Vacation', + slug: 'vacation', + gender: 'A', + status: 'A', + m: 4, + f: 5 + }, + { + seq: 23, + name: 'Street', + slug: 'street', + gender: 'A', + status: 'A', + m: 8, + f: 11 + }, + { + seq: 24, + name: 'Sporty', + slug: 'sporty', + gender: 'A', + status: 'A', + m: 5, + f: 8 + }, + { + seq: 25, + name: 'Girly', + slug: 'girly', + gender: 'F', + status: 'A', + f: 6 + }, + { + seq: 26, + name: 'Sexy', + slug: 'sexy', + gender: 'F', + status: 'A', + f: 7 + }, + { + seq: 27, + name: 'Gentleman', + slug: 'gentleman', + gender: 'M', + status: 'A', + m: 1 + }, + { + seq: 28, + name: 'Punk', + slug: 'punk', + gender: 'A', + status: 'A', + m: 9, + f: 12 + }, + { + seq: 29, + name: 'Tech', + slug: 'techwear', + gender: 'A', + status: 'A', + m: 6, + f: 9 + }, + { + seq: 30, + name: 'Retro', + slug: 'retro', + gender: 'A', + status: 'A', + m: 7, + f: 10 + }, + { + seq: 31, + name: 'Bohemian', + slug: 'bohemian', + gender: 'A', + status: 'A', + m: 2, + f: 3 + }, + { + seq: -1, + name: 'Unknown', + slug: 'unknown', + gender: 'A', + status: 'A', + m: -1, + f: -1 + } +]; + +export const FASHION_STYLE_MAN = FASHION_STYLE.filter( + (item) => item.gender === 'A' || item.gender === 'M' +); + +export const FASHION_STYLE_WOMAN = FASHION_STYLE.filter( + (item) => item.gender === 'A' || item.gender === 'F' +); + +export enum FASHION_STYLE_CODE_FOR_MAN { + GENTLEMAN = 1, + BOHEMIAN = 2, + MINIMALIST = 3, + VACATION = 4, + SPORTY = 5, + TECH = 6, + RETRO = 7, + STREET = 8, + PUNK = 9, + BASIC = 10, + UNKNOWN = -1 +} + +export enum FASHION_STYLE_CODE_FOR_WOMAN { + BASIC = 18, + ELEGANCE = 19, + OFFICE = 20, + MINIMALIST = 21, + VACATION = 22, + STREET = 23, + SPORTY = 24, + GIRLY = 25, + SEXY = 26, + PUNK = 28, + TECH = 29, + RETRO = 30, + BOHEMIAN = 31, + UNKNOWN = -1 +} + +export enum MAIN_CATEGORY_CODE { + OUTER = 1, + TOP, + PANTS, + SKIRT, + DRESSES, + SWIMWEAR, + UNDERWEAR, + SHOES, + BAG, + CAP_HAT, + FASHION_ACC, + EYEWEAR, + UNKNOWN = -1 +} + +export enum SUB_CATEGORY_CODE { + JACKET = 1, + COAT, + JUMPER, + PADDING_COAT, + VEST, + CARDIGAN, + HOOD_ZIPUP, + CASUAL_TOP, + SLEEVELESS, + SWEATSHIRT, + HOODED_TSHIRT, + SHIRTS_BLOUSE, + KNIT_SWEATER, + SHORTS, + SLACKS_COTTON_PANTS_CHINO, + WIDE_PANTS, + JEANS, + CARGO_PANTS, + LEGGINGS, + JOGGER_PANTS, + OVERALLS, + MINI_SKIRT, + SKIRT, + MINI_DRESS, + DRESS, + BIKINI, + RASH_GUARD, + ONE_PIECE_SWIMSUIT, + BEACH_TOPS, + BEACH_PANTS, + BRA, + PANTIES_UNDERWEAR, + PAJAMAS_HOMEWEAR, + SLIP, + BATHROBE, + CORRECTION_UNDERWEAR, + SHOES_LOERFERS, + HEELS, + SPORTS_SHOES_SNEAKERS, + BOOTS, + SANDALS_SLIPPERS, + CROSS_BAG, + SHOULDER_BAG, + TOTE_BAG, + BREIF_CASE, + WAIST_BAG, + CANVAS_BAG, + CLUTCH_BAG, + BACKPACK, + POUCH, + WALLET, + LUGGAGE, + BALLCAP, + BUCKET_HAT, + FEDORA_HAT, + BEANIE_HAT_WATCH_CAP, + PHONE_CASE, + SOCKS, + WATCH, + BELT, + SCARF, + TIGHTS_STOCKINGS, + GLOVES, + GLASSES, + SUNGLASSES, + UNKNOWN = -1 +} + +export const ITEM_CATEGORY = { + OUTER: [ + SUB_CATEGORY_CODE.JACKET, + SUB_CATEGORY_CODE.COAT, + SUB_CATEGORY_CODE.JUMPER, + SUB_CATEGORY_CODE.PADDING_COAT, + SUB_CATEGORY_CODE.VEST, + SUB_CATEGORY_CODE.CARDIGAN, + SUB_CATEGORY_CODE.HOOD_ZIPUP + ], + TOP: [ + SUB_CATEGORY_CODE.CASUAL_TOP, + SUB_CATEGORY_CODE.SLEEVELESS, + SUB_CATEGORY_CODE.SWEATSHIRT, + SUB_CATEGORY_CODE.HOODED_TSHIRT, + SUB_CATEGORY_CODE.SHIRTS_BLOUSE, + SUB_CATEGORY_CODE.KNIT_SWEATER + ], + PANTS: [ + SUB_CATEGORY_CODE.SHORTS, + SUB_CATEGORY_CODE.SLACKS_COTTON_PANTS_CHINO, + SUB_CATEGORY_CODE.WIDE_PANTS, + SUB_CATEGORY_CODE.JEANS, + SUB_CATEGORY_CODE.CARGO_PANTS, + SUB_CATEGORY_CODE.LEGGINGS, + SUB_CATEGORY_CODE.JOGGER_PANTS, + SUB_CATEGORY_CODE.OVERALLS + ], + SKIRT: [SUB_CATEGORY_CODE.MINI_SKIRT, SUB_CATEGORY_CODE.SKIRT], + DRESSES: [SUB_CATEGORY_CODE.MINI_DRESS, SUB_CATEGORY_CODE.DRESS], + SWIMWEAR: [ + SUB_CATEGORY_CODE.BIKINI, + SUB_CATEGORY_CODE.RASH_GUARD, + SUB_CATEGORY_CODE.ONE_PIECE_SWIMSUIT, + SUB_CATEGORY_CODE.BEACH_TOPS, + SUB_CATEGORY_CODE.BEACH_PANTS + ], + UNDERWEAR: [ + SUB_CATEGORY_CODE.BRA, + SUB_CATEGORY_CODE.PANTIES_UNDERWEAR, + SUB_CATEGORY_CODE.PAJAMAS_HOMEWEAR, + SUB_CATEGORY_CODE.SLIP, + SUB_CATEGORY_CODE.BATHROBE, + SUB_CATEGORY_CODE.CORRECTION_UNDERWEAR + ], + SHOES: [ + SUB_CATEGORY_CODE.SHOES_LOERFERS, + SUB_CATEGORY_CODE.HEELS, + SUB_CATEGORY_CODE.SPORTS_SHOES_SNEAKERS, + SUB_CATEGORY_CODE.BOOTS, + SUB_CATEGORY_CODE.SANDALS_SLIPPERS + ], + BAG: [ + SUB_CATEGORY_CODE.CROSS_BAG, + SUB_CATEGORY_CODE.SHOULDER_BAG, + SUB_CATEGORY_CODE.TOTE_BAG, + SUB_CATEGORY_CODE.BREIF_CASE, + SUB_CATEGORY_CODE.WAIST_BAG, + SUB_CATEGORY_CODE.CANVAS_BAG, + SUB_CATEGORY_CODE.CLUTCH_BAG, + SUB_CATEGORY_CODE.BACKPACK, + SUB_CATEGORY_CODE.POUCH, + SUB_CATEGORY_CODE.WALLET, + SUB_CATEGORY_CODE.LUGGAGE + ], + CAP_HAT: [ + SUB_CATEGORY_CODE.BALLCAP, + SUB_CATEGORY_CODE.BUCKET_HAT, + SUB_CATEGORY_CODE.FEDORA_HAT, + SUB_CATEGORY_CODE.BEANIE_HAT_WATCH_CAP + ], + FASHION_ACC: [ + SUB_CATEGORY_CODE.PHONE_CASE, + SUB_CATEGORY_CODE.SOCKS, + SUB_CATEGORY_CODE.WATCH, + SUB_CATEGORY_CODE.BELT, + SUB_CATEGORY_CODE.SCARF, + SUB_CATEGORY_CODE.TIGHTS_STOCKINGS, + SUB_CATEGORY_CODE.GLOVES + ], + EYEWEAR: [SUB_CATEGORY_CODE.GLASSES, SUB_CATEGORY_CODE.SUNGLASSES] +}; + +export const SUB_CATEGORY_TO_MAIN = { + JACKET: MAIN_CATEGORY_CODE.OUTER, + COAT: MAIN_CATEGORY_CODE.OUTER, + JUMPER: MAIN_CATEGORY_CODE.OUTER, + PADDING_COAT: MAIN_CATEGORY_CODE.OUTER, + VEST: MAIN_CATEGORY_CODE.OUTER, + CARDIGAN: MAIN_CATEGORY_CODE.OUTER, + HOOD_ZIPUP: MAIN_CATEGORY_CODE.OUTER, + CASUAL_TOP: MAIN_CATEGORY_CODE.TOP, + SLEEVELESS: MAIN_CATEGORY_CODE.TOP, + SWEATSHIRT: MAIN_CATEGORY_CODE.TOP, + HOODED_TSHIRT: MAIN_CATEGORY_CODE.TOP, + SHIRTS_BLOUSE: MAIN_CATEGORY_CODE.TOP, + KNIT_SWEATER: MAIN_CATEGORY_CODE.TOP, + SHORTS: MAIN_CATEGORY_CODE.PANTS, + SLACKS_COTTON_PANTS_CHINO: MAIN_CATEGORY_CODE.PANTS, + WIDE_PANTS: MAIN_CATEGORY_CODE.PANTS, + JEANS: MAIN_CATEGORY_CODE.PANTS, + CARGO_PANTS: MAIN_CATEGORY_CODE.PANTS, + LEGGINGS: MAIN_CATEGORY_CODE.PANTS, + JOGGER_PANTS: MAIN_CATEGORY_CODE.PANTS, + OVERALLS: MAIN_CATEGORY_CODE.PANTS, + MINI_SKIRT: MAIN_CATEGORY_CODE.SKIRT, + SKIRT: MAIN_CATEGORY_CODE.SKIRT, + MINI_DRESS: MAIN_CATEGORY_CODE.DRESSES, + DRESS: MAIN_CATEGORY_CODE.DRESSES, + BIKINI: MAIN_CATEGORY_CODE.SWIMWEAR, + RASH_GUARD: MAIN_CATEGORY_CODE.SWIMWEAR, + ONE_PIECE_SWIMSUIT: MAIN_CATEGORY_CODE.SWIMWEAR, + BEACH_TOPS: MAIN_CATEGORY_CODE.SWIMWEAR, + BEACH_PANTS: MAIN_CATEGORY_CODE.SWIMWEAR, + BRA: MAIN_CATEGORY_CODE.UNDERWEAR, + PANTIES_UNDERWEAR: MAIN_CATEGORY_CODE.UNDERWEAR, + PAJAMAS_HOMEWEAR: MAIN_CATEGORY_CODE.UNDERWEAR, + SLIP: MAIN_CATEGORY_CODE.UNDERWEAR, + BATHROBE: MAIN_CATEGORY_CODE.UNDERWEAR, + CORRECTION_UNDERWEAR: MAIN_CATEGORY_CODE.UNDERWEAR, + SHOES_LOERFERS: MAIN_CATEGORY_CODE.SHOES, + HEELS: MAIN_CATEGORY_CODE.SHOES, + SPORTS_SHOES_SNEAKERS: MAIN_CATEGORY_CODE.SHOES, + BOOTS: MAIN_CATEGORY_CODE.SHOES, + SANDALS_SLIPPERS: MAIN_CATEGORY_CODE.SHOES, + CROSS_BAG: MAIN_CATEGORY_CODE.BAG, + SHOULDER_BAG: MAIN_CATEGORY_CODE.BAG, + TOTE_BAG: MAIN_CATEGORY_CODE.BAG, + BREIF_CASE: MAIN_CATEGORY_CODE.BAG, + WAIST_BAG: MAIN_CATEGORY_CODE.BAG, + CANVAS_BAG: MAIN_CATEGORY_CODE.BAG, + CLUTCH_BAG: MAIN_CATEGORY_CODE.BAG, + BACKPACK: MAIN_CATEGORY_CODE.BAG, + POUCH: MAIN_CATEGORY_CODE.BAG, + WALLET: MAIN_CATEGORY_CODE.BAG, + LUGGAGE: MAIN_CATEGORY_CODE.BAG, + BALLCAP: MAIN_CATEGORY_CODE.CAP_HAT, + BUCKET_HAT: MAIN_CATEGORY_CODE.CAP_HAT, + FEDORA_HAT: MAIN_CATEGORY_CODE.CAP_HAT, + BEANIE_HAT_WATCH_CAP: MAIN_CATEGORY_CODE.CAP_HAT, + PHONE_CASE: MAIN_CATEGORY_CODE.FASHION_ACC, + SOCKS: MAIN_CATEGORY_CODE.FASHION_ACC, + WATCH: MAIN_CATEGORY_CODE.FASHION_ACC, + BELT: MAIN_CATEGORY_CODE.FASHION_ACC, + SCARF: MAIN_CATEGORY_CODE.FASHION_ACC, + TIGHTS_STOCKINGS: MAIN_CATEGORY_CODE.FASHION_ACC, + GLOVES: MAIN_CATEGORY_CODE.FASHION_ACC, + GLASSES: MAIN_CATEGORY_CODE.EYEWEAR, + SUNGLASSES: MAIN_CATEGORY_CODE.EYEWEAR +}; + +export enum ITEM_COLOR { + BLACK = 1, + WHITE, + GREY, + RED, + PINK, + ORANGE, + BEIGE, + BROWN, + YELLOW, + GREEN, + KHAKI, + MINT, + BLUE, + NAVY, + SKYBLUE, + PURPLE, + LAVENDER, + WINE, + NEON, + GOLD, + SILVER, + CYAN, + MAGENTA, + UNKNOWN = -1 +} + +export enum ITEM_PATTERN { + CHECK = 1, + STRIPE, + ZIGZAG, + LEOPARD, + ZEBRA, + DOT, + CAMOUFLAGE, + PAISLEY, + ARGYLE, + FLORAL, + LETTERING, + SKULL, + GRADATION, + SOLID, + GRAPHIC, + HOUNDS_TOOTH, + COLOR_BLOCK, + MESH, + UNKNOWN = -1 +} diff --git a/src/data/enums/JSONUploadStatus.ts b/src/data/enums/JSONUploadStatus.ts new file mode 100644 index 000000000..f233f6213 --- /dev/null +++ b/src/data/enums/JSONUploadStatus.ts @@ -0,0 +1,6 @@ +export enum JSONUploadStatus { + NEED_UPLOAD = 'NEED_UPLOAD', + UPLOADING = 'UPLOADING', + UPLOADED = 'UPLOADED', + FAILED = 'FAILED' +} diff --git a/src/data/enums/LabelStatus.ts b/src/data/enums/LabelStatus.ts index de06ee298..0e2810f14 100644 --- a/src/data/enums/LabelStatus.ts +++ b/src/data/enums/LabelStatus.ts @@ -1,5 +1,5 @@ export enum LabelStatus { - ACCEPTED = "ACCEPTED", - REJECTED = "REJECTED", - UNDECIDED = "UNDECIDED" -} \ No newline at end of file + ACCEPTED = 'ACCEPTED', + REJECTED = 'REJECTED', + UNDECIDED = 'UNDECIDED' +} diff --git a/src/data/enums/LabelType.ts b/src/data/enums/LabelType.ts index 87be4c62a..6fbc79841 100644 --- a/src/data/enums/LabelType.ts +++ b/src/data/enums/LabelType.ts @@ -4,4 +4,9 @@ export enum LabelType { RECT = 'RECT', POLYGON = 'POLYGON', LINE = 'LINE' -} \ No newline at end of file +} + +export enum LabelModeType { + HUMAN = 'HUMAN', + ITEM = 'ITEM' +} diff --git a/src/data/enums/PopupWindowType.ts b/src/data/enums/PopupWindowType.ts index 46be29ea7..a8aa1c82f 100644 --- a/src/data/enums/PopupWindowType.ts +++ b/src/data/enums/PopupWindowType.ts @@ -8,5 +8,10 @@ export enum PopupWindowType { IMPORT_ANNOTATIONS = 'IMPORT_ANNOTATIONS', INSERT_LABEL_NAMES = 'INSERT_LABEL_NAMES', EXIT_PROJECT = 'EXIT_PROJECT', - LOADER = 'LOADER' + LOADER = 'LOADER', + LABEL_INFO = 'LABEL_INFO', + LOGIN = 'LOGIN', + LOGOUT = 'LOGOUT', + DELETE_CONFIRM = 'DELETE_CONFIRM', + PERFORMANCE = 'PERFORMANCE' } diff --git a/src/data/info/DropDownMenuData.ts b/src/data/info/DropDownMenuData.ts index 1fa011d40..08ec8a32b 100644 --- a/src/data/info/DropDownMenuData.ts +++ b/src/data/info/DropDownMenuData.ts @@ -1,89 +1,153 @@ -import {updateActivePopupType} from '../../store/general/actionCreators'; +import { + updateActivePopupType, + updateProjectData +} from '../../store/general/actionCreators'; import {PopupWindowType} from '../enums/PopupWindowType'; import {store} from '../../index'; +import {updateAuthData} from '../../store/auth/actionCreators'; +import { + updateActiveImageIndex, + updateActiveLabelNameId, + updateFirstLabelCreatedFlag, + updateImageData, + updateLabelNames +} from '../../store/labels/actionCreators'; +import {PopupActions} from '../../logic/actions/PopupActions'; export type DropDownMenuNode = { - name: string - description?: string - imageSrc: string - imageAlt: string - disabled: boolean - onClick?: () => void - children?: DropDownMenuNode[] -} + name: string; + description?: string; + imageSrc: string; + imageAlt: string; + disabled: boolean; + onClick?: () => void; + children?: DropDownMenuNode[]; +}; export const DropDownMenuData: DropDownMenuNode[] = [ + // { + // name: 'Hành động(Actions)', + // imageSrc: 'ico/actions.png', + // imageAlt: 'actions', + // disabled: false, + // children: [ + // // { + // // name: 'Sửa Nhãn(Edit Labels)', + // // description: 'Sửa danh sách nhãn(Modify labels list)', + // // imageSrc: 'ico/tags.png', + // // imageAlt: 'labels', + // // disabled: false, + // // onClick: () => + // // store.dispatch( + // // updateActivePopupType(PopupWindowType.UPDATE_LABEL) + // // ) + // // }, + // // { + // // name: 'Nhập hình ảnh(Import Images)', + // // description: 'Tải thêm hình ảnh(Load more images)', + // // imageSrc: 'ico/camera.png', + // // imageAlt: 'images', + // // disabled: false, + // // onClick: () => + // // store.dispatch( + // // updateActivePopupType(PopupWindowType.IMPORT_IMAGES) + // // ) + // // }, + // // { + // // name: 'Nhập chú thích(Import Annotations)', + // // description: + // // 'Nhập chú thích từ tệp(Import annotations from file)', + // // imageSrc: 'ico/import-labels.png', + // // imageAlt: 'import-labels', + // // disabled: false, + // // onClick: () => + // // store.dispatch( + // // updateActivePopupType( + // // PopupWindowType.IMPORT_ANNOTATIONS + // // ) + // // ) + // // }, + // // { + // // name: 'Xuất chú thích(Export Annotations)', + // // description: + // // 'Xuất chú thích sang tệp(Export annotations to file)', + // // imageSrc: 'ico/export-labels.png', + // // imageAlt: 'export-labels', + // // disabled: false, + // // onClick: () => + // // store.dispatch( + // // updateActivePopupType( + // // PopupWindowType.EXPORT_ANNOTATIONS + // // ) + // // ) + // // }, + // // { + // // name: 'Tải mô hình AI(Load AI Model)', + // // description: + // // 'Tải mô hình AI được đào tạo trước(Load our pre-trained annotation models)', + // // imageSrc: 'ico/ai.png', + // // imageAlt: 'load-ai-model', + // // disabled: false, + // // onClick: () => + // // store.dispatch( + // // updateActivePopupType(PopupWindowType.LOAD_AI_MODEL) + // // ) + // // } + // ] + // }, { - name: 'Actions', - imageSrc: 'ico/actions.png', - imageAlt: 'actions', + name: 'Người dùng (User)', + imageSrc: 'ico/user.png', + imageAlt: 'user', disabled: false, children: [ { - name: 'Edit Labels', - description: 'Modify labels list', - imageSrc: 'ico/tags.png', - imageAlt: 'labels', + name: `Đăng xuất (Logout)`, + description: + 'Xóa xác thực hiện tại(Clear current authentication)', + imageSrc: 'ico/user.png', + imageAlt: 'logout', disabled: false, - onClick: () => store.dispatch(updateActivePopupType(PopupWindowType.UPDATE_LABEL)) - }, - { - name: 'Import Images', - description: 'Load more images', - imageSrc: 'ico/camera.png', - imageAlt: 'images', - disabled: false, - onClick: () => store.dispatch(updateActivePopupType(PopupWindowType.IMPORT_IMAGES)) - }, - { - name: 'Import Annotations', - description: 'Import annotations from file', - imageSrc: 'ico/import-labels.png', - imageAlt: 'import-labels', - disabled: false, - onClick: () => store.dispatch(updateActivePopupType(PopupWindowType.IMPORT_ANNOTATIONS)) - }, - { - name: 'Export Annotations', - description: 'Export annotations to file', - imageSrc: 'ico/export-labels.png', - imageAlt: 'export-labels', - disabled: false, - onClick: () => store.dispatch(updateActivePopupType(PopupWindowType.EXPORT_ANNOTATIONS)) - }, - { - name: 'Load AI Model', - description: 'Load our pre-trained annotation models', - imageSrc: 'ico/ai.png', - imageAlt: 'load-ai-model', - disabled: false, - onClick: () => store.dispatch(updateActivePopupType(PopupWindowType.LOAD_AI_MODEL)) - }, - ] - }, - { - name: 'Community', - imageSrc: 'ico/plant.png', - imageAlt: 'community', - disabled: false, - children: [ - { - name: 'Documentation', - description: 'Read more about Make Sense', - imageSrc: 'ico/documentation.png', - imageAlt: 'documentation', - disabled: false, - onClick: () => window.open('https://skalskip.github.io/make-sense', '_blank') - }, - { - name: 'Bugs and Features', - description: 'Report a bug or propose a new feature', - imageSrc: 'ico/bug.png', - imageAlt: 'bug', - disabled: false, - onClick: () => window.open('https://github.com/SkalskiP/make-sense/issues', '_blank') + onClick: () => { + store.dispatch( + updateActivePopupType(PopupWindowType.LOGOUT) + ); + } } ] } -] - + // { + // name: 'Cộng đồng(Community)', + // imageSrc: 'ico/plant.png', + // imageAlt: 'community', + // disabled: false, + // children: [ + // { + // name: 'Tài liệu(Documentation)', + // description: + // 'Đọc thêm về Make Sense(Read more about Make Sense)', + // imageSrc: 'ico/documentation.png', + // imageAlt: 'documentation', + // disabled: false, + // onClick: () => + // window.open( + // 'https://skalskip.github.io/make-sense', + // '_blank' + // ) + // }, + // { + // name: 'Lỗi và Chức năng(Bugs and Features)', + // description: + // 'Báo cáo lỗi hoặc đề xuất một chức năng mới(Report a bug or propose a new feature)', + // imageSrc: 'ico/bug.png', + // imageAlt: 'bug', + // disabled: false, + // onClick: () => + // window.open( + // 'https://github.com/SkalskiP/make-sense/issues', + // '_blank' + // ) + // } + // ] + // } +]; diff --git a/src/index.scss b/src/index.scss index f0545272d..38991dc07 100644 --- a/src/index.scss +++ b/src/index.scss @@ -1,25 +1,27 @@ body { - height: 100vh; - width: 100vw; - margin: 0; - padding: 0; + height: 100vh; + width: 100vw; + margin: 0; + padding: 0; - font-family: 'Saira Semi Condensed', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + font-family: 'Saira Semi Condensed', -apple-system, BlinkMacSystemFont, + 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', + 'Droid Sans', 'Helvetica Neue', sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; - overflow-x: hidden; - overflow-y: hidden; + overflow-x: hidden; + overflow-y: hidden; + + user-select: none; } #root { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} \ No newline at end of file + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/src/lang.ts b/src/lang.ts new file mode 100644 index 000000000..ffc8f9c8a --- /dev/null +++ b/src/lang.ts @@ -0,0 +1,164 @@ +export const vi = { + GENDER: { + MAN: 'NAM', + WOMAN: 'NỮ', + UNKNOWN: 'KHÔNG XÁC ĐỊNH' + }, + SOURCE: { + HUMAN: 'NHÂN LOẠI', + MANNEQUIN: 'MA NƠ CANH', + STYLEBOOK: 'SÁCH PHONG CÁCH', + UNKNOWN: 'KHÔNG XÁC ĐỊNH' + }, + FASHION_STYLE: { + basic: 'Đơn giản', + elegance: 'Thanh lịch', + office: 'Công sở', + minimalist: 'Tối giản', + vacation: 'Nghỉ dưỡng', + street: 'Đường phố', + sporty: 'Thể thao', + girly: 'Nữ tính', + sexy: 'Gợi cảm', + gentleman: 'Quý ông', + punk: 'Punk', + techwear: 'Techwear', + retro: 'Cổ điển', + bohemian: 'Bohemian', + unknown: 'KHÔNG XÁC ĐỊNH' + }, + MAIN_CATEGORY: { + OUTER: 'Áo khoác', + TOP: 'Áo', + PANTS: 'Quần', + SKIRT: 'Váy', + DRESSES: 'Đầm', + SWIMWEAR: 'Đồ bơi', + UNDERWEAR: 'Đồ lót', + SHOES: 'Giày', + BAG: 'Túi', + CAP_HAT: 'Mũ/Nón', + FASHION_ACC: 'Phụ kiện', + EYEWEAR: 'Mắt kính', + UNKNOWN: 'KHÔNG XÁC ĐỊNH' + }, + SUB_CATEGORY: { + JACKET: 'áo khoác ngắn', + COAT: 'áo khoác ngoài', + JUMPER: 'áo khoác bomber', + PADDING_COAT: 'áo khoác phao', + VEST: 'áo gile (mặc phía trong)', + CARDIGAN: 'áo len đan cài trước', + HOOD_ZIPUP: 'áo khoác dây kéo có nón', + CASUAL_TOP: 'áo thun', + SLEEVELESS: '(áo) không tay', + SWEATSHIRT: 'áo nỉ dài tay (tròng đầu)', + HOODED_TSHIRT: 'áo có nón', + SHIRTS_BLOUSE: 'áo sơ mi / áo kiểu nữ', + KNIT_SWEATER: 'áo len đan', + SHORTS: 'quần ngắn', + SLACKS_COTTON_PANTS_CHINO: 'quần tây / quần kaki', + WIDE_PANTS: 'quần ống rộng', + JEANS: 'quần jeans', + CARGO_PANTS: 'quần túi hộp', + LEGGINGS: 'quần leggings', + JOGGER_PANTS: 'quần jogger', + OVERALLS: 'quần yếm', + MINI_SKIRT: 'váy ngắn', + SKIRT: 'chân váy', + MINI_DRESS: 'đầm ngắn', + DRESS: 'đầm', + BIKINI: 'đồ tắm 2 mảnh', + RASH_GUARD: 'đồ bơi bảo vệ', + ONE_PIECE_SWIMSUIT: 'đồ tắm 1 mảnh', + BEACH_TOPS: 'áo mặc đi biển', + BEACH_PANTS: 'quần mặc đi biển', + BRA: 'áo ngực/ áo lót', + PANTIES_UNDERWEAR: 'quần lót', + PAJAMAS_HOMEWEAR: 'đồ mặc nhà', + SLIP: 'đầm ngủ', + BATHROBE: 'áo choàng tắm', + CORRECTION_UNDERWEAR: 'đồ lót định hình cơ thể', + SHOES_LOERFERS: 'giày lười', + HEELS: 'giày cao gót', + SPORTS_SHOES_SNEAKERS: 'giày thể thao', + BOOTS: 'bốt (giày cao cổ)', + SANDALS_SLIPPERS: 'dép xăng đan/ dép xỏ ngón', + CROSS_BAG: 'túi đeo chéo', + SHOULDER_BAG: 'túi đeo vai', + TOTE_BAG: 'túi vải (kích thước lớn)', + BREIF_CASE: 'cặp (túi xách) đựng tài liệu', + WAIST_BAG: 'túi đeo hông', + CANVAS_BAG: 'túi vải bố', + CLUTCH_BAG: 'ví cầm tay', + BACKPACK: 'ba lô', + POUCH: 'túi nhỏ', + WALLET: 'ví', + LUGGAGE: 'vali', + BALLCAP: 'nón lưỡi trai', + BUCKET_HAT: 'nón vành', + FEDORA_HAT: 'mũ phớt', + BEANIE_HAT_WATCH_CAP: 'mũ len Beanie', + PHONE_CASE: 'ốp lưng điện thoại', + SOCKS: 'vớ / tất', + WATCH: 'đồng hồ đeo tay', + BELT: 'dây thắt lưng', + SCARF: 'khăn choàng cổ', + TIGHTS_STOCKINGS: 'quần tất / vớ da', + GLOVES: 'găng tay', + GLASSES: 'kính cận', + SUNGLASSES: 'kính mát', + UNKNOWN: 'KHÔNG XÁC ĐỊNH' + }, + ITEM_COLOR: { + BLACK: 'màu đen', + WHITE: 'màu trắng', + GREY: 'màu xám', + RED: 'màu đỏ', + PINK: 'màu hồng', + ORANGE: 'màu cam', + BEIGE: 'màu be', + BROWN: 'màu nâu', + YELLOW: 'màu vàng', + GREEN: 'màu xanh lá', + KHAKI: 'màu xanh rêu', + MINT: 'màu xanh bạc hà', + BLUE: 'màu xanh ', + NAVY: 'màu xanh đen', + SKYBLUE: 'màu xanh da trời', + PURPLE: 'màu tím', + LAVENDER: 'màu tím nhạt', + WINE: 'màu đỏ rượu', + NEON: 'màu xanh neon', + GOLD: 'màu vàng đồng', + SILVER: 'màu bạc', + CYAN: 'xanh ngọc', + MAGENTA: 'màu hồng nóng', + UNKNOWN: 'KHÔNG XÁC ĐỊNH' + }, + ITEM_PATTERN: { + CHECK: 'họa tiết kẻ caro', + STRIPE: 'họa tiết kẻ sọc', + ZIGZAG: 'họa tiết kẻ zigzag', + LEOPARD: 'họa tiết da báo', + ZEBRA: 'họa tiết ngựa vằn', + DOT: 'họa tiết chấm bi', + CAMOUFLAGE: 'họa tiết ngụy trang, quân đội', + PAISLEY: 'họa tiết giọt lệ xoắn', + ARGYLE: 'họa tiết hình kim cương', + FLORAL: 'họa tiết in hoa', + LETTERING: 'họa tiết chữ cái', + SKULL: 'họa tiết đầu lâu', + GRADATION: 'họa tiết chuyển màu', + SOLID: 'họa tiết trơn (1 màu)', + GRAPHIC: 'họa tiết đồ họa', + HOUNDS_TOOTH: 'họa tiết răng sói', + COLOR_BLOCK: 'hình khối màu sắc ', + MESH: 'vải lưới', + UNKNOWN: 'KHÔNG XÁC ĐỊNH' + }, + ALERT: { + SELECT_ONE_STYLE: + 'Vui lòng chỉ chọn một phong cách!\nPlease choose only one style !\n하나의 스타일만 선택해주세요!' + } +}; diff --git a/src/logic/actions/AIObjectDetectionActions.ts b/src/logic/actions/AIObjectDetectionActions.ts index 093c9dadd..f33d42d1f 100644 --- a/src/logic/actions/AIObjectDetectionActions.ts +++ b/src/logic/actions/AIObjectDetectionActions.ts @@ -1,7 +1,7 @@ import {DetectedObject} from '@tensorflow-models/coco-ssd'; import {ImageData, LabelName, LabelRect} from '../../store/labels/types'; import {LabelsSelector} from '../../store/selectors/LabelsSelector'; -import { v4 as uuidv4 } from 'uuid'; +import {v4 as uuidv4} from 'uuid'; import {store} from '../../index'; import {updateImageDataById} from '../../store/labels/actionCreators'; import {ObjectDetector} from '../../ai/ObjectDetector'; @@ -17,31 +17,52 @@ import {AIActions} from './AIActions'; export class AIObjectDetectionActions { public static detectRectsForActiveImage(): void { const activeImageData: ImageData = LabelsSelector.getActiveImageData(); - AIObjectDetectionActions.detectRects(activeImageData.id, ImageRepository.getById(activeImageData.id)) + AIObjectDetectionActions.detectRects( + activeImageData.id, + ImageRepository.getById(activeImageData.id) + ); } public static detectRects(imageId: string, image: HTMLImageElement): void { - if (LabelsSelector.getImageDataById(imageId).isVisitedByObjectDetector || !AISelector.isAIObjectDetectorModelLoaded()) + if ( + LabelsSelector.getImageDataById(imageId) + .isVisitedByObjectDetector || + !AISelector.isAIObjectDetectorModelLoaded() + ) return; store.dispatch(updateActivePopupType(PopupWindowType.LOADER)); ObjectDetector.predict(image, (predictions: DetectedObject[]) => { - const suggestedLabelNames = AIObjectDetectionActions.extractNewSuggestedLabelNames(LabelsSelector.getLabelNames(), predictions); - const rejectedLabelNames = AISelector.getRejectedSuggestedLabelList(); - const newlySuggestedNames = AIActions.excludeRejectedLabelNames(suggestedLabelNames, rejectedLabelNames); + const suggestedLabelNames = + AIObjectDetectionActions.extractNewSuggestedLabelNames( + LabelsSelector.getLabelNames(), + predictions + ); + const rejectedLabelNames = + AISelector.getRejectedSuggestedLabelList(); + const newlySuggestedNames = AIActions.excludeRejectedLabelNames( + suggestedLabelNames, + rejectedLabelNames + ); if (newlySuggestedNames.length > 0) { store.dispatch(updateSuggestedLabelList(newlySuggestedNames)); - store.dispatch(updateActivePopupType(PopupWindowType.SUGGEST_LABEL_NAMES)); + store.dispatch( + updateActivePopupType(PopupWindowType.SUGGEST_LABEL_NAMES) + ); } else { store.dispatch(updateActivePopupType(null)); } AIObjectDetectionActions.saveRectPredictions(imageId, predictions); - }) + }); } - public static saveRectPredictions(imageId: string, predictions: DetectedObject[]) { + public static saveRectPredictions( + imageId: string, + predictions: DetectedObject[] + ) { const imageData: ImageData = LabelsSelector.getImageDataById(imageId); - const predictedLabels: LabelRect[] = AIObjectDetectionActions.mapPredictionsToRectLabels(predictions); + const predictedLabels: LabelRect[] = + AIObjectDetectionActions.mapPredictionsToRectLabels(predictions); const nextImageData: ImageData = { ...imageData, labelRects: imageData.labelRects.concat(predictedLabels), @@ -50,7 +71,9 @@ export class AIObjectDetectionActions { store.dispatch(updateImageDataById(imageData.id, nextImageData)); } - private static mapPredictionsToRectLabels(predictions: DetectedObject[]): LabelRect[] { + private static mapPredictionsToRectLabels( + predictions: DetectedObject[] + ): LabelRect[] { return predictions.map((prediction: DetectedObject) => { return { id: uuidv4(), @@ -60,34 +83,46 @@ export class AIObjectDetectionActions { x: prediction.bbox[0], y: prediction.bbox[1], width: prediction.bbox[2], - height: prediction.bbox[3], + height: prediction.bbox[3] }, isCreatedByAI: true, status: LabelStatus.UNDECIDED, suggestedLabel: prediction.class - } - }) + }; + }); } - public static extractNewSuggestedLabelNames(labels: LabelName[], predictions: DetectedObject[]): string[] { - return predictions.reduce((acc: string[], prediction: DetectedObject) => { - if (!acc.includes(prediction.class) && !findLast(labels, {name: prediction.class})) { - acc.push(prediction.class) - } - return acc; - }, []) + public static extractNewSuggestedLabelNames( + labels: LabelName[], + predictions: DetectedObject[] + ): string[] { + return predictions.reduce( + (acc: string[], prediction: DetectedObject) => { + if ( + !acc.includes(prediction.class) && + !findLast(labels, {name: prediction.class}) + ) { + acc.push(prediction.class); + } + return acc; + }, + [] + ); } public static acceptAllSuggestedRectLabels(imageData: ImageData) { const newImageData: ImageData = { ...imageData, labelRects: imageData.labelRects.map((labelRect: LabelRect) => { - const labelName: LabelName = findLast(LabelsSelector.getLabelNames(), {name: labelRect.suggestedLabel}); + const labelName: LabelName = findLast( + LabelsSelector.getLabelNames(), + {name: labelRect.suggestedLabel} + ); return { ...labelRect, status: LabelStatus.ACCEPTED, labelId: !!labelName ? labelName.id : labelRect.labelId - } + }; }) }; store.dispatch(updateImageDataById(newImageData.id, newImageData)); @@ -96,7 +131,10 @@ export class AIObjectDetectionActions { public static rejectAllSuggestedRectLabels(imageData: ImageData) { const newImageData: ImageData = { ...imageData, - labelRects: imageData.labelRects.filter((labelRect: LabelRect) => labelRect.status === LabelStatus.ACCEPTED) + labelRects: imageData.labelRects.filter( + (labelRect: LabelRect) => + labelRect.status === LabelStatus.ACCEPTED + ) }; store.dispatch(updateImageDataById(newImageData.id, newImageData)); } diff --git a/src/logic/actions/LabelActions.ts b/src/logic/actions/LabelActions.ts index c59d14229..e54f6fb51 100644 --- a/src/logic/actions/LabelActions.ts +++ b/src/logic/actions/LabelActions.ts @@ -1,9 +1,23 @@ import {LabelsSelector} from '../../store/selectors/LabelsSelector'; -import {ImageData, LabelLine, LabelName, LabelPoint, LabelPolygon, LabelRect} from '../../store/labels/types'; +import { + HumanInfo, + ImageData, + ItemInfo, + LabelLine, + LabelName, + LabelPoint, + LabelPolygon, + LabelRect +} from '../../store/labels/types'; import {filter} from 'lodash'; import {store} from '../../index'; -import {updateImageData, updateImageDataById} from '../../store/labels/actionCreators'; -import {LabelType} from '../../data/enums/LabelType'; +import { + updateActiveLabelMode, + updateImageData, + updateImageDataById +} from '../../store/labels/actionCreators'; +import {LabelType, LabelModeType} from '../../data/enums/LabelType'; +import {JSONUploadStatus} from '../../data/enums/JSONUploadStatus'; export class LabelActions { public static deleteActiveLabel() { @@ -27,12 +41,25 @@ export class LabelActions { } public static deleteRectLabelById(imageId: string, labelRectId: string) { + // console.log('labelRectId: ', labelRectId); const imageData: ImageData = LabelsSelector.getImageDataById(imageId); - const newImageData = { + const newImageData: ImageData = { ...imageData, - labelRects: filter(imageData.labelRects, (currentLabel: LabelRect) => { - return currentLabel.id !== labelRectId; - }) + labelRects: filter( + imageData.labelRects, + (currentLabel: LabelRect) => { + return currentLabel.id !== labelRectId; + } + ), + humans: filter( + imageData.humans, + (human: HumanInfo) => human.uuid !== labelRectId + ), + items: filter( + imageData.items, + (item: ItemInfo) => item.uuid !== labelRectId + ), + uploadStatus: JSONUploadStatus.NEED_UPLOAD }; store.dispatch(updateImageDataById(imageData.id, newImageData)); } @@ -41,9 +68,12 @@ export class LabelActions { const imageData: ImageData = LabelsSelector.getImageDataById(imageId); const newImageData = { ...imageData, - labelPoints: filter(imageData.labelPoints, (currentLabel: LabelPoint) => { - return currentLabel.id !== labelPointId; - }) + labelPoints: filter( + imageData.labelPoints, + (currentLabel: LabelPoint) => { + return currentLabel.id !== labelPointId; + } + ) }; store.dispatch(updateImageDataById(imageData.id, newImageData)); } @@ -52,33 +82,50 @@ export class LabelActions { const imageData: ImageData = LabelsSelector.getImageDataById(imageId); const newImageData = { ...imageData, - labelLines: filter(imageData.labelLines, (currentLabel: LabelLine) => { - return currentLabel.id !== labelLineId; - }) + labelLines: filter( + imageData.labelLines, + (currentLabel: LabelLine) => { + return currentLabel.id !== labelLineId; + } + ) }; store.dispatch(updateImageDataById(imageData.id, newImageData)); } - public static deletePolygonLabelById(imageId: string, labelPolygonId: string) { + public static deletePolygonLabelById( + imageId: string, + labelPolygonId: string + ) { const imageData: ImageData = LabelsSelector.getImageDataById(imageId); const newImageData = { ...imageData, - labelPolygons: filter(imageData.labelPolygons, (currentLabel: LabelPolygon) => { - return currentLabel.id !== labelPolygonId; - }) + labelPolygons: filter( + imageData.labelPolygons, + (currentLabel: LabelPolygon) => { + return currentLabel.id !== labelPolygonId; + } + ) }; store.dispatch(updateImageDataById(imageData.id, newImageData)); } public static removeLabelNames(labelNamesIds: string[]) { const imagesData: ImageData[] = LabelsSelector.getImagesData(); - const newImagesData: ImageData[] = imagesData.map((imageData: ImageData) => { - return LabelActions.removeLabelNamesFromImageData(imageData, labelNamesIds); - }); - store.dispatch(updateImageData(newImagesData)) + const newImagesData: ImageData[] = imagesData.map( + (imageData: ImageData) => { + return LabelActions.removeLabelNamesFromImageData( + imageData, + labelNamesIds + ); + } + ); + store.dispatch(updateImageData(newImagesData)); } - private static removeLabelNamesFromImageData(imageData: ImageData, labelNamesIds: string[]): ImageData { + private static removeLabelNamesFromImageData( + imageData: ImageData, + labelNamesIds: string[] + ): ImageData { return { ...imageData, labelRects: imageData.labelRects.map((labelRect: LabelRect) => { @@ -86,9 +133,9 @@ export class LabelActions { return { ...labelRect, id: null - } + }; } else { - return labelRect + return labelRect; } }), labelPoints: imageData.labelPoints.map((labelPoint: LabelPoint) => { @@ -96,31 +143,39 @@ export class LabelActions { return { ...labelPoint, id: null - } + }; } else { - return labelPoint + return labelPoint; } }), - labelPolygons: imageData.labelPolygons.map((labelPolygon: LabelPolygon) => { - if (labelNamesIds.includes(labelPolygon.id)) { - return { - ...labelPolygon, - id: null + labelPolygons: imageData.labelPolygons.map( + (labelPolygon: LabelPolygon) => { + if (labelNamesIds.includes(labelPolygon.id)) { + return { + ...labelPolygon, + id: null + }; + } else { + return labelPolygon; } - } else { - return labelPolygon } - }), - labelNameIds: imageData.labelNameIds.filter((labelNameId: string) => { - return !labelNamesIds.includes(labelNameId) - }) - } + ), + labelNameIds: imageData.labelNameIds.filter( + (labelNameId: string) => { + return !labelNamesIds.includes(labelNameId); + } + ) + }; } public static labelExistsInLabelNames(label: string): boolean { const labelNames: LabelName[] = LabelsSelector.getLabelNames(); return labelNames .map((labelName: LabelName) => labelName.name) - .includes(label) + .includes(label); + } + + public static selectLabelMode(mode: LabelModeType) { + store.dispatch(updateActiveLabelMode(mode)); } } diff --git a/src/logic/export/RectLabelsExporter.ts b/src/logic/export/RectLabelsExporter.ts index 2a77786e2..2cc0ec490 100644 --- a/src/logic/export/RectLabelsExporter.ts +++ b/src/logic/export/RectLabelsExporter.ts @@ -1,8 +1,14 @@ import {AnnotationFormatType} from '../../data/enums/AnnotationFormatType'; -import {ImageData, LabelName, LabelRect} from '../../store/labels/types'; +import { + HumanInfo, + ImageData, + LabelName, + LabelRect, + RectJSON +} from '../../store/labels/types'; import {ImageRepository} from '../imageRepository/ImageRepository'; import JSZip from 'jszip'; -import { saveAs } from 'file-saver'; +import {saveAs} from 'file-saver'; import {LabelsSelector} from '../../store/selectors/LabelsSelector'; import {XMLSanitizerUtil} from '../../utils/XMLSanitizerUtil'; import {ExporterUtil} from '../../utils/ExporterUtil'; @@ -11,6 +17,8 @@ import {findIndex, findLast} from 'lodash'; import {ISize} from '../../interfaces/ISize'; import {NumberUtil} from '../../utils/NumberUtil'; import {RectUtil} from '../../utils/RectUtil'; +import {IRect} from '../../interfaces/IRect'; +import {AuthSelector} from '../../store/selectors/AuthSelector'; export class RectLabelsExporter { public static export(exportFormatType: AnnotationFormatType): void { @@ -24,6 +32,9 @@ export class RectLabelsExporter { case AnnotationFormatType.CSV: RectLabelsExporter.exportAsCSV(); break; + case AnnotationFormatType.JSON: + RectLabelsExporter.exportAsJSON(); + break; default: return; } @@ -31,53 +42,74 @@ export class RectLabelsExporter { private static exportAsYOLO(): void { const zip = new JSZip(); - LabelsSelector.getImagesData() - .forEach((imageData: ImageData) => { - const fileContent: string = RectLabelsExporter.wrapRectLabelsIntoYOLO(imageData); - if (fileContent) { - const fileName : string = imageData.fileData.name.replace(/\.[^/.]+$/, '.txt'); - try { - zip.file(fileName, fileContent); - } catch (error) { - // TODO - throw new Error(error as string); - } + LabelsSelector.getImagesData().forEach((imageData: ImageData) => { + const fileContent: string = + RectLabelsExporter.wrapRectLabelsIntoYOLO(imageData); + if (fileContent) { + const fileName: string = imageData.fileData.name.replace( + /\.[^/.]+$/, + '.txt' + ); + try { + zip.file(fileName, fileContent); + } catch (error) { + // TODO + throw new Error(error as string); } - }); + } + }); try { - zip.generateAsync({type:'blob'}) - .then((content: Blob) => { - saveAs(content, `${ExporterUtil.getExportFileName()}.zip`); - }); + zip.generateAsync({type: 'blob'}).then((content: Blob) => { + saveAs(content, `${ExporterUtil.getExportFileName()}.zip`); + }); } catch (error) { // TODO throw new Error(error as string); } } - public static wrapRectLabelIntoYOLO(labelRect: LabelRect, labelNames: LabelName[], imageSize: ISize): string { - const snapAndFix = (value: number) => NumberUtil.snapValueToRange(value,0, 1).toFixed(6) - const classIdx: string = findIndex(labelNames, {id: labelRect.labelId}).toString() - const rectCenter = RectUtil.getCenter(labelRect.rect) - const rectSize = RectUtil.getSize(labelRect.rect) + public static wrapRectLabelIntoYOLO( + labelRect: LabelRect, + labelNames: LabelName[], + imageSize: ISize + ): string { + const snapAndFix = (value: number) => + NumberUtil.snapValueToRange(value, 0, 1).toFixed(6); + const classIdx: string = findIndex(labelNames, { + id: labelRect.labelId + }).toString(); + const rectCenter = RectUtil.getCenter(labelRect.rect); + const rectSize = RectUtil.getSize(labelRect.rect); const rawBBox: number[] = [ rectCenter.x / imageSize.width, rectCenter.y / imageSize.height, rectSize.width / imageSize.width, rectSize.height / imageSize.height - ] + ]; - let [x, y, width, height] = rawBBox.map((value: number) => parseFloat(snapAndFix(value))) + let [x, y, width, height] = rawBBox.map((value: number) => + parseFloat(snapAndFix(value)) + ); - if (x + width / 2 > 1) { width = 2 * (1 - x) } - if (x - width / 2 < 0) { width = 2 * x } - if (y + height / 2 > 1) { height = 2 * (1 - y) } - if (y - height / 2 < 0) { height = 2 * y } + if (x + width / 2 > 1) { + width = 2 * (1 - x); + } + if (x - width / 2 < 0) { + width = 2 * x; + } + if (y + height / 2 > 1) { + height = 2 * (1 - y); + } + if (y - height / 2 < 0) { + height = 2 * y; + } - const processedBBox = [x, y, width, height].map((value: number) => snapAndFix(value)) + const processedBBox = [x, y, width, height].map((value: number) => + snapAndFix(value) + ); - return [classIdx, ...processedBBox].join(' ') + return [classIdx, ...processedBBox].join(' '); } private static wrapRectLabelsIntoYOLO(imageData: ImageData): string { @@ -86,33 +118,42 @@ export class RectLabelsExporter { const labelNames: LabelName[] = LabelsSelector.getLabelNames(); const image: HTMLImageElement = ImageRepository.getById(imageData.id); - const imageSize: ISize = {width: image.width, height: image.height} - const labelRectsString: string[] = imageData.labelRects.map((labelRect: LabelRect) => { - return RectLabelsExporter.wrapRectLabelIntoYOLO(labelRect, labelNames, imageSize) - }); + const imageSize: ISize = {width: image.width, height: image.height}; + const labelRectsString: string[] = imageData.labelRects.map( + (labelRect: LabelRect) => { + return RectLabelsExporter.wrapRectLabelIntoYOLO( + labelRect, + labelNames, + imageSize + ); + } + ); return labelRectsString.join('\n'); } private static exportAsVOC(): void { const zip = new JSZip(); LabelsSelector.getImagesData().forEach((imageData: ImageData) => { - const fileContent: string = RectLabelsExporter.wrapImageIntoVOC(imageData); - if (fileContent) { - const fileName : string = imageData.fileData.name.replace(/\.[^/.]+$/, '.xml'); - try { - zip.file(fileName, fileContent); - } catch (error) { - // TODO - throw new Error(error as string); - } + const fileContent: string = + RectLabelsExporter.wrapImageIntoVOC(imageData); + if (fileContent) { + const fileName: string = imageData.fileData.name.replace( + /\.[^/.]+$/, + '.xml' + ); + try { + zip.file(fileName, fileContent); + } catch (error) { + // TODO + throw new Error(error as string); } - }); + } + }); try { - zip.generateAsync({type:'blob'}) - .then(function(content) { - saveAs(content, `${ExporterUtil.getExportFileName()}.zip`); - }); + zip.generateAsync({type: 'blob'}).then(function (content) { + saveAs(content, `${ExporterUtil.getExportFileName()}.zip`); + }); } catch (error) { // TODO throw new Error(error as string); @@ -124,33 +165,48 @@ export class RectLabelsExporter { return null; const labelNamesList: LabelName[] = LabelsSelector.getLabelNames(); - const labelRectsString: string[] = imageData.labelRects.map((labelRect: LabelRect) => { - const labelName: LabelName = findLast(labelNamesList, {id: labelRect.labelId}); - const labelFields = !!labelName ? [ - `\t`, - `\t\t${labelName.name}`, - `\t\tUnspecified`, - `\t\t0`, - `\t\t0`, - `\t\t`, - `\t\t\t${Math.round(labelRect.rect.x)}`, - `\t\t\t${Math.round(labelRect.rect.y)}`, - `\t\t\t${Math.round(labelRect.rect.x + labelRect.rect.width)}`, - `\t\t\t${Math.round(labelRect.rect.y + labelRect.rect.height)}`, - `\t\t`, - `\t` - ] : []; - return labelFields.join('\n') - }); + const labelRectsString: string[] = imageData.labelRects.map( + (labelRect: LabelRect) => { + const labelName: LabelName = findLast(labelNamesList, { + id: labelRect.labelId + }); + const labelFields = !!labelName + ? [ + `\t`, + `\t\t${labelName.name}`, + `\t\tUnspecified`, + `\t\t0`, + `\t\t0`, + `\t\t`, + `\t\t\t${Math.round(labelRect.rect.x)}`, + `\t\t\t${Math.round(labelRect.rect.y)}`, + `\t\t\t${Math.round( + labelRect.rect.x + labelRect.rect.width + )}`, + `\t\t\t${Math.round( + labelRect.rect.y + labelRect.rect.height + )}`, + `\t\t`, + `\t` + ] + : []; + return labelFields.join('\n'); + } + ); return labelRectsString.join('\n'); } private static wrapImageIntoVOC(imageData: ImageData): string { - const labels: string = RectLabelsExporter.wrapRectLabelsIntoVOC(imageData); - const projectName: string = XMLSanitizerUtil.sanitize(GeneralSelector.getProjectName()); + const labels: string = + RectLabelsExporter.wrapRectLabelsIntoVOC(imageData); + const projectName: string = XMLSanitizerUtil.sanitize( + GeneralSelector.getProjectName() + ); if (labels) { - const image: HTMLImageElement = ImageRepository.getById(imageData.id); + const image: HTMLImageElement = ImageRepository.getById( + imageData.id + ); return [ ``, `\t${projectName}`, @@ -170,14 +226,104 @@ export class RectLabelsExporter { } return null; } + private static exportAsJSON(): void { + const zip = new JSZip(); + LabelsSelector.getImagesData().forEach((imageData: ImageData) => { + const content = + RectLabelsExporter.wrapRectLabelsIntoJSON(imageData); + if (content) { + const fileName: string = imageData.fileData.name.replace( + /\.[^/.]+$/, + '.json' + ); + try { + zip.file(fileName, JSON.stringify(content)); + } catch (error) { + // TODO + throw new Error(error as string); + } + } + }); + try { + zip.generateAsync({type: 'blob'}).then((content: Blob) => { + saveAs(content, `${ExporterUtil.getExportFileName()}.zip`); + }); + } catch (error) { + // TODO + throw new Error(error as string); + } + } + + public static wrapRectLabelsIntoJSON(imageData: ImageData): RectJSON { + if (imageData.labelRects.length === 0 || !imageData.loadStatus) + return null; + + const convertRect = (rect: IRect) => ({ + lt_x: Math.round(rect.x), + lt_y: Math.round(rect.y), + rb_x: Math.round(rect.x + rect.width), + rb_y: Math.round(rect.y + rect.height) + }); + const convertHumanId = (humanId: string) => { + const human = imageData.humans.find( + (human) => human.uuid === humanId + ); + const humanIndex = imageData.humans.findIndex( + (human) => human.uuid === humanId + ); + return `${humanIndex}:${human.gender}:${human.type}`; + }; + + const getHumanIndex = (uuid: string) => + imageData.humans.findIndex((human) => human.uuid === uuid); + + const json: RectJSON = { + //@ts-ignore + img_path: imageData.fileData.path, + writer_id: AuthSelector.getUserID(), + version: 1, + human_info: imageData.humans.map((human) => ({ + human_id: convertHumanId(human.uuid), + bounding_box: convertRect( + imageData.labelRects.find( + (labelRect) => labelRect.id === human.uuid + ).rect + ), + style: human.styles, + qc_status: human.qc_status, + box_position_rejected: human.box_position_rejected, + qc_comment: human.qc_comment, + })), + item_info: imageData.items.map((item) => ({ + item_id: `${getHumanIndex(item.humanId)}:${item.gender}:${ + item.mainCategory + }:${item.subCategory}:${item.uuid}:${item.color}:${ + item.pattern + }`, + + bounding_box: convertRect( + imageData.labelRects.find( + (labelRect) => labelRect.id === item.uuid + ).rect + ), + style: item.styles, + qc_status: item.qc_status, + box_position_rejected: item.box_position_rejected, + qc_comment: item.qc_comment, + })) + }; + return json; + } private static exportAsCSV(): void { const content: string = LabelsSelector.getImagesData() .map((imageData: ImageData) => { - return RectLabelsExporter.wrapRectLabelsIntoCSV(imageData)}) + return RectLabelsExporter.wrapRectLabelsIntoCSV(imageData); + }) .filter((imageLabelData: string) => { - return !!imageLabelData}) + return !!imageLabelData; + }) .join('\n'); const fileName: string = `${ExporterUtil.getExportFileName()}.csv`; ExporterUtil.saveAs(content, fileName); @@ -189,20 +335,26 @@ export class RectLabelsExporter { const image: HTMLImageElement = ImageRepository.getById(imageData.id); const labelNames: LabelName[] = LabelsSelector.getLabelNames(); - const labelRectsString: string[] = imageData.labelRects.map((labelRect: LabelRect) => { - const labelName: LabelName = findLast(labelNames, {id: labelRect.labelId}); - const labelFields = !!labelName ? [ - labelName.name, - Math.round(labelRect.rect.x).toString(), - Math.round(labelRect.rect.y).toString(), - Math.round(labelRect.rect.width).toString(), - Math.round(labelRect.rect.height).toString(), - imageData.fileData.name, - image.width.toString(), - image.height.toString() - ] : []; - return labelFields.join(',') - }); + const labelRectsString: string[] = imageData.labelRects.map( + (labelRect: LabelRect) => { + const labelName: LabelName = findLast(labelNames, { + id: labelRect.labelId + }); + const labelFields = !!labelName + ? [ + labelName.name, + Math.round(labelRect.rect.x).toString(), + Math.round(labelRect.rect.y).toString(), + Math.round(labelRect.rect.width).toString(), + Math.round(labelRect.rect.height).toString(), + imageData.fileData.name, + image.width.toString(), + image.height.toString() + ] + : []; + return labelFields.join(','); + } + ); return labelRectsString.join('\n'); } } diff --git a/src/logic/imageRepository/ImageRepository.ts b/src/logic/imageRepository/ImageRepository.ts index fa819ef26..666b7840a 100644 --- a/src/logic/imageRepository/ImageRepository.ts +++ b/src/logic/imageRepository/ImageRepository.ts @@ -1,6 +1,6 @@ -import {zip} from "lodash"; +import {zip} from 'lodash'; -export type ImageMap = { [s: string]: HTMLImageElement; }; +export type ImageMap = {[s: string]: HTMLImageElement}; export class ImageRepository { private static repository: ImageMap = {}; @@ -12,10 +12,15 @@ export class ImageRepository { public static storeImages(ids: string[], images: HTMLImageElement[]) { zip(ids, images).forEach((pair: [string, HTMLImageElement]) => { ImageRepository.storeImage(...pair); - }) + }); } public static getById(uuid: string): HTMLImageElement { + // console.log( + // 'ImageRepository.repository = ', + // ImageRepository.repository + // ); + return ImageRepository.repository[uuid]; } -} \ No newline at end of file +} diff --git a/src/logic/import/MJ/MJErrors.ts b/src/logic/import/MJ/MJErrors.ts new file mode 100644 index 000000000..6bc1c02b3 --- /dev/null +++ b/src/logic/import/MJ/MJErrors.ts @@ -0,0 +1,40 @@ +export class MJAnnotationsLoadingError extends Error { + constructor(message) { + super(message); + this.name = 'MJAnnotationsLoadingError'; + } +} + +export class MJLabelsReadingError extends MJAnnotationsLoadingError { + constructor() { + super( + 'Unexpected error occurred during reading label names from labels.txt file' + ); + this.name = 'MJLabelsLoadingError'; + } +} + +export class NoLabelNamesFileProvidedError extends MJAnnotationsLoadingError { + constructor() { + super( + 'For MJ labels to be loaded correctly, labels.txt file is required' + ); + this.name = 'NoLabelNamesFileProvidedError'; + } +} + +export class LabelNamesNotUniqueError extends MJAnnotationsLoadingError { + constructor() { + super('Label names listed in labels.txt file should be unique'); + this.name = 'LabelNamesNotUniqueError'; + } +} + +export class AnnotationsParsingError extends MJAnnotationsLoadingError { + constructor(imageName: string) { + super( + `Unexpected error occurred during parsing of ${imageName} annotations file` + ); + this.name = 'AnnotationsParsingError'; + } +} diff --git a/src/logic/import/MJ/MJImporter.ts b/src/logic/import/MJ/MJImporter.ts new file mode 100644 index 000000000..2a07839a4 --- /dev/null +++ b/src/logic/import/MJ/MJImporter.ts @@ -0,0 +1,178 @@ +import {AnnotationImporter} from '../AnnotationImporter'; +import {ImageData, LabelName} from '../../../store/labels/types'; +import {FileUtil} from '../../../utils/FileUtil'; +import {ArrayUtil} from '../../../utils/ArrayUtil'; +import {NoLabelNamesFileProvidedError} from './MJErrors'; +import {LabelsSelector} from '../../../store/selectors/LabelsSelector'; +import {MJUtils} from './MJUtils'; +import {ImageDataUtil} from '../../../utils/ImageDataUtil'; +import {zip, find} from 'lodash'; +import {ImageRepository} from '../../imageRepository/ImageRepository'; + +export type MJFilesSpec = { + labelNameFile: File; + annotationFiles: File[]; +}; + +export class MJImporter extends AnnotationImporter { + private static labelsFileName: string = 'labels.txt'; + + public import( + filesData: File[], + onSuccess: (imagesData: ImageData[], labelNames: LabelName[]) => any, + onFailure: (error?: Error) => any + ): void { + try { + const sourceImagesData = LabelsSelector.getImagesData().map( + (i: ImageData) => ImageDataUtil.cleanAnnotations(i) + ); + const {labelNameFile, annotationFiles} = MJImporter.filterFilesData( + filesData, + sourceImagesData + ); + const [relevantImageData, relevantAnnotations] = + MJImporter.matchImagesWithAnnotations( + sourceImagesData, + annotationFiles + ); + const labelNamesPromise: Promise = Promise.resolve([]); + // Cause we do not use label name in mj import + // FileUtil.readFile( + // labelNameFile + // ).then((fileContent: string) => + // MJUtils.parseLabelsNamesFromString(fileContent) + // ); + const missingImagesPromise: Promise = + ImageDataUtil.loadMissingImages(relevantImageData); + const annotationFilesPromise: Promise = + FileUtil.readFiles(relevantAnnotations); + Promise.all([ + labelNamesPromise, + missingImagesPromise, + annotationFilesPromise + ]) + .then((values: [LabelName[], void, string[]]) => { + const [labelNames, , annotationsRaw] = values; + const resultImageData = zip( + relevantImageData, + annotationsRaw + ).map((pair: [ImageData, string]) => + MJImporter.applyAnnotations( + pair[0], + pair[1], + labelNames + ) + ); + onSuccess( + MJImporter.injectImageDataWithAnnotations( + sourceImagesData, + resultImageData + ), + labelNames + ); + }) + .catch((error: Error) => onFailure(error)); + } catch (error) { + onFailure(error as Error); + } + } + + public static filterFilesData( + filesData: File[], + imagesData: ImageData[] + ): MJFilesSpec { + const functionalityPartitionResult = ArrayUtil.partition( + filesData, + (i: File) => i.name === MJImporter.labelsFileName + ); + // if (functionalityPartitionResult.pass.length !== 1) { + // throw new NoLabelNamesFileProvidedError(); + // } + const imageIdentifiers: string[] = imagesData + .map((i: ImageData) => i.fileData.name) + .map((i: string) => FileUtil.extractFileName(i)); + const matchingPartitionResult = ArrayUtil.partition( + filesData, + (i: File) => + imageIdentifiers.includes(FileUtil.extractFileName(i.name)) + ); + return { + labelNameFile: functionalityPartitionResult.pass[0], + annotationFiles: matchingPartitionResult.pass + }; + } + + public static matchImagesWithAnnotations( + images: ImageData[], + annotations: File[] + ): [ImageData[], File[]] { + const predicate = (image: ImageData, annotation: File) => { + return ( + FileUtil.extractFileName(image.fileData.name) === + FileUtil.extractFileName(annotation.name) + ); + }; + return ArrayUtil.unzip( + ArrayUtil.match(images, annotations, predicate) + ); + } + + public static applyAnnotations( + imageData: ImageData, + rawAnnotations: string, + labelNames: LabelName[] + ): ImageData { + // console.log('rawAnnotation = ', rawAnnotations); + + const image: HTMLImageElement = ImageRepository.getById(imageData.id); + + const {labelRects, humans, items} = MJUtils.parseMJAnnotationsFromJSON( + rawAnnotations, + labelNames, + { + //@ts-ignore + width: imageData.fileData.width, + //@ts-ignore + height: imageData.fileData.height + }, + imageData.fileData.name + ); + imageData.labelRects = labelRects; + imageData.humans = humans; + imageData.items = items; + + // console.log('imageData = ', imageData); + return imageData; + } + public static applyAnnotationsFromFile( + imageData: ImageData, + rawAnnotations: string, + labelNames: LabelName[] + ): ImageData { + // console.log('rawAnnotation = ', rawAnnotations); + + const image: HTMLImageElement = ImageRepository.getById(imageData.id); + + const {labelRects, humans, items} = MJUtils.parseMJAnnotationsFromJSON( + rawAnnotations, + labelNames, + {width: image.width, height: image.height}, + imageData.fileData.name + ); + imageData.labelRects = labelRects; + imageData.humans = humans; + imageData.items = items; + + console.log('imageData = ', imageData); + return imageData; + } + public static injectImageDataWithAnnotations( + sourceImageData: ImageData[], + annotatedImageData: ImageData[] + ): ImageData[] { + return sourceImageData.map((i: ImageData) => { + const result = find(annotatedImageData, {id: i.id}); + return !!result ? result : i; + }); + } +} diff --git a/src/logic/import/MJ/MJUtils.ts b/src/logic/import/MJ/MJUtils.ts new file mode 100644 index 000000000..016bb8f10 --- /dev/null +++ b/src/logic/import/MJ/MJUtils.ts @@ -0,0 +1,198 @@ +import { + HumanInfo, + ItemInfo, + LabelName, + LabelRect, + RectJSON +} from '../../../store/labels/types'; +import {LabelUtil} from '../../../utils/LabelUtil'; +import {AnnotationsParsingError, LabelNamesNotUniqueError} from './MJErrors'; +import {ISize} from '../../../interfaces/ISize'; +import _, {uniq} from 'lodash'; +import {v4 as uuidv4} from 'uuid'; +import {LabelModeType} from '../../../data/enums/LabelType'; +import {LabelStatus} from '../../../data/enums/LabelStatus'; + +export class MJUtils { + public static parseLabelsNamesFromString(content: string): LabelName[] { + return []; + // const labelNames: string[] = content + // .split(/[\r\n]/) + // .filter(Boolean) + // .map((name: string) => name.replace(/\s/g, '')); + + // if (uniq(labelNames).length !== labelNames.length) { + // throw new LabelNamesNotUniqueError(); + // } + + // return labelNames.map((name: string) => + // LabelUtil.createLabelName(name) + // ); + } + + public static loadLabelsList( + fileData: File, + onSuccess: (labels: LabelName[]) => any, + onFailure: () => any + ) { + const reader = new FileReader(); + reader.onloadend = function (evt: any) { + const content: string = evt.target.result; + const labelNames = MJUtils.parseLabelsNamesFromString(content); + onSuccess(labelNames); + }; + reader.onerror = () => onFailure(); + reader.readAsText(fileData); + } + + public static parseMJAnnotationsFromJSON( + rawAnnotation: string | object, + labelNames: LabelName[], + imageSize: ISize, + imageName: string + ): {labelRects: LabelRect[]; humans: HumanInfo[]; items: ItemInfo[]} { + let annotation = rawAnnotation as RectJSON; + if (typeof rawAnnotation === 'string') { + annotation = JSON.parse(rawAnnotation) as RectJSON; + } + // console.log(131231, annotation) + + const humansLabelRects: LabelRect[] = annotation.human_info.map( + (human) => { + const {lt_x, lt_y, rb_x, rb_y} = human.bounding_box; + const rectX: number = lt_x; + const rectY: number = lt_y; + const rectWidth: number = Math.abs(rb_x - lt_x); + const rectHeight: number = Math.abs(rb_y - lt_y); + const qc_status: string = human.qc_status + const box_position_rejected: string = human.box_position_rejected + const qc_comment: string = human.qc_comment + // console.log('rect = ', rectX, rectY, rectWidth, rectHeight); + const rect = { + x: rectX, + y: rectY, + width: rectWidth, + height: rectHeight, + }; + if(!human?.style) { + human['style'] = ['UNKNOWN']; + } + const aLabel = LabelUtil.createLabelRect(human.style[0], rect); + aLabel.mode = LabelModeType.HUMAN; + aLabel.qc_status = qc_status + aLabel.box_position_rejected = box_position_rejected + aLabel.qc_comment = qc_comment + return aLabel; + } + ); + const itemsLabelRects: LabelRect[] = annotation.item_info.map( + (item) => { + const {lt_x, lt_y, rb_x, rb_y} = item.bounding_box; + const rectX: number = lt_x; + const rectY: number = lt_y; + const rectWidth: number = Math.abs(rb_x - lt_x); + const rectHeight: number = Math.abs(rb_y - lt_y); + const qc_status: string = item.qc_status + const box_position_rejected: string = item.box_position_rejected + const qc_comment: string = item.qc_comment + // console.log('rect = ', rectX, rectY, rectWidth, rectHeight); + const rect = { + x: rectX, + y: rectY, + width: rectWidth, + height: rectHeight + }; + if(!item?.style) { + item['style'] = ['UNKNOWN'] + } + const aLabel = LabelUtil.createLabelRect(item.style[0], rect); + const [, , , , uuid, ,] = item.item_id.split(':'); + aLabel.mode = LabelModeType.ITEM; + aLabel.id = uuid; + aLabel.qc_status = qc_status + aLabel.box_position_rejected = box_position_rejected + aLabel.qc_comment = qc_comment + return aLabel; + } + ); + + const humans = annotation.human_info.map((human, humanIndex) => { + const [id, gender, type] = human.human_id.split(':'); + + return { + uuid: humansLabelRects[humanIndex].id, + id: parseInt(id), + gender: parseInt(gender), + type: parseInt(type), + styles: human.style, + styleScore: human.style_score?.split(":").map((score, i) => ({style: human.style_candidates.split(":")[i], score: parseFloat(score)})), + genderScore: human.gender_score, + qc_comment: human.qc_comment, + qc_status: human.qc_status, + box_position_rejected: human.box_position_rejected + }; + }); + const items = annotation.item_info.map((item, itemIdx) => { + const [ + humanIdx, + gender, + mainCategory, + subCategory, + uuid, + color, + pattern + ] = item.item_id.split(':'); + return { + uuid, + id: itemIdx, + humanId: + humans.find((human) => human.id === parseInt(humanIdx)) + ?.uuid || '-1', + gender: parseInt(gender), + mainCategory: parseInt(mainCategory), + subCategory: parseInt(subCategory), + color: parseInt(color), + pattern: parseInt(pattern), + styles: item.style, + colorScore: item.color_score?.split(":").map((score, i) => ({color: parseInt(item.colors.split(":")[i]), score: parseFloat(score)})), + patternScore: item.pattern_score?.split(":").map((score, i) => ({pattern: parseInt(item.patterns.split(":")[i]), score: parseFloat(score)})), + itemScore: item.item_score, + qc_comment: item.qc_comment, + qc_status: item.qc_status, + box_position_rejected: item.box_position_rejected + }; + }); + + return { + labelRects: [...humansLabelRects, ...itemsLabelRects], + humans, + items + }; + } + + public static validateMJAnnotationComponents( + components: RectJSON, + labelNamesCount: number + ): boolean { + // const validateCoordinateValue = (rawValue: string): boolean => { + // const floatValue: number = Number(rawValue); + // return !isNaN(floatValue) && 0.0 <= floatValue && floatValue <= 1.0; + // }; + // const validateLabelIdx = (rawValue: string): boolean => { + // const intValue: number = parseInt(rawValue); + // return ( + // !isNaN(intValue) && 0 <= intValue && intValue < labelNamesCount + // ); + // }; + + // return [ + // components.length === 5, + // validateLabelIdx(components[0]), + // validateCoordinateValue(components[1]), + // validateCoordinateValue(components[2]), + // validateCoordinateValue(components[3]), + // validateCoordinateValue(components[4]) + // ].every(Boolean); + return true; + } +} diff --git a/src/logic/render/BaseRenderEngine.ts b/src/logic/render/BaseRenderEngine.ts index 1f07b9ae1..c251011a5 100644 --- a/src/logic/render/BaseRenderEngine.ts +++ b/src/logic/render/BaseRenderEngine.ts @@ -41,22 +41,40 @@ export abstract class BaseRenderEngine { abstract isInProgress(): boolean; - protected static resolveLabelLineColor(labelId: string, isActive: boolean): string { - const perClassColor: boolean = GeneralSelector.getEnablePerClassColorationStatus(); + protected static resolveLabelLineColor( + labelId: string, + isActive: boolean + ): string { + const perClassColor: boolean = + GeneralSelector.getEnablePerClassColorationStatus(); if (perClassColor) { - const labelName: LabelName | null = LabelsSelector.getLabelNameById(labelId); - return labelName ? labelName.color : RenderEngineSettings.DEFAULT_LINE_COLOR; + const labelName: LabelName | null = + LabelsSelector.getLabelNameById(labelId); + return labelName + ? labelName.color + : RenderEngineSettings.DEFAULT_LINE_COLOR; } else { - return isActive ? RenderEngineSettings.ACTIVE_LINE_COLOR : RenderEngineSettings.INACTIVE_LINE_COLOR; + return isActive + ? RenderEngineSettings.ACTIVE_LINE_COLOR + : RenderEngineSettings.INACTIVE_LINE_COLOR; } } protected static resolveLabelAnchorColor(isActive: boolean): string { - const perClassColor: boolean = GeneralSelector.getEnablePerClassColorationStatus(); + const perClassColor: boolean = + GeneralSelector.getEnablePerClassColorationStatus(); if (perClassColor) { return RenderEngineSettings.DEFAULT_ANCHOR_COLOR; } else { - return isActive ? RenderEngineSettings.ACTIVE_ANCHOR_COLOR : RenderEngineSettings.INACTIVE_ANCHOR_COLOR; + return isActive + ? RenderEngineSettings.ACTIVE_ANCHOR_COLOR + : RenderEngineSettings.INACTIVE_ANCHOR_COLOR; } } + + protected static resolveLineColorByMode(mode: string): string { + return mode === 'HUMAN' + ? RenderEngineSettings.DEFAULT_HUMAN_LINE_COLOR + : RenderEngineSettings.DEFAULT_ITEM_LINE_COLOR; + } } diff --git a/src/logic/render/RectRenderEngine.ts b/src/logic/render/RectRenderEngine.ts index 0a6b8e217..ec8f4b920 100644 --- a/src/logic/render/RectRenderEngine.ts +++ b/src/logic/render/RectRenderEngine.ts @@ -3,8 +3,14 @@ import {IRect} from '../../interfaces/IRect'; import {RectUtil} from '../../utils/RectUtil'; import {DrawUtil} from '../../utils/DrawUtil'; import {store} from '../..'; -import {ImageData, LabelRect} from '../../store/labels/types'; import { + HumanInfo, + ImageData, + ItemInfo, + LabelRect +} from '../../store/labels/types'; +import { + updateActiveHumanID, updateActiveLabelId, updateFirstLabelCreatedFlag, updateHighlightedLabelId, @@ -19,14 +25,14 @@ import {LabelsSelector} from '../../store/selectors/LabelsSelector'; import {EditorData} from '../../data/EditorData'; import {BaseRenderEngine} from './BaseRenderEngine'; import {RenderEngineUtil} from '../../utils/RenderEngineUtil'; -import {LabelType} from '../../data/enums/LabelType'; +import {LabelModeType, LabelType} from '../../data/enums/LabelType'; import {EditorActions} from '../actions/EditorActions'; import {GeneralSelector} from '../../store/selectors/GeneralSelector'; import {LabelStatus} from '../../data/enums/LabelStatus'; import {LabelUtil} from '../../utils/LabelUtil'; +import {JSONUploadStatus} from '../../data/enums/JSONUploadStatus'; export class RectRenderEngine extends BaseRenderEngine { - // ================================================================================================================= // STATE // ================================================================================================================= @@ -44,24 +50,49 @@ export class RectRenderEngine extends BaseRenderEngine { // ================================================================================================================= public mouseDownHandler = (data: EditorData) => { - const isMouseOverImage: boolean = RenderEngineUtil.isMouseOverImage(data); - const isMouseOverCanvas: boolean = RenderEngineUtil.isMouseOverCanvas(data); + const isMouseOverImage: boolean = + RenderEngineUtil.isMouseOverImage(data); + const isMouseOverCanvas: boolean = + RenderEngineUtil.isMouseOverCanvas(data); if (isMouseOverCanvas) { const rectUnderMouse: LabelRect = this.getRectUnderMouse(data); if (!!rectUnderMouse) { - const rect: IRect = this.calculateRectRelativeToActiveImage(rectUnderMouse.rect, data); - const anchorUnderMouse: RectAnchor = this.getAnchorUnderMouseByRect(rect, data.mousePositionOnViewPortContent, data.viewPortContentImageRect); - if (!!anchorUnderMouse && rectUnderMouse.status === LabelStatus.ACCEPTED) { + const rect: IRect = this.calculateRectRelativeToActiveImage( + rectUnderMouse.rect, + data + ); + const anchorUnderMouse: RectAnchor = + this.getAnchorUnderMouseByRect( + rect, + data.mousePositionOnViewPortContent, + data.viewPortContentImageRect + ); + if ( + !!anchorUnderMouse && + rectUnderMouse.status === LabelStatus.ACCEPTED + ) { store.dispatch(updateActiveLabelId(rectUnderMouse.id)); + store.dispatch(updateActiveHumanID(rectUnderMouse.id)); this.startRectResize(anchorUnderMouse); } else { - if (!!LabelsSelector.getHighlightedLabelId()) - store.dispatch(updateActiveLabelId(LabelsSelector.getHighlightedLabelId())); - else - this.startRectCreation(data.mousePositionOnViewPortContent); + if (!!LabelsSelector.getHighlightedLabelId()) { + store.dispatch( + updateActiveLabelId( + LabelsSelector.getHighlightedLabelId() + ) + ); + store.dispatch( + updateActiveHumanID( + LabelsSelector.getHighlightedLabelId() + ) + ); + } else { + this.startRectCreation( + data.mousePositionOnViewPortContent + ); + } } } else if (isMouseOverImage) { - this.startRectCreation(data.mousePositionOnViewPortContent); } } @@ -69,57 +100,110 @@ export class RectRenderEngine extends BaseRenderEngine { public mouseUpHandler = (data: EditorData) => { if (!!data.viewPortContentImageRect) { - const mousePositionSnapped: IPoint = RectUtil.snapPointToRect(data.mousePositionOnViewPortContent, data.viewPortContentImageRect); - const activeLabelRect: LabelRect = LabelsSelector.getActiveRectLabel(); - - if (!!this.startCreateRectPoint && !PointUtil.equals(this.startCreateRectPoint, mousePositionSnapped)) { - - const minX: number = Math.min(this.startCreateRectPoint.x, mousePositionSnapped.x); - const minY: number = Math.min(this.startCreateRectPoint.y, mousePositionSnapped.y); - const maxX: number = Math.max(this.startCreateRectPoint.x, mousePositionSnapped.x); - const maxY: number = Math.max(this.startCreateRectPoint.y, mousePositionSnapped.y); - - const rect = {x: minX, y: minY, width: maxX - minX, height: maxY - minY}; - this.addRectLabel(RenderEngineUtil.transferRectFromImageToViewPortContent(rect, data)); + const mousePositionSnapped: IPoint = RectUtil.snapPointToRect( + data.mousePositionOnViewPortContent, + data.viewPortContentImageRect + ); + const activeLabelRect: LabelRect = + LabelsSelector.getActiveRectLabel(); + + if ( + !!this.startCreateRectPoint && + !PointUtil.equals( + this.startCreateRectPoint, + mousePositionSnapped + ) + ) { + const minX: number = Math.min( + this.startCreateRectPoint.x, + mousePositionSnapped.x + ); + const minY: number = Math.min( + this.startCreateRectPoint.y, + mousePositionSnapped.y + ); + const maxX: number = Math.max( + this.startCreateRectPoint.x, + mousePositionSnapped.x + ); + const maxY: number = Math.max( + this.startCreateRectPoint.y, + mousePositionSnapped.y + ); + + const rect = { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY + }; + this.addRectLabel( + RenderEngineUtil.transferRectFromImageToViewPortContent( + rect, + data + ) + ); } if (!!this.startResizeRectAnchor && !!activeLabelRect) { - const rect: IRect = this.calculateRectRelativeToActiveImage(activeLabelRect.rect, data); - const startAnchorPosition: IPoint = PointUtil.add(this.startResizeRectAnchor.position, - data.viewPortContentImageRect); - const delta: IPoint = PointUtil.subtract(mousePositionSnapped, startAnchorPosition); - const resizeRect: IRect = RectUtil.resizeRect(rect, this.startResizeRectAnchor.type, delta); - const scale: number = RenderEngineUtil.calculateImageScale(data); + const rect: IRect = this.calculateRectRelativeToActiveImage( + activeLabelRect.rect, + data + ); + const startAnchorPosition: IPoint = PointUtil.add( + this.startResizeRectAnchor.position, + data.viewPortContentImageRect + ); + const delta: IPoint = PointUtil.subtract( + mousePositionSnapped, + startAnchorPosition + ); + const resizeRect: IRect = RectUtil.resizeRect( + rect, + this.startResizeRectAnchor.type, + delta + ); + const scale: number = + RenderEngineUtil.calculateImageScale(data); const scaledRect: IRect = RectUtil.scaleRect(resizeRect, scale); const imageData = LabelsSelector.getActiveImageData(); - imageData.labelRects = imageData.labelRects.map((labelRect: LabelRect) => { - if (labelRect.id === activeLabelRect.id) { - return { - ...labelRect, - rect: scaledRect - }; + imageData.labelRects = imageData.labelRects.map( + (labelRect: LabelRect) => { + if (labelRect.id === activeLabelRect.id) { + return { + ...labelRect, + rect: scaledRect + }; + } + return labelRect; } - return labelRect; - }); + ); + imageData.uploadStatus = JSONUploadStatus.NEED_UPLOAD; store.dispatch(updateImageDataById(imageData.id, imageData)); } } - this.endRectTransformation() + this.endRectTransformation(); }; public mouseMoveHandler = (data: EditorData) => { - if (!!data.viewPortContentImageRect && !!data.mousePositionOnViewPortContent) { - const isOverImage: boolean = RenderEngineUtil.isMouseOverImage(data); + if ( + !!data.viewPortContentImageRect && + !!data.mousePositionOnViewPortContent + ) { + const isOverImage: boolean = + RenderEngineUtil.isMouseOverImage(data); if (isOverImage && !this.startResizeRectAnchor) { const labelRect: LabelRect = this.getRectUnderMouse(data); if (!!labelRect && !this.isInProgress()) { - if (LabelsSelector.getHighlightedLabelId() !== labelRect.id) { - store.dispatch(updateHighlightedLabelId(labelRect.id)) + if ( + LabelsSelector.getHighlightedLabelId() !== labelRect.id + ) { + store.dispatch(updateHighlightedLabelId(labelRect.id)); } } else { if (LabelsSelector.getHighlightedLabelId() !== null) { - store.dispatch(updateHighlightedLabelId(null)) + store.dispatch(updateHighlightedLabelId(null)); } } } @@ -133,84 +217,189 @@ export class RectRenderEngine extends BaseRenderEngine { public render(data: EditorData) { const activeLabelId: string = LabelsSelector.getActiveLabelId(); const imageData: ImageData = LabelsSelector.getActiveImageData(); + if (!data.realImageSize) return null; if (imageData) { imageData.labelRects.forEach((labelRect: LabelRect) => { - if (labelRect.status === LabelStatus.ACCEPTED && labelRect.id === activeLabelId) { - this.drawActiveRect(labelRect, data) + if ( + labelRect.status === LabelStatus.ACCEPTED && + labelRect.id === activeLabelId + ) { + this.drawActiveRect(labelRect, data); } else { this.drawInactiveRect(labelRect, data); } }); - this.drawCurrentlyCreatedRect(data.mousePositionOnViewPortContent, data.viewPortContentImageRect); + this.drawCurrentlyCreatedRect( + data.mousePositionOnViewPortContent, + data.viewPortContentImageRect + ); this.updateCursorStyle(data); } } private drawCurrentlyCreatedRect(mousePosition: IPoint, imageRect: IRect) { if (!!this.startCreateRectPoint) { - const mousePositionSnapped: IPoint = RectUtil.snapPointToRect(mousePosition, imageRect); + const mousePositionSnapped: IPoint = RectUtil.snapPointToRect( + mousePosition, + imageRect + ); const activeRect: IRect = { x: this.startCreateRectPoint.x, y: this.startCreateRectPoint.y, width: mousePositionSnapped.x - this.startCreateRectPoint.x, height: mousePositionSnapped.y - this.startCreateRectPoint.y }; - const activeRectBetweenPixels = RenderEngineUtil.setRectBetweenPixels(activeRect); - const lineColor: string = BaseRenderEngine.resolveLabelLineColor(null, true) - DrawUtil.drawRect(this.canvas, activeRectBetweenPixels, lineColor, RenderEngineSettings.LINE_THICKNESS); + const activeRectBetweenPixels = + RenderEngineUtil.setRectBetweenPixels(activeRect); + const lineColor: string = BaseRenderEngine.resolveLabelLineColor( + null, + true + ); + DrawUtil.drawRect( + this.canvas, + activeRectBetweenPixels, + lineColor, + RenderEngineSettings.LINE_THICKNESS + ); } } private drawInactiveRect(labelRect: LabelRect, data: EditorData) { - const rectOnImage: IRect = RenderEngineUtil.transferRectFromViewPortContentToImage(labelRect.rect, data) - const highlightedLabelId: string = LabelsSelector.getHighlightedLabelId() - const displayAsActive: boolean = labelRect.status === LabelStatus.ACCEPTED && labelRect.id === highlightedLabelId; - const lineColor: string = BaseRenderEngine.resolveLabelLineColor(labelRect.labelId, displayAsActive) - const anchorColor: string = BaseRenderEngine.resolveLabelAnchorColor(displayAsActive); - this.renderRect(rectOnImage, displayAsActive, lineColor, anchorColor); + const rectOnImage: IRect = + RenderEngineUtil.transferRectFromViewPortContentToImage( + labelRect.rect, + data + ); + const highlightedLabelId: string = + LabelsSelector.getHighlightedLabelId(); + const displayAsActive: boolean = + labelRect.status === LabelStatus.ACCEPTED && + labelRect.id === highlightedLabelId; + const lineColor: string = BaseRenderEngine.resolveLineColorByMode( + labelRect.mode + ); + const anchorColor: string = + BaseRenderEngine.resolveLabelAnchorColor(displayAsActive); + this.renderRect( + rectOnImage, + displayAsActive, + lineColor, + anchorColor, + GeneralSelector.getFillMode() + ); } private drawActiveRect(labelRect: LabelRect, data: EditorData) { - let rect: IRect = this.calculateRectRelativeToActiveImage(labelRect.rect, data); + let rect: IRect = this.calculateRectRelativeToActiveImage( + labelRect.rect, + data + ); if (!!this.startResizeRectAnchor) { - const startAnchorPosition: IPoint = PointUtil.add(this.startResizeRectAnchor.position, data.viewPortContentImageRect); - const endAnchorPositionSnapped: IPoint = RectUtil.snapPointToRect(data.mousePositionOnViewPortContent, data.viewPortContentImageRect); - const delta = PointUtil.subtract(endAnchorPositionSnapped, startAnchorPosition); - rect = RectUtil.resizeRect(rect, this.startResizeRectAnchor.type, delta); + const startAnchorPosition: IPoint = PointUtil.add( + this.startResizeRectAnchor.position, + data.viewPortContentImageRect + ); + const endAnchorPositionSnapped: IPoint = RectUtil.snapPointToRect( + data.mousePositionOnViewPortContent, + data.viewPortContentImageRect + ); + const delta = PointUtil.subtract( + endAnchorPositionSnapped, + startAnchorPosition + ); + rect = RectUtil.resizeRect( + rect, + this.startResizeRectAnchor.type, + delta + ); } - const rectOnImage: IRect = RectUtil.translate(rect, data.viewPortContentImageRect); - const lineColor: string = BaseRenderEngine.resolveLabelLineColor(labelRect.labelId, true) - const anchorColor: string = BaseRenderEngine.resolveLabelAnchorColor(true); - this.renderRect(rectOnImage, true, lineColor, anchorColor); + const rectOnImage: IRect = RectUtil.translate( + rect, + data.viewPortContentImageRect + ); + const lineColor: string = BaseRenderEngine.resolveLabelLineColor( + labelRect.labelId, + true + ); + const anchorColor: string = + BaseRenderEngine.resolveLabelAnchorColor(true); + this.renderRect( + rectOnImage, + true, + lineColor, + anchorColor, + GeneralSelector.getFillMode() + ); } - private renderRect(rectOnImage: IRect, isActive: boolean, lineColor: string, anchorColor: string) { - const rectBetweenPixels = RenderEngineUtil.setRectBetweenPixels(rectOnImage); - DrawUtil.drawRectWithFill(this.canvas, rectBetweenPixels, DrawUtil.hexToRGB(lineColor, 0.2)); - DrawUtil.drawRect(this.canvas, rectBetweenPixels, lineColor, RenderEngineSettings.LINE_THICKNESS); + private renderRect( + rectOnImage: IRect, + isActive: boolean, + lineColor: string, + anchorColor: string, + fillMode: boolean + ) { + const rectBetweenPixels = + RenderEngineUtil.setRectBetweenPixels(rectOnImage); + if (fillMode) { + DrawUtil.drawRectWithFill( + this.canvas, + rectBetweenPixels, + DrawUtil.hexToRGB(lineColor, 0.2) + ); + } + DrawUtil.drawRect( + this.canvas, + rectBetweenPixels, + lineColor, + RenderEngineSettings.LINE_THICKNESS + ); if (isActive) { - const handleCenters: IPoint[] = RectUtil.mapRectToAnchors(rectOnImage).map((rectAnchor: RectAnchor) => rectAnchor.position); + const handleCenters: IPoint[] = RectUtil.mapRectToAnchors( + rectOnImage + ).map((rectAnchor: RectAnchor) => rectAnchor.position); handleCenters.forEach((center: IPoint) => { - const handleRect: IRect = RectUtil.getRectWithCenterAndSize(center, RenderEngineSettings.anchorSize); - const handleRectBetweenPixels: IRect = RenderEngineUtil.setRectBetweenPixels(handleRect); - DrawUtil.drawRectWithFill(this.canvas, handleRectBetweenPixels, anchorColor); - }) + const handleRect: IRect = RectUtil.getRectWithCenterAndSize( + center, + RenderEngineSettings.anchorSize + ); + const handleRectBetweenPixels: IRect = + RenderEngineUtil.setRectBetweenPixels(handleRect); + DrawUtil.drawRectWithFill( + this.canvas, + handleRectBetweenPixels, + anchorColor + ); + }); } } private updateCursorStyle(data: EditorData) { - if (!!this.canvas && !!data.mousePositionOnViewPortContent && !GeneralSelector.getImageDragModeStatus()) { + if ( + !!this.canvas && + !!data.mousePositionOnViewPortContent && + !GeneralSelector.getImageDragModeStatus() + ) { const rectUnderMouse: LabelRect = this.getRectUnderMouse(data); - const rectAnchorUnderMouse: RectAnchor = this.getAnchorUnderMouse(data); - if ((!!rectAnchorUnderMouse && rectUnderMouse && rectUnderMouse.status === LabelStatus.ACCEPTED) || !!this.startResizeRectAnchor) { + const rectAnchorUnderMouse: RectAnchor = + this.getAnchorUnderMouse(data); + if ( + (!!rectAnchorUnderMouse && + rectUnderMouse && + rectUnderMouse.status === LabelStatus.ACCEPTED) || + !!this.startResizeRectAnchor + ) { store.dispatch(updateCustomCursorStyle(CustomCursorStyle.MOVE)); return; - } - else if (RenderEngineUtil.isMouseOverCanvas(data)) { - if (!RenderEngineUtil.isMouseOverImage(data) && !!this.startCreateRectPoint) - store.dispatch(updateCustomCursorStyle(CustomCursorStyle.MOVE)); - else - RenderEngineUtil.wrapDefaultCursorStyleInCancel(data); + } else if (RenderEngineUtil.isMouseOverCanvas(data)) { + if ( + !RenderEngineUtil.isMouseOverImage(data) && + !!this.startCreateRectPoint + ) + store.dispatch( + updateCustomCursorStyle(CustomCursorStyle.MOVE) + ); + else RenderEngineUtil.wrapDefaultCursorStyleInCancel(data); this.canvas.style.cursor = 'none'; } else { this.canvas.style.cursor = 'default'; @@ -226,16 +415,48 @@ export class RectRenderEngine extends BaseRenderEngine { return !!this.startCreateRectPoint || !!this.startResizeRectAnchor; } - private calculateRectRelativeToActiveImage(rect: IRect, data: EditorData):IRect { + private calculateRectRelativeToActiveImage( + rect: IRect, + data: EditorData + ): IRect { const scale: number = RenderEngineUtil.calculateImageScale(data); - return RectUtil.scaleRect(rect, 1/scale); + return RectUtil.scaleRect(rect, 1 / scale); } private addRectLabel = (rect: IRect) => { const activeLabelId = LabelsSelector.getActiveLabelNameId(); const imageData: ImageData = LabelsSelector.getActiveImageData(); - const labelRect: LabelRect = LabelUtil.createLabelRect(activeLabelId, rect); + const labelRect: LabelRect = LabelUtil.createLabelRect( + activeLabelId, + rect + ); + if (LabelsSelector.getActiveLabelMode() === LabelModeType.HUMAN) { + const humanInfo: HumanInfo = { + uuid: labelRect.id, + id: imageData.humans.length, + gender: LabelsSelector.getActiveGender(), + type: LabelsSelector.getActiveHumanType(), + styles: LabelsSelector.getActiveStyles() + }; + imageData.humans.push(humanInfo); + store.dispatch(updateActiveHumanID(labelRect.id)); + } else { + const itemInfo: ItemInfo = { + uuid: labelRect.id, + id: imageData.items.length, + humanId: LabelsSelector.getActiveHumanID(), + gender: LabelsSelector.getActiveGender(), + mainCategory: LabelsSelector.getActiveMainCategory(), + subCategory: LabelsSelector.getActiveSubCategory(), + color: LabelsSelector.getActiveColor(), + pattern: LabelsSelector.getActivePattern(), + styles: LabelsSelector.getActiveStyles() + }; + imageData.items.push(itemInfo); + } imageData.labelRects.push(labelRect); + imageData.uploadStatus = JSONUploadStatus.NEED_UPLOAD; + store.dispatch(updateImageDataById(imageData.id, imageData)); store.dispatch(updateFirstLabelCreatedFlag(true)); store.dispatch(updateActiveLabelId(labelRect.id)); @@ -243,11 +464,15 @@ export class RectRenderEngine extends BaseRenderEngine { private getRectUnderMouse(data: EditorData): LabelRect { const activeRectLabel: LabelRect = LabelsSelector.getActiveRectLabel(); - if (!!activeRectLabel && this.isMouseOverRectEdges(activeRectLabel.rect, data)) { + if ( + !!activeRectLabel && + this.isMouseOverRectEdges(activeRectLabel.rect, data) + ) { return activeRectLabel; } - const labelRects: LabelRect[] = LabelsSelector.getActiveImageData().labelRects; + const labelRects: LabelRect[] = + LabelsSelector.getActiveImageData().labelRects; for (let i = 0; i < labelRects.length; i++) { if (this.isMouseOverRectEdges(labelRects[i].rect, data)) { return labelRects[i]; @@ -258,7 +483,9 @@ export class RectRenderEngine extends BaseRenderEngine { private isMouseOverRectEdges(rect: IRect, data: EditorData): boolean { const rectOnImage: IRect = RectUtil.translate( - this.calculateRectRelativeToActiveImage(rect, data), data.viewPortContentImageRect); + this.calculateRectRelativeToActiveImage(rect, data), + data.viewPortContentImageRect + ); const outerRectDelta: IPoint = { x: RenderEngineSettings.anchorHoverSize.width / 2, @@ -267,20 +494,41 @@ export class RectRenderEngine extends BaseRenderEngine { const outerRect: IRect = RectUtil.expand(rectOnImage, outerRectDelta); const innerRectDelta: IPoint = { - x: - RenderEngineSettings.anchorHoverSize.width / 2, - y: - RenderEngineSettings.anchorHoverSize.height / 2 + x: -RenderEngineSettings.anchorHoverSize.width / 2, + y: -RenderEngineSettings.anchorHoverSize.height / 2 }; const innerRect: IRect = RectUtil.expand(rectOnImage, innerRectDelta); - return (RectUtil.isPointInside(outerRect, data.mousePositionOnViewPortContent) && - !RectUtil.isPointInside(innerRect, data.mousePositionOnViewPortContent)); + return ( + RectUtil.isPointInside( + outerRect, + data.mousePositionOnViewPortContent + ) && + !RectUtil.isPointInside( + innerRect, + data.mousePositionOnViewPortContent + ) + ); } - private getAnchorUnderMouseByRect(rect: IRect, mousePosition: IPoint, imageRect: IRect): RectAnchor { + private getAnchorUnderMouseByRect( + rect: IRect, + mousePosition: IPoint, + imageRect: IRect + ): RectAnchor { const rectAnchors: RectAnchor[] = RectUtil.mapRectToAnchors(rect); for (let i = 0; i < rectAnchors.length; i++) { - const anchorRect: IRect = RectUtil.translate(RectUtil.getRectWithCenterAndSize(rectAnchors[i].position, RenderEngineSettings.anchorHoverSize), imageRect); - if (!!mousePosition && RectUtil.isPointInside(anchorRect, mousePosition)) { + const anchorRect: IRect = RectUtil.translate( + RectUtil.getRectWithCenterAndSize( + rectAnchors[i].position, + RenderEngineSettings.anchorHoverSize + ), + imageRect + ); + if ( + !!mousePosition && + RectUtil.isPointInside(anchorRect, mousePosition) + ) { return rectAnchors[i]; } } @@ -288,10 +536,18 @@ export class RectRenderEngine extends BaseRenderEngine { } private getAnchorUnderMouse(data: EditorData): RectAnchor { - const labelRects: LabelRect[] = LabelsSelector.getActiveImageData().labelRects; + const labelRects: LabelRect[] = + LabelsSelector.getActiveImageData().labelRects; for (let i = 0; i < labelRects.length; i++) { - const rect: IRect = this.calculateRectRelativeToActiveImage(labelRects[i].rect, data); - const rectAnchor = this.getAnchorUnderMouseByRect(rect, data.mousePositionOnViewPortContent, data.viewPortContentImageRect); + const rect: IRect = this.calculateRectRelativeToActiveImage( + labelRects[i].rect, + data + ); + const rectAnchor = this.getAnchorUnderMouseByRect( + rect, + data.mousePositionOnViewPortContent, + data.viewPortContentImageRect + ); if (!!rectAnchor) return rectAnchor; } return null; diff --git a/src/services/API.ts b/src/services/API.ts new file mode 100644 index 000000000..e274e1e66 --- /dev/null +++ b/src/services/API.ts @@ -0,0 +1,126 @@ +import {string} from '@tensorflow/tfjs-core'; +import axios from 'axios'; +import {Settings} from '../settings/Settings'; +import {AuthSelector} from '../store/selectors/AuthSelector'; + +export class APIService { + private static token = null; + + public static login = async ({ + email, + password + }: { + email: string; + password: string; + }) => { + return await axios({ + method: 'post', + headers: { + 'Content-Type': 'application/json' + }, + url: `${Settings.API_PREFIX}/login`, + data: {id: email, password} + }); + }; + + public static fetchImages = async ({ + offset, + limit, + image_status + }: { + offset: number; + limit: number; + image_status?: string; + }) => { + const token = AuthSelector.getToken(); + if (!token) { + throw Error('Token is required'); + } + return await axios({ + method: 'get', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + }, + url: `${Settings.API_PREFIX}/labeler/images`, + params: {limit, offset, image_status} + }); + }; + + public static updateImage = async ({ + imageId, + json + }: { + imageId: string; + json: string; + }) => { + const token = AuthSelector.getToken(); + // console.log('token = ', token); + console.log('json = ', json); + console.log('imageId = ', imageId); + if (!token) { + throw Error('Token is required'); + } + if (!imageId) { + throw Error('ImageId is required'); + } + if (!json) { + throw Error('JSON is required'); + } + return await axios({ + method: 'put', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + }, + url: `${Settings.API_PREFIX}/labeler/images/${imageId}`, + data: { + json + } + }); + }; + public static getTasks = async () => { + const token = AuthSelector.getToken(); + if (!token) { + throw Error('Token is required'); + } + return await axios({ + method: 'get', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + }, + url: `${Settings.API_PREFIX}/labeler/tasks` + }); + }; + + public static getTaskStatus = async () => { + const token = AuthSelector.getToken(); + if (!token) { + throw Error('Token is required'); + } + return await axios({ + method: 'get', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + }, + url: `${Settings.API_PREFIX}/labeler/taskStatus` + }); + }; + + public static getSummary = async () => { + const token = AuthSelector.getToken(); + if (!token) { + throw Error('Token is required'); + } + return await axios({ + method: 'get', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + }, + url: `${Settings.API_PREFIX}/labeler/common_summary` + }); + }; +} diff --git a/src/services/types.ts b/src/services/types.ts new file mode 100644 index 000000000..4a9846ab0 --- /dev/null +++ b/src/services/types.ts @@ -0,0 +1,12 @@ +export type APIImageData = { + image_id: string; + image_url: string; + style_list: { + seq: string; + name: string; + }[]; + labeling_json?: string; + image_width: string; + image_height: string; + image_status: string; +}; diff --git a/src/settings/RenderEngineSettings.ts b/src/settings/RenderEngineSettings.ts index 91c05c4ec..683599318 100644 --- a/src/settings/RenderEngineSettings.ts +++ b/src/settings/RenderEngineSettings.ts @@ -20,13 +20,19 @@ export class RenderEngineSettings { height: 100 }; public static readonly defaultAnchorColor: string = '#ffffff'; - public static readonly inactiveAnchorColor: string = Settings.DARK_THEME_SECOND_COLOR; + public static readonly inactiveAnchorColor: string = + Settings.DARK_THEME_SECOND_COLOR; public static readonly DEFAULT_ANCHOR_COLOR: string = '#ffffff'; - public static readonly ACTIVE_ANCHOR_COLOR: string = Settings.SECONDARY_COLOR; - public static readonly INACTIVE_ANCHOR_COLOR: string = Settings.DARK_THEME_SECOND_COLOR; + public static readonly ACTIVE_ANCHOR_COLOR: string = + Settings.SECONDARY_COLOR; + public static readonly INACTIVE_ANCHOR_COLOR: string = + Settings.DARK_THEME_SECOND_COLOR; - public static readonly DEFAULT_LINE_COLOR: string = '#ffffff'; + public static readonly DEFAULT_LINE_COLOR: string = '#00ff00'; public static readonly ACTIVE_LINE_COLOR: string = Settings.PRIMARY_COLOR; public static readonly INACTIVE_LINE_COLOR: string = '#ffffff'; + + public static readonly DEFAULT_HUMAN_LINE_COLOR: string = '#0000cc'; + public static readonly DEFAULT_ITEM_LINE_COLOR: string = '#cc0000'; } diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index 891560aaf..e8be4ebe5 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -1,19 +1,33 @@ -import {PopupWindowType} from '../data/enums/PopupWindowType'; +import { PopupWindowType } from '../data/enums/PopupWindowType'; export class Settings { public static readonly GITHUB_URL: string = 'https://github.com/SkalskiP'; - public static readonly MEDIUM_URL: string = 'https://medium.com/@piotr.skalski92'; - public static readonly PATREON_URL: string = 'https://www.patreon.com/make_sense'; + public static readonly MEDIUM_URL: string = + 'https://medium.com/@piotr.skalski92'; + public static readonly PATREON_URL: string = + 'https://www.patreon.com/make_sense'; public static readonly TOP_NAVIGATION_BAR_HEIGHT_PX: number = 35; - public static readonly EDITOR_BOTTOM_NAVIGATION_BAR_HEIGHT_PX: number = 40 + 1; + public static readonly EDITOR_BOTTOM_NAVIGATION_BAR_HEIGHT_PX: number = + 40 + 1; public static readonly EDITOR_TOP_NAVIGATION_BAR_HEIGHT_PX: number = 40 + 1; public static readonly SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX: number = 23 + 1; - public static readonly SIDE_NAVIGATION_BAR_WIDTH_OPEN_PX: number = Settings.SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX + 300 + 1; + public static readonly SIDE_NAVIGATION_BAR_WIDTH_OPEN_PX: number = + Settings.SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX + 200 + 1; + public static readonly GUIDE_SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX: number = + 23 + 1; + public static readonly GUIDE_SIDE_NAVIGATION_BAR_WIDTH_OPEN_PX: number = + Settings.GUIDE_SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX + 200 + 1; + + public static readonly LABEL_SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX: number = + 23 + 1; + public static readonly LABEL_SIDE_NAVIGATION_BAR_WIDTH_OPEN_PX: number = + Settings.GUIDE_SIDE_NAVIGATION_BAR_WIDTH_CLOSED_PX + 300 + 1; + public static readonly TOOLKIT_TAB_HEIGHT_PX: number = 40; public static readonly TOOLBOX_PANEL_WIDTH_PX: number = 50 + 1; - public static readonly EDITOR_MIN_WIDTH: number = 900; + public static readonly EDITOR_MIN_WIDTH: number = 400; public static readonly EDITOR_MIN_HEIGHT: number = 500; public static readonly PRIMARY_COLOR: string = '#2af598'; @@ -59,5 +73,12 @@ export class Settings { '#cb38ff', '#ff95c8', '#ff37c7' - ] + ]; + + public static readonly API_PREFIX = + process.env.REACT_APP_API_URL || 'https://dev.ocmg.vn/showniq/api/backoffice' + // 'https://dev.ocmg.vn/fs-app/api/backoffice'; + + public static readonly UNKNOWN_URL = 'guides/icons/unknown.png'; + public static readonly UNKNOWN_S_URL = 'guides/icons/unknown_s.png'; } diff --git a/src/settings/_Settings.scss b/src/settings/_Settings.scss index 73c71b482..0b592f40e 100644 --- a/src/settings/_Settings.scss +++ b/src/settings/_Settings.scss @@ -5,11 +5,15 @@ $darkThemeForthColor: #262c2f; $primaryColor: #2af598; $secondaryColor: #009efd; - +$dangerColor: #FF0006; +$lightSuccess: #00ff21; +$successColor: #2DBBA6; $topNavigationBarHeight: 35px; $stateBarHeight: 2px; $sideNavigationBarCompanionWidth: 23px; -$sideNavigationBarContentWidth: 300px; +$sideNavigationBarContentWidth: 200px; +$sideNavigationBarContentWidthForGuide: 200px; +$sideNavigationBarContentWidthForLabel: 300px; $editorBottomNavigationBarHeight: 40px; $editorTopNavigationBarHeight: 40px; -$toolboxWidth: 50px; \ No newline at end of file +$toolboxWidth: 50px; diff --git a/src/store/Actions.ts b/src/store/Actions.ts index c5c10e431..6f7983d95 100644 --- a/src/store/Actions.ts +++ b/src/store/Actions.ts @@ -5,6 +5,7 @@ export enum Action { UPDATE_OBJECT_DETECTOR_STATUS = '@@UPDATE_OBJECT_DETECTOR_STATUS', UPDATE_POSE_DETECTOR_STATUS = '@@UPDATE_POSE_DETECTOR_STATUS', UPDATE_DISABLED_AI_FLAG = '@@UPDATE_DISABLED_AI_FLAG', + UPDATE_SCORE_CRITERIA = '@@UPDATE_SCORE_CRITERIA', // GENERAL UPDATE_PROJECT_DATA = '@@UPDATE_PROJECT_DATA', @@ -17,6 +18,7 @@ export enum Action { UPDATE_CROSS_HAIR_VISIBLE_STATUS = '@@UPDATE_CROSS_HAIR_VISIBLE_STATUS', UPDATE_ENABLE_PER_CLASS_COLORATION_STATUS = '@@UPDATE_ENABLE_PER_CLASS_COLORATION_STATUS', UPDATE_ZOOM = '@@UPDATE_ZOOM', + UPDATE_FILL_MODE = '@@UPDATE_FILL_MODE', // LABELS UPDATE_ACTIVE_IMAGE_INDEX = '@@UPDATE_ACTIVE_IMAGE_INDEX', @@ -30,7 +32,26 @@ export enum Action { UPDATE_LABEL_NAMES = '@@UPDATE_LABEL_NAMES', UPDATE_FIRST_LABEL_CREATED_FLAG = '@@UPDATE_FIRST_LABEL_CREATED_FLAG', + // LABEL MODE + UPDATE_ACTIVE_LABEL_MODE = '@@UPDATE_ACTIVE_LABEL_MODE', + UPDATE_ACTIVE_GENDER = '@@UPDATE_ACTIVE_GENDER', + UPDATE_ACTIVE_HUMAN_TYPE = '@@UPDATE_ACTIVE_HUMAN_TYPE', + UPDATE_ACTIVE_STYLES = '@@UPDATE_ACTIVE_STYLES', + UPDATE_ACTIVE_HUMAN_ID = '@@UPDATE_ACTIVE_HUMAN_ID', + UPDATE_ACTIVE_MAIN_CATEGORY = '@@UPDATE_ACTIVE_MAIN_CATEGORY', + UPDATE_ACTIVE_SUB_CATEGORY = '@@UPDATE_ACTIVE_SUB_CATEGORY', + UPDATE_ACTIVE_COLOR = '@@UPDATE_ACTIVE_COLOR', + UPDATE_ACTIVE_PATTERN = '@@UPDATE_ACTIVE_PATTERN', + // NOTIFICATIONS SUBMIT_NEW_NOTIFICATION = '@@SUBMIT_NEW_NOTIFICATION', - DELETE_NOTIFICATION_BY_ID = '@@DELETE_NOTIFICATION_BY_ID' + DELETE_NOTIFICATION_BY_ID = '@@DELETE_NOTIFICATION_BY_ID', + + // AUTH + UPDATE_AUTH_DATA = '@@UPDATE_AUTH_DATA', + + // PERFORMANCE + UPDATE_TASK_STATUS_DATA = '@@UPDATE_TASK_STATUS_DATA', + UPDATE_TASKS_DATA = '@@UPDATE_TASKS_DATA', + UPDATE_COMMON_SUMMARY_DATA = '@@UPDATE_COMMON_SUMMARY_DATA' } diff --git a/src/store/ai/actionCreators.ts b/src/store/ai/actionCreators.ts index 79b11fed5..1a309600f 100644 --- a/src/store/ai/actionCreators.ts +++ b/src/store/ai/actionCreators.ts @@ -44,4 +44,13 @@ export function updateDisabledAIFlag(isAIDisabled: boolean): AIActionTypes { isAIDisabled, } } -} \ No newline at end of file +} + +export function updateScoreCriteria(scoreCriteria: any): AIActionTypes { + return { + type: Action.UPDATE_SCORE_CRITERIA, + payload: { + scoreCriteria, + } + } +} diff --git a/src/store/ai/reducer.ts b/src/store/ai/reducer.ts index b2845c93a..13d38c32b 100644 --- a/src/store/ai/reducer.ts +++ b/src/store/ai/reducer.ts @@ -6,7 +6,14 @@ const initialState: AIState = { rejectedSuggestedLabelList: [], isObjectDetectorLoaded: false, isPoseDetectorLoaded: false, - isAIDisabled: false + isAIDisabled: false, + scoreCriteria: { + gender: 0.8, + style: 0.8, + color: 0.8, + pattern: 0.8, + item: 0.8 + } }; export function aiReducer( @@ -14,6 +21,13 @@ export function aiReducer( action: AIActionTypes ): AIState { switch (action.type) { + case Action.UPDATE_SCORE_CRITERIA: { + console.log('Action.UPDATE_SCORE_CRITERIA ', action.payload) + return { + ...state, + scoreCriteria: action.payload.scoreCriteria + } + } case Action.UPDATE_SUGGESTED_LABEL_LIST: { return { ...state, diff --git a/src/store/ai/types.ts b/src/store/ai/types.ts index bf4068b45..6d94a3354 100644 --- a/src/store/ai/types.ts +++ b/src/store/ai/types.ts @@ -11,6 +11,15 @@ export type AIState = { suggestedLabelList: string[]; rejectedSuggestedLabelList: string[]; isAIDisabled: boolean; + + // SHOWNIQ Vision AI Criteria + scoreCriteria: { + gender: number, + style: number, + color: number, + pattern: number, + item: number + } } interface UpdateSuggestedLabelList { @@ -48,8 +57,22 @@ interface UpdateDisabledAIFlag { } } +interface UpdateScoreCriteria { + type: typeof Action.UPDATE_SCORE_CRITERIA; + payload: { + scoreCriteria: { + gender: number, + style: number, + color: number, + pattern: number, + item: number + } + } +} + export type AIActionTypes = UpdateSuggestedLabelList | UpdateRejectedSuggestedLabelList | UpdateObjectDetectorStatus | UpdatePoseDetectorStatus | UpdateDisabledAIFlag + | UpdateScoreCriteria diff --git a/src/store/auth/actionCreators.ts b/src/store/auth/actionCreators.ts new file mode 100644 index 000000000..5da429e02 --- /dev/null +++ b/src/store/auth/actionCreators.ts @@ -0,0 +1,11 @@ +import {AuthActionTypes, AuthData} from './types'; +import {Action} from '../Actions'; + +export function updateAuthData(authData: AuthData): AuthActionTypes { + return { + type: Action.UPDATE_AUTH_DATA, + payload: { + authData + } + }; +} diff --git a/src/store/auth/reducer.ts b/src/store/auth/reducer.ts new file mode 100644 index 000000000..eff72c144 --- /dev/null +++ b/src/store/auth/reducer.ts @@ -0,0 +1,27 @@ +import {AuthActionTypes, AuthState} from './types'; +import {Action} from '../Actions'; + +const initialState: AuthState = { + authData: { + displayName: null, + role: null, + email: null, + authToken: null + } +}; + +export function authReducer( + state = initialState, + action: AuthActionTypes +): AuthState { + switch (action.type) { + case Action.UPDATE_AUTH_DATA: { + return { + ...state, + authData: action.payload.authData + }; + } + default: + return state; + } +} diff --git a/src/store/auth/types.ts b/src/store/auth/types.ts new file mode 100644 index 000000000..5efc81907 --- /dev/null +++ b/src/store/auth/types.ts @@ -0,0 +1,21 @@ +import {Action} from '../Actions'; + +export type AuthData = { + displayName: string; + email: string; + role: string; + authToken: string; +}; + +export type AuthState = { + authData: AuthData; +}; + +interface UpdateAuthData { + type: typeof Action.UPDATE_AUTH_DATA; + payload: { + authData: AuthData; + }; +} + +export type AuthActionTypes = UpdateAuthData; diff --git a/src/store/general/actionCreators.ts b/src/store/general/actionCreators.ts index c182e78d0..ecdc92843 100644 --- a/src/store/general/actionCreators.ts +++ b/src/store/general/actionCreators.ts @@ -9,71 +9,94 @@ export function updateWindowSize(windowSize: ISize): GeneralActionTypes { return { type: Action.UPDATE_WINDOW_SIZE, payload: { - windowSize, - }, + windowSize + } }; } -export function updateActivePopupType(activePopupType: PopupWindowType): GeneralActionTypes { +export function updateActivePopupType( + activePopupType: PopupWindowType +): GeneralActionTypes { return { type: Action.UPDATE_ACTIVE_POPUP_TYPE, payload: { - activePopupType, + activePopupType } - } + }; } -export function updateCustomCursorStyle(customCursorStyle: CustomCursorStyle): GeneralActionTypes { +export function updateCustomCursorStyle( + customCursorStyle: CustomCursorStyle +): GeneralActionTypes { return { type: Action.UPDATE_CUSTOM_CURSOR_STYLE, payload: { - customCursorStyle, + customCursorStyle } - } + }; } -export function updateActiveContext(activeContext: ContextType): GeneralActionTypes { +export function updateActiveContext( + activeContext: ContextType +): GeneralActionTypes { return { type: Action.UPDATE_CONTEXT, payload: { - activeContext, - }, + activeContext + } }; } -export function updatePreventCustomCursorStatus(preventCustomCursor: boolean): GeneralActionTypes { +export function updatePreventCustomCursorStatus( + preventCustomCursor: boolean +): GeneralActionTypes { return { type: Action.UPDATE_PREVENT_CUSTOM_CURSOR_STATUS, payload: { - preventCustomCursor, - }, + preventCustomCursor + } }; } -export function updateImageDragModeStatus(imageDragMode: boolean): GeneralActionTypes { +export function updateImageDragModeStatus( + imageDragMode: boolean +): GeneralActionTypes { return { type: Action.UPDATE_IMAGE_DRAG_MODE_STATUS, payload: { - imageDragMode, - }, + imageDragMode + } }; } -export function updateCrossHairVisibleStatus(crossHairVisible: boolean): GeneralActionTypes { +export function updateCrossHairVisibleStatus( + crossHairVisible: boolean +): GeneralActionTypes { return { type: Action.UPDATE_CROSS_HAIR_VISIBLE_STATUS, payload: { - crossHairVisible, - }, + crossHairVisible + } + }; +} + +export function updateFillMode(fillMode: boolean): GeneralActionTypes { + return { + type: Action.UPDATE_FILL_MODE, + payload: { + fillMode + } }; } -export function updateProjectData(projectData: ProjectData): GeneralActionTypes { +export function updateProjectData( + projectData: ProjectData +): GeneralActionTypes { return { type: Action.UPDATE_PROJECT_DATA, payload: { - projectData, - }, + projectData + } }; } @@ -81,16 +104,18 @@ export function updateZoom(zoom: number): GeneralActionTypes { return { type: Action.UPDATE_ZOOM, payload: { - zoom, - }, + zoom + } }; } -export function updatePerClassColorationStatus(enablePerClassColoration: boolean): GeneralActionTypes { +export function updatePerClassColorationStatus( + enablePerClassColoration: boolean +): GeneralActionTypes { return { type: Action.UPDATE_ENABLE_PER_CLASS_COLORATION_STATUS, payload: { - enablePerClassColoration, - }, + enablePerClassColoration + } }; } diff --git a/src/store/general/reducer.ts b/src/store/general/reducer.ts index 4efc9fcf5..ba1117935 100644 --- a/src/store/general/reducer.ts +++ b/src/store/general/reducer.ts @@ -2,6 +2,7 @@ import {GeneralActionTypes, GeneralState} from './types'; import {Action} from '../Actions'; import {CustomCursorStyle} from '../../data/enums/CustomCursorStyle'; import {ViewPointSettings} from '../../settings/ViewPointSettings'; +import {PopupWindowType} from '../../data/enums/PopupWindowType'; const initialState: GeneralState = { windowSize: null, @@ -14,9 +15,10 @@ const initialState: GeneralState = { enablePerClassColoration: true, projectData: { type: null, - name: 'my-project-name', + name: 'my-project-name' }, - zoom: ViewPointSettings.MIN_ZOOM + zoom: ViewPointSettings.MIN_ZOOM, + fillMode: true }; export function generalReducer( @@ -28,61 +30,68 @@ export function generalReducer( return { ...state, windowSize: action.payload.windowSize - } + }; } case Action.UPDATE_ACTIVE_POPUP_TYPE: { return { ...state, activePopupType: action.payload.activePopupType - } + }; } case Action.UPDATE_CUSTOM_CURSOR_STYLE: { return { ...state, customCursorStyle: action.payload.customCursorStyle - } + }; } case Action.UPDATE_CONTEXT: { return { ...state, activeContext: action.payload.activeContext - } + }; } case Action.UPDATE_PREVENT_CUSTOM_CURSOR_STATUS: { return { ...state, preventCustomCursor: action.payload.preventCustomCursor - } + }; } case Action.UPDATE_IMAGE_DRAG_MODE_STATUS: { return { ...state, imageDragMode: action.payload.imageDragMode - } + }; } case Action.UPDATE_CROSS_HAIR_VISIBLE_STATUS: { return { ...state, crossHairVisible: action.payload.crossHairVisible - } + }; } case Action.UPDATE_PROJECT_DATA: { return { ...state, projectData: action.payload.projectData - } + }; } case Action.UPDATE_ZOOM: { return { ...state, zoom: action.payload.zoom - } + }; } case Action.UPDATE_ENABLE_PER_CLASS_COLORATION_STATUS: { return { ...state, - enablePerClassColoration: action.payload.enablePerClassColoration - } + enablePerClassColoration: + action.payload.enablePerClassColoration + }; + } + case Action.UPDATE_FILL_MODE: { + return { + ...state, + fillMode: action.payload.fillMode + }; } default: return state; diff --git a/src/store/general/types.ts b/src/store/general/types.ts index ec97a9b1e..bdae1ddde 100644 --- a/src/store/general/types.ts +++ b/src/store/general/types.ts @@ -7,8 +7,8 @@ import {ProjectType} from '../../data/enums/ProjectType'; export type ProjectData = { type: ProjectType; - name: string, -} + name: string; +}; export type GeneralState = { windowSize: ISize; @@ -21,79 +21,88 @@ export type GeneralState = { activeContext: ContextType; projectData: ProjectData; zoom: number; -} + fillMode: boolean; +}; interface UpdateProjectData { type: typeof Action.UPDATE_PROJECT_DATA; payload: { projectData: ProjectData; - } + }; } interface UpdateWindowSize { type: typeof Action.UPDATE_WINDOW_SIZE; payload: { windowSize: ISize; - } + }; } interface UpdateActivePopupType { type: typeof Action.UPDATE_ACTIVE_POPUP_TYPE; payload: { activePopupType: PopupWindowType; - } + }; } interface UpdateCustomCursorStyle { type: typeof Action.UPDATE_CUSTOM_CURSOR_STYLE; payload: { customCursorStyle: CustomCursorStyle; - } + }; } interface UpdateActiveContext { type: typeof Action.UPDATE_CONTEXT; payload: { activeContext: ContextType; - } + }; } interface UpdatePreventCustomCursorStatus { type: typeof Action.UPDATE_PREVENT_CUSTOM_CURSOR_STATUS; payload: { preventCustomCursor: boolean; - } + }; } interface UpdateImageDragModeStatus { type: typeof Action.UPDATE_IMAGE_DRAG_MODE_STATUS; payload: { imageDragMode: boolean; - } + }; } interface UpdateCrossHairVisibleStatus { type: typeof Action.UPDATE_CROSS_HAIR_VISIBLE_STATUS; payload: { crossHairVisible: boolean; - } + }; } interface UpdateZoom { - type: typeof Action.UPDATE_ZOOM, + type: typeof Action.UPDATE_ZOOM; payload: { zoom: number; - } + }; } interface UpdatePerClassColoration { - type: typeof Action.UPDATE_ENABLE_PER_CLASS_COLORATION_STATUS, + type: typeof Action.UPDATE_ENABLE_PER_CLASS_COLORATION_STATUS; payload: { enablePerClassColoration: boolean; - } + }; +} + +interface UpdateFillMode { + type: typeof Action.UPDATE_FILL_MODE; + payload: { + fillMode: boolean; + }; } -export type GeneralActionTypes = UpdateProjectData +export type GeneralActionTypes = + | UpdateProjectData | UpdateWindowSize | UpdateActivePopupType | UpdateCustomCursorStyle @@ -103,3 +112,4 @@ export type GeneralActionTypes = UpdateProjectData | UpdateCrossHairVisibleStatus | UpdateZoom | UpdatePerClassColoration + | UpdateFillMode; diff --git a/src/store/index.ts b/src/store/index.ts index 458650b7d..e02b09f52 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,14 +1,18 @@ -import { combineReducers } from 'redux'; +import {combineReducers} from 'redux'; import {labelsReducer} from './labels/reducer'; import {generalReducer} from './general/reducer'; import {aiReducer} from './ai/reducer'; import {notificationsReducer} from './notifications/reducer'; +import {authReducer} from './auth/reducer'; +import {performanceReducer} from './performance/reducer'; export const rootReducer = combineReducers({ general: generalReducer, labels: labelsReducer, ai: aiReducer, - notifications: notificationsReducer + notifications: notificationsReducer, + auth: authReducer, + performance: performanceReducer }); export type AppState = ReturnType; diff --git a/src/store/labels/actionCreators.ts b/src/store/labels/actionCreators.ts index b66f87dfa..e4db86c38 100644 --- a/src/store/labels/actionCreators.ts +++ b/src/store/labels/actionCreators.ts @@ -1,22 +1,26 @@ import {LabelsActionTypes, ImageData, LabelName} from './types'; import {Action} from '../Actions'; -import {LabelType} from '../../data/enums/LabelType'; +import {LabelType, LabelModeType} from '../../data/enums/LabelType'; -export function updateActiveImageIndex(activeImageIndex: number): LabelsActionTypes { +export function updateActiveImageIndex( + activeImageIndex: number +): LabelsActionTypes { return { type: Action.UPDATE_ACTIVE_IMAGE_INDEX, payload: { - activeImageIndex, - }, + activeImageIndex + } }; } -export function updateActiveLabelNameId(activeLabelNameId: string): LabelsActionTypes { +export function updateActiveLabelNameId( + activeLabelNameId: string +): LabelsActionTypes { return { type: Action.UPDATE_ACTIVE_LABEL_NAME_ID, payload: { - activeLabelNameId, - }, + activeLabelNameId + } }; } @@ -24,36 +28,43 @@ export function updateActiveLabelId(activeLabelId: string): LabelsActionTypes { return { type: Action.UPDATE_ACTIVE_LABEL_ID, payload: { - activeLabelId, - }, + activeLabelId + } }; } -export function updateHighlightedLabelId(highlightedLabelId: string): LabelsActionTypes { +export function updateHighlightedLabelId( + highlightedLabelId: string +): LabelsActionTypes { return { type: Action.UPDATE_HIGHLIGHTED_LABEL_ID, payload: { - highlightedLabelId, - }, + highlightedLabelId + } }; } -export function updateActiveLabelType(activeLabelType: LabelType): LabelsActionTypes { +export function updateActiveLabelType( + activeLabelType: LabelType +): LabelsActionTypes { return { type: Action.UPDATE_ACTIVE_LABEL_TYPE, payload: { - activeLabelType, - }, + activeLabelType + } }; } -export function updateImageDataById(id: string, newImageData: ImageData): LabelsActionTypes { +export function updateImageDataById( + id: string, + newImageData: ImageData +): LabelsActionTypes { return { type: Action.UPDATE_IMAGE_DATA_BY_ID, payload: { id, newImageData - }, + } }; } @@ -61,8 +72,8 @@ export function addImageData(imageData: ImageData[]): LabelsActionTypes { return { type: Action.ADD_IMAGES_DATA, payload: { - imageData, - }, + imageData + } }; } @@ -70,8 +81,8 @@ export function updateImageData(imageData: ImageData[]): LabelsActionTypes { return { type: Action.UPDATE_IMAGES_DATA, payload: { - imageData, - }, + imageData + } }; } @@ -81,14 +92,101 @@ export function updateLabelNames(labels: LabelName[]): LabelsActionTypes { payload: { labels } - } + }; } -export function updateFirstLabelCreatedFlag(firstLabelCreatedFlag: boolean): LabelsActionTypes { +export function updateFirstLabelCreatedFlag( + firstLabelCreatedFlag: boolean +): LabelsActionTypes { return { type: Action.UPDATE_FIRST_LABEL_CREATED_FLAG, payload: { firstLabelCreatedFlag } - } + }; +} + +export function updateActiveLabelMode(mode: LabelModeType): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_LABEL_MODE, + payload: { + mode + } + }; +} + +export function updateActiveGender(gender: number): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_GENDER, + payload: { + gender + } + }; +} + +export function updateActiveHumanType(humanType: number): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_HUMAN_TYPE, + payload: { + humanType + } + }; +} + +export function updateActiveStyles(styles: string[]): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_STYLES, + payload: { + styles + } + }; +} + +export function updateActiveHumanID(humanId: string): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_HUMAN_ID, + payload: { + humanId + } + }; +} + +export function updateActiveMainCategory( + mainCategory: number +): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_MAIN_CATEGORY, + payload: { + mainCategory + } + }; +} + +export function updateActiveSubCategory( + subCategory: number +): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_SUB_CATEGORY, + payload: { + subCategory + } + }; +} + +export function updateActiveColor(color: number): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_COLOR, + payload: { + color + } + }; +} + +export function updateActivePattern(pattern: number): LabelsActionTypes { + return { + type: Action.UPDATE_ACTIVE_PATTERN, + payload: { + pattern + } + }; } diff --git a/src/store/labels/reducer.ts b/src/store/labels/reducer.ts index 3bd08657d..93fc19f90 100644 --- a/src/store/labels/reducer.ts +++ b/src/store/labels/reducer.ts @@ -1,5 +1,12 @@ import {LabelsActionTypes, LabelsState, ImageData} from './types'; import {Action} from '../Actions'; +import {LabelModeType} from '../../data/enums/LabelType'; +import { + GENDER, + ITEM_COLOR, + ITEM_PATTERN, + SOURCE +} from '../../data/enums/ItemType'; const initialState: LabelsState = { activeImageIndex: null, @@ -9,7 +16,16 @@ const initialState: LabelsState = { highlightedLabelId: null, imagesData: [], firstLabelCreatedFlag: false, - labels: [] + labels: [], + activeLabelMode: LabelModeType.HUMAN, + activeGender: GENDER.UNKNOWN, + activeHumanType: SOURCE.UNKNOWN, + activeColor: ITEM_COLOR.UNKNOWN, + activePattern: ITEM_PATTERN.UNKNOWN, + activeStyles: [], + activeHumanID: null, + activeMainCategory: -1, + activeSubCategory: -1 }; export function labelsReducer( @@ -21,63 +37,119 @@ export function labelsReducer( return { ...state, activeImageIndex: action.payload.activeImageIndex - } + }; } case Action.UPDATE_ACTIVE_LABEL_NAME_ID: { return { ...state, activeLabelNameId: action.payload.activeLabelNameId - } + }; } case Action.UPDATE_ACTIVE_LABEL_ID: { return { ...state, activeLabelId: action.payload.activeLabelId - } + }; } case Action.UPDATE_HIGHLIGHTED_LABEL_ID: { return { ...state, highlightedLabelId: action.payload.highlightedLabelId - } + }; } case Action.UPDATE_ACTIVE_LABEL_TYPE: { return { ...state, activeLabelType: action.payload.activeLabelType - } + }; } case Action.UPDATE_IMAGE_DATA_BY_ID: { return { ...state, imagesData: state.imagesData.map((imageData: ImageData) => - imageData.id === action.payload.id ? action.payload.newImageData : imageData + imageData.id === action.payload.id + ? action.payload.newImageData + : imageData ) - } + }; } case Action.ADD_IMAGES_DATA: { return { ...state, imagesData: state.imagesData.concat(action.payload.imageData) - } + }; } case Action.UPDATE_IMAGES_DATA: { return { ...state, imagesData: action.payload.imageData - } + }; } case Action.UPDATE_LABEL_NAMES: { return { ...state, labels: action.payload.labels - } + }; } case Action.UPDATE_FIRST_LABEL_CREATED_FLAG: { return { ...state, firstLabelCreatedFlag: action.payload.firstLabelCreatedFlag - } + }; + } + case Action.UPDATE_ACTIVE_LABEL_MODE: { + return { + ...state, + activeLabelMode: action.payload.mode + }; + } + case Action.UPDATE_ACTIVE_GENDER: { + return { + ...state, + activeGender: action.payload.gender + }; + } + case Action.UPDATE_ACTIVE_HUMAN_TYPE: { + return { + ...state, + activeHumanType: action.payload.humanType + }; + } + case Action.UPDATE_ACTIVE_STYLES: { + return { + ...state, + activeStyles: action.payload.styles + }; + } + case Action.UPDATE_ACTIVE_HUMAN_ID: { + return { + ...state, + activeHumanID: action.payload.humanId + }; + } + case Action.UPDATE_ACTIVE_MAIN_CATEGORY: { + return { + ...state, + activeMainCategory: action.payload.mainCategory + }; + } + case Action.UPDATE_ACTIVE_SUB_CATEGORY: { + return { + ...state, + activeSubCategory: action.payload.subCategory + }; + } + case Action.UPDATE_ACTIVE_COLOR: { + return { + ...state, + activeColor: action.payload.color + }; + } + case Action.UPDATE_ACTIVE_PATTERN: { + return { + ...state, + activePattern: action.payload.pattern + }; } default: return state; diff --git a/src/store/labels/types.ts b/src/store/labels/types.ts index d49139df9..428ee77bf 100644 --- a/src/store/labels/types.ts +++ b/src/store/labels/types.ts @@ -1,9 +1,11 @@ import {IRect} from '../../interfaces/IRect'; import {Action} from '../Actions'; -import {LabelType} from '../../data/enums/LabelType'; +import {LabelType, LabelModeType} from '../../data/enums/LabelType'; import {IPoint} from '../../interfaces/IPoint'; import {LabelStatus} from '../../data/enums/LabelStatus'; import {ILine} from '../../interfaces/ILine'; +import {GENDER} from '../../data/enums/ItemType'; +import {JSONUploadStatus} from '../../data/enums/JSONUploadStatus'; export type LabelRect = { // GENERAL @@ -11,11 +13,17 @@ export type LabelRect = { labelId: string; rect: IRect; + // Custom by mj + mode?: LabelModeType; + // AI isCreatedByAI: boolean; status: LabelStatus; suggestedLabel: string; -} + qc_status?: string; + qc_comment?: string; + box_position_rejected?: string; +}; export type LabelPoint = { // GENERAL @@ -27,27 +35,62 @@ export type LabelPoint = { isCreatedByAI: boolean; status: LabelStatus; suggestedLabel: string; -} +}; export type LabelPolygon = { id: string; labelId: string; vertices: IPoint[]; -} +}; export type LabelLine = { id: string; labelId: string; - line: ILine -} + line: ILine; +}; export type LabelName = { name: string; id: string; color: string; -} +}; + +export type HumanInfo = { + uuid: string; + id: number; + gender: number; + type: number; + styles: string[]; + styleScore?: { style: string, score: number }[]; + genderScore?: number; + qc_status?: string; + qc_comment?: string; + box_position_rejected?: string; +}; + +export type ItemInfo = { + uuid: string; + id: number; + humanId: string; + gender: number; + mainCategory: number; + subCategory: number; + color: number; + pattern: number; + styles: string[]; + patternScore?: { pattern: number, score: number }[]; + colorScore?: {color: number, score: number}[]; + itemScore?: number; + qc_status?: string; + qc_comment?: string; + box_position_rejected?: string; +}; export type ImageData = { + image_status?: any; + qc_status? : string; + box_position_rejected?: string; + qc_comment?: string; id: string; fileData: File; loadStatus: boolean; @@ -56,13 +99,57 @@ export type ImageData = { labelLines: LabelLine[]; labelPolygons: LabelPolygon[]; labelNameIds: string[]; + humans: HumanInfo[]; + items: ItemInfo[]; + guideStyles?: {seq: string; name: string}[]; + uploadStatus?: JSONUploadStatus; // SSD isVisitedByObjectDetector: boolean; // POSE NET isVisitedByPoseDetector: boolean; -} +}; + +export type RectJSON = { + img_path: string; + writer_id: string; + version: number; + human_info: { + human_id: string; + bounding_box: { + lt_x: number; + lt_y: number; + rb_x: number; + rb_y: number; + }; + style: string[]; + gender_score?: number; + style_candidates?: string; + style_score?: string; + qc_status?: string; + box_position_rejected?: string; + qc_comment?: string; + }[]; + item_info: { + item_id: string; + bounding_box: { + lt_x: number; + lt_y: number; + rb_x: number; + rb_y: number; + }; + style: string[]; + colors?: string; + color_score?: string; + item_score?: number; + patterns?: string; + pattern_score?: string; + qc_status?: string; + qc_comment?: string; + box_position_rejected?:string + }[]; +}; export type LabelsState = { activeImageIndex: number; @@ -73,41 +160,50 @@ export type LabelsState = { imagesData: ImageData[]; firstLabelCreatedFlag: boolean; labels: LabelName[]; -} + activeLabelMode: LabelModeType; + activeGender: number; + activeHumanType: number; + activeStyles?: string[]; + activeHumanID?: string; + activeMainCategory?: number; + activeSubCategory?: number; + activeColor?: number; + activePattern?: number; +}; interface UpdateActiveImageIndex { type: typeof Action.UPDATE_ACTIVE_IMAGE_INDEX; payload: { activeImageIndex: number; - } + }; } interface UpdateActiveLabelNameId { type: typeof Action.UPDATE_ACTIVE_LABEL_NAME_ID; payload: { activeLabelNameId: string; - } + }; } interface UpdateActiveLabelId { type: typeof Action.UPDATE_ACTIVE_LABEL_ID; payload: { activeLabelId: string; - } + }; } interface UpdateHighlightedLabelId { type: typeof Action.UPDATE_HIGHLIGHTED_LABEL_ID; payload: { highlightedLabelId: string; - } + }; } interface UpdateActiveLabelType { type: typeof Action.UPDATE_ACTIVE_LABEL_TYPE; payload: { activeLabelType: LabelType; - } + }; } interface UpdateImageDataById { @@ -115,38 +211,102 @@ interface UpdateImageDataById { payload: { id: string; newImageData: ImageData; - } + }; } interface AddImageData { type: typeof Action.ADD_IMAGES_DATA; payload: { imageData: ImageData[]; - } + }; } interface UpdateImageData { type: typeof Action.UPDATE_IMAGES_DATA; payload: { imageData: ImageData[]; - } + }; } interface UpdateLabelNames { type: typeof Action.UPDATE_LABEL_NAMES; payload: { labels: LabelName[]; - } + }; } interface UpdateFirstLabelCreatedFlag { type: typeof Action.UPDATE_FIRST_LABEL_CREATED_FLAG; payload: { firstLabelCreatedFlag: boolean; - } + }; +} + +interface UpdateActiveLabelMode { + type: typeof Action.UPDATE_ACTIVE_LABEL_MODE; + payload: { + mode: LabelModeType; + }; +} + +interface UpdateActiveGender { + type: typeof Action.UPDATE_ACTIVE_GENDER; + payload: { + gender: number; + }; +} + +interface UpdateActiveHumanType { + type: typeof Action.UPDATE_ACTIVE_HUMAN_TYPE; + payload: { + humanType: number; + }; } -export type LabelsActionTypes = UpdateActiveImageIndex +interface UpdateActiveStyles { + type: typeof Action.UPDATE_ACTIVE_STYLES; + payload: { + styles: string[]; + }; +} + +interface UpdateActiveHumanID { + type: typeof Action.UPDATE_ACTIVE_HUMAN_ID; + payload: { + humanId: string; + }; +} + +interface UpdateActiveMainCategory { + type: typeof Action.UPDATE_ACTIVE_MAIN_CATEGORY; + payload: { + mainCategory: number; + }; +} + +interface UpdateActiveSubCategory { + type: typeof Action.UPDATE_ACTIVE_SUB_CATEGORY; + payload: { + subCategory: number; + }; +} + +interface UpdateActiveColor { + type: typeof Action.UPDATE_ACTIVE_COLOR; + payload: { + color: number; + }; +} + +interface UpdateActivePattern { + type: typeof Action.UPDATE_ACTIVE_PATTERN; + payload: { + pattern: number; + }; +} + +export type LabelsActionTypes = + | UpdateActiveImageIndex | UpdateActiveLabelNameId | UpdateActiveLabelType | UpdateImageDataById @@ -156,4 +316,12 @@ export type LabelsActionTypes = UpdateActiveImageIndex | UpdateActiveLabelId | UpdateHighlightedLabelId | UpdateFirstLabelCreatedFlag - + | UpdateActiveLabelMode + | UpdateActiveGender + | UpdateActiveHumanType + | UpdateActiveStyles + | UpdateActiveHumanID + | UpdateActiveMainCategory + | UpdateActiveSubCategory + | UpdateActiveColor + | UpdateActivePattern; diff --git a/src/store/performance/actionCreators.ts b/src/store/performance/actionCreators.ts new file mode 100644 index 000000000..5738becab --- /dev/null +++ b/src/store/performance/actionCreators.ts @@ -0,0 +1,29 @@ +import {Action} from '../Actions'; +import {CommonSummary, Task, TaskStatus} from './types'; + +export function updateTaskStatus(taskStatus: TaskStatus) { + return { + type: Action.UPDATE_TASK_STATUS_DATA, + payload: { + taskStatus + } + }; +} + +export function updateTasks(tasks: Task[]) { + return { + type: Action.UPDATE_TASKS_DATA, + payload: { + tasks + } + }; +} + +export function updateCommonSummary(commonSummary: CommonSummary) { + return { + type: Action.UPDATE_COMMON_SUMMARY_DATA, + payload: { + commonSummary + } + }; +} diff --git a/src/store/performance/reducer.ts b/src/store/performance/reducer.ts new file mode 100644 index 000000000..0d4312b3e --- /dev/null +++ b/src/store/performance/reducer.ts @@ -0,0 +1,56 @@ +import {Action} from 'store/Actions'; +import {PerformanceActionTypes, PerformanceState} from './types'; + +const initialState: PerformanceState = { + taskStatus: { + averageTPD: 0, + currentAverageTPD: 0, + highestRanker: { + displayName: '', + tpd: 0 + }, + me: { + displayName: '', + tpd: 0 + } + }, + tasks: [], + commonSummary: { + images: { + total: 0, + labeled: 0, + unchecked: 0, + waitingQC: 0, + passed: 0, + rejected: 0 + } + } +}; + +export function performanceReducer( + state = initialState, + action: PerformanceActionTypes +): PerformanceState { + switch (action.type) { + case Action.UPDATE_TASK_STATUS_DATA: { + return { + ...state, + taskStatus: action.payload.taskStatus + }; + } + case Action.UPDATE_TASKS_DATA: { + return { + ...state, + tasks: action.payload.tasks + }; + } + case Action.UPDATE_COMMON_SUMMARY_DATA: { + return { + ...state, + commonSummary: action.payload.commonSummary + }; + } + default: + return state; + } +} diff --git a/src/store/performance/types.ts b/src/store/performance/types.ts new file mode 100644 index 000000000..fba70ccf6 --- /dev/null +++ b/src/store/performance/types.ts @@ -0,0 +1,68 @@ +import {Action} from '../Actions'; + +export type PerformanceState = { + taskStatus: TaskStatus; + tasks: Task[]; + commonSummary: CommonSummary; +}; + +export type TaskStatus = { + averageTPD: number; + currentAverageTPD: number; + highestRanker: { + displayName: string; + tpd: number; + }; + me: { + displayName: string; + tpd: number; + }; +}; + +export type Task = { + name: string; + imagesTPD: number; + imagesTPH: number; + averageTimePerImage: number; + labeledTPD: number; + labeledTPH: number; + averageTimePerLabeled: number; + note?: string; +}; + +export type CommonSummary = { + images: { + total: number; + labeled: number; + unchecked: number; + waitingQC: number; + passed: number; + rejected: number; + }; +}; + +interface UpdateTaskStatusData { + type: typeof Action.UPDATE_TASK_STATUS_DATA; + payload: { + taskStatus: TaskStatus; + }; +} + +interface UpdateTasksData { + type: typeof Action.UPDATE_TASKS_DATA; + payload: { + tasks: Task[]; + }; +} + +interface UpdateCommonSummaryData { + type: typeof Action.UPDATE_COMMON_SUMMARY_DATA; + payload: { + commonSummary: CommonSummary; + }; +} + +export type PerformanceActionTypes = + | UpdateTaskStatusData + | UpdateTasksData + | UpdateCommonSummaryData; diff --git a/src/store/selectors/AISelector.ts b/src/store/selectors/AISelector.ts index bf3eec345..820531210 100644 --- a/src/store/selectors/AISelector.ts +++ b/src/store/selectors/AISelector.ts @@ -1,6 +1,15 @@ import {store} from '../..'; export class AISelector { + public static getScoreCriteria(): { + gender: number, + style: number, + color: number, + pattern: number, + item: number + } { + return store.getState().ai.scoreCriteria; + } public static getSuggestedLabelList(): string[] { return store.getState().ai.suggestedLabelList; } diff --git a/src/store/selectors/AuthSelector.ts b/src/store/selectors/AuthSelector.ts new file mode 100644 index 000000000..7ecae7a7d --- /dev/null +++ b/src/store/selectors/AuthSelector.ts @@ -0,0 +1,14 @@ +import {store} from '../..'; +import {AuthData} from '../auth/types'; + +export class AuthSelector { + public static getToken(): string { + return store.getState().auth.authData.authToken; + } + public static getAuthData(): AuthData { + return store.getState().auth.authData; + } + public static getUserID(): string { + return store.getState().auth.authData.email; + } +} diff --git a/src/store/selectors/GeneralSelector.ts b/src/store/selectors/GeneralSelector.ts index e7d066ceb..58b657b74 100644 --- a/src/store/selectors/GeneralSelector.ts +++ b/src/store/selectors/GeneralSelector.ts @@ -42,6 +42,10 @@ export class GeneralSelector { } public static getEnablePerClassColorationStatus(): boolean { - return store.getState().general.enablePerClassColoration + return store.getState().general.enablePerClassColoration; + } + + public static getFillMode(): boolean { + return store.getState().general.fillMode; } } diff --git a/src/store/selectors/LabelsSelector.ts b/src/store/selectors/LabelsSelector.ts index a15494526..f48e7c3d6 100644 --- a/src/store/selectors/LabelsSelector.ts +++ b/src/store/selectors/LabelsSelector.ts @@ -1,7 +1,14 @@ import {store} from '../..'; -import {ImageData, LabelLine, LabelName, LabelPoint, LabelPolygon, LabelRect} from '../labels/types'; +import { + ImageData, + LabelLine, + LabelName, + LabelPoint, + LabelPolygon, + LabelRect +} from '../labels/types'; import {find} from 'lodash'; -import {LabelType} from '../../data/enums/LabelType'; +import {LabelType, LabelModeType} from '../../data/enums/LabelType'; export class LabelsSelector { public static getLabelNames(): LabelName[] { @@ -9,7 +16,7 @@ export class LabelsSelector { } public static getLabelNameById(id: string): LabelName | undefined { - const labelName: LabelName[] = LabelsSelector.getLabelNames() + const labelName: LabelName[] = LabelsSelector.getLabelNames(); return find(labelName, {id}); } @@ -30,10 +37,10 @@ export class LabelsSelector { } public static getActiveImageData(): ImageData | null { - const activeImageIndex: number | null = LabelsSelector.getActiveImageIndex(); + const activeImageIndex: number | null = + LabelsSelector.getActiveImageIndex(); - if (activeImageIndex === null) - return null; + if (activeImageIndex === null) return null; return LabelsSelector.getImageDataByIndex(activeImageIndex); } @@ -59,36 +66,69 @@ export class LabelsSelector { public static getActiveRectLabel(): LabelRect | null { const activeLabelId: string | null = LabelsSelector.getActiveLabelId(); - if (activeLabelId === null) - return null; + if (activeLabelId === null) return null; - return find(LabelsSelector.getActiveImageData().labelRects, {id: activeLabelId}); + return find(LabelsSelector.getActiveImageData().labelRects, { + id: activeLabelId + }); } public static getActivePointLabel(): LabelPoint | null { const activeLabelId: string | null = LabelsSelector.getActiveLabelId(); - if (activeLabelId === null) - return null; + if (activeLabelId === null) return null; - return find(LabelsSelector.getActiveImageData().labelPoints, {id: activeLabelId}); + return find(LabelsSelector.getActiveImageData().labelPoints, { + id: activeLabelId + }); } public static getActivePolygonLabel(): LabelPolygon | null { const activeLabelId: string | null = LabelsSelector.getActiveLabelId(); - if (activeLabelId === null) - return null; + if (activeLabelId === null) return null; - return find(LabelsSelector.getActiveImageData().labelPolygons, {id: activeLabelId}); + return find(LabelsSelector.getActiveImageData().labelPolygons, { + id: activeLabelId + }); } public static getActiveLineLabel(): LabelLine | null { const activeLabelId: string | null = LabelsSelector.getActiveLabelId(); - if (activeLabelId === null) - return null; + if (activeLabelId === null) return null; - return find(LabelsSelector.getActiveImageData().labelLines, {id: activeLabelId}); + return find(LabelsSelector.getActiveImageData().labelLines, { + id: activeLabelId + }); + } + + public static getActiveLabelMode(): LabelModeType | null { + return store.getState().labels.activeLabelMode; + } + + public static getActiveGender(): number | null { + return store.getState().labels.activeGender; + } + public static getActiveHumanType(): number | null { + return store.getState().labels.activeHumanType; + } + public static getActiveStyles(): string[] | null { + return store.getState().labels.activeStyles; + } + public static getActiveHumanID(): string | null { + return store.getState().labels.activeHumanID; + } + public static getActiveMainCategory(): number | null { + return store.getState().labels.activeMainCategory; + } + public static getActiveSubCategory(): number | null { + return store.getState().labels.activeSubCategory; + } + public static getActiveColor(): number | null { + return store.getState().labels.activeColor; + } + public static getActivePattern(): number | null { + return store.getState().labels.activePattern; } } diff --git a/src/utils/FileUtil.ts b/src/utils/FileUtil.ts index 0a4613dfb..e803fcab7 100644 --- a/src/utils/FileUtil.ts +++ b/src/utils/FileUtil.ts @@ -1,19 +1,29 @@ export class FileUtil { + public static loadImageFromURL(url: string): Promise { + return new Promise((resolve, reject) => { + const image = new Image(); + image.src = url; + image.onload = () => resolve(image); + image.onerror = reject; + }); + } + public static loadImage(fileData: File): Promise { - return new Promise((resolve, reject) => { - const url = URL.createObjectURL(fileData); + return new Promise((resolve, reject) => { + const url = URL.createObjectURL(fileData); const image = new Image(); - image.src = url; - image.onload = () => resolve(image); - image.onerror = reject; - }) + image.src = url; + image.onload = () => resolve(image); + image.onerror = reject; + }); } public static loadImages(fileData: File[]): Promise { return new Promise((resolve, reject) => { - const promises: Promise[] = fileData.map((fileData: File) => FileUtil.loadImage(fileData)) - Promise - .all(promises) + const promises: Promise[] = fileData.map( + (fileData: File) => FileUtil.loadImage(fileData) + ); + Promise.all(promises) .then((values: HTMLImageElement[]) => resolve(values)) .catch((error) => reject(error)); }); @@ -27,30 +37,31 @@ export class FileUtil { }; reader.onerror = reject; reader.readAsText(fileData); - }) + }); } public static readFiles(fileData: File[]): Promise { return new Promise((resolve, reject) => { - const promises: Promise[] = fileData.map((fileData: File) => FileUtil.readFile(fileData)) - Promise - .all(promises) + const promises: Promise[] = fileData.map((fileData: File) => + FileUtil.readFile(fileData) + ); + Promise.all(promises) .then((values: string[]) => resolve(values)) .catch((error) => reject(error)); }); } public static extractFileExtension(name: string): string | null { - const parts = name.split("."); + const parts = name.split('.'); return parts.length > 1 ? parts[parts.length - 1] : null; } public static extractFileName(name: string): string | null { - const splitPath = name.split("."); - let fName = ""; - for(const idx of Array(splitPath.length - 1).keys()){ - if(fName === "") fName += splitPath[idx]; - else fName += "." + splitPath[idx]; + const splitPath = name.split('.'); + let fName = ''; + for (const idx of Array(splitPath.length - 1).keys()) { + if (fName === '') fName += splitPath[idx]; + else fName += '.' + splitPath[idx]; } return fName; } diff --git a/src/utils/ImageDataUtil.ts b/src/utils/ImageDataUtil.ts index 0881a6921..7a7a05821 100644 --- a/src/utils/ImageDataUtil.ts +++ b/src/utils/ImageDataUtil.ts @@ -1,7 +1,9 @@ import {ImageData} from '../store/labels/types'; -import { v4 as uuidv4 } from 'uuid'; +import {v4 as uuidv4} from 'uuid'; import {FileUtil} from './FileUtil'; import {ImageRepository} from '../logic/imageRepository/ImageRepository'; +import {APIImageData} from '../services/types'; +import {MJImporter} from '../logic/import/MJ/MJImporter'; export class ImageDataUtil { public static createImageDataFromFileData(fileData: File): ImageData { @@ -15,8 +17,40 @@ export class ImageDataUtil { labelPolygons: [], labelNameIds: [], isVisitedByObjectDetector: false, - isVisitedByPoseDetector: false - } + isVisitedByPoseDetector: false, + humans: [], + items: [], + image_status: "" + }; + } + public static createImageDataFromAPIData(apiData: APIImageData): ImageData { + + const data: ImageData = { + id: apiData.image_id, + fileData: { + //@ts-ignore + path: apiData.image_url, + width: parseInt(apiData.image_width), + height: parseInt(apiData.image_height) + }, + loadStatus: false, + labelRects: [], + labelPoints: [], + labelLines: [], + labelPolygons: [], + labelNameIds: [], + isVisitedByObjectDetector: false, + isVisitedByPoseDetector: false, + humans: [], + items: [], + guideStyles: apiData.style_list, + image_status: apiData.image_status || "" + }; + + // if labeling_json data is available, apply annotations + return apiData.labeling_json + ? MJImporter.applyAnnotations(data, apiData.labeling_json, []) + : data; } public static cleanAnnotations(item: ImageData): ImageData { @@ -26,24 +60,36 @@ export class ImageDataUtil { labelPoints: [], labelLines: [], labelPolygons: [], - labelNameIds: [] - } + labelNameIds: [], + humans: [], + items: [] + }; } - public static arrange(items: ImageData[], idArrangement: string[]): ImageData[] { + public static arrange( + items: ImageData[], + idArrangement: string[] + ): ImageData[] { return items.sort((a: ImageData, b: ImageData) => { - return idArrangement.indexOf(a.id) - idArrangement.indexOf(b.id) - }) + return idArrangement.indexOf(a.id) - idArrangement.indexOf(b.id); + }); } public static loadMissingImages(images: ImageData[]): Promise { return new Promise((resolve, reject) => { - const missingImages = images.filter((i: ImageData) => !i.loadStatus); - const missingImagesFiles = missingImages.map((i: ImageData) => i.fileData); + const missingImages = images.filter( + (i: ImageData) => !i.loadStatus + ); + const missingImagesFiles = missingImages.map( + (i: ImageData) => i.fileData + ); FileUtil.loadImages(missingImagesFiles) - .then((htmlImageElements:HTMLImageElement[]) => { - ImageRepository.storeImages(missingImages.map((i: ImageData) => i.id), htmlImageElements); - resolve() + .then((htmlImageElements: HTMLImageElement[]) => { + ImageRepository.storeImages( + missingImages.map((i: ImageData) => i.id), + htmlImageElements + ); + resolve(); }) .catch((error: Error) => reject(error)); }); diff --git a/src/utils/LabelUtil.ts b/src/utils/LabelUtil.ts index ef5c483a2..79978f106 100644 --- a/src/utils/LabelUtil.ts +++ b/src/utils/LabelUtil.ts @@ -1,11 +1,17 @@ -import {LabelName, LabelPolygon, LabelRect} from '../store/labels/types'; -import { v4 as uuidv4 } from 'uuid'; +import { + HumanInfo, + LabelName, + LabelPolygon, + LabelRect +} from '../store/labels/types'; +import {v4 as uuidv4} from 'uuid'; import {find} from 'lodash'; import {IRect} from '../interfaces/IRect'; import {LabelStatus} from '../data/enums/LabelStatus'; import {IPoint} from '../interfaces/IPoint'; -import { sample } from 'lodash'; +import {sample} from 'lodash'; import {Settings} from '../settings/Settings'; +import {LabelsSelector} from '../store/selectors/LabelsSelector'; export class LabelUtil { public static createLabelName(name: string): LabelName { @@ -13,7 +19,7 @@ export class LabelUtil { id: uuidv4(), name, color: sample(Settings.LABEL_COLORS_PALETTE) - } + }; } public static createLabelRect(labelId: string, rect: IRect): LabelRect { @@ -23,24 +29,35 @@ export class LabelUtil { rect, isCreatedByAI: false, status: LabelStatus.ACCEPTED, - suggestedLabel: null - } + suggestedLabel: null, + mode: LabelsSelector.getActiveLabelMode(), + + }; } - public static createLabelPolygon(labelId: string, vertices: IPoint[]): LabelPolygon { + public static createLabelPolygon( + labelId: string, + vertices: IPoint[] + ): LabelPolygon { return { id: uuidv4(), labelId, vertices - } + }; } - public static labelNamesIdsDiff(oldLabelNames: LabelName[], newLabelNames: LabelName[]): string[] { - return oldLabelNames.reduce((missingIds: string[], labelName: LabelName) => { - if (!find(newLabelNames, { 'id': labelName.id })) { - missingIds.push(labelName.id); - } - return missingIds - }, []) + public static labelNamesIdsDiff( + oldLabelNames: LabelName[], + newLabelNames: LabelName[] + ): string[] { + return oldLabelNames.reduce( + (missingIds: string[], labelName: LabelName) => { + if (!find(newLabelNames, {id: labelName.id})) { + missingIds.push(labelName.id); + } + return missingIds; + }, + [] + ); } } diff --git a/src/utils/RenderEngineUtil.ts b/src/utils/RenderEngineUtil.ts index dd9d1231e..ad87f3bcc 100644 --- a/src/utils/RenderEngineUtil.ts +++ b/src/utils/RenderEngineUtil.ts @@ -1,14 +1,14 @@ -import {EditorData} from "../data/EditorData"; -import {RectUtil} from "./RectUtil"; -import {store} from "../index"; -import {CustomCursorStyle} from "../data/enums/CustomCursorStyle"; -import {updateCustomCursorStyle} from "../store/general/actionCreators"; -import {IPoint} from "../interfaces/IPoint"; -import {PointUtil} from "./PointUtil"; -import {IRect} from "../interfaces/IRect"; -import {ILine} from "../interfaces/ILine"; -import {LineUtil} from "./LineUtil"; -import {ISize} from "../interfaces/ISize"; +import {EditorData} from '../data/EditorData'; +import {RectUtil} from './RectUtil'; +import {store} from '../index'; +import {CustomCursorStyle} from '../data/enums/CustomCursorStyle'; +import {updateCustomCursorStyle} from '../store/general/actionCreators'; +import {IPoint} from '../interfaces/IPoint'; +import {PointUtil} from './PointUtil'; +import {IRect} from '../interfaces/IRect'; +import {ILine} from '../interfaces/ILine'; +import {LineUtil} from './LineUtil'; +import {ISize} from '../interfaces/ISize'; export class RenderEngineUtil { public static calculateImageScale(data: EditorData): number { @@ -16,62 +16,128 @@ export class RenderEngineUtil { } public static isMouseOverImage(data: EditorData): boolean { - return RectUtil.isPointInside(data.viewPortContentImageRect, data.mousePositionOnViewPortContent); + return RectUtil.isPointInside( + data.viewPortContentImageRect, + data.mousePositionOnViewPortContent + ); } public static isMouseOverCanvas(data: EditorData): boolean { - return RectUtil.isPointInside({x: 0, y: 0, ...data.viewPortContentSize}, data.mousePositionOnViewPortContent); + return RectUtil.isPointInside( + {x: 0, y: 0, ...data.viewPortContentSize}, + data.mousePositionOnViewPortContent + ); } - public static transferPointFromImageToViewPortContent(point: IPoint, data: EditorData): IPoint { + public static transferPointFromImageToViewPortContent( + point: IPoint, + data: EditorData + ): IPoint { const scale = RenderEngineUtil.calculateImageScale(data); - return PointUtil.add(PointUtil.multiply(point, 1/scale), data.viewPortContentImageRect); - } - - public static transferPolygonFromImageToViewPortContent(polygon: IPoint[], data: EditorData): IPoint[] { - return polygon.map((point: IPoint) => RenderEngineUtil.transferPointFromImageToViewPortContent(point, data)); - } - - public static transferLineFromImageToViewPortContent(line: ILine, data: EditorData): ILine { + return PointUtil.add( + PointUtil.multiply(point, 1 / scale), + data.viewPortContentImageRect + ); + } + + public static transferPolygonFromImageToViewPortContent( + polygon: IPoint[], + data: EditorData + ): IPoint[] { + return polygon.map((point: IPoint) => + RenderEngineUtil.transferPointFromImageToViewPortContent( + point, + data + ) + ); + } + + public static transferLineFromImageToViewPortContent( + line: ILine, + data: EditorData + ): ILine { return { - start: RenderEngineUtil.transferPointFromImageToViewPortContent(line.start, data), - end: RenderEngineUtil.transferPointFromImageToViewPortContent(line.end, data) - } + start: RenderEngineUtil.transferPointFromImageToViewPortContent( + line.start, + data + ), + end: RenderEngineUtil.transferPointFromImageToViewPortContent( + line.end, + data + ) + }; } - public static transferPointFromViewPortContentToImage(point: IPoint, data: EditorData): IPoint { + public static transferPointFromViewPortContentToImage( + point: IPoint, + data: EditorData + ): IPoint { const scale = RenderEngineUtil.calculateImageScale(data); - return PointUtil.multiply(PointUtil.subtract(point, data.viewPortContentImageRect), scale); - } - - public static transferPolygonFromViewPortContentToImage(polygon: IPoint[], data: EditorData): IPoint[] { - return polygon.map((point: IPoint) => RenderEngineUtil.transferPointFromViewPortContentToImage(point, data)); - } - - public static transferLineFromViewPortContentToImage(line: ILine, data: EditorData): ILine { + return PointUtil.multiply( + PointUtil.subtract(point, data.viewPortContentImageRect), + scale + ); + } + + public static transferPolygonFromViewPortContentToImage( + polygon: IPoint[], + data: EditorData + ): IPoint[] { + return polygon.map((point: IPoint) => + RenderEngineUtil.transferPointFromViewPortContentToImage( + point, + data + ) + ); + } + + public static transferLineFromViewPortContentToImage( + line: ILine, + data: EditorData + ): ILine { return { - start: RenderEngineUtil.transferPointFromViewPortContentToImage(line.start, data), - end: RenderEngineUtil.transferPointFromViewPortContentToImage(line.end, data) - } + start: RenderEngineUtil.transferPointFromViewPortContentToImage( + line.start, + data + ), + end: RenderEngineUtil.transferPointFromViewPortContentToImage( + line.end, + data + ) + }; } - public static transferRectFromViewPortContentToImage(rect: IRect, data: EditorData): IRect { + public static transferRectFromViewPortContentToImage( + rect: IRect, + data: EditorData + ): IRect { const scale = RenderEngineUtil.calculateImageScale(data); - return RectUtil.translate(RectUtil.scaleRect(rect, 1/scale), data.viewPortContentImageRect); + return RectUtil.translate( + RectUtil.scaleRect(rect, 1 / scale), + data.viewPortContentImageRect + ); } - public static transferRectFromImageToViewPortContent(rect: IRect, data: EditorData): IRect { + public static transferRectFromImageToViewPortContent( + rect: IRect, + data: EditorData + ): IRect { const scale = RenderEngineUtil.calculateImageScale(data); const translation: IPoint = { - x: - data.viewPortContentImageRect.x, - y: - data.viewPortContentImageRect.y + x: -data.viewPortContentImageRect.x, + y: -data.viewPortContentImageRect.y }; return RectUtil.scaleRect(RectUtil.translate(rect, translation), scale); } public static wrapDefaultCursorStyleInCancel(data: EditorData) { - if (RectUtil.isPointInside(data.viewPortContentImageRect, data.mousePositionOnViewPortContent)) { + if ( + RectUtil.isPointInside( + data.viewPortContentImageRect, + data.mousePositionOnViewPortContent + ) + ) { store.dispatch(updateCustomCursorStyle(CustomCursorStyle.DEFAULT)); } else { store.dispatch(updateCustomCursorStyle(CustomCursorStyle.CANCEL)); @@ -86,7 +152,7 @@ export class RenderEngineUtil { return { x: RenderEngineUtil.setValueBetweenPixels(point.x), y: RenderEngineUtil.setValueBetweenPixels(point.y) - } + }; } public static setRectBetweenPixels(rect: IRect): IRect { @@ -98,29 +164,46 @@ export class RenderEngineUtil { x: rect.x + rect.width, y: rect.y + rect.height }; - const topLeftBetweenPixels = RenderEngineUtil.setPointBetweenPixels(topLeft); - const bottomRightBetweenPixels = RenderEngineUtil.setPointBetweenPixels(bottomRight); + const topLeftBetweenPixels = + RenderEngineUtil.setPointBetweenPixels(topLeft); + const bottomRightBetweenPixels = + RenderEngineUtil.setPointBetweenPixels(bottomRight); return { x: topLeftBetweenPixels.x, y: topLeftBetweenPixels.y, width: bottomRightBetweenPixels.x - topLeftBetweenPixels.x, height: bottomRightBetweenPixels.y - topLeftBetweenPixels.y - } + }; } - public static isMouseOverLine(mouse: IPoint, l: ILine, radius: number): boolean { + public static isMouseOverLine( + mouse: IPoint, + l: ILine, + radius: number + ): boolean { const minX: number = Math.min(l.start.x, l.end.x); const maxX: number = Math.max(l.start.x, l.end.x); const minY: number = Math.min(l.start.y, l.end.y); const maxY: number = Math.max(l.start.y, l.end.y); - return (minX - radius <= mouse.x && maxX + radius >= mouse.x) && - (minY - radius <= mouse.y && maxY + radius >= mouse.y) && - LineUtil.getDistanceFromLine(l, mouse) < radius; + return ( + minX - radius <= mouse.x && + maxX + radius >= mouse.x && + minY - radius <= mouse.y && + maxY + radius >= mouse.y && + LineUtil.getDistanceFromLine(l, mouse) < radius + ); } - public static isMouseOverAnchor(mouse: IPoint, anchor: IPoint, size: ISize): boolean { + public static isMouseOverAnchor( + mouse: IPoint, + anchor: IPoint, + size: ISize + ): boolean { if (!mouse || !anchor) return null; - return RectUtil.isPointInside(RectUtil.getRectWithCenterAndSize(anchor, size), mouse); + return RectUtil.isPointInside( + RectUtil.getRectWithCenterAndSize(anchor, size), + mouse + ); } -} \ No newline at end of file +} diff --git a/src/utils/URIUtil.ts b/src/utils/URIUtil.ts new file mode 100644 index 000000000..67eb72ebf --- /dev/null +++ b/src/utils/URIUtil.ts @@ -0,0 +1,58 @@ +export class URIUtil { + public static loadImage(uri: string): Promise { + return new Promise((resolve, reject) => { + const image = new Image(); + image.src = uri; + image.onload = () => resolve(image); + image.onerror = reject; + }); + } + + public static loadImages(fileData: File[]): Promise { + return new Promise((resolve, reject) => { + const promises: Promise[] = fileData.map( + //@ts-ignore + (fileData: File) => URIUtil.loadImage(fileData.path) + ); + Promise.all(promises) + .then((values: HTMLImageElement[]) => resolve(values)) + .catch((error) => reject(error)); + }); + } + + // public static readFile(fileData: File): Promise { + // return new Promise((resolve, reject) => { + // let reader = new FileReader(); + // reader.onloadend = (event: any) => { + // resolve(event.target.result); + // }; + // reader.onerror = reject; + // reader.readAsText(fileData); + // }) + // } + + // public static readFiles(fileData: File[]): Promise { + // return new Promise((resolve, reject) => { + // const promises: Promise[] = fileData.map((fileData: File) => FileUtil.readFile(fileData)) + // Promise + // .all(promises) + // .then((values: string[]) => resolve(values)) + // .catch((error) => reject(error)); + // }); + // } + + // public static extractFileExtension(name: string): string | null { + // const parts = name.split("."); + // return parts.length > 1 ? parts[parts.length - 1] : null; + // } + + // public static extractFileName(name: string): string | null { + // const splitPath = name.split("."); + // let fName = ""; + // for(const idx of Array(splitPath.length - 1).keys()){ + // if(fName === "") fName += splitPath[idx]; + // else fName += "." + splitPath[idx]; + // } + // return fName; + // } +} diff --git a/src/views/Common/AttributeSelect/AttributeSelect.scss b/src/views/Common/AttributeSelect/AttributeSelect.scss new file mode 100644 index 000000000..b9c94da72 --- /dev/null +++ b/src/views/Common/AttributeSelect/AttributeSelect.scss @@ -0,0 +1,14 @@ +.AttributeSelect { + display: flex; +} + +.IconItem { + display: flex; + flex: 1; + // justify-content: center; + align-items: center; + + .ItemTitle { + margin-left: 1em; + } +} diff --git a/src/views/Common/AttributeSelect/AttributeSelect.tsx b/src/views/Common/AttributeSelect/AttributeSelect.tsx new file mode 100644 index 000000000..925bf257b --- /dev/null +++ b/src/views/Common/AttributeSelect/AttributeSelect.tsx @@ -0,0 +1,333 @@ +import * as React from 'react'; +import './AttributeSelect.scss'; +import classNames from 'classnames'; +import { + ATTRIBUTE_TYPE, + FASHION_STYLE, + FASHION_STYLE_CODE_FOR_MAN, + FASHION_STYLE_MAN, + FASHION_STYLE_WOMAN, + GENDER, + GENDER_CODE, + ITEM_CATEGORY, + ITEM_COLOR, + ITEM_PATTERN, + MAIN_CATEGORY_CODE, + SOURCE, + SOURCE_CODE, + SUB_CATEGORY_CODE +} from '../../../data/enums/ItemType'; +import Select from 'react-select'; +import {LabelsSelector} from '../../../store/selectors/LabelsSelector'; +import {vi as lang} from '../../../lang'; +import {Settings} from '../../../settings/Settings'; +import _ from 'lodash'; + +interface IProps { + key?: string; + type: ATTRIBUTE_TYPE; + value?: any; + onSelect: (selectedItem: any, type: ATTRIBUTE_TYPE) => any; + style?: React.CSSProperties; + isActive?: boolean; + isDisabled?: boolean; + externalClassName?: string; + mainCategory?: number; + gender?: number; + isMulti?: boolean; + setPreview?: (url: string) => any; +} + +export const AttributeSelect = (props: IProps) => { + const { + key, + type, + value, + onSelect, + style, + isActive, + isDisabled, + externalClassName, + mainCategory, + gender, + isMulti, + setPreview + } = props; + + const getClassNamesName = () => { + return classNames('AttributeSelect', externalClassName, { + active: isActive, + disabled: isDisabled + }); + }; + + const renderItem = (item: {url: string; title: string}) => { + const {url, title} = item; + return ( +
setPreview(url.replace('_s.png', '.png'))} + onMouseLeave={() => setPreview(null)}> + + {title} +
+ ); + }; + + const renderGenderItem = (gender: number) => { + const genderCode = GENDER_CODE[gender.toString()]; + const url = + gender === GENDER.UNKNOWN + ? Settings.UNKNOWN_URL + : `guides/icons/genders/${gender}_s.png`; + return { + value: gender, + label: renderItem({ + url, + title: `${lang.GENDER[genderCode]} (${genderCode})` + }) + }; + }; + + const renderSourceItem = (source: number) => { + const sourceCode = SOURCE_CODE[source.toString()]; + const url = + source === SOURCE.UNKNOWN + ? Settings.UNKNOWN_URL + : `guides/icons/sources/${source}_s.png`; + return { + value: source, + label: renderItem({ + url, + title: `${lang.SOURCE[sourceCode]} (${sourceCode})` + }) + }; + }; + + const renderMainCategory = (mainCategory: any) => { + const index = Object.values(MAIN_CATEGORY_CODE).indexOf(mainCategory); + const mainCategoryCode = Object.keys(MAIN_CATEGORY_CODE)[index]; + const url = + mainCategory === MAIN_CATEGORY_CODE.UNKNOWN + ? Settings.UNKNOWN_URL + : `guides/icons/main_cats/${mainCategory}_s.png`; + return { + value: mainCategory, + label: renderItem({ + url, + title: `${lang.MAIN_CATEGORY[mainCategoryCode]} (${mainCategoryCode})` + }) + }; + }; + + const renderSubCategory = (subCategory: any) => { + const index = Object.values(SUB_CATEGORY_CODE).indexOf(subCategory); + const subCategoryCode = Object.keys(SUB_CATEGORY_CODE)[index]; + const url = + subCategory === SUB_CATEGORY_CODE.UNKNOWN + ? Settings.UNKNOWN_URL + : `guides/icons/sub_cats/${subCategory}_s.png`; + + return { + value: subCategory, + label: renderItem({ + url, + title: `${lang.SUB_CATEGORY[subCategoryCode]} (${subCategoryCode})` + }) + }; + }; + + const renderColor = (color: any) => { + const index = Object.values(ITEM_COLOR).indexOf(color); + const colorCode = Object.keys(ITEM_COLOR)[index]; + const url = + color === ITEM_COLOR.UNKNOWN + ? Settings.UNKNOWN_URL + : `guides/icons/colors/${color}_s.png`; + + return { + value: color, + label: renderItem({ + url, + title: `${lang.ITEM_COLOR[colorCode]} (${colorCode})` + }) + }; + }; + + const renderPattern = (pattern: any) => { + const index = Object.values(ITEM_PATTERN).indexOf(pattern); + const patternCode = Object.keys(ITEM_PATTERN)[index]; + const url = + pattern === ITEM_PATTERN.UNKNOWN + ? Settings.UNKNOWN_URL + : `guides/icons/patterns/${pattern}_s.png`; + + return { + value: pattern, + label: renderItem({ + url, + title: `${lang.ITEM_PATTERN[patternCode]} (${patternCode})` + }) + }; + }; + + const renderStyle = (style: any) => { + const url = + style.seq === -1 + ? Settings.UNKNOWN_URL + : gender === GENDER.MAN + ? `guides/icons/man_style/${style.m}_s.png` + : `guides/icons/woman_style/${style.f}_s.png`; + + return { + value: style.name.toUpperCase(), + label: renderItem({ + url, + title: `${lang.FASHION_STYLE[style.slug]} (${style.slug})` + }) + }; + }; + + const renderHumanId = (uuid: any) => { + const imageData = LabelsSelector.getActiveImageData(); + const index = _.findIndex(imageData.humans, {uuid}); + return uuid === '-1' || index === -1 + ? {value: '-1', label:
UNKNOWN
} + : { + value: uuid, + label:
{index.toString()}
+ }; + }; + + const selectOptions = () => { + switch (type) { + case ATTRIBUTE_TYPE.GENDER: + return Object.values(GENDER).map((gender) => + renderGenderItem(gender) + ); + case ATTRIBUTE_TYPE.SOURCE: + return Object.values(SOURCE).map((source) => + renderSourceItem(source) + ); + case ATTRIBUTE_TYPE.MAIN_CATEGORY: + return Object.values(MAIN_CATEGORY_CODE) + .filter((v) => typeof v === 'number' && v !== -1) + .map((value) => renderMainCategory(value)); + case ATTRIBUTE_TYPE.SUB_CATEGORY: { + const subCategoryCodes = + mainCategory > 0 + ? ITEM_CATEGORY[MAIN_CATEGORY_CODE[mainCategory]] + : Object.values(SUB_CATEGORY_CODE).filter( + (value) => + typeof value === 'number' && value !== -1 + ); + + console.log('subCategoryCodes = ', subCategoryCodes); + return subCategoryCodes.map((subcategory) => + renderSubCategory(subcategory) + ); + } + case ATTRIBUTE_TYPE.ITEM_COLOR: + return Object.values(ITEM_COLOR) + .filter((value) => typeof value === 'number') + .map((value) => renderColor(value)); + case ATTRIBUTE_TYPE.ITEM_PATTERN: + return Object.values(ITEM_PATTERN) + .filter((value) => typeof value === 'number') + .map((value) => renderPattern(value)); + + case ATTRIBUTE_TYPE.FASHION_STYLE: { + console.log('gender = ', gender); + const styles = + gender === GENDER.MAN + ? FASHION_STYLE_MAN + : FASHION_STYLE_WOMAN; + return styles.map((style) => renderStyle(style)); + } + case ATTRIBUTE_TYPE.HUMAN_ID: { + const imageData = LabelsSelector.getActiveImageData(); + return [ + ...imageData.humans.map((human) => + renderHumanId(human.uuid) + ), + {value: '-1', label:
UNKNOWN
} + ]; + } + default: + return []; + } + }; + + const options = React.useMemo( + () => selectOptions(), + [type, gender, mainCategory] + ); + + const renderValue = (value, type) => { + switch (type) { + case ATTRIBUTE_TYPE.GENDER: + return renderGenderItem(value); + case ATTRIBUTE_TYPE.SOURCE: + return renderSourceItem(value); + case ATTRIBUTE_TYPE.MAIN_CATEGORY: + return renderMainCategory(value); + case ATTRIBUTE_TYPE.SUB_CATEGORY: + return renderSubCategory(value); + case ATTRIBUTE_TYPE.ITEM_COLOR: + return renderColor(value); + case ATTRIBUTE_TYPE.ITEM_PATTERN: + return renderPattern(value); + case ATTRIBUTE_TYPE.FASHION_STYLE: + return value.map((style) => renderStyle(style)); + case ATTRIBUTE_TYPE.HUMAN_ID: + return renderHumanId(value); + default: + return null; + } + }; + + const handleOnSelect = (selectedItem: any) => { + switch (type) { + case ATTRIBUTE_TYPE.FASHION_STYLE: + onSelect( + FASHION_STYLE.filter((style) => + selectedItem + .map((item) => item.value) + .includes(style.name.toUpperCase()) + ), + type + ); + return; + default: + onSelect(selectedItem.value, type); + } + }; + + return ( +
+ - {'upload'} -

Drop images

-

or

-

Click here to select them

- ; + return ( + <> + + {'upload'} +

Drop images

+

or

+

Click here to select them

+ + ); else if (acceptedFiles.length === 1) - return <> - {'uploaded'} -

1 image loaded

- ; + return ( + <> + {'uploaded'} +

1 image loaded

+ + ); else - return <> - - {'uploaded'} -

{acceptedFiles.length} images loaded

- ; + return ( + <> + + {'uploaded'} +

+ {acceptedFiles.length} images loaded +

+ + ); }; - const startEditorWithObjectDetection = () => startEditor(ProjectType.OBJECT_DETECTION) - const startEditorWithImageRecognition = () => startEditor(ProjectType.IMAGE_RECOGNITION) + const startEditorWithObjectDetection = () => + startEditor(ProjectType.OBJECT_DETECTION); + const startEditorWithImageRecognition = () => + startEditor(ProjectType.IMAGE_RECOGNITION); - return( -
+ return ( +
{getDropZoneContent()}
-
+
= (props: PropsWithChildren) => { />
- ) + ); }; const mapDispatchToProps = { @@ -111,7 +132,4 @@ const mapStateToProps = (state: AppState) => ({ projectData: state.general.projectData }); -export default connect( - mapStateToProps, - mapDispatchToProps -)(ImagesDropZone); +export default connect(mapStateToProps, mapDispatchToProps)(ImagesDropZone); diff --git a/src/views/MainView/ImagesFetcher/ImagesFetcher.scss b/src/views/MainView/ImagesFetcher/ImagesFetcher.scss new file mode 100644 index 000000000..cd82a88d8 --- /dev/null +++ b/src/views/MainView/ImagesFetcher/ImagesFetcher.scss @@ -0,0 +1,130 @@ +.ImagesDropZone { + opacity: 0; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: center; + align-items: center; + + .DropZone { + user-select: none; + // width: 400px; + // height: 250px; + // box-shadow: black 0 0 0 2px inset; + // border-radius: 4px; + // margin-bottom: 6px; + width: 100%; + display: flex; + flex-direction: column; + justify-items: center; + justify-content: center; + align-items: center; + cursor: pointer; + outline: none; + + > img { + max-width: 60px; + max-height: 60px; + margin-bottom: 10px; + user-select: none; + } + + > input { + outline: none; + } + + > p { + margin-top: 2px; + margin-bottom: 0; + + &.extraBold { + font-size: 18px; + font-weight: 600; + } + } + } + + .DropZoneButtons { + align-self: stretch; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + margin-top: 5px; + &__active{ + + background: #000000; + border-radius: 6px; + color: #fff; + font-style: normal; + font-weight: 400; + font-size: 18px; + line-height: 22px; + padding: 10px 12px; + width: 100% !important; + border: 1px solid #000000; + max-width: 304px; + margin-right: 5px; + + &:hover{ + + border-radius: 6px; + background-color: #FFFFFF; + color: #000000; + svg{ + path { + stroke: #000000; + } + } + } + + } + &__goback{ + background: transparent; + border-radius: 6px; + border: 1px solid #000000 !important; + color: #000000; + font-style: normal; + font-weight: 400; + font-size: 18px; + line-height: 22px; + padding: 10px 12px; + box-shadow: unset; + margin-right: 5px; + min-width: 123px; + display: flex; + align-items: center; + justify-items: center; + &:hover{ + background: #000000; + color: #fff; + svg{ + path { + stroke: #fff; + } + } + } + } + .TextButton { + + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: center; + align-items: center; + + &.disabled { + box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 2px inset; + color: rgba(0, 0, 0, 0.2); + cursor: default; + + &:hover { + box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 2px inset; + color: rgba(0, 0, 0, 0.2); + background-color: transparent; + } + } + } + } +} diff --git a/src/views/MainView/ImagesFetcher/ImagesFetcher.tsx b/src/views/MainView/ImagesFetcher/ImagesFetcher.tsx new file mode 100644 index 000000000..27bdbd6cf --- /dev/null +++ b/src/views/MainView/ImagesFetcher/ImagesFetcher.tsx @@ -0,0 +1,229 @@ +import React, {PropsWithChildren, useState} from 'react'; +import './ImagesFetcher.scss'; +import {TextButton} from '../../Common/TextButton/TextButton'; +import {ImageData} from '../../../store/labels/types'; +import {connect} from 'react-redux'; +import { + addImageData, + updateActiveImageIndex +} from '../../../store/labels/actionCreators'; +import {AppState} from '../../../store'; +import {ProjectType} from '../../../data/enums/ProjectType'; +import {PopupWindowType} from '../../../data/enums/PopupWindowType'; +import { + updateActivePopupType, + updateProjectData +} from '../../../store/general/actionCreators'; +import {ProjectData} from '../../../store/general/types'; +import {ImageDataUtil} from '../../../utils/ImageDataUtil'; +import {sortBy} from 'lodash'; +import {APIImageData} from '../../../services/types'; +import { FormControl, Input, Select} from '@material-ui/core'; +import {APIService} from '../../../services/API'; +import {ClipLoader} from 'react-spinners'; +import {CSSHelper} from '../../../logic/helpers/CSSHelper'; +import {Package, ChevronRightBlack, ChevronRightWhite} from "../../../assets/icons" +// import peudoData from './psedu_data.json' +import { updateScoreCriteria } from 'store/ai/actionCreators'; + +interface IProps { + updateActiveImageIndexAction: (activeImageIndex: number) => any; + addImageDataAction: (imageData: ImageData[]) => any; + updateProjectDataAction: (projectData: ProjectData) => any; + updateActivePopupTypeAction: (activePopupType: PopupWindowType) => any; + updateScoreCriteria: (scoreCriteria: any) => any; + projectData: ProjectData; + goBack: () => any +} + +const IMAGE_STATUS = [ + { + label: 'All', + value: 'all' + }, + { + label: 'Assigned', + value: 'S' + }, + { + label: 'Waiting QC', + value: 'W' + }, + { + label: 'Rejected', + value: 'R' + } +] +const ImagesFetcher: React.FC = (props: PropsWithChildren) => { + const [acceptedImages, setAcceptedImages] = useState([]); + const [offset, setOffset] = useState(0); + const [limit, setLimit] = useState(10); + const [isLoading, setIsLoading] = useState(false); + const [statusValue, setStatusValue] = useState('all') + const { goBack } = props + + const loadImages = async () => { + try { + setIsLoading(true); + const statusValueParams = statusValue !== 'all' ? statusValue: null + const {data} = await APIService.fetchImages({offset, limit, image_status: statusValueParams}); + //@ts-ignore + setAcceptedImages(data.data.image_list); + if(data.data?.score_criteria) { + console.log('criteria', data.data.score_criteria) + props.updateScoreCriteria(data.data.score_criteria); + } + } catch (error) { + console.error('Failed to loadImages: ', error); + } finally { + setIsLoading(false); + } + }; + + const startEditor = (projectType: ProjectType) => { + if (acceptedImages.length > 0) { + const files = acceptedImages; + props.updateProjectDataAction({ + ...props.projectData, + type: projectType + }); + props.updateActiveImageIndexAction(0); + props.addImageDataAction( + files.map((file: APIImageData) => + ImageDataUtil.createImageDataFromAPIData(file) + ) + ); + } + }; + + const getImageFetcherContent = () => { + if (acceptedImages.length === 0) + return ( + <> + + + + + +
+
+ + + + + setOffset(parseInt(e.target.value)) + } + /> + +
+
+ + + + setLimit(parseInt(e.target.value))} + /> + +
+
+ + + {isLoading ? ( + + ) : null} + {/* */} + + ); + else if (acceptedImages.length === 1) + return ( + <> + +

1 image loaded

+ + ); + else + return ( + <> + +

+ {acceptedImages.length} images loaded +

+ + ); + }; + + const startEditorWithObjectDetection = () => + startEditor(ProjectType.OBJECT_DETECTION); + const startEditorWithImageRecognition = () => + startEditor(ProjectType.IMAGE_RECOGNITION); + + return ( +
+
{getImageFetcherContent()}
+
+ { + acceptedImages.length ? ( + } + />) : ( + } + /> + ) + } + } + /> +
+
+ ); +}; + +const mapDispatchToProps = { + updateActiveImageIndexAction: updateActiveImageIndex, + addImageDataAction: addImageData, + updateProjectDataAction: updateProjectData, + updateActivePopupTypeAction: updateActivePopupType, + updateScoreCriteria: updateScoreCriteria, +}; + +const mapStateToProps = (state: AppState) => ({ + projectData: state.general.projectData +}); + +export default connect(mapStateToProps, mapDispatchToProps)(ImagesFetcher); diff --git a/src/views/MainView/ImagesFetcher/psedu_data.json b/src/views/MainView/ImagesFetcher/psedu_data.json new file mode 100644 index 000000000..2f5df1159 --- /dev/null +++ b/src/views/MainView/ImagesFetcher/psedu_data.json @@ -0,0 +1,15102 @@ +{ + "status": "success", + "code": 200, + "message": { + "en": "Your request is successful.", + "vi": "Your request is successful.", + "kr": "Your request is successful." + }, + "data": { + "image_list": [ + { + "image_id": "1324288", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140608-75.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140608-75.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 251, + "lt_y": 172, + "rb_x": 713, + "rb_y": 1193 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:VACATION:SEXY", + "style_score": "0.86:0.05:0.04" + } + ], + "item_info": [ + { + "item_id": "0:2:8:38:c2cd458e-9eea-4eea-8e90-0ca1ca9be5bd:2:14", + "bounding_box": { + "lt_x": 420, + "lt_y": 909, + "rb_x": 566, + "rb_y": 1193 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.42:0.36:0.1:0.08:0.01", + "colors": "2:7:5:6:8", + "item_score": 0.51, + "pattern_score": "0.86:0.06:0.05:0.02:0.01", + "patterns": "14:2:17:18:10" + }, + { + "item_id": "0:2:5:24:06070810-7962-40fd-9199-36fa0c858681:5:1", + "bounding_box": { + "lt_x": 303, + "lt_y": 329, + "rb_x": 650, + "rb_y": 828 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "5:17:6:7:12", + "item_score": 0.84, + "pattern_score": "0.91:0.06:0.01:0.01:0.01", + "patterns": "1:18:10:13:14" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324289", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140609-10.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140609-10.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 230, + "lt_y": 189, + "rb_x": 775, + "rb_y": 1195 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "style_candidates": "GIRLY:ELEGANCE:BASIC" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:81f9df8e-e839-4bd3-ad5f-a719b8b7f7ef:5:1", + "bounding_box": { + "lt_x": 236, + "lt_y": 356, + "rb_x": 766, + "rb_y": 979 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "colors": "5:17:7:6:4", + "patterns": "1:18:14:2:10" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324290", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140610-91.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140610-91.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 221, + "lt_y": 284, + "rb_x": 922, + "rb_y": 1200 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:SEXY:ELEGANCE", + "style_score": "0.64:0.12:0.11" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:275ce4ea-59fc-404a-9f9b-ddab0d793633:5:1", + "bounding_box": { + "lt_x": 224, + "lt_y": 443, + "rb_x": 688, + "rb_y": 1047 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "5:17:7:6:12", + "item_score": 0.96, + "pattern_score": "0.67:0.14:0.07:0.04:0.02", + "patterns": "1:18:14:10:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324291", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140610-88.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140610-88.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 163, + "lt_y": 165, + "rb_x": 715, + "rb_y": 1193 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:VACATION:ELEGANCE", + "style_score": "0.86:0.05:0.03" + } + ], + "item_info": [ + { + "item_id": "0:2:9:43:5b02a017-55c7-4eca-9e83-c433e6b78d10:5:18", + "bounding_box": { + "lt_x": 321, + "lt_y": 365, + "rb_x": 420, + "rb_y": 536 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "5:2:7:6:17", + "item_score": 0.33, + "pattern_score": "0.41:0.39:0.18:0.01:0.0", + "patterns": "18:10:13:6:14" + }, + { + "item_id": "0:2:5:24:a232babe-637e-465d-ae6e-12ac16ba26a8:5:1", + "bounding_box": { + "lt_x": 294, + "lt_y": 332, + "rb_x": 676, + "rb_y": 864 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "5:17:6:7:4", + "item_score": 0.96, + "pattern_score": "0.95:0.02:0.01:0.01:0.0", + "patterns": "1:18:14:10:13" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1323799", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqPJg3vJ8ai-20230403122803-35.jpg", + "image_width": 750, + "image_height": 750, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqPJg3vJ8ai-20230403122803-35.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1323800", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqGAi4vpWpA-20230403122804-55.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqGAi4vpWpA-20230403122804-55.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 217, + "lt_y": 195, + "rb_x": 892, + "rb_y": 1200 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:GIRLY:OFFICE", + "style_score": "0.36:0.34:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:3e922003-a449-475b-99f8-c61ba568f453:1:18", + "bounding_box": { + "lt_x": 235, + "lt_y": 364, + "rb_x": 668, + "rb_y": 924 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.03:0.01:0.01:0.01", + "colors": "1:3:14:7:2", + "item_score": 0.75, + "pattern_score": "0.95:0.04:0.01:0.0:0.0", + "patterns": "18:14:10:17:13" + }, + { + "item_id": "0:2:8:38:0501efe5-7a0b-4294-b224-7ea0f13d9905:1:17", + "bounding_box": { + "lt_x": 595, + "lt_y": 1017, + "rb_x": 885, + "rb_y": 1200 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.73:0.17:0.03:0.02:0.02", + "colors": "1:7:2:3:8", + "item_score": 0.87, + "pattern_score": "0.78:0.11:0.04:0.04:0.02", + "patterns": "17:11:15:14:2" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1323801", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqGAi4vpWpA-20230403122805-36.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqGAi4vpWpA-20230403122805-36.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 442, + "lt_y": 380, + "rb_x": 958, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:STREET:RETRO", + "style_score": "0.36:0.28:0.16" + } + ], + "item_info": [ + { + "item_id": "0:2:2:12:34343970-3802-41cf-847d-48b76d778034:1:14", + "bounding_box": { + "lt_x": 577, + "lt_y": 557, + "rb_x": 956, + "rb_y": 1046 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.66:0.26:0.06:0.01:0.0", + "colors": "1:14:3:2:7", + "item_score": 0.54, + "pattern_score": "0.52:0.26:0.16:0.02:0.01", + "patterns": "14:18:2:13:17" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1323802", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqGAi4vpWpA-20230403122806-91.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/mimistudios__/mimistudios___001/mimistudios___Female_Elegance-Sexy_CqGAi4vpWpA-20230403122806-91.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 282, + "lt_y": 388, + "rb_x": 815, + "rb_y": 1157 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.96, + "style_candidates": "STREET:PUNK:GIRLY", + "style_score": "0.3:0.24:0.23" + }, + { + "human_id": "1:2:-1", + "bounding_box": { + "lt_x": 597, + "lt_y": 444, + "rb_x": 958, + "rb_y": 1030 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.97, + "style_candidates": "STREET:SEXY:SPORTY", + "style_score": "0.43:0.15:0.09" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:98ec66c7-1df4-4e31-9745-f3ceba107c22:1:14", + "bounding_box": { + "lt_x": 285, + "lt_y": 496, + "rb_x": 607, + "rb_y": 853 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.02:0.01:0.0:0.0", + "colors": "1:3:14:2:7", + "item_score": 0.86, + "pattern_score": "0.64:0.29:0.03:0.02:0.01", + "patterns": "14:18:10:13:6" + }, + { + "item_id": "0:2:8:38:75b738b5-fb4e-4621-907e-f5011089a951:1:17", + "bounding_box": { + "lt_x": 626, + "lt_y": 931, + "rb_x": 814, + "rb_y": 1157 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.03:0.03:0.02:0.01", + "colors": "1:7:2:3:14", + "item_score": 0.87, + "pattern_score": "0.66:0.19:0.09:0.04:0.01", + "patterns": "17:15:11:14:2" + }, + { + "item_id": "1:2:11:62:de4f55eb-ac5a-42a3-84fe-886d6241566f:1:14", + "bounding_box": { + "lt_x": 597, + "lt_y": 696, + "rb_x": 954, + "rb_y": 1030 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.02:0.01:0.01:0.01", + "colors": "1:7:2:14:3", + "item_score": 0.43, + "pattern_score": "0.62:0.23:0.04:0.03:0.03", + "patterns": "14:17:18:15:2" + }, + { + "item_id": "1:2:8:37:7b873bb7-bd26-46f0-a4c1-b981cc6cf03f:1:17", + "bounding_box": { + "lt_x": 670, + "lt_y": 917, + "rb_x": 956, + "rb_y": 1030 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.01:0.01:0.01:0.0", + "colors": "1:7:2:3:21", + "item_score": 0.56, + "pattern_score": "0.45:0.32:0.13:0.05:0.02", + "patterns": "17:15:14:11:13" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1323803", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123004-80.jpg", + "image_width": 1075, + "image_height": 1343, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123004-80.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 402, + "lt_y": 401, + "rb_x": 669, + "rb_y": 1330 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "GIRLY:STREET:ELEGANCE", + "style_score": "0.32:0.25:0.11" + } + ], + "item_info": [ + { + "item_id": "0:-1:2:12:b3e00224-cf40-4d65-85d1-0f5bae496f59:1:6", + "bounding_box": { + "lt_x": 419, + "lt_y": 514, + "rb_x": 668, + "rb_y": 891 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:14:7:8:2", + "item_score": 0.27, + "pattern_score": "0.72:0.16:0.07:0.03:0.01", + "patterns": "6:15:10:14:18" + }, + { + "item_id": "0:-1:12:65:9afb129d-5cef-4651-a2b5-e3fe12e2dc6c:7:13", + "bounding_box": { + "lt_x": 483, + "lt_y": 443, + "rb_x": 573, + "rb_y": 482 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.31:0.28:0.09:0.09:0.07", + "colors": "7:2:21:3:15", + "item_score": 0.35, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "13:14:15:17:11" + }, + { + "item_id": "0:-1:9:44:b64a8d5f-8e5d-4990-9f5c-3a490d900738:1:11", + "bounding_box": { + "lt_x": 402, + "lt_y": 671, + "rb_x": 483, + "rb_y": 834 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:14:8:7:3", + "item_score": 0.49, + "pattern_score": "0.91:0.04:0.04:0.0:0.0", + "patterns": "11:14:15:17:13" + }, + { + "item_id": "0:-1:8:37:363a32cf-d3f2-40aa-a17e-f5ebe101c5ed:1:17", + "bounding_box": { + "lt_x": 434, + "lt_y": 1169, + "rb_x": 541, + "rb_y": 1330 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.81:0.12:0.02:0.01:0.01", + "colors": "1:2:3:14:7", + "item_score": 0.77, + "pattern_score": "0.65:0.21:0.07:0.03:0.02", + "patterns": "17:14:15:13:2" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323804", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123004-32.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123004-32.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 335, + "lt_y": 288, + "rb_x": 678, + "rb_y": 1200 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:PUNK", + "style_score": "0.35:0.23:0.21" + } + ], + "item_info": [ + { + "item_id": "0:2:8:39:7f8dae3e-e7d7-4e71-98a9-a3bf8fc2cc00:1:14", + "bounding_box": { + "lt_x": 384, + "lt_y": 1117, + "rb_x": 522, + "rb_y": 1200 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.65:0.27:0.04:0.01:0.01", + "colors": "1:2:7:15:3", + "item_score": 0.33, + "pattern_score": "0.48:0.3:0.13:0.06:0.02", + "patterns": "14:2:17:13:11" + }, + { + "item_id": "0:2:7:36:bf7ac73f-5798-483e-af8d-d800d0dc2313:1:6", + "bounding_box": { + "lt_x": 404, + "lt_y": 548, + "rb_x": 536, + "rb_y": 610 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.55:0.41:0.01:0.0:0.0", + "colors": "1:8:7:11:21", + "item_score": 0.54, + "pattern_score": "0.73:0.17:0.03:0.03:0.02", + "patterns": "6:14:13:15:18" + }, + { + "item_id": "0:2:11:60:64254857-0aa6-4b8f-81fe-6ed5ca971d1a:1:6", + "bounding_box": { + "lt_x": 402, + "lt_y": 546, + "rb_x": 537, + "rb_y": 609 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.29:0.01:0.0:0.0", + "colors": "1:8:7:3:21", + "item_score": 0.59, + "pattern_score": "0.74:0.16:0.03:0.02:0.02", + "patterns": "6:14:15:18:13" + }, + { + "item_id": "0:2:11:58:bf05af14-7ad6-4e2d-a6e6-8eeb26d89836:2:14", + "bounding_box": { + "lt_x": 386, + "lt_y": 1082, + "rb_x": 520, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.5:0.44:0.03:0.01:0.01", + "colors": "2:1:7:15:3", + "item_score": 0.77, + "pattern_score": "0.51:0.25:0.13:0.07:0.02", + "patterns": "14:2:17:13:11" + }, + { + "item_id": "0:2:8:37:f98ece44-3537-4e2c-bc91-e6452c17886e:1:14", + "bounding_box": { + "lt_x": 384, + "lt_y": 1118, + "rb_x": 524, + "rb_y": 1199 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.71:0.22:0.04:0.01:0.01", + "colors": "1:2:7:15:3", + "item_score": 0.78, + "pattern_score": "0.59:0.2:0.15:0.03:0.02", + "patterns": "14:17:2:11:13" + }, + { + "item_id": "0:2:5:24:144e00d1-7b57-4e25-8fa7-e5a225e592ec:1:18", + "bounding_box": { + "lt_x": 335, + "lt_y": 440, + "rb_x": 675, + "rb_y": 850 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.88:0.08:0.02:0.01:0.01", + "colors": "1:8:3:7:2", + "item_score": 0.85, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:6:14:10:13" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323805", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123004-04.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123004-04.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 160, + "lt_y": 79, + "rb_x": 844, + "rb_y": 1200 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "RETRO:OFFICE:ELEGANCE", + "style_score": "0.43:0.29:0.09" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323806", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123006-98.jpg", + "image_width": 1075, + "image_height": 1343, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123006-98.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 418, + "lt_y": 350, + "rb_x": 659, + "rb_y": 1318 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.47, + "style_candidates": "GIRLY:PUNK:ELEGANCE", + "style_score": "0.52:0.14:0.08" + } + ], + "item_info": [ + { + "item_id": "0:2:9:42:c7efc007-ee16-4f59-9ccf-fa101953ceb8:1:14", + "bounding_box": { + "lt_x": 490, + "lt_y": 845, + "rb_x": 583, + "rb_y": 1113 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.02:0.01:0.01:0.01", + "colors": "1:8:14:3:7", + "item_score": 0.45, + "pattern_score": "0.44:0.28:0.19:0.03:0.03", + "patterns": "14:11:15:17:13" + }, + { + "item_id": "0:2:12:65:502eb441-435c-41fc-975f-bffa67bf29b2:7:13", + "bounding_box": { + "lt_x": 471, + "lt_y": 409, + "rb_x": 568, + "rb_y": 446 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.34:0.21:0.11:0.08:0.07", + "colors": "7:2:8:5:15", + "item_score": 0.49, + "pattern_score": "0.96:0.02:0.02:0.0:0.0", + "patterns": "13:14:17:15:11" + }, + { + "item_id": "0:2:2:12:74e2215d-c15d-4efc-a887-ec0f5b4ca835:1:15", + "bounding_box": { + "lt_x": 440, + "lt_y": 480, + "rb_x": 656, + "rb_y": 857 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.02:0.01:0.0:0.0", + "colors": "1:14:7:8:3", + "item_score": 0.56, + "pattern_score": "0.51:0.39:0.08:0.01:0.0", + "patterns": "15:10:6:14:18" + }, + { + "item_id": "0:2:8:37:8625dfe7-8888-45b4-8aa5-80e422c8da9c:1:17", + "bounding_box": { + "lt_x": 460, + "lt_y": 1188, + "rb_x": 582, + "rb_y": 1317 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.01:0.01:0.01:0.0", + "colors": "1:14:3:2:13", + "item_score": 0.63, + "pattern_score": "0.73:0.13:0.06:0.05:0.03", + "patterns": "17:13:14:15:8" + }, + { + "item_id": "0:2:1:1:bbf6322e-8c1d-4c11-9ad4-ae8332f0b684:1:10", + "bounding_box": { + "lt_x": 441, + "lt_y": 480, + "rb_x": 655, + "rb_y": 857 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.03:0.01:0.0:0.0", + "colors": "1:14:7:3:2", + "item_score": 0.76, + "pattern_score": "0.56:0.33:0.08:0.01:0.01", + "patterns": "10:15:6:14:18" + }, + { + "item_id": "0:2:12:64:13e5793c-7bc4-4f4b-bce1-bc2ff4e3737d:7:13", + "bounding_box": { + "lt_x": 470, + "lt_y": 410, + "rb_x": 568, + "rb_y": 446 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.35:0.23:0.11:0.07:0.06", + "colors": "7:2:8:5:15", + "item_score": 0.77, + "pattern_score": "0.97:0.02:0.01:0.0:0.0", + "patterns": "13:14:17:15:11" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323807", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123007-07.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123007-07.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:1:1:fff70f6d-2640-4498-b499-583929decdfc:1:15", + "bounding_box": { + "lt_x": 179, + "lt_y": 261, + "rb_x": 852, + "rb_y": 1035 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:2:14:7", + "item_score": 0.88, + "pattern_score": "0.4:0.35:0.13:0.11:0.0", + "patterns": "15:6:10:14:1" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323808", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123008-31.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqiD_0LpjSw-20230403123008-31.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:13:d32304f6-d298-4ac0-bd42-bbdd9514b115:1:14", + "bounding_box": { + "lt_x": 162, + "lt_y": 258, + "rb_x": 847, + "rb_y": 1032 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:14:2:7", + "item_score": 0.33, + "pattern_score": "0.99:0.01:0.0:0.0:0.0", + "patterns": "14:11:2:15:17" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323809", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123008-70.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123008-70.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 305, + "lt_y": 465, + "rb_x": 552, + "rb_y": 1173 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "PUNK:GIRLY:STREET", + "style_score": "0.25:0.24:0.18" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:135ecbd9-1585-499e-8969-895e0e3f3113:1:18", + "bounding_box": { + "lt_x": 306, + "lt_y": 568, + "rb_x": 544, + "rb_y": 876 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:8:7:3:21", + "item_score": 0.35, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:6:14:10:17" + }, + { + "item_id": "0:2:11:58:4b24e93d-f244-444c-ad89-c0784f8c193d:2:17", + "bounding_box": { + "lt_x": 389, + "lt_y": 1045, + "rb_x": 508, + "rb_y": 1159 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.57:0.37:0.03:0.01:0.0", + "colors": "2:1:7:3:21", + "item_score": 0.73, + "pattern_score": "0.49:0.33:0.11:0.05:0.02", + "patterns": "17:14:2:13:15" + }, + { + "item_id": "0:2:8:37:1af69cb9-c4ce-4790-81f9-398c6cb43732:1:17", + "bounding_box": { + "lt_x": 389, + "lt_y": 1085, + "rb_x": 510, + "rb_y": 1171 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.82:0.15:0.01:0.01:0.0", + "colors": "1:2:7:3:21", + "item_score": 0.87, + "pattern_score": "0.52:0.25:0.15:0.04:0.02", + "patterns": "17:14:13:15:2" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323810", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123010-60.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123010-60.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 265, + "lt_y": 290, + "rb_x": 577, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:STREET", + "style_score": "0.29:0.15:0.1" + } + ], + "item_info": [ + { + "item_id": "0:2:8:37:3d60d317-283a-4591-93c5-96f663cafd30:1:17", + "bounding_box": { + "lt_x": 372, + "lt_y": 1096, + "rb_x": 546, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.39:0.06:0.03:0.02", + "colors": "1:2:7:3:8", + "item_score": 0.29, + "pattern_score": "0.47:0.27:0.22:0.02:0.01", + "patterns": "17:14:2:1:13" + }, + { + "item_id": "0:2:11:58:35c90515-9cc5-4685-9205-d60bd88cdc9f:1:14", + "bounding_box": { + "lt_x": 391, + "lt_y": 1062, + "rb_x": 545, + "rb_y": 1197 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.5:0.41:0.03:0.03:0.01", + "colors": "1:2:7:3:8", + "item_score": 0.57, + "pattern_score": "0.44:0.37:0.14:0.02:0.01", + "patterns": "14:2:17:1:11" + }, + { + "item_id": "0:2:8:38:46c0108c-90f9-4b92-a2d6-a42f3bcb4d92:1:14", + "bounding_box": { + "lt_x": 383, + "lt_y": 1096, + "rb_x": 545, + "rb_y": 1197 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.5:0.34:0.07:0.04:0.02", + "colors": "1:2:7:3:15", + "item_score": 0.59, + "pattern_score": "0.43:0.31:0.2:0.02:0.02", + "patterns": "14:17:2:1:13" + }, + { + "item_id": "0:2:5:24:45cec50e-f72a-4606-bfc9-0e8cf3e59802:1:18", + "bounding_box": { + "lt_x": 268, + "lt_y": 438, + "rb_x": 564, + "rb_y": 858 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.11:0.01:0.0:0.0", + "colors": "1:8:3:7:2", + "item_score": 0.72, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:14:6:10:2" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323811", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123011-73.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123011-73.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 291, + "lt_y": 429, + "rb_x": 556, + "rb_y": 1123 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:PUNK:STREET", + "style_score": "0.37:0.27:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:40e3f8fe-67e8-4503-adc2-eb18e1373032:1:18", + "bounding_box": { + "lt_x": 292, + "lt_y": 528, + "rb_x": 554, + "rb_y": 973 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:8:7:3:21", + "item_score": 0.35, + "pattern_score": "0.95:0.03:0.02:0.0:0.0", + "patterns": "18:14:6:10:5" + }, + { + "item_id": "0:2:11:58:e2a434dd-2808-4011-ae43-ffcb54cfd2c1:1:14", + "bounding_box": { + "lt_x": 389, + "lt_y": 999, + "rb_x": 508, + "rb_y": 1111 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.48:0.47:0.04:0.01:0.0", + "colors": "1:2:7:3:21", + "item_score": 0.7, + "pattern_score": "0.44:0.3:0.15:0.07:0.02", + "patterns": "14:17:2:13:15" + }, + { + "item_id": "0:2:8:37:eb15e52f-85cf-4230-bea8-a3b4ec4e8c3b:1:14", + "bounding_box": { + "lt_x": 388, + "lt_y": 1036, + "rb_x": 510, + "rb_y": 1121 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.22:0.01:0.0:0.0", + "colors": "1:2:7:3:21", + "item_score": 0.87, + "pattern_score": "0.48:0.38:0.07:0.04:0.02", + "patterns": "14:17:13:15:11" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323812", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123012-56.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123012-56.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 315, + "lt_y": 277, + "rb_x": 742, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:STREET:PUNK", + "style_score": "0.55:0.09:0.08" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:87059618-7e5a-4eb0-b01e-59e05ca1eb1b:1:18", + "bounding_box": { + "lt_x": 320, + "lt_y": 428, + "rb_x": 680, + "rb_y": 846 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.07:0.03:0.01:0.01", + "colors": "1:8:2:3:7", + "item_score": 0.85, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:6:14:10:2" + }, + { + "item_id": "0:2:8:37:d24fb3e5-ee02-4b0d-950d-02cf902b110a:1:14", + "bounding_box": { + "lt_x": 439, + "lt_y": 1081, + "rb_x": 522, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.63:0.28:0.05:0.01:0.01", + "colors": "1:2:7:8:3", + "item_score": 0.88, + "pattern_score": "0.58:0.27:0.05:0.04:0.04", + "patterns": "14:17:11:2:13" + }, + { + "item_id": "0:2:11:58:6e5ff50d-dff0-4e0f-ba54-cd650b3dd30b:2:14", + "bounding_box": { + "lt_x": 440, + "lt_y": 1012, + "rb_x": 524, + "rb_y": 1195 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.63:0.3:0.05:0.01:0.01", + "colors": "2:1:7:3:15", + "item_score": 0.89, + "pattern_score": "0.47:0.43:0.05:0.02:0.02", + "patterns": "14:17:2:13:11" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323813", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123013-12.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123013-12.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:5:24:09fc1680-b1fd-4f2a-b700-0f3bbd8499da:1:18", + "bounding_box": { + "lt_x": 144, + "lt_y": 259, + "rb_x": 824, + "rb_y": 1041 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.09:0.03:0.01:0.01", + "colors": "1:3:8:7:2", + "item_score": 0.28, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:14:6:10:17" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324581", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145205-14.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145205-14.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 173, + "lt_y": 1, + "rb_x": 1118, + "rb_y": 1185 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:GIRLY:OFFICE", + "style_score": "0.36:0.26:0.15" + } + ], + "item_info": [ + { + "item_id": "0:2:9:42:958e7551-eb87-495c-a859-bcebf72b3916:7:14", + "bounding_box": { + "lt_x": 372, + "lt_y": 275, + "rb_x": 563, + "rb_y": 785 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.16:0.08:0.06:0.06", + "colors": "7:1:21:8:2", + "item_score": 0.48, + "pattern_score": "0.81:0.15:0.02:0.01:0.01", + "patterns": "14:18:13:11:15" + }, + { + "item_id": "0:2:5:24:83b972a3-8979-406e-9bb2-915108e61ad2:7:14", + "bounding_box": { + "lt_x": 344, + "lt_y": 263, + "rb_x": 1084, + "rb_y": 1043 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.03:0.01:0.0:0.0", + "colors": "7:5:2:8:6", + "item_score": 0.71, + "pattern_score": "0.52:0.38:0.08:0.01:0.01", + "patterns": "14:18:10:2:13" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323814", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123015-69.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123015-69.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324582", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145206-29.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145206-29.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 173, + "lt_y": 1, + "rb_x": 1118, + "rb_y": 1185 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:BASIC", + "style_score": "0.36:0.21:0.15" + } + ], + "item_info": [ + { + "item_id": "0:2:9:42:04e99b5d-e7ae-47f0-98e3-8fe33fc98a2e:7:14", + "bounding_box": { + "lt_x": 372, + "lt_y": 275, + "rb_x": 563, + "rb_y": 785 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.16:0.08:0.06:0.06", + "colors": "7:1:21:8:2", + "item_score": 0.48, + "pattern_score": "0.81:0.15:0.02:0.01:0.01", + "patterns": "14:18:13:11:15" + }, + { + "item_id": "0:2:5:24:2b85fa83-b6c4-4bee-902a-3152f4e00ee5:7:14", + "bounding_box": { + "lt_x": 344, + "lt_y": 263, + "rb_x": 1084, + "rb_y": 1043 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.03:0.01:0.0:0.0", + "colors": "7:5:2:8:6", + "item_score": 0.71, + "pattern_score": "0.52:0.38:0.08:0.01:0.01", + "patterns": "14:18:10:2:13" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323815", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123016-01.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqffNZiPaQ8-20230403123016-01.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:5:24:84784377-2600-4730-98e9-ecf7e0462b45:1:6", + "bounding_box": { + "lt_x": 139, + "lt_y": 262, + "rb_x": 819, + "rb_y": 1044 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.07:0.06:0.01:0.0", + "colors": "1:3:8:7:11", + "item_score": 0.25, + "pattern_score": "0.74:0.25:0.01:0.0:0.0", + "patterns": "6:18:2:17:10" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324583", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145206-34.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145206-34.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 515, + "lt_y": 154, + "rb_x": 911, + "rb_y": 1165 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "RETRO:STREET:PUNK", + "style_score": "0.39:0.3:0.11" + } + ], + "item_info": [ + { + "item_id": "0:2:2:8:4e6b6041-61d2-404e-af24-7da76c0872c9:1:14", + "bounding_box": { + "lt_x": 516, + "lt_y": 174, + "rb_x": 855, + "rb_y": 643 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.05:0.0:0.0:0.0", + "colors": "1:14:3:2:7", + "item_score": 0.29, + "pattern_score": "0.75:0.13:0.03:0.03:0.02", + "patterns": "14:1:2:17:11" + }, + { + "item_id": "0:2:8:39:5c7df15c-8af0-4f81-8a66-2e6461607635:1:17", + "bounding_box": { + "lt_x": 612, + "lt_y": 1037, + "rb_x": 796, + "rb_y": 1165 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.02:0.01:0.01:0.01", + "colors": "1:14:2:3:7", + "item_score": 0.61, + "pattern_score": "0.68:0.11:0.09:0.07:0.03", + "patterns": "17:11:15:2:14" + }, + { + "item_id": "0:2:4:23:3e22f211-872b-47c5-84e7-c25a3bd8dc61:1:1", + "bounding_box": { + "lt_x": 541, + "lt_y": 459, + "rb_x": 908, + "rb_y": 1073 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.92:0.07:0.01:0.0:0.0", + "colors": "1:14:3:2:13", + "item_score": 0.76, + "pattern_score": "0.8:0.13:0.02:0.02:0.01", + "patterns": "1:2:13:14:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323816", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123017-45.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123017-45.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 348, + "lt_y": 43, + "rb_x": 666, + "rb_y": 1180 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "OFFICE:ELEGANCE:RETRO", + "style_score": "0.34:0.29:0.18" + } + ], + "item_info": [ + { + "item_id": "0:2:4:22:11585faf-8a62-4d51-9924-59c1eeeba229:7:14", + "bounding_box": { + "lt_x": 377, + "lt_y": 410, + "rb_x": 652, + "rb_y": 686 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.09:0.02:0.01:0.0", + "colors": "7:8:6:5:4", + "item_score": 0.61, + "pattern_score": "0.97:0.01:0.01:0.0:0.0", + "patterns": "14:11:17:15:1" + }, + { + "item_id": "0:2:2:12:ef59be23-d84c-4e00-8668-ce9797993348:7:14", + "bounding_box": { + "lt_x": 350, + "lt_y": 214, + "rb_x": 665, + "rb_y": 582 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.01:0.0", + "colors": "7:8:6:5:2", + "item_score": 0.77, + "pattern_score": "0.86:0.11:0.01:0.01:0.01", + "patterns": "14:18:2:10:17" + }, + { + "item_id": "0:2:8:38:e554b7d5-4a2f-4bc4-a569-63d64a03d7d3:8:14", + "bounding_box": { + "lt_x": 466, + "lt_y": 989, + "rb_x": 598, + "rb_y": 1179 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.2:0.18:0.04:0.02", + "colors": "8:18:7:20:5", + "item_score": 0.97, + "pattern_score": "0.99:0.01:0.0:0.0:0.0", + "patterns": "14:15:13:11:17" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324584", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145208-57.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145208-57.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 303, + "lt_y": 51, + "rb_x": 952, + "rb_y": 1196 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "GIRLY:ELEGANCE:SEXY", + "style_score": "0.42:0.23:0.17" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323817", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123018-89.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123018-89.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 176, + "lt_y": 51, + "rb_x": 909, + "rb_y": 1196 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.89, + "style_candidates": "OFFICE:ELEGANCE:RETRO", + "style_score": "0.31:0.24:0.22" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324585", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145209-64.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145209-64.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 21, + "lt_y": 70, + "rb_x": 1170, + "rb_y": 1197 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "SEXY:GIRLY:BASIC", + "style_score": "0.58:0.21:0.07" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323818", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123019-22.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123019-22.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 118, + "lt_y": 152, + "rb_x": 708, + "rb_y": 1199 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:RETRO:BASIC", + "style_score": "0.32:0.24:0.21" + } + ], + "item_info": [ + { + "item_id": "0:-1:2:12:365783da-c3a9-4a14-8248-da5dc00c97db:7:14", + "bounding_box": { + "lt_x": 176, + "lt_y": 401, + "rb_x": 706, + "rb_y": 1012 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.02:0.01:0.01:0.0", + "colors": "7:2:4:8:6", + "item_score": 0.6, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:17:11:15:2" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324586", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145209-33.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145209-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 0, + "lt_y": 64, + "rb_x": 1137, + "rb_y": 1199 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "SEXY:ELEGANCE:GIRLY", + "style_score": "0.35:0.28:0.25" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323819", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123020-56.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123020-56.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:12:09fe85ea-b5f0-4db7-8370-c8fd1b56b46c:7:18", + "bounding_box": { + "lt_x": 162, + "lt_y": 175, + "rb_x": 803, + "rb_y": 963 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.03:0.02:0.0:0.0", + "colors": "7:9:2:8:1", + "item_score": 0.96, + "pattern_score": "0.6:0.27:0.07:0.03:0.02", + "patterns": "18:2:14:13:10" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324587", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145210-84.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145210-84.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323820", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123021-39.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123021-39.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324076", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA54V7PNUS-20230403132603-28.jpg", + "image_width": 976, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA54V7PNUS-20230403132603-28.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324588", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145211-79.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9L1ppluj-20230403145211-79.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323821", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123022-78.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123022-78.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:12:1bb95ce3-36fb-4fa4-bc1f-4734fd95d8ed:7:14", + "bounding_box": { + "lt_x": 180, + "lt_y": 175, + "rb_x": 788, + "rb_y": 958 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.0:0.0", + "colors": "7:9:2:8:1", + "item_score": 0.8, + "pattern_score": "0.95:0.03:0.02:0.0:0.0", + "patterns": "14:18:13:2:17" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324077", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132604-43.jpg", + "image_width": 987, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132604-43.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:4:22:2e2aa19d-d751-4a97-a9d4-2eb829e76143:14:13", + "bounding_box": { + "lt_x": 269, + "lt_y": 741, + "rb_x": 827, + "rb_y": 1199 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.46:0.18:0.16:0.09:0.04", + "colors": "14:1:13:3:15", + "item_score": 0.37, + "pattern_score": "0.73:0.22:0.02:0.01:0.01", + "patterns": "13:14:2:17:5" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324589", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145212-65.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145212-65.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 303, + "lt_y": 51, + "rb_x": 952, + "rb_y": 1196 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "GIRLY:ELEGANCE:SEXY", + "style_score": "0.38:0.28:0.12" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323566", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113004-10.jpg", + "image_width": 958, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113004-10.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 426, + "lt_y": 122, + "rb_x": 657, + "rb_y": 902 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.68:0.22:0.04" + } + ], + "item_info": [ + { + "item_id": "0:1:3:16:3bb4a10a-eed3-41b4-a466-6ea20d8ec18e:3:14", + "bounding_box": { + "lt_x": 432, + "lt_y": 390, + "rb_x": 620, + "rb_y": 881 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.51:0.4:0.04:0.02:0.01", + "colors": "3:7:8:1:11", + "item_score": 0.75, + "pattern_score": "0.68:0.19:0.04:0.03:0.03", + "patterns": "14:2:11:13:1" + }, + { + "item_id": "0:1:8:39:3d63f4d5-1ae3-479e-a294-ab0729cf335f:7:17", + "bounding_box": { + "lt_x": 465, + "lt_y": 806, + "rb_x": 611, + "rb_y": 902 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.32:0.18:0.17:0.16:0.08", + "colors": "7:3:8:2:1", + "item_score": 0.83, + "pattern_score": "0.48:0.25:0.15:0.1:0.01", + "patterns": "17:11:14:15:2" + }, + { + "item_id": "0:1:2:8:a015b2e4-6096-4f6e-b8c1-8feaa05fdd7b:2:2", + "bounding_box": { + "lt_x": 431, + "lt_y": 179, + "rb_x": 656, + "rb_y": 440 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.88:0.1:0.01:0.0:0.0", + "colors": "2:7:3:1:21", + "item_score": 0.92, + "pattern_score": "0.45:0.36:0.17:0.02:0.01", + "patterns": "2:17:11:14:15" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323822", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123023-56.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123023-56.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:4:22:a861ee9a-8cff-4a28-a04c-6322f2d7b73e:7:14", + "bounding_box": { + "lt_x": 164, + "lt_y": 278, + "rb_x": 816, + "rb_y": 917 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.64:0.23:0.09:0.02:0.01", + "colors": "7:8:11:3:9", + "item_score": 0.34, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:11:15:1:17" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324078", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5eohvmJs-20230403132604-56.jpg", + "image_width": 1174, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5eohvmJs-20230403132604-56.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:8:412da394-5a42-45bc-a0d7-3777c20ce4c1:1:17", + "bounding_box": { + "lt_x": 257, + "lt_y": 133, + "rb_x": 978, + "rb_y": 900 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.02:0.02:0.0:0.0", + "colors": "1:3:14:2:7", + "item_score": 0.83, + "pattern_score": "0.83:0.12:0.03:0.02:0.01", + "patterns": "17:11:14:15:13" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324590", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145212-83.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145212-83.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 21, + "lt_y": 70, + "rb_x": 1170, + "rb_y": 1197 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "SEXY:GIRLY:BASIC", + "style_score": "0.46:0.41:0.04" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323567", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CpxZK1cJ21w-20230403113004-98.jpg", + "image_width": 960, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CpxZK1cJ21w-20230403113004-98.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 382, + "lt_y": 190, + "rb_x": 629, + "rb_y": 893 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:BASIC:TECH", + "style_score": "0.7:0.22:0.03" + } + ], + "item_info": [ + { + "item_id": "0:1:3:15:075b01d4-31cf-4c8f-83d9-fedd99d63e76:13:13", + "bounding_box": { + "lt_x": 404, + "lt_y": 445, + "rb_x": 568, + "rb_y": 855 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.36:0.29:0.2:0.07:0.03", + "colors": "13:15:14:3:1", + "item_score": 0.61, + "pattern_score": "0.98:0.02:0.0:0.0:0.0", + "patterns": "13:14:17:2:5" + }, + { + "item_id": "0:1:3:16:004b8fbb-3b5e-4be9-9739-d73e54caf4f3:13:13", + "bounding_box": { + "lt_x": 404, + "lt_y": 446, + "rb_x": 567, + "rb_y": 854 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.34:0.27:0.2:0.08:0.04", + "colors": "13:15:14:3:1", + "item_score": 0.79, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "13:14:17:2:15" + }, + { + "item_id": "0:1:8:39:d5326bba-2c04-4b7a-9565-fa2f03e827ff:1:17", + "bounding_box": { + "lt_x": 406, + "lt_y": 805, + "rb_x": 549, + "rb_y": 890 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.3:0.23:0.14:0.12:0.09", + "colors": "1:15:13:14:3", + "item_score": 0.87, + "pattern_score": "0.66:0.28:0.03:0.01:0.01", + "patterns": "17:14:13:15:2" + }, + { + "item_id": "0:1:2:12:b0e8bb61-e13f-4dd4-aa19-a1cef0476d78:3:11", + "bounding_box": { + "lt_x": 383, + "lt_y": 250, + "rb_x": 626, + "rb_y": 520 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.02:0.02:0.01:0.01", + "colors": "3:1:14:15:2", + "item_score": 0.97, + "pattern_score": "0.81:0.08:0.04:0.04:0.02", + "patterns": "11:17:2:15:14" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323823", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123024-64.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123024-64.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324079", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA54V7PNUS-20230403132605-40.jpg", + "image_width": 976, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA54V7PNUS-20230403132605-40.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:b69e0972-34f4-4e1b-84a2-af5dc8d2249a:13:13", + "bounding_box": { + "lt_x": 225, + "lt_y": 741, + "rb_x": 867, + "rb_y": 1200 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.3:0.24:0.1:0.09:0.08", + "colors": "13:15:3:1:2", + "item_score": 0.58, + "pattern_score": "0.81:0.12:0.06:0.0:0.0", + "patterns": "13:14:2:17:18" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324591", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145213-67.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145213-67.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 0, + "lt_y": 64, + "rb_x": 1137, + "rb_y": 1199 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:SEXY", + "style_score": "0.43:0.32:0.17" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323568", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113005-74.jpg", + "image_width": 960, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113005-74.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 324, + "lt_y": 3, + "rb_x": 627, + "rb_y": 856 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "BASIC:STREET:MINIMALIST", + "style_score": "0.76:0.14:0.05" + } + ], + "item_info": [ + { + "item_id": "0:1:10:53:f84a84a1-f463-4a9c-96f2-5914351678d7:1:14", + "bounding_box": { + "lt_x": 484, + "lt_y": 3, + "rb_x": 541, + "rb_y": 35 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.51:0.34:0.05:0.03:0.03", + "colors": "1:8:7:2:21", + "item_score": 0.39, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:11:13:15:17" + }, + { + "item_id": "0:1:3:15:244b0dd9-7405-4708-8c1c-8708b58b85f7:7:2", + "bounding_box": { + "lt_x": 399, + "lt_y": 267, + "rb_x": 601, + "rb_y": 809 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.51:0.38:0.04:0.03:0.03", + "colors": "7:3:11:2:8", + "item_score": 0.74, + "pattern_score": "0.48:0.29:0.12:0.05:0.03", + "patterns": "2:14:13:17:1" + }, + { + "item_id": "0:1:8:39:ea182d3f-609d-4672-b1f1-c032e76bf357:7:14", + "bounding_box": { + "lt_x": 370, + "lt_y": 755, + "rb_x": 596, + "rb_y": 856 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.47:0.28:0.11:0.06:0.05", + "colors": "7:8:2:1:3", + "item_score": 0.91, + "pattern_score": "0.51:0.46:0.01:0.01:0.0", + "patterns": "14:17:11:15:13" + }, + { + "item_id": "0:1:2:8:427ded71-0b82-436f-ae94-4a4390d2dffe:2:17", + "bounding_box": { + "lt_x": 352, + "lt_y": 5, + "rb_x": 624, + "rb_y": 322 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.0:0.0", + "colors": "2:7:3:1:15", + "item_score": 0.95, + "pattern_score": "0.36:0.33:0.27:0.02:0.01", + "patterns": "17:11:2:15:14" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323824", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123025-03.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/themavenofficial/themavenofficial_001/themavenofficial_Female_Elegance-Girly_CqMqJQhPtJu-20230403123025-03.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324080", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132606-76.jpg", + "image_width": 987, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132606-76.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324592", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145214-47.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145214-47.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323569", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113006-43.jpg", + "image_width": 960, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113006-43.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 360, + "lt_y": 4, + "rb_x": 613, + "rb_y": 816 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.59:0.3:0.06" + } + ], + "item_info": [ + { + "item_id": "0:1:3:16:c2de8136-e5c2-4a42-9e35-8f955cd50219:3:2", + "bounding_box": { + "lt_x": 388, + "lt_y": 266, + "rb_x": 569, + "rb_y": 784 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.92:0.04:0.01:0.01:0.01", + "colors": "3:7:2:1:11", + "item_score": 0.29, + "pattern_score": "0.43:0.38:0.09:0.04:0.03", + "patterns": "2:14:13:17:11" + }, + { + "item_id": "0:1:8:39:67c27455-a7fa-4bd1-be37-094e7836477b:3:17", + "bounding_box": { + "lt_x": 382, + "lt_y": 721, + "rb_x": 574, + "rb_y": 816 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.39:0.18:0.15:0.14:0.08", + "colors": "3:1:7:2:21", + "item_score": 0.58, + "pattern_score": "0.72:0.21:0.04:0.02:0.01", + "patterns": "17:14:15:11:13" + }, + { + "item_id": "0:1:2:8:cf3bbd27-3e81-40e5-93d0-dc00a758882c:2:17", + "bounding_box": { + "lt_x": 362, + "lt_y": 5, + "rb_x": 610, + "rb_y": 339 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.04:0.02:0.0:0.0", + "colors": "2:7:3:1:15", + "item_score": 0.87, + "pattern_score": "0.7:0.19:0.07:0.03:0.0", + "patterns": "17:11:2:15:14" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324081", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132607-22.jpg", + "image_width": 987, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132607-22.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 304, + "lt_y": 299, + "rb_x": 729, + "rb_y": 1199 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "OFFICE:BASIC:MINIMALIST", + "style_score": "0.47:0.36:0.06" + } + ], + "item_info": [ + { + "item_id": "0:2:2:8:d0dbf85a-3416-446f-b2cf-6a04c2d37b02:1:14", + "bounding_box": { + "lt_x": 328, + "lt_y": 515, + "rb_x": 696, + "rb_y": 1012 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.06:0.02:0.02:0.02", + "colors": "1:11:8:7:3", + "item_score": 0.35, + "pattern_score": "0.51:0.24:0.22:0.01:0.01", + "patterns": "14:17:2:1:11" + }, + { + "item_id": "0:2:2:12:29969277-27a8-4a8d-8bec-55f84fb0a885:1:17", + "bounding_box": { + "lt_x": 329, + "lt_y": 515, + "rb_x": 693, + "rb_y": 1004 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.03:0.02:0.01:0.01", + "colors": "1:11:7:8:3", + "item_score": 0.39, + "pattern_score": "0.42:0.32:0.23:0.01:0.01", + "patterns": "17:14:2:1:11" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324593", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145214-45.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqj9J43LIGT-20230403145214-45.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323570", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113006-48.jpg", + "image_width": 960, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebrothersclo/thebrothersclo_001/thebrothersclo_All_Street_CqA7Paorapf-20230403113006-48.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 335, + "lt_y": 149, + "rb_x": 619, + "rb_y": 898 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.69:0.21:0.04" + } + ], + "item_info": [ + { + "item_id": "0:1:3:15:4a288424-5158-4ccf-ab1f-14b608570e1a:3:2", + "bounding_box": { + "lt_x": 411, + "lt_y": 438, + "rb_x": 580, + "rb_y": 866 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.39:0.04:0.01:0.0", + "colors": "3:7:2:1:8", + "item_score": 0.39, + "pattern_score": "0.73:0.25:0.01:0.01:0.0", + "patterns": "2:14:1:13:17" + }, + { + "item_id": "0:1:3:16:7e6164f9-222d-4c61-9185-983f71e99362:3:2", + "bounding_box": { + "lt_x": 411, + "lt_y": 439, + "rb_x": 580, + "rb_y": 865 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.38:0.04:0.01:0.0", + "colors": "3:7:2:1:8", + "item_score": 0.69, + "pattern_score": "0.54:0.43:0.01:0.01:0.01", + "patterns": "2:14:1:13:17" + }, + { + "item_id": "0:1:8:39:9ed414b4-814c-4336-b39c-d3ba8f941c5a:7:14", + "bounding_box": { + "lt_x": 395, + "lt_y": 829, + "rb_x": 593, + "rb_y": 897 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.48:0.16:0.15:0.1:0.05", + "colors": "7:3:8:2:1", + "item_score": 0.89, + "pattern_score": "0.45:0.28:0.1:0.1:0.05", + "patterns": "14:17:15:11:8" + }, + { + "item_id": "0:1:2:8:5d3859c1-f0ab-486e-a37e-0b6d7366c09d:2:17", + "bounding_box": { + "lt_x": 383, + "lt_y": 230, + "rb_x": 617, + "rb_y": 476 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.04:0.02:0.0:0.0", + "colors": "2:7:3:1:15", + "item_score": 0.94, + "pattern_score": "0.48:0.37:0.12:0.03:0.01", + "patterns": "17:11:2:15:14" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324082", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132608-77.jpg", + "image_width": 988, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5nhvPCsk-20230403132608-77.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:12:c8eb7733-ec42-487d-b4ff-747d39617aa2:1:2", + "bounding_box": { + "lt_x": 210, + "lt_y": 127, + "rb_x": 767, + "rb_y": 760 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.01:0.0", + "colors": "1:7:8:11:3", + "item_score": 0.27, + "pattern_score": "0.71:0.19:0.06:0.03:0.01", + "patterns": "2:14:17:1:18" + }, + { + "item_id": "-1:-1:2:8:2da37e22-d838-448c-b8e6-93dbe6626ff4:1:2", + "bounding_box": { + "lt_x": 210, + "lt_y": 126, + "rb_x": 767, + "rb_y": 774 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.02:0.01:0.01:0.0", + "colors": "1:7:8:11:3", + "item_score": 0.39, + "pattern_score": "0.7:0.18:0.05:0.05:0.01", + "patterns": "2:14:17:1:11" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324594", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145216-93.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145216-93.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 461, + "lt_y": 132, + "rb_x": 867, + "rb_y": 1146 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "STREET:PUNK:TECH", + "style_score": "0.32:0.3:0.17" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:1ddcbdfc-0738-45e2-a7a6-5a27889085e5:1:1", + "bounding_box": { + "lt_x": 462, + "lt_y": 465, + "rb_x": 839, + "rb_y": 1021 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.04:0.01:0.0:0.0", + "colors": "1:14:3:2:7", + "item_score": 0.26, + "pattern_score": "0.51:0.32:0.1:0.04:0.01", + "patterns": "1:18:14:2:13" + }, + { + "item_id": "0:2:2:12:cb015d1a-6b69-4312-80e5-deb74a468888:1:7", + "bounding_box": { + "lt_x": 507, + "lt_y": 264, + "rb_x": 862, + "rb_y": 644 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.08:0.01:0.0:0.0", + "colors": "1:14:3:2:8", + "item_score": 0.76, + "pattern_score": "0.34:0.22:0.16:0.14:0.04", + "patterns": "7:13:15:1:14" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324083", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5eohvmJs-20230403132609-83.jpg", + "image_width": 1174, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5eohvmJs-20230403132609-83.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324595", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145216-39.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145216-39.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:11:61:c7929a38-699c-4739-a2cd-86b6f567dff7:1:15", + "bounding_box": { + "lt_x": 420, + "lt_y": 427, + "rb_x": 1073, + "rb_y": 1198 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.78:0.21:0.0:0.0:0.0", + "colors": "1:3:14:2:7", + "item_score": 0.28, + "pattern_score": "0.81:0.06:0.04:0.03:0.03", + "patterns": "15:11:14:17:13" + }, + { + "item_id": "-1:-1:11:63:bd99157c-0bfd-4748-85c0-f9c55fe8e203:2:15", + "bounding_box": { + "lt_x": 43, + "lt_y": 392, + "rb_x": 602, + "rb_y": 847 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.46:0.37:0.07:0.03:0.03", + "colors": "2:1:3:7:14", + "item_score": 0.29, + "pattern_score": "0.92:0.03:0.02:0.01:0.01", + "patterns": "15:12:10:17:11" + }, + { + "item_id": "-1:-1:11:57:cb24fae8-0651-4d3f-b254-05c54b2f2a96:1:15", + "bounding_box": { + "lt_x": 172, + "lt_y": 464, + "rb_x": 600, + "rb_y": 991 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.58:0.3:0.07:0.02:0.01", + "colors": "1:2:3:7:14", + "item_score": 0.39, + "pattern_score": "0.9:0.03:0.02:0.01:0.01", + "patterns": "15:10:17:12:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324084", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5eohvmJs-20230403132609-93.jpg", + "image_width": 1174, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thesis.wear/thesis.wear_001/thesis.wear_Female_Sexy-Basic_CqA5eohvmJs-20230403132609-93.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1324596", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145217-21.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145217-21.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 405, + "lt_y": 117, + "rb_x": 773, + "rb_y": 1182 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "PUNK:STREET:TECH", + "style_score": "0.55:0.23:0.11" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:cb16f030-c7a0-43ca-b5b0-e498acbe4fb9:1:1", + "bounding_box": { + "lt_x": 405, + "lt_y": 487, + "rb_x": 772, + "rb_y": 1148 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.02:0.01:0.0:0.0", + "colors": "1:3:14:2:7", + "item_score": 0.26, + "pattern_score": "0.79:0.07:0.04:0.03:0.03", + "patterns": "1:2:14:15:13" + }, + { + "item_id": "0:2:8:37:07516ac6-8762-4d07-be59-cddc3f9f7bad:1:17", + "bounding_box": { + "lt_x": 471, + "lt_y": 1065, + "rb_x": 637, + "rb_y": 1182 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.05:0.02:0.01:0.01", + "colors": "1:2:3:7:14", + "item_score": 0.44, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "17:2:11:14:15" + }, + { + "item_id": "0:2:8:39:e84cf3b2-81ee-4547-8495-7ca2fec9723a:1:17", + "bounding_box": { + "lt_x": 470, + "lt_y": 1063, + "rb_x": 637, + "rb_y": 1182 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.04:0.03:0.01:0.01", + "colors": "1:2:3:7:14", + "item_score": 0.54, + "pattern_score": "0.96:0.02:0.01:0.01:0.0", + "patterns": "17:2:15:11:14" + }, + { + "item_id": "0:2:9:42:2b966b8e-024c-4913-8bfb-4eaa364f668a:1:14", + "bounding_box": { + "lt_x": 428, + "lt_y": 257, + "rb_x": 577, + "rb_y": 733 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.02:0.0:0.0", + "colors": "1:14:3:2:8", + "item_score": 0.95, + "pattern_score": "0.52:0.3:0.07:0.03:0.02", + "patterns": "14:13:2:1:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324597", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145218-05.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145218-05.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 543, + "lt_y": 172, + "rb_x": 900, + "rb_y": 1147 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "PUNK:RETRO:STREET", + "style_score": "0.43:0.23:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:3:16:01d9db18-0697-48c7-aadd-3152ec127d32:1:14", + "bounding_box": { + "lt_x": 546, + "lt_y": 511, + "rb_x": 849, + "rb_y": 1076 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.03:0.0:0.0:0.0", + "colors": "1:14:3:2:8", + "item_score": 0.25, + "pattern_score": "0.87:0.03:0.03:0.02:0.02", + "patterns": "14:2:17:18:13" + }, + { + "item_id": "0:2:8:39:6ac0924a-9542-4be5-91fe-6de04c24b611:1:17", + "bounding_box": { + "lt_x": 619, + "lt_y": 1049, + "rb_x": 785, + "rb_y": 1147 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "1:2:3:14:7", + "item_score": 0.29, + "pattern_score": "0.41:0.31:0.2:0.05:0.02", + "patterns": "17:11:15:2:14" + }, + { + "item_id": "0:2:4:23:d2570d54-288f-47d1-a6db-1b8536402e0a:1:14", + "bounding_box": { + "lt_x": 549, + "lt_y": 510, + "rb_x": 848, + "rb_y": 1066 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.04:0.0:0.0:0.0", + "colors": "1:14:3:2:8", + "item_score": 0.31, + "pattern_score": "0.92:0.03:0.02:0.01:0.01", + "patterns": "14:2:18:3:17" + }, + { + "item_id": "0:2:2:12:744daa35-e290-4f1e-a3bd-73d063e9a368:1:1", + "bounding_box": { + "lt_x": 554, + "lt_y": 292, + "rb_x": 825, + "rb_y": 693 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.02:0.0:0.0:0.0", + "colors": "1:14:3:2:8", + "item_score": 0.33, + "pattern_score": "0.78:0.08:0.04:0.03:0.03", + "patterns": "1:2:17:14:15" + }, + { + "item_id": "0:2:1:1:9e523c05-1aee-4dcf-865d-feb3afea1bd6:1:1", + "bounding_box": { + "lt_x": 555, + "lt_y": 292, + "rb_x": 823, + "rb_y": 675 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.05:0.0:0.0:0.0", + "colors": "1:14:3:2:7", + "item_score": 0.35, + "pattern_score": "0.92:0.04:0.01:0.01:0.01", + "patterns": "1:2:14:16:15" + }, + { + "item_id": "0:2:9:42:55f8b82c-e77a-4e7f-8c37-06cea3bb5f2d:1:14", + "bounding_box": { + "lt_x": 624, + "lt_y": 513, + "rb_x": 848, + "rb_y": 1054 + }, + "style": [ + "PUNK" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.04:0.0:0.0:0.0", + "colors": "1:14:2:3:8", + "item_score": 0.74, + "pattern_score": "0.93:0.02:0.01:0.01:0.01", + "patterns": "14:18:2:17:3" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324598", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145219-90.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/meimii.shop/meimii.shop_001/meimii.shop_Female_Girly-Basic_Cqf25WZPY2s-20230403145219-90.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 526, + "lt_y": 175, + "rb_x": 888, + "rb_y": 1167 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "RETRO:STREET:GIRLY", + "style_score": "0.45:0.18:0.1" + } + ], + "item_info": [ + { + "item_id": "0:2:8:39:cf079f4a-8c88-4b13-8ab7-5cf9a8e05ced:1:17", + "bounding_box": { + "lt_x": 643, + "lt_y": 1038, + "rb_x": 887, + "rb_y": 1167 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.01:0.0:0.0", + "colors": "1:7:2:8:3", + "item_score": 0.65, + "pattern_score": "0.49:0.25:0.1:0.09:0.06", + "patterns": "17:2:14:15:11" + }, + { + "item_id": "0:2:4:23:2b7b2e3c-c551-43ea-bba9-c4ec7f02208f:1:14", + "bounding_box": { + "lt_x": 533, + "lt_y": 492, + "rb_x": 877, + "rb_y": 1050 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:14:7:3:2", + "item_score": 0.83, + "pattern_score": "0.58:0.22:0.06:0.05:0.04", + "patterns": "14:1:2:18:13" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323580", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNsuk-P57n-20230403113404-92.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNsuk-P57n-20230403113404-92.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 316, + "lt_y": 184, + "rb_x": 621, + "rb_y": 1130 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "BASIC:STREET:SEXY", + "style_score": "0.24:0.23:0.23" + } + ], + "item_info": [ + { + "item_id": "0:2:8:40:dc4d32cf-6d67-4ee2-83a1-97c206bd1844:3:14", + "bounding_box": { + "lt_x": 317, + "lt_y": 1026, + "rb_x": 540, + "rb_y": 1129 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.35:0.33:0.09:0.08:0.03", + "colors": "3:8:7:2:17", + "item_score": 0.74, + "pattern_score": "0.86:0.09:0.03:0.01:0.0", + "patterns": "14:17:13:2:15" + }, + { + "item_id": "0:2:3:16:0b9b9dd2-b649-436e-b178-7e37c40b3abf:2:14", + "bounding_box": { + "lt_x": 324, + "lt_y": 535, + "rb_x": 614, + "rb_y": 1082 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.13:0.08:0.05:0.03", + "colors": "2:3:17:7:15", + "item_score": 0.89, + "pattern_score": "0.92:0.04:0.01:0.01:0.01", + "patterns": "14:2:15:11:17" + }, + { + "item_id": "0:2:2:9:fe539a6e-b486-4d44-bbf7-fb91bd9d1f6c:1:15", + "bounding_box": { + "lt_x": 405, + "lt_y": 327, + "rb_x": 554, + "rb_y": 519 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.0:0.0:0.0", + "colors": "1:14:2:7:3", + "item_score": 0.9, + "pattern_score": "0.33:0.25:0.19:0.1:0.07", + "patterns": "15:18:10:14:11" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323581", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNM4M7PnJ-20230403113404-49.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNM4M7PnJ-20230403113404-49.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:4:22:4837202f-8562-4381-b9ef-619150eb4239:1:14", + "bounding_box": { + "lt_x": 0, + "lt_y": 0, + "rb_x": 253, + "rb_y": 259 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.0:0.0:0.0", + "colors": "1:3:2:14:7", + "item_score": 0.27, + "pattern_score": "0.84:0.07:0.04:0.04:0.01", + "patterns": "14:15:13:11:17" + }, + { + "item_id": "-1:-1:2:9:0640ac5c-9e23-4c23-bcd5-c48f5eabf7b4:7:15", + "bounding_box": { + "lt_x": 326, + "lt_y": 65, + "rb_x": 638, + "rb_y": 417 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.04:0.02:0.01:0.01", + "colors": "7:8:3:1:2", + "item_score": 0.51, + "pattern_score": "0.67:0.26:0.04:0.03:0.0", + "patterns": "15:11:17:14:10" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323582", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqM3LhbviM8-20230403113405-85.jpg", + "image_width": 1200, + "image_height": 801, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqM3LhbviM8-20230403113405-85.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 362, + "lt_y": 115, + "rb_x": 725, + "rb_y": 795 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "BASIC:STREET:GIRLY", + "style_score": "0.33:0.17:0.15" + } + ], + "item_info": [ + { + "item_id": "0:2:3:20:3060dea3-6e76-45fa-a372-b0210499099f:17:14", + "bounding_box": { + "lt_x": 363, + "lt_y": 378, + "rb_x": 671, + "rb_y": 786 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.53:0.23:0.06:0.05:0.04", + "colors": "17:2:7:5:3", + "item_score": 0.32, + "pattern_score": "0.59:0.28:0.06:0.03:0.02", + "patterns": "14:15:13:11:2" + }, + { + "item_id": "0:2:8:39:6a59cb25-f82d-433a-9272-670c15597de0:7:14", + "bounding_box": { + "lt_x": 414, + "lt_y": 521, + "rb_x": 532, + "rb_y": 795 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.23:0.18:0.18:0.08:0.05", + "colors": "7:17:8:12:11", + "item_score": 0.5, + "pattern_score": "0.72:0.11:0.06:0.04:0.02", + "patterns": "14:15:17:2:18" + }, + { + "item_id": "0:2:2:9:f3caea9f-3146-4933-92e2-79c36f55a223:1:18", + "bounding_box": { + "lt_x": 543, + "lt_y": 260, + "rb_x": 684, + "rb_y": 460 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.05:0.01:0.0:0.0", + "colors": "1:14:2:7:3", + "item_score": 0.56, + "pattern_score": "0.47:0.23:0.18:0.04:0.03", + "patterns": "18:10:15:14:11" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323583", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNsuk-P57n-20230403113406-02.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNsuk-P57n-20230403113406-02.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:e15bde5d-a464-46a9-8bc2-bc8380e8466b:3:14", + "bounding_box": { + "lt_x": 3, + "lt_y": 788, + "rb_x": 500, + "rb_y": 1200 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.23:0.06:0.02:0.01", + "colors": "3:2:15:1:17", + "item_score": 0.49, + "pattern_score": "0.56:0.24:0.16:0.01:0.01", + "patterns": "14:2:18:17:10" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323584", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNsuk-P57n-20230403113406-03.jpg", + "image_width": 958, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/goodletterh/goodletterh_001/goodletterh_Female_Street_CqNsuk-P57n-20230403113406-03.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:057efcd4-e44d-4542-aeee-fcf0f1caae74:2:14", + "bounding_box": { + "lt_x": 0, + "lt_y": 636, + "rb_x": 659, + "rb_y": 1200 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.43:0.17:0.12:0.11:0.05", + "colors": "2:3:7:15:5", + "item_score": 0.6, + "pattern_score": "0.93:0.03:0.02:0.01:0.0", + "patterns": "14:11:17:15:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323860", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqF5KF6yrOg-20230403124002-91.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqF5KF6yrOg-20230403124002-91.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 156, + "lt_y": 61, + "rb_x": 764, + "rb_y": 1193 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "MINIMALIST:ELEGANCE:SEXY", + "style_score": "0.29:0.26:0.19" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "22", + "name": "Vacation" + } + ] + }, + { + "image_id": "1323861", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqCimd0yOk_-20230403124003-72.jpg", + "image_width": 935, + "image_height": 1168, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqCimd0yOk_-20230403124003-72.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "22", + "name": "Vacation" + } + ] + }, + { + "image_id": "1323862", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqF5KF6yrOg-20230403124004-80.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqF5KF6yrOg-20230403124004-80.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 388, + "lt_y": 75, + "rb_x": 718, + "rb_y": 1167 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:MINIMALIST:GIRLY", + "style_score": "0.47:0.24:0.08" + } + ], + "item_info": [ + { + "item_id": "0:2:8:40:a0b4a548-fc0c-47b4-8dfd-89e50c59262a:2:14", + "bounding_box": { + "lt_x": 446, + "lt_y": 990, + "rb_x": 660, + "rb_y": 1166 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.33:0.05:0.03:0.01", + "colors": "2:7:3:21:1", + "item_score": 0.3, + "pattern_score": "0.92:0.04:0.01:0.01:0.0", + "patterns": "14:13:18:17:6" + }, + { + "item_id": "0:2:8:37:87541aa2-56e6-4c4f-acc9-68433edcc096:2:14", + "bounding_box": { + "lt_x": 446, + "lt_y": 989, + "rb_x": 660, + "rb_y": 1166 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.58:0.32:0.04:0.03:0.01", + "colors": "2:7:3:21:1", + "item_score": 0.49, + "pattern_score": "0.93:0.04:0.01:0.01:0.0", + "patterns": "14:13:18:17:6" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "22", + "name": "Vacation" + } + ] + }, + { + "image_id": "1323863", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqF5KF6yrOg-20230403124005-03.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/dearjose.xo/dearjose.xo_001/dearjose.xo_Female_Elegance-Vacation_CqF5KF6yrOg-20230403124005-03.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 220, + "lt_y": 18, + "rb_x": 909, + "rb_y": 1194 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "SEXY:GIRLY:ELEGANCE", + "style_score": "0.79:0.05:0.04" + } + ], + "item_info": [ + { + "item_id": "0:2:9:48:ce721a53-ae8e-4797-98b9-9ee2cedaa461:7:14", + "bounding_box": { + "lt_x": 222, + "lt_y": 956, + "rb_x": 375, + "rb_y": 1194 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.3:0.01:0.0:0.0", + "colors": "7:2:8:3:21", + "item_score": 0.35, + "pattern_score": "0.96:0.02:0.01:0.0:0.0", + "patterns": "14:13:15:17:11" + }, + { + "item_id": "0:2:2:9:e25cfe5d-6b39-47eb-b44e-945290b856a3:7:14", + "bounding_box": { + "lt_x": 329, + "lt_y": 450, + "rb_x": 710, + "rb_y": 1189 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.05:0.0:0.0:0.0", + "colors": "7:2:3:12:8", + "item_score": 0.41, + "pattern_score": "0.82:0.12:0.04:0.0:0.0", + "patterns": "14:18:13:17:10" + } + ] + }, + "style_list": [ + { + "seq": "19", + "name": "Elegance" + }, + { + "seq": "22", + "name": "Vacation" + } + ] + }, + { + "image_id": "1323875", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lybongshop/lybongshop_001/lybongshop_Female_Office-Girly_CpwYQAnPZFM-20230403124608-16.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lybongshop/lybongshop_001/lybongshop_Female_Office-Girly_CpwYQAnPZFM-20230403124608-16.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 292, + "lt_y": 40, + "rb_x": 660, + "rb_y": 1182 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:SEXY", + "style_score": "0.71:0.24:0.03" + } + ], + "item_info": [ + { + "item_id": "0:2:8:41:de976bca-376a-4fe0-82a1-cc84a4c988b6:2:14", + "bounding_box": { + "lt_x": 294, + "lt_y": 1042, + "rb_x": 574, + "rb_y": 1182 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.52:0.46:0.01:0.0:0.0", + "colors": "2:7:5:8:3", + "item_score": 0.35, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "14:17:15:11:13" + }, + { + "item_id": "0:2:8:38:63a77c98-cd18-492e-b2fd-c717982a92b9:7:14", + "bounding_box": { + "lt_x": 292, + "lt_y": 1046, + "rb_x": 571, + "rb_y": 1182 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.54:0.45:0.01:0.0:0.0", + "colors": "7:2:5:8:3", + "item_score": 0.71, + "pattern_score": "0.99:0.0:0.0:0.0:0.0", + "patterns": "14:17:15:13:10" + }, + { + "item_id": "0:2:11:62:8938cf30-df3c-4942-9aee-f7c059b26726:1:18", + "bounding_box": { + "lt_x": 302, + "lt_y": 442, + "rb_x": 613, + "rb_y": 1158 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.32:0.28:0.26:0.11:0.02", + "colors": "1:5:7:2:6", + "item_score": 0.75, + "pattern_score": "0.89:0.09:0.01:0.0:0.0", + "patterns": "18:14:6:10:17" + }, + { + "item_id": "0:2:4:22:3865ef26-3fad-4c82-9ea7-f4bfdca7a423:1:18", + "bounding_box": { + "lt_x": 389, + "lt_y": 433, + "rb_x": 655, + "rb_y": 691 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.0:0.0", + "colors": "1:2:7:5:3", + "item_score": 0.96, + "pattern_score": "0.89:0.1:0.01:0.0:0.0", + "patterns": "18:14:10:6:2" + }, + { + "item_id": "0:2:2:12:641091be-3b3b-46df-afaf-3c1f20a039b9:2:18", + "bounding_box": { + "lt_x": 325, + "lt_y": 213, + "rb_x": 641, + "rb_y": 586 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.47:0.24:0.15:0.12:0.01", + "colors": "2:7:5:1:6", + "item_score": 0.97, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:10:6:14:8" + } + ] + }, + "style_list": [ + { + "seq": "20", + "name": "Office" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324400", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143203-41.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143203-41.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 318, + "lt_y": 53, + "rb_x": 643, + "rb_y": 1191 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.88, + "style_candidates": "GIRLY:BASIC:ELEGANCE", + "style_score": "0.33:0.17:0.14" + } + ], + "item_info": [ + { + "item_id": "0:2:11:58:d3dcfc53-9ae7-4ad7-931e-469930a03383:2:14", + "bounding_box": { + "lt_x": 453, + "lt_y": 994, + "rb_x": 572, + "rb_y": 1177 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.7:0.3:0.0:0.0:0.0", + "colors": "2:7:3:8:21", + "item_score": 0.53, + "pattern_score": "0.94:0.03:0.01:0.0:0.0", + "patterns": "14:2:17:11:15" + }, + { + "item_id": "0:2:11:57:6ffa3765-a52f-4dc9-8616-794016741679:1:15", + "bounding_box": { + "lt_x": 465, + "lt_y": 74, + "rb_x": 522, + "rb_y": 186 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.84:0.04:0.04:0.04:0.02", + "colors": "1:7:3:21:2", + "item_score": 0.57, + "pattern_score": "0.91:0.07:0.02:0.0:0.0", + "patterns": "15:11:8:10:12" + }, + { + "item_id": "0:2:8:39:4eb502f3-38c5-41c1-99e0-42691efac48d:7:14", + "bounding_box": { + "lt_x": 450, + "lt_y": 1047, + "rb_x": 578, + "rb_y": 1191 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.62:0.37:0.0:0.0:0.0", + "colors": "7:2:3:8:21", + "item_score": 0.94, + "pattern_score": "0.97:0.01:0.0:0.0:0.0", + "patterns": "14:2:11:15:17" + }, + { + "item_id": "0:2:5:24:da70df3b-833e-4d91-81e6-d9df67a80939:1:11", + "bounding_box": { + "lt_x": 322, + "lt_y": 213, + "rb_x": 638, + "rb_y": 708 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.08:0.04:0.02:0.0", + "colors": "1:14:3:2:7", + "item_score": 0.97, + "pattern_score": "0.24:0.2:0.2:0.18:0.15", + "patterns": "11:15:14:17:10" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324401", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143204-46.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143204-46.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 335, + "lt_y": 54, + "rb_x": 652, + "rb_y": 1183 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.73, + "style_candidates": "GIRLY:BASIC:STREET", + "style_score": "0.29:0.27:0.12" + } + ], + "item_info": [ + { + "item_id": "0:2:11:57:dd709c88-ff87-45ba-9cee-c4370f4670ee:1:15", + "bounding_box": { + "lt_x": 471, + "lt_y": 78, + "rb_x": 523, + "rb_y": 184 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.03:0.03:0.02:0.01", + "colors": "1:3:7:21:2", + "item_score": 0.37, + "pattern_score": "0.85:0.09:0.05:0.0:0.0", + "patterns": "15:8:11:10:14" + }, + { + "item_id": "0:2:5:24:db9aa2a6-afb7-4cd4-88de-2fac2e500bfd:1:10", + "bounding_box": { + "lt_x": 338, + "lt_y": 204, + "rb_x": 649, + "rb_y": 687 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.03:0.02:0.02:0.0", + "colors": "1:2:3:14:7", + "item_score": 0.93, + "pattern_score": "0.29:0.24:0.19:0.18:0.09", + "patterns": "10:14:17:15:11" + }, + { + "item_id": "0:2:8:39:1b017dd0-041a-4b03-a633-b600b6e572f3:7:14", + "bounding_box": { + "lt_x": 448, + "lt_y": 1030, + "rb_x": 592, + "rb_y": 1182 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.78:0.21:0.0:0.0:0.0", + "colors": "7:2:8:3:1", + "item_score": 0.95, + "pattern_score": "0.97:0.01:0.01:0.0:0.0", + "patterns": "14:17:15:2:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324402", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143205-50.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143205-50.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 194, + "lt_y": 122, + "rb_x": 734, + "rb_y": 1199 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.56, + "style_candidates": "GIRLY:ELEGANCE:BASIC", + "style_score": "0.54:0.19:0.07" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:e5ef7c76-a98e-49e5-b3fe-026f6848a51a:1:15", + "bounding_box": { + "lt_x": 254, + "lt_y": 354, + "rb_x": 732, + "rb_y": 1075 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.06:0.02:0.01:0.0", + "colors": "1:3:2:14:7", + "item_score": 0.36, + "pattern_score": "0.53:0.17:0.13:0.12:0.04", + "patterns": "15:14:11:17:10" + }, + { + "item_id": "0:2:2:12:5cde2d61-02be-4e68-aaca-f11bd5f526c5:1:17", + "bounding_box": { + "lt_x": 214, + "lt_y": 328, + "rb_x": 690, + "rb_y": 670 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.73:0.22:0.02:0.02:0.01", + "colors": "1:2:3:7:8", + "item_score": 0.37, + "pattern_score": "0.7:0.21:0.04:0.02:0.01", + "patterns": "17:14:13:15:10" + }, + { + "item_id": "0:2:5:25:47cee54c-3711-4468-8ea2-faa8036d69fc:1:11", + "bounding_box": { + "lt_x": 255, + "lt_y": 384, + "rb_x": 731, + "rb_y": 1087 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.05:0.01:0.01:0.0", + "colors": "1:3:2:14:7", + "item_score": 0.48, + "pattern_score": "0.27:0.26:0.23:0.17:0.05", + "patterns": "11:15:14:17:10" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324403", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143205-64.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143205-64.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324404", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143206-24.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143206-24.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 324, + "lt_y": 66, + "rb_x": 649, + "rb_y": 1190 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.67, + "style_candidates": "GIRLY:STREET:ELEGANCE", + "style_score": "0.53:0.14:0.1" + } + ], + "item_info": [ + { + "item_id": "0:2:11:57:345a7091-2758-42a6-a131-5a8cbd6cc819:1:15", + "bounding_box": { + "lt_x": 469, + "lt_y": 90, + "rb_x": 522, + "rb_y": 196 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.05:0.02:0.02:0.02", + "colors": "1:7:21:3:2", + "item_score": 0.61, + "pattern_score": "0.86:0.11:0.02:0.0:0.0", + "patterns": "15:11:8:10:14" + }, + { + "item_id": "0:2:8:39:e6174877-bb31-49f7-a5ff-e491ae6d5397:7:14", + "bounding_box": { + "lt_x": 359, + "lt_y": 1049, + "rb_x": 548, + "rb_y": 1190 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.65:0.34:0.0:0.0:0.0", + "colors": "7:2:3:1:8", + "item_score": 0.94, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "14:2:18:13:15" + }, + { + "item_id": "0:2:5:24:5dc6a2d8-43d7-4356-9cd7-e02fcd815718:1:15", + "bounding_box": { + "lt_x": 325, + "lt_y": 205, + "rb_x": 646, + "rb_y": 706 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.05:0.04:0.04:0.01", + "colors": "1:3:14:2:7", + "item_score": 0.95, + "pattern_score": "0.46:0.15:0.14:0.13:0.12", + "patterns": "15:14:10:11:17" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324405", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143207-85.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143207-85.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 218, + "lt_y": 136, + "rb_x": 715, + "rb_y": 1196 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.67, + "style_candidates": "BASIC:GIRLY:STREET", + "style_score": "0.45:0.25:0.11" + } + ], + "item_info": [ + { + "item_id": "0:2:11:57:e3f07f4e-9dca-4478-aff0-3cf85189c2b9:1:15", + "bounding_box": { + "lt_x": 438, + "lt_y": 165, + "rb_x": 515, + "rb_y": 317 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.81:0.07:0.06:0.03:0.02", + "colors": "1:7:3:2:21", + "item_score": 0.49, + "pattern_score": "0.88:0.04:0.03:0.02:0.01", + "patterns": "15:8:11:10:6" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324406", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143208-30.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143208-30.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324407", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143208-81.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143208-81.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 314, + "lt_y": 53, + "rb_x": 635, + "rb_y": 1190 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.5, + "style_candidates": "STREET:BASIC:GIRLY", + "style_score": "0.34:0.3:0.22" + } + ], + "item_info": [ + { + "item_id": "0:2:11:57:7a93f797-1b83-40f6-b2dd-9e954dd2f12d:1:15", + "bounding_box": { + "lt_x": 459, + "lt_y": 84, + "rb_x": 512, + "rb_y": 193 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.81:0.07:0.04:0.04:0.03", + "colors": "1:7:2:3:21", + "item_score": 0.59, + "pattern_score": "0.97:0.03:0.0:0.0:0.0", + "patterns": "15:11:8:10:14" + }, + { + "item_id": "0:2:8:39:ff6f51b7-b9e9-43e7-86a7-f3e6f6d3379a:7:14", + "bounding_box": { + "lt_x": 436, + "lt_y": 1040, + "rb_x": 590, + "rb_y": 1189 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.58:0.41:0.0:0.0:0.0", + "colors": "7:2:3:1:8", + "item_score": 0.81, + "pattern_score": "0.94:0.02:0.02:0.01:0.01", + "patterns": "14:11:2:17:15" + }, + { + "item_id": "0:2:5:24:b242e013-4ba8-49a4-982c-9b63f0d36f60:1:15", + "bounding_box": { + "lt_x": 320, + "lt_y": 207, + "rb_x": 630, + "rb_y": 701 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.06:0.03:0.02:0.0", + "colors": "1:14:3:2:7", + "item_score": 0.93, + "pattern_score": "0.42:0.3:0.1:0.09:0.08", + "patterns": "15:10:14:17:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324408", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143209-33.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143209-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 279, + "lt_y": 44, + "rb_x": 652, + "rb_y": 1189 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.76, + "style_candidates": "GIRLY:BASIC:STREET", + "style_score": "0.43:0.3:0.09" + } + ], + "item_info": [ + { + "item_id": "0:2:11:57:6b22f159-ef03-473d-94a2-4daeb8c5bb7b:1:15", + "bounding_box": { + "lt_x": 462, + "lt_y": 64, + "rb_x": 517, + "rb_y": 178 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.8:0.07:0.04:0.03:0.03", + "colors": "1:7:21:3:8", + "item_score": 0.45, + "pattern_score": "0.87:0.07:0.04:0.01:0.01", + "patterns": "15:8:11:10:14" + }, + { + "item_id": "0:2:8:39:c870ed85-3edb-4532-ae70-e313b147cfe4:7:14", + "bounding_box": { + "lt_x": 323, + "lt_y": 1039, + "rb_x": 532, + "rb_y": 1189 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.71:0.28:0.0:0.0:0.0", + "colors": "7:2:8:3:1", + "item_score": 0.83, + "pattern_score": "0.99:0.0:0.0:0.0:0.0", + "patterns": "14:18:13:17:2" + }, + { + "item_id": "0:2:5:24:64c7ca98-b23a-44f5-8f83-ad2137ce93ba:1:15", + "bounding_box": { + "lt_x": 320, + "lt_y": 201, + "rb_x": 650, + "rb_y": 702 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.04:0.03:0.02:0.01", + "colors": "1:3:2:14:7", + "item_score": 0.96, + "pattern_score": "0.32:0.23:0.2:0.12:0.11", + "patterns": "15:17:10:14:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324409", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143210-87.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/fancie.official/fancie.official_002/fancie.official_Female_Girly_Cp5YCs2v9MF-20230403143210-87.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 242, + "lt_y": 173, + "rb_x": 726, + "rb_y": 1195 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.78, + "style_candidates": "BASIC:STREET:GIRLY", + "style_score": "0.31:0.2:0.18" + } + ], + "item_info": [ + { + "item_id": "0:2:11:57:a35faf23-8313-46b2-ad55-7989df3594a8:1:15", + "bounding_box": { + "lt_x": 469, + "lt_y": 210, + "rb_x": 544, + "rb_y": 356 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.76:0.11:0.04:0.04:0.02", + "colors": "1:3:7:2:21", + "item_score": 0.46, + "pattern_score": "0.87:0.07:0.03:0.02:0.01", + "patterns": "15:8:11:10:6" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1324665", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150403-23.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150403-23.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 217, + "lt_y": 173, + "rb_x": 540, + "rb_y": 1150 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.81, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.39:0.26:0.2" + } + ], + "item_info": [ + { + "item_id": "0:2:2:8:1116b67a-216c-4060-8b85-47b59cf03aeb:2:6", + "bounding_box": { + "lt_x": 220, + "lt_y": 254, + "rb_x": 540, + "rb_y": 573 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.55:0.19:0.12:0.08:0.01", + "colors": "2:3:7:15:8", + "item_score": 0.43, + "pattern_score": "0.91:0.08:0.01:0.0:0.0", + "patterns": "6:18:10:14:1" + }, + { + "item_id": "0:2:8:41:0e920248-1159-4959-9ffe-a6b363389288:2:14", + "bounding_box": { + "lt_x": 312, + "lt_y": 965, + "rb_x": 452, + "rb_y": 1149 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.04:0.03:0.02:0.01", + "colors": "2:7:15:3:1", + "item_score": 0.78, + "pattern_score": "0.74:0.13:0.06:0.03:0.01", + "patterns": "14:13:2:17:11" + }, + { + "item_id": "0:2:11:58:e209cb60-3203-4ec6-a7de-12869da6a794:2:14", + "bounding_box": { + "lt_x": 315, + "lt_y": 949, + "rb_x": 453, + "rb_y": 1135 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.06:0.03:0.02:0.02", + "colors": "2:7:15:3:1", + "item_score": 0.82, + "pattern_score": "0.48:0.47:0.02:0.01:0.01", + "patterns": "14:2:17:13:11" + }, + { + "item_id": "0:2:10:54:33300ce7-8000-4a6f-8c10-ced7e13a8bc1:2:14", + "bounding_box": { + "lt_x": 334, + "lt_y": 173, + "rb_x": 503, + "rb_y": 284 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.05:0.03:0.02:0.01", + "colors": "2:15:7:3:1", + "item_score": 0.97, + "pattern_score": "0.92:0.03:0.02:0.01:0.01", + "patterns": "14:13:18:17:10" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324666", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqH2W6CvHAN-20230403150404-91.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqH2W6CvHAN-20230403150404-91.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 652, + "lt_y": 140, + "rb_x": 999, + "rb_y": 1110 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:RETRO", + "style_score": "0.66:0.17:0.08" + }, + { + "human_id": "1:1:-1", + "bounding_box": { + "lt_x": 25, + "lt_y": 16, + "rb_x": 581, + "rb_y": 1185 + }, + "style": [ + "GENTLEMAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GENTLEMAN:BASIC:MINIMALIST", + "style_score": "0.3:0.21:0.17" + } + ], + "item_info": [ + { + "item_id": "0:-1:2:8:6e6935f5-b1d8-474c-bfb5-096959e7999a:7:15", + "bounding_box": { + "lt_x": 670, + "lt_y": 241, + "rb_x": 994, + "rb_y": 660 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.05:0.0:0.0:0.0", + "colors": "7:2:18:9:1", + "item_score": 0.35, + "pattern_score": "0.56:0.42:0.02:0.01:0.0", + "patterns": "15:11:17:14:13" + }, + { + "item_id": "0:-1:6:30:3449e96a-0b69-4678-a01a-ce007f959df8:7:14", + "bounding_box": { + "lt_x": 676, + "lt_y": 543, + "rb_x": 982, + "rb_y": 940 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.09:0.0:0.0:0.0", + "colors": "7:2:1:3:8", + "item_score": 0.59, + "pattern_score": "0.93:0.07:0.0:0.0:0.0", + "patterns": "14:2:17:11:15" + }, + { + "item_id": "1:1:3:14:55881631-5f4f-440a-8c8f-9eb82b4cff17:7:14", + "bounding_box": { + "lt_x": 155, + "lt_y": 570, + "rb_x": 511, + "rb_y": 996 + }, + "style": [ + "GENTLEMAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.41:0.01:0.01:0.0", + "colors": "7:2:3:8:15", + "item_score": 0.57, + "pattern_score": "0.89:0.08:0.01:0.01:0.0", + "patterns": "14:17:15:11:10" + }, + { + "item_id": "1:1:2:12:1a7363b2-dfe8-4dfb-8988-fe480a1e6fa4:2:15", + "bounding_box": { + "lt_x": 25, + "lt_y": 144, + "rb_x": 581, + "rb_y": 853 + }, + "style": [ + "GENTLEMAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.21:0.02:0.01:0.0", + "colors": "2:7:15:3:1", + "item_score": 0.96, + "pattern_score": "0.51:0.22:0.16:0.07:0.01", + "patterns": "15:14:11:17:2" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324667", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150405-13.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150405-13.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 168, + "lt_y": 405, + "rb_x": 478, + "rb_y": 1195 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:GIRLY", + "style_score": "0.39:0.28:0.17" + } + ], + "item_info": [ + { + "item_id": "0:-1:9:42:9e6e8cfd-1878-47be-b370-067e748a5bb3:2:18", + "bounding_box": { + "lt_x": 255, + "lt_y": 477, + "rb_x": 431, + "rb_y": 722 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.77:0.1:0.09:0.02:0.01", + "colors": "2:3:7:15:1", + "item_score": 0.42, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "18:6:10:1:4" + }, + { + "item_id": "0:-1:10:53:bddbb61a-887d-40a4-a8bf-5e6ea385436f:2:14", + "bounding_box": { + "lt_x": 243, + "lt_y": 405, + "rb_x": 395, + "rb_y": 540 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.71:0.19:0.06:0.02:0.01", + "colors": "2:7:3:15:1", + "item_score": 0.43, + "pattern_score": "0.69:0.26:0.02:0.01:0.01", + "patterns": "14:18:6:10:13" + }, + { + "item_id": "0:-1:11:58:56139171-88a1-4165-b118-5a6499abc1dc:2:14", + "bounding_box": { + "lt_x": 273, + "lt_y": 1048, + "rb_x": 419, + "rb_y": 1177 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.06:0.0:0.0:0.0", + "colors": "2:7:1:3:15", + "item_score": 0.5, + "pattern_score": "0.92:0.02:0.01:0.01:0.01", + "patterns": "14:13:2:17:6" + }, + { + "item_id": "0:-1:3:14:df63150a-1fc3-456e-a8ed-398ed0f53029:2:14", + "bounding_box": { + "lt_x": 257, + "lt_y": 674, + "rb_x": 434, + "rb_y": 871 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.39:0.3:0.18:0.12:0.0", + "colors": "2:3:7:15:12", + "item_score": 0.61, + "pattern_score": "0.61:0.25:0.08:0.03:0.01", + "patterns": "14:18:6:13:17" + }, + { + "item_id": "0:-1:10:54:fab43acf-53fe-48eb-b46e-53169c815937:2:14", + "bounding_box": { + "lt_x": 243, + "lt_y": 405, + "rb_x": 396, + "rb_y": 540 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.69:0.19:0.07:0.02:0.01", + "colors": "2:7:3:15:1", + "item_score": 0.62, + "pattern_score": "0.63:0.33:0.02:0.01:0.0", + "patterns": "14:18:6:10:13" + }, + { + "item_id": "0:-1:8:41:ca4af2aa-ddaf-4cde-9666-9d544cc06238:7:14", + "bounding_box": { + "lt_x": 238, + "lt_y": 1119, + "rb_x": 432, + "rb_y": 1194 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.42:0.05:0.02:0.01", + "colors": "7:2:1:3:21", + "item_score": 0.91, + "pattern_score": "0.89:0.07:0.03:0.01:0.01", + "patterns": "14:17:13:15:11" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324668", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150406-37.jpg", + "image_width": 967, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150406-37.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324669", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150407-18.jpg", + "image_width": 967, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/pinn.oi/pinn.oi_001/pinn.oi_Male_Basic-Retro_CqPmUTwvaPx-20230403150407-18.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324678", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150803-40.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150803-40.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:9:48:e6f91e90-4e53-46ca-aeb9-72f4f895aa1c:13:11", + "bounding_box": { + "lt_x": 55, + "lt_y": 35, + "rb_x": 149, + "rb_y": 141 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.1:0.04:0.02:0.01", + "colors": "13:2:14:7:15", + "item_score": 0.89, + "pattern_score": "0.68:0.19:0.08:0.03:0.02", + "patterns": "11:17:14:15:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324679", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CpzE0frL1hS-20230403150804-25.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CpzE0frL1hS-20230403150804-25.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 64, + "lt_y": 342, + "rb_x": 364, + "rb_y": 869 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "RETRO:BASIC:BOHEMIAN", + "style_score": "0.24:0.23:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:9:43:0a7b11a1-719f-4633-a1a4-78bb598ce10a:6:13", + "bounding_box": { + "lt_x": 85, + "lt_y": 806, + "rb_x": 300, + "rb_y": 869 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.0:0.0:0.0", + "colors": "6:7:2:8:9", + "item_score": 0.29, + "pattern_score": "0.86:0.12:0.01:0.0:0.0", + "patterns": "13:14:17:18:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324681", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150806-92.jpg", + "image_width": 400, + "image_height": 401, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150806-92.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324682", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CpzE0frL1hS-20230403150806-90.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CpzE0frL1hS-20230403150806-90.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:9:48:3c1151a7-f68a-4c37-b445-f3caaee6c4ad:9:17", + "bounding_box": { + "lt_x": 54, + "lt_y": 34, + "rb_x": 151, + "rb_y": 140 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.59:0.33:0.02:0.02:0.02", + "colors": "9:6:4:20:7", + "item_score": 0.89, + "pattern_score": "0.5:0.28:0.19:0.03:0.0", + "patterns": "17:14:11:15:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324683", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CpzE0frL1hS-20230403150807-15.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CpzE0frL1hS-20230403150807-15.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:9:48:b252bb98-77d5-4253-8c57-85a9cfb0aae5:9:17", + "bounding_box": { + "lt_x": 54, + "lt_y": 34, + "rb_x": 151, + "rb_y": 140 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.59:0.33:0.02:0.02:0.02", + "colors": "9:6:4:20:7", + "item_score": 0.89, + "pattern_score": "0.5:0.28:0.19:0.03:0.0", + "patterns": "17:14:11:15:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324688", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150810-31.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150810-31.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:9:48:0eebff4b-d20c-4faf-a153-ba28b2d422cc:13:11", + "bounding_box": { + "lt_x": 55, + "lt_y": 35, + "rb_x": 149, + "rb_y": 141 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.1:0.04:0.02:0.01", + "colors": "13:2:14:7:15", + "item_score": 0.91, + "pattern_score": "0.68:0.19:0.08:0.03:0.02", + "patterns": "11:17:14:15:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324689", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150811-25.jpg", + "image_width": 1080, + "image_height": 1080, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/1125store/1125store_001/1125store_Male_Street-Basic_CqMoPVyLJIb-20230403150811-25.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324690", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151003-41.jpg", + "image_width": 984, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151003-41.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:8:39:49f04b6a-486b-4c3c-bce0-1201568cedf5:1:14", + "bounding_box": { + "lt_x": 239, + "lt_y": 1019, + "rb_x": 645, + "rb_y": 1196 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.06:0.05:0.02:0.0", + "colors": "1:7:2:3:14", + "item_score": 0.28, + "pattern_score": "0.93:0.04:0.02:0.0:0.0", + "patterns": "14:17:15:13:11" + }, + { + "item_id": "-1:-1:2:8:ca7eb507-496f-47f5-90b7-6313115feb6b:1:14", + "bounding_box": { + "lt_x": 210, + "lt_y": 0, + "rb_x": 643, + "rb_y": 305 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:2:14:3:7", + "item_score": 0.64, + "pattern_score": "0.97:0.02:0.0:0.0:0.0", + "patterns": "14:17:13:18:15" + }, + { + "item_id": "-1:-1:8:37:36f58881-afaf-442e-95ae-a9b9aa49d42b:1:14", + "bounding_box": { + "lt_x": 238, + "lt_y": 1022, + "rb_x": 645, + "rb_y": 1195 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.06:0.04:0.02:0.0", + "colors": "1:2:7:3:21", + "item_score": 0.75, + "pattern_score": "0.94:0.04:0.02:0.0:0.0", + "patterns": "14:17:15:13:11" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324691", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151003-52.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151003-52.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 249, + "lt_y": 505, + "rb_x": 838, + "rb_y": 1115 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:GIRLY:OFFICE", + "style_score": "0.53:0.13:0.08" + } + ], + "item_info": [ + { + "item_id": "0:-1:8:37:1848e87e-1ecd-4d1e-b602-cbebf464837c:1:11", + "bounding_box": { + "lt_x": 374, + "lt_y": 1000, + "rb_x": 571, + "rb_y": 1114 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "1:2:3:8:7", + "item_score": 0.96, + "pattern_score": "0.36:0.27:0.15:0.1:0.08", + "patterns": "11:2:17:14:1" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324692", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqcMv1UPLdO-20230403151004-74.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqcMv1UPLdO-20230403151004-74.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:1:1:5b8d8e76-9494-44e5-b71b-02709fe11b04:1:17", + "bounding_box": { + "lt_x": 218, + "lt_y": 156, + "rb_x": 826, + "rb_y": 848 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:3:2:14:7", + "item_score": 0.25, + "pattern_score": "0.35:0.26:0.12:0.11:0.11", + "patterns": "17:11:14:15:2" + }, + { + "item_id": "-1:-1:3:16:9dbbcf92-8b2e-4ae5-9b3e-9a25702b3205:1:14", + "bounding_box": { + "lt_x": 432, + "lt_y": 701, + "rb_x": 798, + "rb_y": 1198 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:14:2:8", + "item_score": 0.77, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "14:6:18:13:11" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324693", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151005-22.jpg", + "image_width": 984, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151005-22.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 355, + "lt_y": 243, + "rb_x": 618, + "rb_y": 1106 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:TECH", + "style_score": "0.69:0.2:0.03" + } + ], + "item_info": [ + { + "item_id": "0:-1:3:16:7e63f4db-232b-4ba2-8bb7-8c56dc929603:2:13", + "bounding_box": { + "lt_x": 384, + "lt_y": 580, + "rb_x": 616, + "rb_y": 1096 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.73:0.09:0.08:0.05:0.04", + "colors": "2:15:7:3:1", + "item_score": 0.67, + "pattern_score": "0.41:0.31:0.12:0.11:0.03", + "patterns": "13:14:15:11:17" + }, + { + "item_id": "0:-1:8:39:ef024643-5c61-406e-b0c5-dc13edcc6621:2:17", + "bounding_box": { + "lt_x": 423, + "lt_y": 961, + "rb_x": 595, + "rb_y": 1106 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.05:0.04:0.04:0.02", + "colors": "2:1:7:15:3", + "item_score": 0.69, + "pattern_score": "0.36:0.34:0.26:0.01:0.01", + "patterns": "17:2:14:15:13" + }, + { + "item_id": "0:-1:2:8:7906eb49-5acc-4727-9d0a-446633bdc705:1:17", + "bounding_box": { + "lt_x": 357, + "lt_y": 359, + "rb_x": 581, + "rb_y": 627 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.1:0.01:0.01:0.0", + "colors": "1:2:3:7:14", + "item_score": 0.79, + "pattern_score": "0.89:0.05:0.03:0.02:0.01", + "patterns": "17:11:15:2:13" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324694", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151006-53.jpg", + "image_width": 984, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151006-53.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 373, + "lt_y": 176, + "rb_x": 675, + "rb_y": 1083 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:TECH:BASIC", + "style_score": "0.79:0.06:0.06" + } + ], + "item_info": [ + { + "item_id": "0:2:9:43:e3babdfc-8bfc-4af1-bc93-783e4d728c1b:13:14", + "bounding_box": { + "lt_x": 373, + "lt_y": 623, + "rb_x": 432, + "rb_y": 828 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.33:0.12:0.04:0.01", + "colors": "13:14:1:15:2", + "item_score": 0.29, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:13:11:2:17" + }, + { + "item_id": "0:2:8:39:96e519a4-f6e7-405d-9756-cdc5e716a058:7:14", + "bounding_box": { + "lt_x": 385, + "lt_y": 983, + "rb_x": 600, + "rb_y": 1083 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.36:0.36:0.16:0.06:0.04", + "colors": "7:2:1:3:8", + "item_score": 0.84, + "pattern_score": "0.96:0.03:0.01:0.0:0.0", + "patterns": "14:17:15:11:13" + }, + { + "item_id": "0:2:3:18:3a526e08-4645-4639-969c-48b30c35b93c:1:18", + "bounding_box": { + "lt_x": 379, + "lt_y": 547, + "rb_x": 642, + "rb_y": 1035 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.04:0.01:0.01:0.0", + "colors": "1:14:2:13:3", + "item_score": 0.87, + "pattern_score": "0.38:0.34:0.16:0.06:0.02", + "patterns": "18:14:13:15:10" + }, + { + "item_id": "0:2:2:8:48329f82-7fa6-4ec1-a85a-a35e9a67ad55:1:17", + "bounding_box": { + "lt_x": 379, + "lt_y": 301, + "rb_x": 674, + "rb_y": 626 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:2:3:14:7", + "item_score": 0.92, + "pattern_score": "0.81:0.1:0.05:0.03:0.0", + "patterns": "17:2:11:15:14" + }, + { + "item_id": "0:2:10:56:029966a5-3777-43c6-9988-9809fcd79f6a:1:14", + "bounding_box": { + "lt_x": 489, + "lt_y": 176, + "rb_x": 588, + "rb_y": 262 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.84:0.12:0.01:0.01:0.01", + "colors": "1:7:8:2:3", + "item_score": 0.94, + "pattern_score": "0.8:0.17:0.02:0.0:0.0", + "patterns": "14:11:15:13:17" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324695", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151006-39.jpg", + "image_width": 984, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151006-39.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 33, + "lt_y": 38, + "rb_x": 984, + "rb_y": 1187 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.98, + "style_candidates": "BASIC:SPORTY:STREET", + "style_score": "0.31:0.28:0.24" + } + ], + "item_info": [ + { + "item_id": "0:1:1:1:6105f9fc-8671-4f05-8fbf-e4775944f29d:1:17", + "bounding_box": { + "lt_x": 152, + "lt_y": 412, + "rb_x": 860, + "rb_y": 1001 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.03:0.0:0.0:0.0", + "colors": "1:2:7:3:14", + "item_score": 0.3, + "pattern_score": "0.74:0.21:0.03:0.03:0.0", + "patterns": "17:11:14:15:2" + }, + { + "item_id": "0:1:8:39:be2bc9d8-1899-452a-a589-a9d10751c121:2:14", + "bounding_box": { + "lt_x": 37, + "lt_y": 742, + "rb_x": 236, + "rb_y": 961 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.42:0.28:0.23:0.04:0.01", + "colors": "2:1:7:3:15", + "item_score": 0.81, + "pattern_score": "0.6:0.15:0.1:0.07:0.05", + "patterns": "14:17:15:11:13" + }, + { + "item_id": "0:1:12:64:bf70e0b4-7204-45f2-90cb-2da16ca9978d:1:14", + "bounding_box": { + "lt_x": 482, + "lt_y": 270, + "rb_x": 862, + "rb_y": 435 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.05:0.03:0.02:0.01", + "colors": "1:7:8:3:9", + "item_score": 0.89, + "pattern_score": "0.51:0.31:0.11:0.03:0.02", + "patterns": "14:13:18:17:15" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324696", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151007-69.jpg", + "image_width": 984, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqfE36vvq0B-20230403151007-69.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 227, + "lt_y": 172, + "rb_x": 693, + "rb_y": 1194 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.98, + "style_candidates": "BASIC:MINIMALIST:GENTLEMAN", + "style_score": "0.34:0.22:0.17" + } + ], + "item_info": [ + { + "item_id": "0:1:3:16:5c7c799a-97ca-4256-bb55-c793bf76f097:1:14", + "bounding_box": { + "lt_x": 318, + "lt_y": 737, + "rb_x": 682, + "rb_y": 1193 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.05:0.04:0.0:0.0", + "colors": "1:2:3:14:7", + "item_score": 0.41, + "pattern_score": "0.58:0.34:0.05:0.02:0.0", + "patterns": "14:17:13:2:15" + }, + { + "item_id": "0:1:1:1:d490f495-67ea-4014-9268-afaa64237dc4:1:17", + "bounding_box": { + "lt_x": 231, + "lt_y": 375, + "rb_x": 636, + "rb_y": 944 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.05:0.04:0.0:0.0", + "colors": "1:2:3:7:14", + "item_score": 0.48, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "17:2:15:11:14" + }, + { + "item_id": "0:1:12:64:ddad2a16-9e94-454c-a9a3-f03a6bba3545:21:13", + "bounding_box": { + "lt_x": 424, + "lt_y": 290, + "rb_x": 567, + "rb_y": 329 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.35:0.3:0.08:0.08:0.06", + "colors": "21:3:8:2:7", + "item_score": 0.67, + "pattern_score": "0.61:0.37:0.01:0.01:0.0", + "patterns": "13:14:17:2:15" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324697", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151008-33.jpg", + "image_width": 962, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151008-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 251, + "lt_y": 652, + "rb_x": 406, + "rb_y": 1142 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:GIRLY", + "style_score": "0.25:0.22:0.12" + }, + { + "human_id": "1:-1:-1", + "bounding_box": { + "lt_x": 84, + "lt_y": 146, + "rb_x": 228, + "rb_y": 629 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:TECH:BASIC", + "style_score": "0.76:0.11:0.05" + }, + { + "human_id": "2:1:-1", + "bounding_box": { + "lt_x": 76, + "lt_y": 654, + "rb_x": 234, + "rb_y": 1142 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.8, + "style_candidates": "BASIC:MINIMALIST:STREET", + "style_score": "0.52:0.22:0.09" + }, + { + "human_id": "3:1:-1", + "bounding_box": { + "lt_x": 421, + "lt_y": 648, + "rb_x": 579, + "rb_y": 1137 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.9, + "style_candidates": "MINIMALIST:BASIC:GENTLEMAN", + "style_score": "0.62:0.23:0.05" + }, + { + "human_id": "4:1:-1", + "bounding_box": { + "lt_x": 480, + "lt_y": 113, + "rb_x": 611, + "rb_y": 504 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.95, + "style_candidates": "BASIC:MINIMALIST:GENTLEMAN", + "style_score": "0.29:0.2:0.18" + }, + { + "human_id": "5:-1:-1", + "bounding_box": { + "lt_x": 506, + "lt_y": 518, + "rb_x": 613, + "rb_y": 910 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:RETRO", + "style_score": "0.48:0.17:0.13" + }, + { + "human_id": "6:1:-1", + "bounding_box": { + "lt_x": 237, + "lt_y": 111, + "rb_x": 350, + "rb_y": 502 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.42, + "style_candidates": "STREET:BASIC:SPORTY", + "style_score": "0.21:0.19:0.19" + }, + { + "human_id": "7:1:-1", + "bounding_box": { + "lt_x": 623, + "lt_y": 106, + "rb_x": 749, + "rb_y": 501 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.93, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.38:0.19:0.16" + }, + { + "human_id": "8:1:-1", + "bounding_box": { + "lt_x": 635, + "lt_y": 519, + "rb_x": 740, + "rb_y": 910 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.9, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.38:0.31:0.13" + }, + { + "human_id": "9:-1:-1", + "bounding_box": { + "lt_x": 364, + "lt_y": 109, + "rb_x": 472, + "rb_y": 501 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "OFFICE:MINIMALIST:STREET", + "style_score": "0.33:0.32:0.08" + } + ], + "item_info": [ + { + "item_id": "0:-1:11:58:66bf3407-d3c6-43cb-b31e-29b08b8aea25:2:14", + "bounding_box": { + "lt_x": 288, + "lt_y": 1075, + "rb_x": 372, + "rb_y": 1132 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.78:0.09:0.09:0.03:0.01", + "colors": "2:1:21:3:7", + "item_score": 0.6, + "pattern_score": "0.39:0.33:0.16:0.06:0.02", + "patterns": "14:13:17:2:15" + }, + { + "item_id": "0:-1:3:14:de84669f-a7e8-4e6a-9a41-da6921ea1070:2:2", + "bounding_box": { + "lt_x": 281, + "lt_y": 853, + "rb_x": 381, + "rb_y": 954 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.44:0.08:0.01:0.01", + "colors": "2:15:7:3:13", + "item_score": 0.78, + "pattern_score": "0.93:0.07:0.0:0.0:0.0", + "patterns": "2:1:10:17:6" + }, + { + "item_id": "0:-1:8:37:31b74f90-2790-4b3f-9724-39427eaebd9c:1:13", + "bounding_box": { + "lt_x": 287, + "lt_y": 1103, + "rb_x": 374, + "rb_y": 1140 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.07:0.05:0.03:0.01", + "colors": "1:21:3:2:8", + "item_score": 0.85, + "pattern_score": "0.97:0.02:0.0:0.0:0.0", + "patterns": "13:14:4:17:11" + }, + { + "item_id": "0:-1:2:12:ed3e5a22-a0e6-4408-b2f2-1475b8d69f85:15:2", + "bounding_box": { + "lt_x": 251, + "lt_y": 715, + "rb_x": 405, + "rb_y": 884 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.82:0.12:0.02:0.01:0.01", + "colors": "15:2:13:3:7", + "item_score": 0.86, + "pattern_score": "0.98:0.02:0.0:0.0:0.0", + "patterns": "2:1:17:6:5" + }, + { + "item_id": "1:-1:12:64:7fd369e3-fb7e-4b20-a471-7678f0a4c95f:1:13", + "bounding_box": { + "lt_x": 135, + "lt_y": 176, + "rb_x": 177, + "rb_y": 190 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.51:0.18:0.11:0.08:0.06", + "colors": "1:21:7:2:8", + "item_score": 0.4, + "pattern_score": "0.7:0.29:0.0:0.0:0.0", + "patterns": "13:14:11:18:15" + }, + { + "item_id": "1:-1:11:63:66800f8b-101f-4301-9f34-2d97d2128b8c:1:14", + "bounding_box": { + "lt_x": 98, + "lt_y": 385, + "rb_x": 224, + "rb_y": 431 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.03:0.01:0.0:0.0", + "colors": "1:8:7:3:2", + "item_score": 0.43, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "14:2:13:11:17" + }, + { + "item_id": "1:-1:12:65:64739f4f-a49c-4afa-a77d-6cba1d430660:1:14", + "bounding_box": { + "lt_x": 136, + "lt_y": 176, + "rb_x": 177, + "rb_y": 191 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.43:0.2:0.14:0.1:0.06", + "colors": "1:21:7:2:8", + "item_score": 0.64, + "pattern_score": "0.56:0.44:0.0:0.0:0.0", + "patterns": "14:13:18:11:15" + }, + { + "item_id": "1:-1:8:39:fed95fd4-2d22-4fd3-8122-e7a48aed0900:1:14", + "bounding_box": { + "lt_x": 116, + "lt_y": 594, + "rb_x": 210, + "rb_y": 627 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.47:0.4:0.05:0.03:0.01", + "colors": "1:7:8:2:3", + "item_score": 0.72, + "pattern_score": "0.94:0.04:0.01:0.0:0.0", + "patterns": "14:13:17:11:15" + }, + { + "item_id": "1:-1:3:16:8db78fb1-ab05-4ec8-a820-d5d47d812c69:1:14", + "bounding_box": { + "lt_x": 109, + "lt_y": 346, + "rb_x": 214, + "rb_y": 611 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.01:0.0:0.0:0.0", + "colors": "1:8:14:7:3", + "item_score": 0.73, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "14:2:17:13:11" + }, + { + "item_id": "1:-1:1:1:eedc290e-ee11-4a29-b2d8-d4c041ce1d16:8:17", + "bounding_box": { + "lt_x": 88, + "lt_y": 205, + "rb_x": 227, + "rb_y": 404 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.82:0.11:0.02:0.02:0.01", + "colors": "8:1:11:3:7", + "item_score": 0.85, + "pattern_score": "0.65:0.16:0.14:0.04:0.0", + "patterns": "17:2:11:15:1" + }, + { + "item_id": "2:1:8:39:4d56703e-e275-43ad-b741-06acfd7dfe8b:3:13", + "bounding_box": { + "lt_x": 110, + "lt_y": 1100, + "rb_x": 201, + "rb_y": 1141 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.6:0.16:0.08:0.07:0.07", + "colors": "3:2:7:21:1", + "item_score": 0.87, + "pattern_score": "0.48:0.43:0.08:0.0:0.0", + "patterns": "13:14:17:15:11" + }, + { + "item_id": "2:1:3:15:3f988eed-774e-42bf-9998-a491a649ded2:3:14", + "bounding_box": { + "lt_x": 104, + "lt_y": 856, + "rb_x": 205, + "rb_y": 1114 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.02:0.01:0.01:0.0", + "colors": "3:2:1:15:7", + "item_score": 0.88, + "pattern_score": "0.96:0.01:0.01:0.01:0.0", + "patterns": "14:2:11:13:15" + }, + { + "item_id": "2:1:2:12:30ab1f68-7b36-47d3-a76e-6d6ed15c3fe2:1:17", + "bounding_box": { + "lt_x": 78, + "lt_y": 718, + "rb_x": 234, + "rb_y": 890 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:3:2:14:7", + "item_score": 0.91, + "pattern_score": "0.88:0.08:0.03:0.0:0.0", + "patterns": "17:2:14:11:15" + }, + { + "item_id": "3:1:3:16:99284d45-1630-4287-aeda-8b8786ef6bce:1:14", + "bounding_box": { + "lt_x": 446, + "lt_y": 854, + "rb_x": 547, + "rb_y": 1113 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:8:3:11:2", + "item_score": 0.54, + "pattern_score": "0.95:0.04:0.01:0.0:0.0", + "patterns": "14:2:13:11:17" + }, + { + "item_id": "3:1:3:15:433189ee-c946-41b2-9e65-bd6904b26403:1:14", + "bounding_box": { + "lt_x": 446, + "lt_y": 853, + "rb_x": 547, + "rb_y": 1113 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.01:0.0:0.0:0.0", + "colors": "1:8:3:11:2", + "item_score": 0.64, + "pattern_score": "0.96:0.03:0.01:0.0:0.0", + "patterns": "14:2:13:17:11" + }, + { + "item_id": "3:1:12:64:207eb42d-0896-48b4-be8f-24c9ddaa5b77:1:14", + "bounding_box": { + "lt_x": 480, + "lt_y": 677, + "rb_x": 523, + "rb_y": 693 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.01:0.0", + "colors": "1:8:21:7:3", + "item_score": 0.79, + "pattern_score": "0.93:0.05:0.01:0.0:0.0", + "patterns": "14:13:18:11:2" + }, + { + "item_id": "3:1:8:39:f9751d96-2f1a-408d-9adb-75fd13a7338e:2:14", + "bounding_box": { + "lt_x": 452, + "lt_y": 1096, + "rb_x": 544, + "rb_y": 1133 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.43:0.38:0.08:0.05:0.04", + "colors": "2:1:3:21:7", + "item_score": 0.85, + "pattern_score": "0.77:0.18:0.03:0.01:0.01", + "patterns": "14:17:13:15:11" + }, + { + "item_id": "3:1:2:12:9c518fd3-0e5c-4581-a7bd-f333da2cb531:3:17", + "bounding_box": { + "lt_x": 421, + "lt_y": 712, + "rb_x": 579, + "rb_y": 889 + }, + "style": [ + "MINIMALIST" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.82:0.11:0.02:0.01:0.01", + "colors": "3:7:2:11:1", + "item_score": 0.95, + "pattern_score": "0.34:0.25:0.24:0.09:0.05", + "patterns": "17:11:14:15:2" + }, + { + "item_id": "4:1:3:16:537d8ae3-a9b5-4bd5-bf49-b848205aff7d:1:14", + "bounding_box": { + "lt_x": 593, + "lt_y": 348, + "rb_x": 611, + "rb_y": 504 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.5:0.3:0.09:0.04:0.03", + "colors": "1:2:8:21:7", + "item_score": 0.29, + "pattern_score": "0.91:0.02:0.02:0.01:0.01", + "patterns": "14:2:11:13:15" + }, + { + "item_id": "4:1:3:16:f8e8f248-7cc4-4617-88cb-2b0e39846d7f:1:14", + "bounding_box": { + "lt_x": 480, + "lt_y": 344, + "rb_x": 537, + "rb_y": 503 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.58:0.41:0.0:0.0:0.0", + "colors": "1:3:2:14:8", + "item_score": 0.32, + "pattern_score": "0.97:0.01:0.01:0.0:0.0", + "patterns": "14:2:11:13:15" + }, + { + "item_id": "4:1:2:12:dd55bf32-9d61-4974-9f6a-ec66d17f6ef2:1:14", + "bounding_box": { + "lt_x": 480, + "lt_y": 203, + "rb_x": 550, + "rb_y": 402 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:14:2:21", + "item_score": 0.84, + "pattern_score": "0.97:0.02:0.01:0.0:0.0", + "patterns": "14:11:2:6:15" + }, + { + "item_id": "5:-1:9:42:af28fc57-786d-499b-9526-a9495648fd0d:3:14", + "bounding_box": { + "lt_x": 506, + "lt_y": 715, + "rb_x": 544, + "rb_y": 910 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.35:0.25:0.2:0.13:0.05", + "colors": "3:7:2:1:21", + "item_score": 0.39, + "pattern_score": "0.99:0.01:0.0:0.0:0.0", + "patterns": "14:11:15:2:13" + }, + { + "item_id": "5:-1:2:12:bc208373-76fb-4229-bb2e-45e7f2297dd9:3:14", + "bounding_box": { + "lt_x": 506, + "lt_y": 707, + "rb_x": 578, + "rb_y": 903 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.79:0.12:0.05:0.03:0.01", + "colors": "3:7:2:1:8", + "item_score": 0.67, + "pattern_score": "0.74:0.2:0.04:0.01:0.01", + "patterns": "14:11:15:17:2" + }, + { + "item_id": "6:1:3:16:44c400ea-287d-4daa-b5cb-95c0b66a15e7:2:14", + "bounding_box": { + "lt_x": 281, + "lt_y": 333, + "rb_x": 350, + "rb_y": 501 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.81:0.09:0.08:0.01:0.0", + "colors": "2:1:7:8:3", + "item_score": 0.33, + "pattern_score": "0.95:0.02:0.01:0.01:0.01", + "patterns": "14:11:15:2:13" + }, + { + "item_id": "6:1:12:65:06932696-75ee-425e-9ab8-801352469299:1:14", + "bounding_box": { + "lt_x": 304, + "lt_y": 171, + "rb_x": 346, + "rb_y": 185 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.87:0.05:0.03:0.02:0.01", + "colors": "1:8:7:21:2", + "item_score": 0.51, + "pattern_score": "0.74:0.24:0.01:0.0:0.0", + "patterns": "14:13:6:18:4" + }, + { + "item_id": "6:1:1:1:f2b551e3-656f-4ee1-b1a3-337cebc91fed:1:2", + "bounding_box": { + "lt_x": 258, + "lt_y": 201, + "rb_x": 350, + "rb_y": 405 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.01:0.0:0.0:0.0", + "colors": "1:2:7:3:8", + "item_score": 0.66, + "pattern_score": "0.54:0.42:0.02:0.01:0.0", + "patterns": "2:17:11:14:15" + }, + { + "item_id": "7:1:3:20:26b1539d-bac2-40bd-a111-8967a3a3dd15:1:14", + "bounding_box": { + "lt_x": 623, + "lt_y": 353, + "rb_x": 699, + "rb_y": 501 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.01:0.0:0.0", + "colors": "1:8:2:3:7", + "item_score": 0.42, + "pattern_score": "0.96:0.02:0.01:0.0:0.0", + "patterns": "14:2:11:6:15" + }, + { + "item_id": "8:1:3:15:a44b9ad2-c353-4f96-a3fe-2fa03c7f8c10:1:14", + "bounding_box": { + "lt_x": 635, + "lt_y": 519, + "rb_x": 700, + "rb_y": 611 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.03:0.0:0.0:0.0", + "colors": "1:2:8:3:7", + "item_score": 0.61, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "14:11:13:15:6" + }, + { + "item_id": "8:1:12:65:b0b20140-5472-4d2f-a4e7-03cb24f919c3:1:14", + "bounding_box": { + "lt_x": 636, + "lt_y": 678, + "rb_x": 680, + "rb_y": 693 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.59:0.14:0.1:0.07:0.05", + "colors": "1:21:7:2:8", + "item_score": 0.7, + "pattern_score": "0.57:0.43:0.0:0.0:0.0", + "patterns": "14:13:18:11:15" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324698", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151009-55.jpg", + "image_width": 964, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151009-55.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:12:c581f490-f158-445b-a4c0-f6c01edf0c8a:15:2", + "bounding_box": { + "lt_x": 700, + "lt_y": 215, + "rb_x": 875, + "rb_y": 367 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.64:0.32:0.01:0.01:0.01", + "colors": "15:2:14:3:13", + "item_score": 0.28, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "2:1:11:15:17" + }, + { + "item_id": "-1:-1:2:8:e571734a-82cf-4c30-a5f5-fcdd681c0205:1:11", + "bounding_box": { + "lt_x": 97, + "lt_y": 766, + "rb_x": 241, + "rb_y": 909 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:2:3:14:7", + "item_score": 0.3, + "pattern_score": "0.46:0.23:0.12:0.09:0.08", + "patterns": "11:17:2:14:15" + }, + { + "item_id": "-1:-1:2:11:6e646c60-5f52-49fa-b0ad-ff15c0aee5af:8:11", + "bounding_box": { + "lt_x": 85, + "lt_y": 579, + "rb_x": 254, + "rb_y": 725 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.32:0.11:0.03:0.03", + "colors": "8:1:3:16:18", + "item_score": 0.39, + "pattern_score": "0.92:0.06:0.01:0.0:0.0", + "patterns": "11:15:14:17:6" + }, + { + "item_id": "-1:-1:2:9:3086138c-ca0c-4bd0-b4b9-75ea3e14f45e:2:11", + "bounding_box": { + "lt_x": 108, + "lt_y": 200, + "rb_x": 230, + "rb_y": 372 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.0:0.0:0.0", + "colors": "2:7:3:15:1", + "item_score": 0.4, + "pattern_score": "0.85:0.08:0.06:0.01:0.0", + "patterns": "11:15:14:17:13" + }, + { + "item_id": "-1:-1:2:11:5f29b305-44fe-4b03-ad9e-0d06fdf6812b:1:11", + "bounding_box": { + "lt_x": 292, + "lt_y": 402, + "rb_x": 458, + "rb_y": 547 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:2:14:11", + "item_score": 0.55, + "pattern_score": "0.97:0.03:0.0:0.0:0.0", + "patterns": "11:15:14:17:2" + }, + { + "item_id": "-1:-1:2:8:fb00de6e-b041-4a43-9b06-8c7b9c0ab863:4:17", + "bounding_box": { + "lt_x": 724, + "lt_y": 766, + "rb_x": 865, + "rb_y": 908 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "4:6:5:18:2", + "item_score": 0.55, + "pattern_score": "0.82:0.11:0.04:0.02:0.01", + "patterns": "17:11:15:14:2" + }, + { + "item_id": "-1:-1:3:17:21974bab-98b1-4dbc-a7df-6fda1c55c359:3:14", + "bounding_box": { + "lt_x": 745, + "lt_y": 961, + "rb_x": 840, + "rb_y": 1130 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "3:1:2:15:14", + "item_score": 0.56, + "pattern_score": "0.87:0.11:0.01:0.0:0.0", + "patterns": "14:11:2:15:17" + }, + { + "item_id": "-1:-1:2:9:c01ddeee-017f-42c3-ab59-48861e0e2866:1:11", + "bounding_box": { + "lt_x": 315, + "lt_y": 202, + "rb_x": 435, + "rb_y": 371 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:2:14:8", + "item_score": 0.74, + "pattern_score": "0.64:0.24:0.08:0.03:0.01", + "patterns": "11:15:14:17:2" + }, + { + "item_id": "-1:-1:2:12:fbcbf03a-b3c4-431d-804e-ae39a8e7be5c:15:2", + "bounding_box": { + "lt_x": 496, + "lt_y": 217, + "rb_x": 668, + "rb_y": 366 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.68:0.29:0.01:0.01:0.01", + "colors": "15:2:14:3:13", + "item_score": 0.82, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "2:1:6:15:17" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324699", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151009-49.jpg", + "image_width": 965, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151009-49.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 596, + "lt_y": 967, + "rb_x": 694, + "rb_y": 1090 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.48, + "style_candidates": "STREET:PUNK:TECH", + "style_score": "0.31:0.21:0.13" + }, + { + "human_id": "1:-1:-1", + "bounding_box": { + "lt_x": 38, + "lt_y": 966, + "rb_x": 132, + "rb_y": 1090 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:PUNK:TECH", + "style_score": "0.44:0.2:0.12" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324700", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151010-05.jpg", + "image_width": 965, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151010-05.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324701", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151010-21.jpg", + "image_width": 965, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_Cqc9YwZPxnQ-20230403151010-21.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:20dbe195-2134-4941-92b4-58135c0fa018:2:18", + "bounding_box": { + "lt_x": 629, + "lt_y": 465, + "rb_x": 942, + "rb_y": 707 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.0:0.0", + "colors": "2:3:7:1:21", + "item_score": 0.95, + "pattern_score": "0.95:0.02:0.02:0.01:0.0", + "patterns": "18:10:14:6:11" + }, + { + "item_id": "-1:-1:3:14:eebd547c-1e5b-42e0-9712-962d920d09c8:4:11", + "bounding_box": { + "lt_x": 41, + "lt_y": 464, + "rb_x": 364, + "rb_y": 710 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.06:0.0:0.0:0.0", + "colors": "4:18:5:1:6", + "item_score": 0.97, + "pattern_score": "0.44:0.43:0.11:0.01:0.0", + "patterns": "11:15:17:12:10" + }, + { + "item_id": "-1:-1:3:14:13f14d13-bf42-493d-ab58-1fe7c980c15c:12:11", + "bounding_box": { + "lt_x": 618, + "lt_y": 146, + "rb_x": 940, + "rb_y": 394 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.61:0.33:0.04:0.01:0.0", + "colors": "12:10:11:19:17", + "item_score": 0.98, + "pattern_score": "0.64:0.31:0.05:0.0:0.0", + "patterns": "11:15:17:12:2" + }, + { + "item_id": "-1:-1:3:14:9528a472-eec5-4a81-9d2b-32f9adf51838:8:11", + "bounding_box": { + "lt_x": 37, + "lt_y": 149, + "rb_x": 360, + "rb_y": 396 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.12:0.09:0.02:0.01", + "colors": "8:11:7:3:1", + "item_score": 0.98, + "pattern_score": "0.6:0.31:0.07:0.01:0.0", + "patterns": "11:15:17:2:12" + }, + { + "item_id": "-1:-1:3:14:8d379caa-9057-4fac-8d51-47f102378135:12:11", + "bounding_box": { + "lt_x": 618, + "lt_y": 804, + "rb_x": 941, + "rb_y": 1053 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.03:0.02:0.01:0.01", + "colors": "12:3:11:10:17", + "item_score": 0.99, + "pattern_score": "0.68:0.26:0.04:0.01:0.01", + "patterns": "11:15:17:2:10" + }, + { + "item_id": "-1:-1:3:14:9ee11dfd-2192-4b94-8250-486a3ec81f86:1:15", + "bounding_box": { + "lt_x": 36, + "lt_y": 805, + "rb_x": 358, + "rb_y": 1052 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:14:2:11", + "item_score": 0.99, + "pattern_score": "0.48:0.47:0.04:0.01:0.0", + "patterns": "15:11:17:12:2" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324702", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqcMv1UPLdO-20230403151011-10.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/vidi.official/vidi.official_001/vidi.official_Male_Street-Basic_CqcMv1UPLdO-20230403151011-10.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 401, + "lt_y": 582, + "rb_x": 554, + "rb_y": 991 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.98, + "style_candidates": "STREET:TECH:PUNK", + "style_score": "0.72:0.16:0.08" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1323938", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125605-31.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125605-31.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 96, + "lt_y": 212, + "rb_x": 717, + "rb_y": 1181 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "GIRLY:RETRO:BASIC", + "style_score": "0.4:0.27:0.14" + } + ], + "item_info": [ + { + "item_id": "0:-1:8:37:5c807053-575c-4f2b-93c3-6076955b0ed1:1:14", + "bounding_box": { + "lt_x": 96, + "lt_y": 1001, + "rb_x": 342, + "rb_y": 1176 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.02:0.02:0.01:0.01", + "colors": "1:7:8:2:6", + "item_score": 0.38, + "pattern_score": "0.69:0.13:0.09:0.06:0.01", + "patterns": "14:17:15:10:18" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323939", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125605-62.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125605-62.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 303, + "lt_y": 134, + "rb_x": 778, + "rb_y": 1041 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "GIRLY:VACATION:RETRO", + "style_score": "0.48:0.14:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:497c2868-8a41-4bd7-a0f0-ae254d82787f:2:1", + "bounding_box": { + "lt_x": 322, + "lt_y": 416, + "rb_x": 776, + "rb_y": 998 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.59:0.14:0.14:0.04:0.02", + "colors": "2:15:7:1:13", + "item_score": 0.38, + "pattern_score": "0.78:0.1:0.05:0.03:0.01", + "patterns": "1:16:6:18:13" + }, + { + "item_id": "0:2:12:64:1ac7f81f-d987-4bc1-bb9f-1d8e9f6d99f5:1:13", + "bounding_box": { + "lt_x": 560, + "lt_y": 197, + "rb_x": 661, + "rb_y": 242 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.17:0.17:0.11:0.02", + "colors": "1:8:7:6:2", + "item_score": 0.71, + "pattern_score": "0.61:0.37:0.01:0.0:0.0", + "patterns": "13:14:15:11:10" + }, + { + "item_id": "0:2:2:8:9f90ca52-6787-4a95-8705-8505a0e3e17d:2:1", + "bounding_box": { + "lt_x": 474, + "lt_y": 256, + "rb_x": 710, + "rb_y": 518 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.51:0.47:0.01:0.01:0.0", + "colors": "2:7:15:6:3", + "item_score": 0.78, + "pattern_score": "0.91:0.03:0.02:0.01:0.01", + "patterns": "1:2:6:16:10" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323940", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125606-79.jpg", + "image_width": 1200, + "image_height": 1199, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125606-79.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 280, + "lt_y": 74, + "rb_x": 1139, + "rb_y": 1179 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.86, + "style_candidates": "BOHEMIAN:GIRLY:RETRO", + "style_score": "0.37:0.16:0.12" + } + ], + "item_info": [ + { + "item_id": "0:2:2:12:163e6936-fd72-4149-8681-52b9150ad462:7:10", + "bounding_box": { + "lt_x": 657, + "lt_y": 238, + "rb_x": 1004, + "rb_y": 608 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.79:0.19:0.01:0.0:0.0", + "colors": "7:2:6:12:3", + "item_score": 0.64, + "pattern_score": "0.66:0.15:0.07:0.07:0.03", + "patterns": "10:15:14:18:11" + }, + { + "item_id": "0:2:4:23:e498cc7c-daec-4e4b-80fe-3527e41ac04c:7:10", + "bounding_box": { + "lt_x": 343, + "lt_y": 477, + "rb_x": 1054, + "rb_y": 1113 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.69:0.29:0.01:0.0:0.0", + "colors": "7:2:1:8:15", + "item_score": 0.67, + "pattern_score": "0.53:0.44:0.02:0.0:0.0", + "patterns": "10:18:14:6:13" + }, + { + "item_id": "0:2:8:37:b15e9bf4-9576-4fce-9a36-70898e826f1d:1:14", + "bounding_box": { + "lt_x": 282, + "lt_y": 1027, + "rb_x": 659, + "rb_y": 1179 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.03:0.02:0.01:0.01", + "colors": "1:2:14:7:13", + "item_score": 0.82, + "pattern_score": "0.82:0.14:0.02:0.01:0.0", + "patterns": "14:17:2:18:15" + }, + { + "item_id": "0:2:12:64:c2975e62-6aff-4951-afb6-bd4e26606e73:1:14", + "bounding_box": { + "lt_x": 764, + "lt_y": 151, + "rb_x": 884, + "rb_y": 220 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.3:0.29:0.25:0.07:0.04", + "colors": "1:7:8:2:6", + "item_score": 0.85, + "pattern_score": "0.59:0.29:0.04:0.03:0.02", + "patterns": "14:13:15:4:18" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323941", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125607-05.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125607-05.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 224, + "lt_y": 204, + "rb_x": 778, + "rb_y": 1016 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.72, + "style_candidates": "RETRO:GIRLY:BASIC", + "style_score": "0.36:0.26:0.14" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323942", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125608-88.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125608-88.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 402, + "lt_y": 3, + "rb_x": 879, + "rb_y": 1198 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "RETRO:BOHEMIAN:GIRLY", + "style_score": "0.36:0.27:0.17" + } + ], + "item_info": [ + { + "item_id": "0:-1:8:37:3122b019-f855-41e2-855c-033fd385c4e2:7:10", + "bounding_box": { + "lt_x": 646, + "lt_y": 1035, + "rb_x": 786, + "rb_y": 1197 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.42:0.21:0.16:0.1:0.09", + "colors": "7:8:1:2:6", + "item_score": 0.36, + "pattern_score": "0.76:0.08:0.08:0.04:0.02", + "patterns": "10:15:14:17:18" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323943", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125608-22.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp7r8zJPc7b-20230403125608-22.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 243, + "lt_y": 5, + "rb_x": 856, + "rb_y": 1194 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "RETRO:GIRLY:OFFICE", + "style_score": "0.24:0.23:0.22" + } + ], + "item_info": [ + { + "item_id": "0:2:10:53:3c702564-8926-498e-8a9b-beba2b70fff2:7:14", + "bounding_box": { + "lt_x": 510, + "lt_y": 5, + "rb_x": 657, + "rb_y": 47 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.64:0.23:0.06:0.05:0.01", + "colors": "7:2:8:6:1", + "item_score": 0.3, + "pattern_score": "0.82:0.16:0.01:0.0:0.0", + "patterns": "14:13:18:10:15" + }, + { + "item_id": "0:2:8:37:1a7a7a3a-3dd0-4c03-b60b-9cdc0a6381b2:1:14", + "bounding_box": { + "lt_x": 306, + "lt_y": 973, + "rb_x": 530, + "rb_y": 1194 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "1:2:7:8:14", + "item_score": 0.89, + "pattern_score": "0.68:0.28:0.03:0.01:0.0", + "patterns": "14:17:2:15:11" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323944", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125609-97.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125609-97.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 291, + "lt_y": 113, + "rb_x": 781, + "rb_y": 1032 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.72, + "style_candidates": "GIRLY:RETRO:ELEGANCE", + "style_score": "0.87:0.05:0.03" + } + ], + "item_info": [ + { + "item_id": "0:2:8:37:e5c987d1-f6ed-4acd-9218-a60547722228:1:1", + "bounding_box": { + "lt_x": 291, + "lt_y": 876, + "rb_x": 538, + "rb_y": 1032 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.78:0.07:0.03:0.03:0.02", + "colors": "1:2:7:8:14", + "item_score": 0.37, + "pattern_score": "0.77:0.07:0.05:0.04:0.02", + "patterns": "1:2:14:16:17" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323945", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125610-22.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125610-22.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 413, + "lt_y": 180, + "rb_x": 925, + "rb_y": 1163 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "GIRLY:RETRO:BASIC", + "style_score": "0.49:0.14:0.12" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323946", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125612-56.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125612-56.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 254, + "lt_y": 173, + "rb_x": 716, + "rb_y": 1026 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.75, + "style_candidates": "GIRLY:RETRO:BOHEMIAN", + "style_score": "0.42:0.29:0.12" + } + ], + "item_info": [ + { + "item_id": "0:2:12:64:2416d026-10f6-4f1e-a98b-378cc4838221:1:14", + "bounding_box": { + "lt_x": 485, + "lt_y": 229, + "rb_x": 583, + "rb_y": 287 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.19:0.16:0.07:0.03", + "colors": "1:2:7:8:14", + "item_score": 0.77, + "pattern_score": "0.75:0.16:0.03:0.02:0.01", + "patterns": "14:13:15:11:18" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323947", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125613-48.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp5D0T2vJlc-20230403125613-48.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:8:37:5fb67595-e23a-40de-8541-6c6a792aff85:1:14", + "bounding_box": { + "lt_x": 92, + "lt_y": 1076, + "rb_x": 358, + "rb_y": 1200 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.65:0.13:0.07:0.04:0.03", + "colors": "1:8:7:14:6", + "item_score": 0.59, + "pattern_score": "0.32:0.29:0.18:0.11:0.03", + "patterns": "14:16:1:17:15" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323948", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125614-16.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125614-16.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 336, + "lt_y": 108, + "rb_x": 1167, + "rb_y": 1200 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.76, + "style_candidates": "BOHEMIAN:VACATION:GIRLY", + "style_score": "0.36:0.18:0.11" + } + ], + "item_info": [ + { + "item_id": "0:2:12:64:752274a6-ed8a-4556-a4ec-bf9231b3caed:7:13", + "bounding_box": { + "lt_x": 793, + "lt_y": 191, + "rb_x": 902, + "rb_y": 243 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.41:0.41:0.09:0.03:0.02", + "colors": "7:8:1:21:2", + "item_score": 0.77, + "pattern_score": "0.69:0.29:0.01:0.0:0.0", + "patterns": "13:14:15:11:17" + }, + { + "item_id": "0:2:8:37:2236aaf7-bf5e-4855-8ab4-e2ea41e9dea6:1:14", + "bounding_box": { + "lt_x": 340, + "lt_y": 1075, + "rb_x": 685, + "rb_y": 1199 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.88:0.04:0.03:0.01:0.01", + "colors": "1:14:2:7:15", + "item_score": 0.86, + "pattern_score": "0.87:0.09:0.03:0.01:0.0", + "patterns": "14:17:2:18:13" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323949", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125615-52.jpg", + "image_width": 1200, + "image_height": 1199, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125615-52.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 387, + "lt_y": 169, + "rb_x": 1158, + "rb_y": 1194 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BOHEMIAN:GIRLY:ELEGANCE", + "style_score": "0.24:0.21:0.15" + } + ], + "item_info": [ + { + "item_id": "0:-1:4:23:266542e9-47a9-4655-84c1-2c363a6d15be:7:10", + "bounding_box": { + "lt_x": 431, + "lt_y": 522, + "rb_x": 1075, + "rb_y": 1157 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.24:0.0:0.0:0.0", + "colors": "7:2:1:8:3", + "item_score": 0.33, + "pattern_score": "0.5:0.43:0.06:0.0:0.0", + "patterns": "10:18:14:6:13" + }, + { + "item_id": "0:-1:8:37:325d1040-3e68-4878-aaa1-fccfa17d9edf:1:14", + "bounding_box": { + "lt_x": 388, + "lt_y": 1077, + "rb_x": 692, + "rb_y": 1194 + }, + "style": [ + "BOHEMIAN" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.79:0.09:0.04:0.02:0.02", + "colors": "1:14:2:15:13", + "item_score": 0.78, + "pattern_score": "0.92:0.06:0.01:0.0:0.0", + "patterns": "14:17:2:11:15" + } + ] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323950", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125616-71.jpg", + "image_width": 1200, + "image_height": 1199, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125616-71.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 500, + "lt_y": 167, + "rb_x": 932, + "rb_y": 1183 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.96, + "style_candidates": "ELEGANCE:GIRLY:VACATION", + "style_score": "0.24:0.21:0.11" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323951", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125616-65.jpg", + "image_width": 1200, + "image_height": 1199, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/shi_5ce/shi_5ce_001/shi_5ce_Female_Retro-Girly_Cp4CT_GP1kO-20230403125616-65.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 357, + "lt_y": 197, + "rb_x": 1137, + "rb_y": 1181 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.49, + "style_candidates": "GIRLY:VACATION:ELEGANCE", + "style_score": "0.32:0.24:0.12" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "30", + "name": "Retro" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323706", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120004-94.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120004-94.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 12, + "lt_y": 345, + "rb_x": 951, + "rb_y": 1101 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:BASIC:GIRLY", + "style_score": "0.46:0.18:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:8:37:f881fb01-53c5-4a06-9064-872c7a311862:1:14", + "bounding_box": { + "lt_x": 13, + "lt_y": 819, + "rb_x": 159, + "rb_y": 1030 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.92:0.03:0.01:0.01:0.01", + "colors": "1:8:21:3:14", + "item_score": 0.33, + "pattern_score": "0.88:0.06:0.02:0.02:0.0", + "patterns": "14:17:13:15:7" + }, + { + "item_id": "0:2:3:14:fb068162-abf0-44f3-a649-ed070a8da850:1:1", + "bounding_box": { + "lt_x": 366, + "lt_y": 753, + "rb_x": 644, + "rb_y": 1096 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:9:3:7:2", + "item_score": 0.39, + "pattern_score": "0.78:0.1:0.03:0.02:0.02", + "patterns": "1:2:17:15:18" + }, + { + "item_id": "0:2:4:22:1e8e2d1a-a659-4748-812b-3c74a011a69e:1:1", + "bounding_box": { + "lt_x": 367, + "lt_y": 755, + "rb_x": 643, + "rb_y": 1095 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:9:3:7:2", + "item_score": 0.57, + "pattern_score": "0.86:0.07:0.02:0.02:0.01", + "patterns": "1:2:18:17:3" + }, + { + "item_id": "0:2:2:8:3ff96d9a-98a0-4f18-aaf9-78cd28ec0c75:19:14", + "bounding_box": { + "lt_x": 327, + "lt_y": 524, + "rb_x": 927, + "rb_y": 1079 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.31:0.25:0.18:0.17:0.04", + "colors": "19:9:1:10:11", + "item_score": 0.78, + "pattern_score": "0.44:0.26:0.08:0.07:0.04", + "patterns": "14:17:1:11:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323707", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp4CPvctZtZ-20230403120005-80.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp4CPvctZtZ-20230403120005-80.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 272, + "lt_y": 9, + "rb_x": 654, + "rb_y": 1177 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:OFFICE:RETRO", + "style_score": "0.24:0.19:0.17" + } + ], + "item_info": [ + { + "item_id": "0:2:5:25:4e08a744-28b0-4ac7-8067-669663490dae:2:14", + "bounding_box": { + "lt_x": 285, + "lt_y": 219, + "rb_x": 643, + "rb_y": 987 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.13:0.0:0.0:0.0", + "colors": "2:7:17:5:15", + "item_score": 0.28, + "pattern_score": "0.97:0.02:0.01:0.0:0.0", + "patterns": "14:18:2:10:11" + }, + { + "item_id": "0:2:11:58:28c54b9c-faf4-43ec-9290-3db7c6d75f39:2:2", + "bounding_box": { + "lt_x": 378, + "lt_y": 990, + "rb_x": 650, + "rb_y": 1175 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.63:0.2:0.09:0.03:0.01", + "colors": "2:1:7:3:15", + "item_score": 0.76, + "pattern_score": "0.59:0.34:0.06:0.0:0.0", + "patterns": "2:17:14:13:15" + }, + { + "item_id": "0:2:8:38:88a4ac7f-38dc-4e3c-a7b4-bb74a486b4e3:1:2", + "bounding_box": { + "lt_x": 376, + "lt_y": 1051, + "rb_x": 653, + "rb_y": 1177 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.56:0.21:0.06:0.05:0.04", + "colors": "1:2:14:7:3", + "item_score": 0.95, + "pattern_score": "0.69:0.24:0.05:0.01:0.0", + "patterns": "2:17:14:13:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324220", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/namaskar.closet/namaskar.closet_001/namaskar.closet_Female_Sexy-Girly_CqYdLf2PXGg-20230403135402-78.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/namaskar.closet/namaskar.closet_001/namaskar.closet_Female_Sexy-Girly_CqYdLf2PXGg-20230403135402-78.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "26", + "name": "Sexy" + } + ] + }, + { + "image_id": "1323709", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120006-20.jpg", + "image_width": 963, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120006-20.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 1, + "lt_y": 129, + "rb_x": 949, + "rb_y": 1171 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:GIRLY:BASIC", + "style_score": "0.36:0.19:0.12" + } + ], + "item_info": [ + { + "item_id": "0:2:3:15:46b4a8ad-92b8-4716-81b1-3f27add6fd36:1:14", + "bounding_box": { + "lt_x": 346, + "lt_y": 678, + "rb_x": 854, + "rb_y": 1171 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.02:0.02:0.01:0.01", + "colors": "1:9:14:10:19", + "item_score": 0.25, + "pattern_score": "0.37:0.35:0.15:0.04:0.04", + "patterns": "14:18:17:11:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323710", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120007-75.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120007-75.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 3, + "lt_y": 168, + "rb_x": 913, + "rb_y": 1105 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:BASIC:GIRLY", + "style_score": "0.3:0.23:0.18" + } + ], + "item_info": [ + { + "item_id": "0:2:8:40:f84dceb2-bb52-4f0f-b2ae-a5710754783d:1:14", + "bounding_box": { + "lt_x": 3, + "lt_y": 805, + "rb_x": 571, + "rb_y": 1105 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "1:3:14:13:10", + "item_score": 0.33, + "pattern_score": "0.98:0.0:0.0:0.0:0.0", + "patterns": "14:15:17:18:11" + }, + { + "item_id": "0:2:2:8:38dc2d2d-86d8-4d76-91ab-a2841d12abff:19:14", + "bounding_box": { + "lt_x": 324, + "lt_y": 355, + "rb_x": 913, + "rb_y": 961 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.08:0.08:0.06:0.01", + "colors": "19:9:10:1:11", + "item_score": 0.34, + "pattern_score": "0.51:0.37:0.03:0.03:0.03", + "patterns": "14:17:18:2:11" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323711", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120008-98.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120008-98.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 152, + "lt_y": 232, + "rb_x": 892, + "rb_y": 1168 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:GIRLY:BASIC", + "style_score": "0.45:0.19:0.1" + } + ], + "item_info": [ + { + "item_id": "0:2:2:12:c4099218-04c3-46c0-873d-0bc6a80d1b25:19:17", + "bounding_box": { + "lt_x": 258, + "lt_y": 407, + "rb_x": 836, + "rb_y": 730 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.72:0.15:0.08:0.02:0.01", + "colors": "19:10:9:11:1", + "item_score": 0.33, + "pattern_score": "0.3:0.29:0.23:0.12:0.03", + "patterns": "17:14:11:15:10" + }, + { + "item_id": "0:2:9:43:b04b512a-5820-4229-b573-c0fd1be42b21:1:14", + "bounding_box": { + "lt_x": 153, + "lt_y": 661, + "rb_x": 306, + "rb_y": 978 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:11:3:7:8", + "item_score": 0.37, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:15:17:11:13" + }, + { + "item_id": "0:2:8:40:7abbc6a5-cf86-4354-bccc-56c5a3b73559:1:14", + "bounding_box": { + "lt_x": 153, + "lt_y": 773, + "rb_x": 592, + "rb_y": 1168 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:3:14:2:8", + "item_score": 0.89, + "pattern_score": "0.96:0.02:0.01:0.0:0.0", + "patterns": "14:17:18:13:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1324479", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144204-77.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144204-77.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:1:-1", + "bounding_box": { + "lt_x": 362, + "lt_y": 139, + "rb_x": 772, + "rb_y": 1195 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.58, + "style_candidates": "BASIC:VACATION:STREET", + "style_score": "0.52:0.19:0.1" + } + ], + "item_info": [ + { + "item_id": "0:1:2:9:515e2577-f8b8-48e1-a2dc-258adc3e9752:2:11", + "bounding_box": { + "lt_x": 447, + "lt_y": 364, + "rb_x": 739, + "rb_y": 794 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.03:0.03:0.02:0.0", + "colors": "2:7:3:1:15", + "item_score": 0.52, + "pattern_score": "0.32:0.31:0.2:0.1:0.04", + "patterns": "11:14:15:13:17" + }, + { + "item_id": "0:1:12:64:73cccb54-5480-44da-9161-8abd829aca73:1:14", + "bounding_box": { + "lt_x": 490, + "lt_y": 246, + "rb_x": 679, + "rb_y": 317 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.02:0.01:0.01:0.0", + "colors": "1:8:7:3:2", + "item_score": 0.88, + "pattern_score": "0.64:0.3:0.02:0.01:0.01", + "patterns": "14:13:18:15:4" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323712", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120009-42.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120009-42.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 0, + "lt_y": 359, + "rb_x": 759, + "rb_y": 1198 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "STREET:BASIC:GIRLY", + "style_score": "0.63:0.19:0.05" + } + ], + "item_info": [ + { + "item_id": "0:2:2:12:41764ba0-15b4-40a8-829d-1c439471f646:19:14", + "bounding_box": { + "lt_x": 262, + "lt_y": 518, + "rb_x": 759, + "rb_y": 972 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.12:0.11:0.07:0.01", + "colors": "19:10:1:9:11", + "item_score": 0.77, + "pattern_score": "0.7:0.16:0.03:0.03:0.03", + "patterns": "14:17:18:11:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323968", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130005-33.jpg", + "image_width": 1200, + "image_height": 900, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130005-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:5:24:d488721e-5cf1-4228-9496-7ed11328d933:4:15", + "bounding_box": { + "lt_x": 729, + "lt_y": 123, + "rb_x": 1103, + "rb_y": 851 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.39:0.35:0.18:0.04:0.01", + "colors": "4:6:18:8:5", + "item_score": 0.37, + "pattern_score": "0.56:0.41:0.02:0.0:0.0", + "patterns": "15:10:6:14:17" + }, + { + "item_id": "-1:-1:4:23:bb9d590b-ae52-4f3a-aa77-66bdd26aefaa:15:13", + "bounding_box": { + "lt_x": 61, + "lt_y": 132, + "rb_x": 394, + "rb_y": 874 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.06:0.05:0.02:0.01", + "colors": "15:13:3:14:2", + "item_score": 0.68, + "pattern_score": "0.58:0.36:0.02:0.02:0.01", + "patterns": "13:14:17:15:10" + }, + { + "item_id": "-1:-1:5:24:c615ca47-4f37-416b-bfb2-bdd06e0ada97:7:10", + "bounding_box": { + "lt_x": 363, + "lt_y": 127, + "rb_x": 616, + "rb_y": 842 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.01:0.0:0.0", + "colors": "7:9:8:11:20", + "item_score": 0.76, + "pattern_score": "0.97:0.03:0.0:0.0:0.0", + "patterns": "10:15:8:6:1" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324480", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144204-53.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144204-53.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:16:a4f0d358-758d-4e16-9ab8-6b8d5d76e1b6:5:14", + "bounding_box": { + "lt_x": 417, + "lt_y": 829, + "rb_x": 747, + "rb_y": 1200 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.39:0.31:0.16:0.04:0.02", + "colors": "5:7:2:17:3", + "item_score": 0.32, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "14:17:13:11:6" + }, + { + "item_id": "-1:-1:2:9:200564fa-59aa-412a-aeff-c59f20d7a3fd:5:14", + "bounding_box": { + "lt_x": 502, + "lt_y": 439, + "rb_x": 804, + "rb_y": 1000 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.03:0.0:0.0:0.0", + "colors": "5:17:7:2:16", + "item_score": 0.5, + "pattern_score": "0.94:0.02:0.01:0.01:0.0", + "patterns": "14:17:13:15:11" + }, + { + "item_id": "-1:-1:9:48:1b31cc06-278b-4f66-b773-84ca2ba2f4f7:7:14", + "bounding_box": { + "lt_x": 63, + "lt_y": 503, + "rb_x": 387, + "rb_y": 724 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.8:0.16:0.02:0.02:0.0", + "colors": "7:8:20:11:9", + "item_score": 0.51, + "pattern_score": "0.5:0.12:0.09:0.06:0.06", + "patterns": "14:2:17:3:15" + }, + { + "item_id": "-1:-1:9:44:63db8fef-b952-4f29-afe9-a9ceec216b62:7:14", + "bounding_box": { + "lt_x": 62, + "lt_y": 503, + "rb_x": 388, + "rb_y": 724 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.77:0.17:0.02:0.02:0.01", + "colors": "7:8:11:20:9", + "item_score": 0.58, + "pattern_score": "0.49:0.13:0.08:0.07:0.06", + "patterns": "14:2:17:16:3" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323713", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120010-86.jpg", + "image_width": 1048, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp6uykItPQC-20230403120010-86.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 120, + "lt_y": 126, + "rb_x": 894, + "rb_y": 1197 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.97, + "style_candidates": "BASIC:STREET:RETRO", + "style_score": "0.5:0.27:0.09" + } + ], + "item_info": [ + { + "item_id": "0:2:8:40:fc3aeb9a-b126-46be-b167-cba99fc27e71:1:14", + "bounding_box": { + "lt_x": 122, + "lt_y": 1034, + "rb_x": 501, + "rb_y": 1196 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.02:0.01:0.01:0.01", + "colors": "1:14:10:3:11", + "item_score": 0.57, + "pattern_score": "0.53:0.18:0.12:0.06:0.03", + "patterns": "14:13:17:2:15" + }, + { + "item_id": "0:2:2:12:395146fd-bccf-4554-8919-f475788db476:19:14", + "bounding_box": { + "lt_x": 328, + "lt_y": 317, + "rb_x": 894, + "rb_y": 994 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.78:0.09:0.09:0.02:0.0", + "colors": "19:10:9:1:11", + "item_score": 0.76, + "pattern_score": "0.77:0.08:0.07:0.03:0.03", + "patterns": "14:17:2:15:13" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323969", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqCix5QPIGQ-20230403130005-78.jpg", + "image_width": 1200, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqCix5QPIGQ-20230403130005-78.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:1:1:15603b2f-313c-420b-b4ff-d788c9ffef03:22:14", + "bounding_box": { + "lt_x": 411, + "lt_y": 210, + "rb_x": 1200, + "rb_y": 955 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.34:0.22:0.19:0.13:0.06", + "colors": "22:12:3:15:10", + "item_score": 0.45, + "pattern_score": "0.94:0.01:0.01:0.01:0.01", + "patterns": "14:15:2:11:6" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324481", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144205-07.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144205-07.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 2, + "lt_y": 337, + "rb_x": 571, + "rb_y": 1200 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.96, + "style_candidates": "BASIC:GIRLY:STREET", + "style_score": "0.55:0.14:0.09" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323714", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp4CPvctZtZ-20230403120012-74.jpg", + "image_width": 1007, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/rochebyqyn/rochebyqyn_001/rochebyqyn_Female_Girly-Basic_Cp4CPvctZtZ-20230403120012-74.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 147, + "lt_y": 3, + "rb_x": 944, + "rb_y": 1196 + }, + "style": [ + "OFFICE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "OFFICE:ELEGANCE:MINIMALIST", + "style_score": "0.42:0.19:0.1" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "18", + "name": "Basic" + } + ] + }, + { + "image_id": "1323970", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130006-44.jpg", + "image_width": 996, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130006-44.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 253, + "lt_y": 221, + "rb_x": 769, + "rb_y": 1145 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:BOHEMIAN", + "style_score": "0.49:0.34:0.03" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324482", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144206-28.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144206-28.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 158, + "lt_y": 243, + "rb_x": 631, + "rb_y": 1195 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:GIRLY", + "style_score": "0.71:0.15:0.04" + } + ], + "item_info": [ + { + "item_id": "0:-1:11:57:7ca034d8-221e-4d21-b4f2-9281267d070b:1:15", + "bounding_box": { + "lt_x": 430, + "lt_y": 325, + "rb_x": 535, + "rb_y": 522 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.63:0.19:0.12:0.04:0.01", + "colors": "1:8:3:11:7", + "item_score": 0.73, + "pattern_score": "0.52:0.19:0.08:0.06:0.05", + "patterns": "15:14:10:11:13" + }, + { + "item_id": "0:-1:2:9:c76b88e9-0ebf-43cc-bad4-6f72778233f4:3:14", + "bounding_box": { + "lt_x": 235, + "lt_y": 503, + "rb_x": 560, + "rb_y": 930 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.05:0.0:0.0:0.0", + "colors": "3:1:14:11:7", + "item_score": 0.81, + "pattern_score": "0.8:0.09:0.04:0.03:0.02", + "patterns": "14:15:18:13:10" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323971", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130007-39.jpg", + "image_width": 1200, + "image_height": 900, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130007-39.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324483", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144206-82.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144206-82.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:e7507bfb-12d9-45c5-8a95-413b8395584a:3:6", + "bounding_box": { + "lt_x": 430, + "lt_y": 426, + "rb_x": 610, + "rb_y": 735 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "3:15:11:2:7", + "item_score": 0.26, + "pattern_score": "0.33:0.33:0.14:0.07:0.05", + "patterns": "6:14:17:13:2" + }, + { + "item_id": "-1:-1:2:9:bf47ccae-2f5d-4514-ac96-33f8d328d547:3:14", + "bounding_box": { + "lt_x": 340, + "lt_y": 426, + "rb_x": 529, + "rb_y": 741 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.82:0.13:0.02:0.01:0.01", + "colors": "3:7:11:8:2", + "item_score": 0.29, + "pattern_score": "0.83:0.1:0.04:0.01:0.01", + "patterns": "14:17:13:15:2" + }, + { + "item_id": "-1:-1:2:9:b7123259-4b7e-4bf0-a8a5-f237fa613124:7:14", + "bounding_box": { + "lt_x": 220, + "lt_y": 428, + "rb_x": 437, + "rb_y": 734 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.04:0.02:0.01:0.01", + "colors": "7:9:3:11:2", + "item_score": 0.3, + "pattern_score": "0.91:0.05:0.02:0.01:0.0", + "patterns": "14:17:2:13:18" + }, + { + "item_id": "-1:-1:2:9:e55af8b0-f4ab-4cee-b74b-e1851ae80115:3:17", + "bounding_box": { + "lt_x": 629, + "lt_y": 425, + "rb_x": 807, + "rb_y": 731 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.46:0.38:0.1:0.03:0.02", + "colors": "3:8:1:14:11", + "item_score": 0.37, + "pattern_score": "0.63:0.11:0.09:0.08:0.06", + "patterns": "17:14:13:15:6" + }, + { + "item_id": "-1:-1:2:9:72425dec-48b1-49a5-ab79-2f695ae2a1d7:1:14", + "bounding_box": { + "lt_x": 732, + "lt_y": 415, + "rb_x": 920, + "rb_y": 727 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.84:0.12:0.04:0.0:0.0", + "colors": "1:3:14:2:7", + "item_score": 0.7, + "pattern_score": "0.5:0.41:0.03:0.03:0.02", + "patterns": "14:17:13:2:15" + }, + { + "item_id": "-1:-1:2:9:543b0509-e301-4f57-9590-1dcae99f5438:2:14", + "bounding_box": { + "lt_x": 47, + "lt_y": 424, + "rb_x": 230, + "rb_y": 738 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.64:0.34:0.01:0.0:0.0", + "colors": "2:7:3:12:15", + "item_score": 0.97, + "pattern_score": "0.93:0.03:0.02:0.01:0.0", + "patterns": "14:13:18:17:6" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323972", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130008-93.jpg", + "image_width": 1200, + "image_height": 905, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130008-93.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:990dcef9-7d60-4eed-aab7-64a04205998b:7:10", + "bounding_box": { + "lt_x": 291, + "lt_y": 158, + "rb_x": 609, + "rb_y": 905 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.02:0.0:0.0:0.0", + "colors": "7:9:2:20:8", + "item_score": 0.25, + "pattern_score": "0.97:0.03:0.0:0.0:0.0", + "patterns": "10:15:8:14:1" + }, + { + "item_id": "-1:-1:2:9:3fe75aeb-5643-40de-b5d8-9cae9ecb7a2a:6:10", + "bounding_box": { + "lt_x": 770, + "lt_y": 148, + "rb_x": 1199, + "rb_y": 905 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.27:0.14:0.06:0.03", + "colors": "6:4:18:8:5", + "item_score": 0.48, + "pattern_score": "0.62:0.32:0.04:0.01:0.0", + "patterns": "10:15:6:14:2" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324484", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144207-75.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144207-75.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:e9f34a34-d579-4bcc-ac74-7c7ddddc1ba3:3:13", + "bounding_box": { + "lt_x": 115, + "lt_y": 213, + "rb_x": 895, + "rb_y": 986 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "3:15:2:1:7", + "item_score": 0.34, + "pattern_score": "0.51:0.28:0.11:0.03:0.02", + "patterns": "13:14:15:11:10" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323973", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130008-14.jpg", + "image_width": 1200, + "image_height": 900, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130008-14.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324485", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144208-44.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144208-44.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 411, + "lt_y": 165, + "rb_x": 600, + "rb_y": 597 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.53:0.32:0.03" + }, + { + "human_id": "1:-1:-1", + "bounding_box": { + "lt_x": 68, + "lt_y": 253, + "rb_x": 296, + "rb_y": 1072 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:RETRO", + "style_score": "0.48:0.38:0.03" + }, + { + "human_id": "2:2:-1", + "bounding_box": { + "lt_x": 638, + "lt_y": 185, + "rb_x": 890, + "rb_y": 597 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.96, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.6:0.21:0.06" + }, + { + "human_id": "3:2:-1", + "bounding_box": { + "lt_x": 757, + "lt_y": 651, + "rb_x": 881, + "rb_y": 1076 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "BASIC:GIRLY:STREET", + "style_score": "0.49:0.23:0.1" + }, + { + "human_id": "4:2:-1", + "bounding_box": { + "lt_x": 318, + "lt_y": 481, + "rb_x": 434, + "rb_y": 861 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.83, + "style_candidates": "BASIC:STREET:OFFICE", + "style_score": "0.78:0.08:0.05" + } + ], + "item_info": [ + { + "item_id": "0:-1:2:8:b9da8175-f544-49e0-ad18-b19b03ee9aee:3:17", + "bounding_box": { + "lt_x": 415, + "lt_y": 259, + "rb_x": 538, + "rb_y": 447 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.44:0.16:0.13:0.13:0.05", + "colors": "3:2:1:14:15", + "item_score": 0.28, + "pattern_score": "0.56:0.2:0.14:0.08:0.01", + "patterns": "17:2:14:11:15" + }, + { + "item_id": "0:-1:4:23:8500326a-7d80-406a-a3c7-71c2512b0eae:14:13", + "bounding_box": { + "lt_x": 424, + "lt_y": 386, + "rb_x": 542, + "rb_y": 597 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.74:0.23:0.01:0.01:0.01", + "colors": "14:13:1:15:3", + "item_score": 0.36, + "pattern_score": "0.68:0.31:0.0:0.0:0.0", + "patterns": "13:14:15:5:17" + }, + { + "item_id": "0:-1:3:17:f5d8055b-d286-4a6e-8837-361082712e24:14:14", + "bounding_box": { + "lt_x": 424, + "lt_y": 387, + "rb_x": 541, + "rb_y": 597 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.72:0.24:0.01:0.01:0.01", + "colors": "14:13:1:15:3", + "item_score": 0.41, + "pattern_score": "0.53:0.46:0.0:0.0:0.0", + "patterns": "14:13:5:15:17" + }, + { + "item_id": "0:-1:12:65:996dd87a-b2f2-4f06-ac92-6c2407fd03e0:1:14", + "bounding_box": { + "lt_x": 457, + "lt_y": 220, + "rb_x": 526, + "rb_y": 263 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.88:0.04:0.04:0.02:0.01", + "colors": "1:7:8:2:21", + "item_score": 0.68, + "pattern_score": "0.84:0.03:0.03:0.03:0.02", + "patterns": "14:4:17:13:18" + }, + { + "item_id": "0:-1:2:9:387d8fe5-2610-4cf2-86f1-7c0d31e9b52f:3:2", + "bounding_box": { + "lt_x": 425, + "lt_y": 258, + "rb_x": 537, + "rb_y": 441 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.47:0.17:0.11:0.1:0.07", + "colors": "3:2:14:1:15", + "item_score": 0.78, + "pattern_score": "0.3:0.26:0.25:0.14:0.04", + "patterns": "2:17:14:11:15" + }, + { + "item_id": "1:-1:11:58:ca0f4e70-e894-4d67-9a73-7f26c5b14491:1:14", + "bounding_box": { + "lt_x": 127, + "lt_y": 896, + "rb_x": 293, + "rb_y": 1061 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.76:0.19:0.02:0.01:0.01", + "colors": "1:2:7:14:3", + "item_score": 0.38, + "pattern_score": "0.77:0.13:0.04:0.02:0.02", + "patterns": "14:17:5:15:13" + }, + { + "item_id": "1:-1:2:9:d160bb71-03ef-4d23-bc3d-f51a6d692db9:3:15", + "bounding_box": { + "lt_x": 123, + "lt_y": 376, + "rb_x": 241, + "rb_y": 602 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.62:0.14:0.06:0.04:0.04", + "colors": "3:1:15:2:14", + "item_score": 0.59, + "pattern_score": "0.34:0.3:0.2:0.11:0.03", + "patterns": "15:14:17:11:13" + }, + { + "item_id": "1:-1:4:23:a9239133-0a5a-475f-af98-04d6c572599d:14:13", + "bounding_box": { + "lt_x": 74, + "lt_y": 535, + "rb_x": 271, + "rb_y": 942 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.11:0.02:0.0:0.0", + "colors": "14:13:1:3:15", + "item_score": 0.72, + "pattern_score": "0.92:0.05:0.01:0.0:0.0", + "patterns": "13:14:17:18:10" + }, + { + "item_id": "1:-1:8:39:377122ae-046a-43bc-bc94-d34ccd6d2c4d:1:14", + "bounding_box": { + "lt_x": 124, + "lt_y": 932, + "rb_x": 296, + "rb_y": 1072 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.09:0.0:0.0:0.0", + "colors": "1:2:7:3:14", + "item_score": 0.84, + "pattern_score": "0.69:0.26:0.02:0.01:0.01", + "patterns": "14:17:15:2:13" + }, + { + "item_id": "1:-1:12:65:d3c78858-8977-4bd3-a572-ff64d1818241:1:14", + "bounding_box": { + "lt_x": 143, + "lt_y": 299, + "rb_x": 220, + "rb_y": 324 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.98:0.01:0.0:0.0:0.0", + "colors": "1:8:7:21:3", + "item_score": 0.95, + "pattern_score": "0.95:0.03:0.01:0.0:0.0", + "patterns": "14:13:2:6:4" + }, + { + "item_id": "2:2:12:65:5d74cfab-76bb-43b0-8228-e4dfa7b81b31:1:14", + "bounding_box": { + "lt_x": 712, + "lt_y": 202, + "rb_x": 800, + "rb_y": 266 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.79:0.16:0.02:0.01:0.0", + "colors": "1:7:8:2:5", + "item_score": 0.77, + "pattern_score": "0.8:0.15:0.02:0.01:0.01", + "patterns": "14:17:15:11:2" + }, + { + "item_id": "3:2:8:40:e59cf1fb-7100-4ad7-8ccf-8f9e87a09518:1:14", + "bounding_box": { + "lt_x": 757, + "lt_y": 951, + "rb_x": 848, + "rb_y": 1076 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "1.0:0.0:0.0:0.0:0.0", + "colors": "1:7:2:8:14", + "item_score": 0.87, + "pattern_score": "0.99:0.01:0.0:0.0:0.0", + "patterns": "14:17:2:11:13" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323974", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130011-05.jpg", + "image_width": null, + "image_height": null, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqHm_-VPirN-20230403130011-05.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324486", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144208-04.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144208-04.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 692, + "lt_y": 10, + "rb_x": 874, + "rb_y": 384 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.68:0.19:0.03" + }, + { + "human_id": "1:-1:-1", + "bounding_box": { + "lt_x": 320, + "lt_y": 452, + "rb_x": 595, + "rb_y": 810 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:RETRO", + "style_score": "0.47:0.18:0.1" + }, + { + "human_id": "2:2:-1", + "bounding_box": { + "lt_x": 163, + "lt_y": 419, + "rb_x": 321, + "rb_y": 809 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.59, + "style_candidates": "BASIC:VACATION:STREET", + "style_score": "0.57:0.16:0.08" + }, + { + "human_id": "3:-1:-1", + "bounding_box": { + "lt_x": 680, + "lt_y": 405, + "rb_x": 885, + "rb_y": 806 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:SPORTY", + "style_score": "0.58:0.16:0.09" + }, + { + "human_id": "4:1:-1", + "bounding_box": { + "lt_x": 282, + "lt_y": 650, + "rb_x": 465, + "rb_y": 961 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.92, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.32:0.3:0.1" + }, + { + "human_id": "5:-1:-1", + "bounding_box": { + "lt_x": 570, + "lt_y": 647, + "rb_x": 680, + "rb_y": 959 + }, + "style": [ + "VACATION" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "VACATION:BASIC:STREET", + "style_score": "0.33:0.17:0.09" + }, + { + "human_id": "6:-1:-1", + "bounding_box": { + "lt_x": 0, + "lt_y": 365, + "rb_x": 143, + "rb_y": 646 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.73:0.09:0.05" + }, + { + "human_id": "7:-1:-1", + "bounding_box": { + "lt_x": 357, + "lt_y": 0, + "rb_x": 476, + "rb_y": 308 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:VACATION:STREET", + "style_score": "0.28:0.17:0.13" + }, + { + "human_id": "8:-1:-1", + "bounding_box": { + "lt_x": 38, + "lt_y": 710, + "rb_x": 228, + "rb_y": 960 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:OFFICE:STREET", + "style_score": "0.68:0.13:0.05" + }, + { + "human_id": "9:2:-1", + "bounding_box": { + "lt_x": 40, + "lt_y": 13, + "rb_x": 172, + "rb_y": 306 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.95, + "style_candidates": "SEXY:BASIC:SPORTY", + "style_score": "0.41:0.32:0.09" + } + ], + "item_info": [ + { + "item_id": "0:-1:2:9:ad4e8488-2077-4dd4-985d-4148c428585e:3:14", + "bounding_box": { + "lt_x": 720, + "lt_y": 107, + "rb_x": 839, + "rb_y": 270 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.72:0.26:0.0:0.0:0.0", + "colors": "3:1:7:11:14", + "item_score": 0.47, + "pattern_score": "0.52:0.32:0.08:0.02:0.02", + "patterns": "14:15:11:13:4" + }, + { + "item_id": "1:-1:12:65:d5d07a71-f6f2-46c5-b458-8e79d11a0102:1:14", + "bounding_box": { + "lt_x": 438, + "lt_y": 499, + "rb_x": 533, + "rb_y": 543 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.02:0.01:0.01:0.01", + "colors": "1:7:3:8:21", + "item_score": 0.89, + "pattern_score": "0.77:0.19:0.01:0.01:0.01", + "patterns": "14:13:18:4:17" + }, + { + "item_id": "3:-1:12:65:9ff97cf1-ed13-4fce-bf8e-5298f2e92f9e:1:14", + "bounding_box": { + "lt_x": 754, + "lt_y": 446, + "rb_x": 806, + "rb_y": 465 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.04:0.01:0.0:0.0", + "colors": "1:3:21:14:2", + "item_score": 0.45, + "pattern_score": "0.9:0.1:0.0:0.0:0.0", + "patterns": "14:13:11:15:6" + }, + { + "item_id": "3:-1:3:16:a3294431-f842-442c-bb87-bd81eb84b585:11:17", + "bounding_box": { + "lt_x": 681, + "lt_y": 585, + "rb_x": 844, + "rb_y": 806 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.07:0.02:0.0:0.0", + "colors": "11:10:1:3:2", + "item_score": 0.46, + "pattern_score": "0.48:0.37:0.11:0.03:0.01", + "patterns": "17:2:14:11:1" + }, + { + "item_id": "3:-1:1:1:7ff54398-3d64-41b5-abe1-5438f94494de:1:17", + "bounding_box": { + "lt_x": 691, + "lt_y": 478, + "rb_x": 884, + "rb_y": 672 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.72:0.12:0.09:0.02:0.02", + "colors": "1:11:3:10:14", + "item_score": 0.59, + "pattern_score": "0.69:0.29:0.01:0.0:0.0", + "patterns": "17:2:14:15:11" + }, + { + "item_id": "8:-1:11:61:6687521f-368a-4864-830d-1a85d3961b28:3:1", + "bounding_box": { + "lt_x": 38, + "lt_y": 710, + "rb_x": 148, + "rb_y": 815 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.72:0.13:0.07:0.06:0.01", + "colors": "3:2:7:1:21", + "item_score": 0.31, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "1:2:14:3:16" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323975", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqCix5QPIGQ-20230403130011-42.jpg", + "image_width": 1200, + "image_height": 960, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqCix5QPIGQ-20230403130011-42.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:1:6:efc92b9b-b7a0-4514-9770-f80280e30895:15:14", + "bounding_box": { + "lt_x": 142, + "lt_y": 51, + "rb_x": 843, + "rb_y": 630 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.24:0.22:0.2:0.14:0.08", + "colors": "15:7:2:3:12", + "item_score": 0.39, + "pattern_score": "0.37:0.37:0.14:0.07:0.03", + "patterns": "14:15:6:11:10" + }, + { + "item_id": "-1:-1:2:12:2437bbac-0066-4c36-b21a-2ea16c49a284:15:15", + "bounding_box": { + "lt_x": 398, + "lt_y": 281, + "rb_x": 1054, + "rb_y": 906 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.42:0.4:0.06:0.05:0.04", + "colors": "15:12:3:22:13", + "item_score": 0.78, + "pattern_score": "0.69:0.12:0.09:0.06:0.04", + "patterns": "15:10:14:11:6" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324487", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144209-53.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144209-53.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 166, + "lt_y": 0, + "rb_x": 390, + "rb_y": 592 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:OFFICE", + "style_score": "0.83:0.11:0.02" + }, + { + "human_id": "1:-1:-1", + "bounding_box": { + "lt_x": 220, + "lt_y": 612, + "rb_x": 618, + "rb_y": 1200 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:GIRLY", + "style_score": "0.4:0.26:0.12" + }, + { + "human_id": "2:-1:-1", + "bounding_box": { + "lt_x": 678, + "lt_y": 21, + "rb_x": 860, + "rb_y": 370 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:PUNK:SPORTY", + "style_score": "0.48:0.1:0.08" + }, + { + "human_id": "3:-1:-1", + "bounding_box": { + "lt_x": 8, + "lt_y": 484, + "rb_x": 229, + "rb_y": 959 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:STREET:SPORTY", + "style_score": "0.79:0.05:0.05" + } + ], + "item_info": [ + { + "item_id": "0:-1:10:53:3f9646a3-83f3-4bde-8eb4-5301dc7b25d2:1:14", + "bounding_box": { + "lt_x": 217, + "lt_y": 0, + "rb_x": 352, + "rb_y": 105 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.04:0.02:0.01:0.01", + "colors": "1:7:8:3:2", + "item_score": 0.28, + "pattern_score": "0.56:0.2:0.12:0.06:0.03", + "patterns": "14:11:15:17:13" + }, + { + "item_id": "0:-1:12:65:02952e94-c385-4705-bd52-57635e80194b:1:14", + "bounding_box": { + "lt_x": 257, + "lt_y": 32, + "rb_x": 352, + "rb_y": 71 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.8:0.09:0.05:0.02:0.01", + "colors": "1:7:8:21:2", + "item_score": 0.45, + "pattern_score": "0.94:0.05:0.01:0.0:0.0", + "patterns": "14:13:2:11:18" + }, + { + "item_id": "0:-1:3:17:38deba6d-2cf9-45c5-8272-dd833dccfbc4:1:13", + "bounding_box": { + "lt_x": 202, + "lt_y": 338, + "rb_x": 384, + "rb_y": 592 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.78:0.18:0.02:0.01:0.0", + "colors": "1:3:14:2:8", + "item_score": 0.7, + "pattern_score": "0.81:0.14:0.03:0.01:0.0", + "patterns": "13:14:5:2:18" + }, + { + "item_id": "0:-1:2:9:de4ee78d-29f4-4377-877d-3020cbd0c07c:2:15", + "bounding_box": { + "lt_x": 210, + "lt_y": 129, + "rb_x": 372, + "rb_y": 410 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.08:0.04:0.04:0.0", + "colors": "2:1:7:3:15", + "item_score": 0.84, + "pattern_score": "0.34:0.25:0.15:0.09:0.08", + "patterns": "15:14:11:13:17" + }, + { + "item_id": "1:-1:2:12:80216d52-6133-4221-a381-330812bfd8b6:11:14", + "bounding_box": { + "lt_x": 243, + "lt_y": 695, + "rb_x": 618, + "rb_y": 1018 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.37:0.22:0.09:0.09:0.08", + "colors": "11:7:9:10:2", + "item_score": 0.33, + "pattern_score": "0.65:0.29:0.02:0.02:0.01", + "patterns": "14:17:11:2:15" + }, + { + "item_id": "1:-1:9:42:48c905b5-6c3b-4819-861d-59b6ed79cbda:11:14", + "bounding_box": { + "lt_x": 381, + "lt_y": 808, + "rb_x": 553, + "rb_y": 1190 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.37:0.23:0.2:0.08:0.03", + "colors": "11:10:12:7:9", + "item_score": 0.51, + "pattern_score": "0.92:0.03:0.02:0.01:0.01", + "patterns": "14:17:13:15:1" + }, + { + "item_id": "1:-1:10:53:79c4d59a-eab3-442a-a539-fc0f16631665:2:14", + "bounding_box": { + "lt_x": 269, + "lt_y": 633, + "rb_x": 412, + "rb_y": 809 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.05:0.02:0.02:0.0", + "colors": "2:7:1:3:21", + "item_score": 0.97, + "pattern_score": "0.76:0.15:0.03:0.03:0.01", + "patterns": "14:11:17:15:10" + }, + { + "item_id": "2:-1:2:12:629c0a8f-a47b-4b22-8713-e044b381bc75:7:2", + "bounding_box": { + "lt_x": 714, + "lt_y": 66, + "rb_x": 859, + "rb_y": 210 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.77:0.2:0.01:0.01:0.0", + "colors": "7:2:1:9:6", + "item_score": 0.41, + "pattern_score": "0.52:0.34:0.08:0.04:0.0", + "patterns": "2:14:17:11:15" + }, + { + "item_id": "2:-1:10:54:536986e3-382f-431c-b162-da5c9a05358f:14:11", + "bounding_box": { + "lt_x": 761, + "lt_y": 25, + "rb_x": 833, + "rb_y": 76 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.41:0.03:0.02:0.01", + "colors": "14:13:7:1:2", + "item_score": 0.92, + "pattern_score": "0.74:0.14:0.05:0.05:0.02", + "patterns": "11:17:14:15:2" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323976", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqCix5QPIGQ-20230403130113-93.jpg", + "image_width": null, + "image_height": null, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_CqCix5QPIGQ-20230403130113-93.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324488", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144210-35.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144210-35.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:8a00d69e-7c7d-4846-bc6c-6901765122c7:8:14", + "bounding_box": { + "lt_x": 5, + "lt_y": 1, + "rb_x": 531, + "rb_y": 690 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.38:0.35:0.14:0.06:0.03", + "colors": "8:11:7:3:1", + "item_score": 0.58, + "pattern_score": "0.82:0.07:0.05:0.03:0.02", + "patterns": "14:11:17:13:2" + }, + { + "item_id": "-1:-1:3:14:e4389e0d-e684-49e7-aaed-6e1e48598d28:11:14", + "bounding_box": { + "lt_x": 3, + "lt_y": 483, + "rb_x": 427, + "rb_y": 1068 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "11:8:10:3:7", + "item_score": 0.87, + "pattern_score": "0.63:0.29:0.03:0.02:0.01", + "patterns": "14:17:2:11:1" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323977", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130113-24.jpg", + "image_width": 1002, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130113-24.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 239, + "lt_y": 234, + "rb_x": 675, + "rb_y": 1146 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "GIRLY:ELEGANCE:BASIC", + "style_score": "0.79:0.11:0.04" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:923e89aa-c415-4afd-8642-f342e28d699b:7:14", + "bounding_box": { + "lt_x": 243, + "lt_y": 588, + "rb_x": 671, + "rb_y": 1036 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.89:0.1:0.01:0.0:0.0", + "colors": "7:2:9:8:6", + "item_score": 0.84, + "pattern_score": "0.71:0.13:0.09:0.04:0.03", + "patterns": "14:10:18:17:6" + }, + { + "item_id": "0:2:2:9:f876f57f-be01-4ef5-8849-7a7f2ca83ddc:7:14", + "bounding_box": { + "lt_x": 329, + "lt_y": 377, + "rb_x": 557, + "rb_y": 671 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.72:0.26:0.01:0.0:0.0", + "colors": "7:2:9:6:1", + "item_score": 0.93, + "pattern_score": "0.9:0.05:0.03:0.01:0.01", + "patterns": "14:10:18:15:6" + }, + { + "item_id": "0:2:12:64:bdc0c5cc-632a-4a6f-9019-d3b9901b7bb1:1:14", + "bounding_box": { + "lt_x": 402, + "lt_y": 286, + "rb_x": 491, + "rb_y": 324 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.74:0.13:0.06:0.03:0.02", + "colors": "1:7:8:21:3", + "item_score": 0.93, + "pattern_score": "0.56:0.38:0.04:0.01:0.01", + "patterns": "14:13:15:11:17" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324489", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144211-64.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144211-64.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:b0f16b19-5c88-43a2-8128-b329ae8245f4:1:11", + "bounding_box": { + "lt_x": 265, + "lt_y": 354, + "rb_x": 960, + "rb_y": 1007 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.79:0.2:0.01:0.0:0.0", + "colors": "1:14:3:8:13", + "item_score": 0.82, + "pattern_score": "0.6:0.19:0.18:0.02:0.01", + "patterns": "11:14:15:17:2" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323978", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130114-52.jpg", + "image_width": 1002, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130114-52.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 217, + "lt_y": 7, + "rb_x": 789, + "rb_y": 1193 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:RETRO:ELEGANCE", + "style_score": "0.48:0.18:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:20626cad-f1da-4800-813c-e5a9078ff46f:7:14", + "bounding_box": { + "lt_x": 220, + "lt_y": 387, + "rb_x": 779, + "rb_y": 1099 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.7:0.28:0.01:0.01:0.0", + "colors": "7:2:1:9:8", + "item_score": 0.51, + "pattern_score": "0.95:0.02:0.01:0.01:0.0", + "patterns": "14:18:10:17:6" + }, + { + "item_id": "0:2:2:9:e9de4c2c-8180-44b0-8a86-6c272fd2bf72:7:14", + "bounding_box": { + "lt_x": 386, + "lt_y": 74, + "rb_x": 698, + "rb_y": 520 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.5:0.5:0.0:0.0:0.0", + "colors": "7:2:9:15:1", + "item_score": 0.7, + "pattern_score": "0.92:0.03:0.02:0.01:0.01", + "patterns": "14:18:10:6:15" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324490", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144211-27.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaqpaPI2V-20230403144211-27.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:3392a1a3-b368-4512-861b-7d31a670e73d:7:14", + "bounding_box": { + "lt_x": 371, + "lt_y": 329, + "rb_x": 795, + "rb_y": 1098 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.93:0.05:0.01:0.0:0.0", + "colors": "7:2:3:12:1", + "item_score": 0.93, + "pattern_score": "0.8:0.09:0.05:0.02:0.01", + "patterns": "14:15:11:17:13" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323979", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130115-33.jpg", + "image_width": 996, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130115-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 200, + "lt_y": 203, + "rb_x": 626, + "rb_y": 1140 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:BASIC:ELEGANCE", + "style_score": "0.66:0.14:0.08" + } + ], + "item_info": [ + { + "item_id": "0:2:2:9:e36e0b10-f52b-4e7e-be17-5040cd6565c5:7:14", + "bounding_box": { + "lt_x": 318, + "lt_y": 345, + "rb_x": 576, + "rb_y": 666 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.65:0.34:0.01:0.0:0.0", + "colors": "7:2:9:1:12", + "item_score": 0.32, + "pattern_score": "0.68:0.28:0.03:0.01:0.0", + "patterns": "14:18:10:6:17" + }, + { + "item_id": "0:2:8:37:4eb7dbde-e1a9-4d2c-b88e-5bcdb5e68354:6:14", + "bounding_box": { + "lt_x": 217, + "lt_y": 1021, + "rb_x": 484, + "rb_y": 1139 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.4:0.18:0.16:0.13:0.08", + "colors": "6:7:20:8:9", + "item_score": 0.35, + "pattern_score": "0.99:0.01:0.0:0.0:0.0", + "patterns": "14:13:18:17:1" + }, + { + "item_id": "0:2:11:58:8157b102-4523-48f1-baac-429c75ac07ab:6:14", + "bounding_box": { + "lt_x": 219, + "lt_y": 980, + "rb_x": 482, + "rb_y": 1132 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.19:0.14:0.09:0.06", + "colors": "6:7:8:9:20", + "item_score": 0.58, + "pattern_score": "0.94:0.04:0.01:0.0:0.0", + "patterns": "14:13:17:18:1" + }, + { + "item_id": "0:2:12:64:a59043c2-5d8f-49c9-86ac-50307bf3716c:1:14", + "bounding_box": { + "lt_x": 459, + "lt_y": 266, + "rb_x": 544, + "rb_y": 302 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.57:0.2:0.17:0.03:0.01", + "colors": "1:7:8:21:3", + "item_score": 0.93, + "pattern_score": "0.57:0.39:0.02:0.01:0.0", + "patterns": "14:13:15:2:4" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324491", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144212-60.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144212-60.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 173, + "lt_y": 661, + "rb_x": 343, + "rb_y": 1199 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:OFFICE:GIRLY", + "style_score": "0.84:0.05:0.04" + }, + { + "human_id": "1:2:-1", + "bounding_box": { + "lt_x": 665, + "lt_y": 20, + "rb_x": 896, + "rb_y": 495 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "BASIC:RETRO:STREET", + "style_score": "0.39:0.11:0.11" + } + ], + "item_info": [ + { + "item_id": "0:-1:3:16:14780594-81cc-4dc3-bdd4-da5f17dc7655:7:14", + "bounding_box": { + "lt_x": 221, + "lt_y": 899, + "rb_x": 341, + "rb_y": 1199 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.1:0.01:0.01:0.01", + "colors": "7:2:9:5:1", + "item_score": 0.88, + "pattern_score": "0.98:0.01:0.0:0.0:0.0", + "patterns": "14:17:2:15:13" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323980", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130115-84.jpg", + "image_width": 996, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130115-84.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 187, + "lt_y": 207, + "rb_x": 751, + "rb_y": 1177 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.6, + "style_candidates": "GIRLY:ELEGANCE:MINIMALIST", + "style_score": "0.46:0.35:0.04" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:93d089b4-446f-45df-b1e5-e98ecaf7b648:7:14", + "bounding_box": { + "lt_x": 192, + "lt_y": 582, + "rb_x": 749, + "rb_y": 1057 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.61:0.38:0.0:0.0:0.0", + "colors": "7:2:8:1:9", + "item_score": 0.59, + "pattern_score": "0.97:0.01:0.01:0.01:0.0", + "patterns": "14:10:18:17:2" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324492", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144213-81.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144213-81.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 294, + "lt_y": 250, + "rb_x": 957, + "rb_y": 1191 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:GIRLY:OFFICE", + "style_score": "0.73:0.1:0.07" + } + ], + "item_info": [ + { + "item_id": "0:-1:10:56:e8245ca0-142f-47da-82d1-6744d1be7599:7:14", + "bounding_box": { + "lt_x": 577, + "lt_y": 252, + "rb_x": 892, + "rb_y": 525 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.28:0.25:0.15:0.07:0.06", + "colors": "7:8:1:2:3", + "item_score": 0.31, + "pattern_score": "0.52:0.12:0.1:0.1:0.08", + "patterns": "14:13:18:11:15" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323981", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130116-14.jpg", + "image_width": 1002, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130116-14.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324493", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144214-64.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144214-64.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 81, + "lt_y": 601, + "rb_x": 415, + "rb_y": 1200 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:RETRO", + "style_score": "0.32:0.24:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:9:48:7bc88c43-8faf-4315-8807-183c470d678d:7:14", + "bounding_box": { + "lt_x": 128, + "lt_y": 703, + "rb_x": 230, + "rb_y": 885 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.9:0.07:0.01:0.0:0.0", + "colors": "7:8:20:1:9", + "item_score": 0.33, + "pattern_score": "0.44:0.25:0.15:0.08:0.06", + "patterns": "14:17:15:11:1" + }, + { + "item_id": "0:2:4:23:e7e41103-d311-4e2a-a07a-8a8dc5f8a002:2:14", + "bounding_box": { + "lt_x": 106, + "lt_y": 811, + "rb_x": 414, + "rb_y": 1198 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.12:0.01:0.01:0.0", + "colors": "2:7:1:3:15", + "item_score": 0.4, + "pattern_score": "0.85:0.08:0.03:0.02:0.01", + "patterns": "14:18:17:10:6" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323982", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130117-30.jpg", + "image_width": 996, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130117-30.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324494", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144215-07.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144215-07.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:12:cd3ab589-d49a-4c14-a65f-683c86a7f1ed:5:14", + "bounding_box": { + "lt_x": 300, + "lt_y": 435, + "rb_x": 715, + "rb_y": 876 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.82:0.11:0.04:0.01:0.01", + "colors": "5:7:2:17:1", + "item_score": 0.58, + "pattern_score": "0.93:0.04:0.02:0.0:0.0", + "patterns": "14:17:13:10:15" + }, + { + "item_id": "-1:-1:2:12:172d5c9e-e658-4905-9544-9a2e0d9ec9c8:5:14", + "bounding_box": { + "lt_x": 482, + "lt_y": 430, + "rb_x": 869, + "rb_y": 865 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.62:0.32:0.03:0.01:0.0", + "colors": "5:1:7:2:17", + "item_score": 0.69, + "pattern_score": "0.63:0.34:0.02:0.01:0.0", + "patterns": "14:17:13:15:6" + }, + { + "item_id": "-1:-1:2:12:644be6b1-fd0b-4a13-bee2-71474b719e1b:7:14", + "bounding_box": { + "lt_x": 99, + "lt_y": 433, + "rb_x": 535, + "rb_y": 862 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.65:0.32:0.01:0.01:0.0", + "colors": "7:2:5:3:12", + "item_score": 0.97, + "pattern_score": "0.95:0.01:0.01:0.01:0.01", + "patterns": "14:13:10:17:18" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323471", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CqAdkv4vOVW-20230403111204-19.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CqAdkv4vOVW-20230403111204-19.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1323983", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130117-33.jpg", + "image_width": 1002, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/aumee.umn/aumee.umn_001/aumee.umn_Female_Bohemian-Retro_Cp-PqifPPJp-20230403130117-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 117, + "lt_y": 4, + "rb_x": 936, + "rb_y": 1197 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:GIRLY:VACATION", + "style_score": "0.42:0.31:0.05" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:442c8f03-2e40-4901-bcac-49c56b179382:7:14", + "bounding_box": { + "lt_x": 127, + "lt_y": 533, + "rb_x": 912, + "rb_y": 1197 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.64:0.36:0.0:0.0:0.0", + "colors": "7:2:9:1:8", + "item_score": 0.74, + "pattern_score": "0.79:0.15:0.02:0.01:0.01", + "patterns": "14:18:6:10:17" + }, + { + "item_id": "0:2:2:9:e5401dc7-7704-4abd-88ff-caf30bea3f83:2:14", + "bounding_box": { + "lt_x": 297, + "lt_y": 114, + "rb_x": 751, + "rb_y": 670 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.64:0.33:0.02:0.01:0.0", + "colors": "2:7:6:1:9", + "item_score": 0.95, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:18:10:15:13" + } + ] + }, + "style_list": [ + { + "seq": "31", + "name": "Bohemian" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324495", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144216-86.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144216-86.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:8:9f91e896-c940-4094-a6d6-7f7f4529da9f:7:14", + "bounding_box": { + "lt_x": 241, + "lt_y": 271, + "rb_x": 885, + "rb_y": 1057 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.27:0.03:0.01:0.0", + "colors": "7:2:5:12:17", + "item_score": 0.28, + "pattern_score": "0.94:0.02:0.02:0.01:0.01", + "patterns": "14:15:10:18:11" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323472", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CpzzGrxvnSi-20230403111204-32.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CpzzGrxvnSi-20230403111204-32.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1323984", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130203-07.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130203-07.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 344, + "lt_y": 409, + "rb_x": 582, + "rb_y": 1054 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:GIRLY:OFFICE", + "style_score": "0.35:0.2:0.1" + } + ], + "item_info": [ + { + "item_id": "0:2:5:25:8719d707-ed9d-48be-85e5-477bfd6a662f:1:14", + "bounding_box": { + "lt_x": 346, + "lt_y": 514, + "rb_x": 541, + "rb_y": 933 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.59:0.29:0.06:0.03:0.02", + "colors": "1:11:7:3:8", + "item_score": 0.54, + "pattern_score": "0.53:0.09:0.09:0.09:0.06", + "patterns": "14:5:15:17:2" + }, + { + "item_id": "0:2:8:37:263d633a-c4e7-4196-92f3-df581fc083fb:1:14", + "bounding_box": { + "lt_x": 440, + "lt_y": 937, + "rb_x": 497, + "rb_y": 1052 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.91:0.03:0.02:0.02:0.01", + "colors": "1:8:21:7:3", + "item_score": 0.87, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:17:13:15:11" + } + ] + }, + "style_list": [ + { + "seq": "22", + "name": "Vacation" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324496", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144216-76.jpg", + "image_width": 961, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_CqcaY7wvWyF-20230403144216-76.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 203, + "lt_y": 218, + "rb_x": 534, + "rb_y": 1184 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.73, + "style_candidates": "RETRO:OFFICE:ELEGANCE", + "style_score": "0.3:0.21:0.14" + }, + { + "human_id": "1:-1:-1", + "bounding_box": { + "lt_x": 847, + "lt_y": 517, + "rb_x": 952, + "rb_y": 656 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:RETRO:PUNK", + "style_score": "0.23:0.22:0.15" + } + ], + "item_info": [ + { + "item_id": "0:2:4:23:0cac3453-b70f-4901-8e15-f3c575e55bbb:2:14", + "bounding_box": { + "lt_x": 204, + "lt_y": 561, + "rb_x": 531, + "rb_y": 1045 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.49:0.31:0.19:0.01:0.0", + "colors": "2:7:1:3:8", + "item_score": 0.91, + "pattern_score": "0.7:0.16:0.07:0.04:0.02", + "patterns": "14:10:17:18:6" + }, + { + "item_id": "0:2:2:12:e19557f2-a95d-44d0-9629-b1c897fd8e3c:1:14", + "bounding_box": { + "lt_x": 267, + "lt_y": 328, + "rb_x": 522, + "rb_y": 677 + }, + "style": [ + "RETRO" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:3:8:7:2", + "item_score": 0.93, + "pattern_score": "0.64:0.26:0.03:0.03:0.03", + "patterns": "14:17:18:13:2" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323985", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130204-05.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130204-05.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 205, + "lt_y": 3, + "rb_x": 693, + "rb_y": 1192 + }, + "style": [ + "SEXY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "SEXY:ELEGANCE:GIRLY", + "style_score": "0.6:0.15:0.13" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "22", + "name": "Vacation" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324497", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144217-71.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144217-71.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 294, + "lt_y": 143, + "rb_x": 628, + "rb_y": 1188 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:BASIC:GIRLY", + "style_score": "0.16:0.16:0.14" + } + ], + "item_info": [ + { + "item_id": "0:2:3:16:8156bf35-16b7-47cf-a435-aebe827a48a4:2:14", + "bounding_box": { + "lt_x": 374, + "lt_y": 531, + "rb_x": 597, + "rb_y": 1187 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.33:0.28:0.24:0.1:0.02", + "colors": "2:15:7:3:12", + "item_score": 0.71, + "pattern_score": "0.98:0.01:0.01:0.0:0.0", + "patterns": "14:2:18:13:10" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323474", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CqAdkv4vOVW-20230403111206-24.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CqAdkv4vOVW-20230403111206-24.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:10:a9e42c34-693d-413e-bdae-c860d15dcdaa:7:14", + "bounding_box": { + "lt_x": 907, + "lt_y": 394, + "rb_x": 1200, + "rb_y": 1194 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.09:0.01:0.01:0.01", + "colors": "7:8:18:1:9", + "item_score": 0.26, + "pattern_score": "0.83:0.05:0.04:0.02:0.01", + "patterns": "14:18:13:6:15" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1323986", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130205-76.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130205-76.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 127, + "lt_y": 89, + "rb_x": 767, + "rb_y": 1197 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "BASIC:STREET:SEXY", + "style_score": "0.31:0.2:0.14" + } + ], + "item_info": [ + { + "item_id": "0:2:5:25:f149d8f6-1179-48f4-8daf-b6a26f344690:1:14", + "bounding_box": { + "lt_x": 140, + "lt_y": 471, + "rb_x": 732, + "rb_y": 1194 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.81:0.1:0.03:0.02:0.02", + "colors": "1:7:3:11:8", + "item_score": 0.56, + "pattern_score": "0.32:0.26:0.17:0.07:0.06", + "patterns": "14:18:15:2:13" + } + ] + }, + "style_list": [ + { + "seq": "22", + "name": "Vacation" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324498", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144218-90.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144218-90.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:10:54:7943e7e8-5854-430e-9939-610b2c65b084:7:14", + "bounding_box": { + "lt_x": 150, + "lt_y": 0, + "rb_x": 574, + "rb_y": 245 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.92:0.07:0.0:0.0:0.0", + "colors": "7:8:1:11:2", + "item_score": 0.58, + "pattern_score": "0.79:0.06:0.04:0.03:0.03", + "patterns": "14:10:13:1:18" + }, + { + "item_id": "-1:-1:10:55:002c5649-c2a6-4f16-b22d-07b544af1639:7:14", + "bounding_box": { + "lt_x": 149, + "lt_y": 0, + "rb_x": 575, + "rb_y": 245 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.92:0.06:0.0:0.0:0.0", + "colors": "7:8:1:11:2", + "item_score": 0.63, + "pattern_score": "0.79:0.05:0.04:0.04:0.02", + "patterns": "14:10:13:1:18" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323475", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CqAdkv4vOVW-20230403111207-52.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/almostbluexx/almostbluexx_001/almostbluexx_All_Street-Retro_CqAdkv4vOVW-20230403111207-52.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:8fa445ee-51ea-4cbd-865c-58665970a0d6:7:14", + "bounding_box": { + "lt_x": 894, + "lt_y": 415, + "rb_x": 1200, + "rb_y": 1200 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.95:0.03:0.01:0.0:0.0", + "colors": "7:8:2:3:20", + "item_score": 0.4, + "pattern_score": "0.78:0.1:0.07:0.01:0.01", + "patterns": "14:2:17:13:18" + }, + { + "item_id": "-1:-1:9:42:faef2175-e8dd-4cec-a7fe-350540cd2af1:14:14", + "bounding_box": { + "lt_x": 1115, + "lt_y": 421, + "rb_x": 1200, + "rb_y": 1038 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.41:0.24:0.14:0.09:0.06", + "colors": "14:1:8:7:13", + "item_score": 0.46, + "pattern_score": "0.87:0.05:0.03:0.02:0.01", + "patterns": "14:2:17:5:15" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1323987", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130206-27.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130206-27.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 8, + "lt_y": 5, + "rb_x": 774, + "rb_y": 1195 + }, + "style": [ + "ELEGANCE" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "ELEGANCE:GIRLY:SEXY", + "style_score": "0.32:0.27:0.24" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "22", + "name": "Vacation" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324499", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144218-09.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144218-09.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 2, + "lt_y": 257, + "rb_x": 785, + "rb_y": 1199 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 0.99, + "style_candidates": "BASIC:GIRLY:STREET", + "style_score": "0.43:0.2:0.13" + } + ], + "item_info": [ + { + "item_id": "0:2:3:14:eea7080e-6af4-494d-b801-dcc2934c0ff5:5:2", + "bounding_box": { + "lt_x": 267, + "lt_y": 795, + "rb_x": 768, + "rb_y": 1199 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.38:0.35:0.1:0.1:0.02", + "colors": "5:7:1:2:8", + "item_score": 0.38, + "pattern_score": "0.77:0.17:0.04:0.01:0.01", + "patterns": "2:14:18:17:15" + }, + { + "item_id": "0:2:8:37:d2e3c10c-0f14-438b-9e32-6492fbcfeb4e:1:14", + "bounding_box": { + "lt_x": 270, + "lt_y": 1018, + "rb_x": 419, + "rb_y": 1198 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.04:0.0:0.0:0.0", + "colors": "1:8:3:21:7", + "item_score": 0.65, + "pattern_score": "0.81:0.09:0.02:0.01:0.01", + "patterns": "14:13:15:17:10" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323988", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130206-87.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130206-87.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:7:36:a9cc716d-c879-4025-b379-15cc60e0eda4:1:14", + "bounding_box": { + "lt_x": 181, + "lt_y": 417, + "rb_x": 770, + "rb_y": 1198 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.38:0.06:0.04:0.03", + "colors": "1:11:3:7:8", + "item_score": 0.5, + "pattern_score": "0.95:0.02:0.01:0.01:0.0", + "patterns": "14:13:18:17:2" + } + ] + }, + "style_list": [ + { + "seq": "22", + "name": "Vacation" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324500", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144219-55.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/lilas.store/lilas.store_001/lilas.store_Female_Girly-Basic_Cqa4DFSPCXd-20230403144219-55.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:2:9:a4eb0183-d508-4056-9c31-f4f6e91fc764:7:2", + "bounding_box": { + "lt_x": 483, + "lt_y": 440, + "rb_x": 854, + "rb_y": 829 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.02:0.01:0.01:0.0", + "colors": "7:2:8:3:1", + "item_score": 0.71, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "2:1:14:17:15" + }, + { + "item_id": "-1:-1:2:9:49fa65d6-60f9-4731-a427-2fa71667f2da:7:2", + "bounding_box": { + "lt_x": 28, + "lt_y": 574, + "rb_x": 534, + "rb_y": 1066 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.67:0.25:0.02:0.02:0.01", + "colors": "7:9:20:11:10", + "item_score": 0.82, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "2:1:17:14:6" + }, + { + "item_id": "-1:-1:2:9:1bbc6070-17ea-42db-a5cc-3f1e354f8f2c:7:2", + "bounding_box": { + "lt_x": 263, + "lt_y": 222, + "rb_x": 653, + "rb_y": 588 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.84:0.06:0.04:0.03:0.01", + "colors": "7:10:12:9:2", + "item_score": 0.94, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "2:17:1:5:15" + } + ] + }, + "style_list": [ + { + "seq": "18", + "name": "Basic" + }, + { + "seq": "25", + "name": "Girly" + } + ] + }, + { + "image_id": "1323989", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130207-53.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/tenratvui/tenratvui_001/tenratvui_Female_Vacation-Retro_CqSBT5EPBjG-20230403130207-53.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "22", + "name": "Vacation" + }, + { + "seq": "30", + "name": "Retro" + } + ] + }, + { + "image_id": "1324761", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152003-43.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152003-43.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324762", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152004-92.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152004-92.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 2, + "lt_y": 26, + "rb_x": 850, + "rb_y": 1196 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:RETRO", + "style_score": "0.56:0.29:0.08" + } + ], + "item_info": [ + { + "item_id": "0:-1:2:12:a084c3aa-a2e3-4585-867e-68b8727ae548:3:5", + "bounding_box": { + "lt_x": 276, + "lt_y": 285, + "rb_x": 778, + "rb_y": 858 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.12:0.1:0.01:0.01", + "colors": "3:2:1:14:7", + "item_score": 0.5, + "pattern_score": "0.68:0.3:0.01:0.0:0.0", + "patterns": "5:2:17:14:13" + }, + { + "item_id": "0:-1:1:5:1a19a116-1b3e-4045-a188-ed7921fd1897:3:5", + "bounding_box": { + "lt_x": 282, + "lt_y": 286, + "rb_x": 764, + "rb_y": 857 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.81:0.09:0.07:0.01:0.0", + "colors": "3:1:2:14:7", + "item_score": 0.86, + "pattern_score": "0.61:0.38:0.01:0.0:0.0", + "patterns": "5:2:17:14:1" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324763", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152004-51.jpg", + "image_width": 1200, + "image_height": 1181, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152004-51.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:081dd17a-f05e-4a60-a219-f8e39c987ef7:1:13", + "bounding_box": { + "lt_x": 607, + "lt_y": 369, + "rb_x": 1082, + "rb_y": 822 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:3:14:8:2", + "item_score": 0.99, + "pattern_score": "0.69:0.25:0.03:0.01:0.01", + "patterns": "13:14:15:2:11" + }, + { + "item_id": "-1:-1:3:14:781c9a5c-b914-46a0-897a-ee052cebcb62:3:13", + "bounding_box": { + "lt_x": 124, + "lt_y": 370, + "rb_x": 595, + "rb_y": 822 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.74:0.23:0.02:0.01:0.0", + "colors": "3:11:1:8:14", + "item_score": 0.99, + "pattern_score": "0.89:0.1:0.0:0.0:0.0", + "patterns": "13:14:6:15:17" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324764", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152005-16.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152005-16.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324765", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152006-43.jpg", + "image_width": 800, + "image_height": 800, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152006-43.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:1:5:1b7372f5-0005-4532-a31e-db7a9711262d:7:2", + "bounding_box": { + "lt_x": 178, + "lt_y": 137, + "rb_x": 617, + "rb_y": 667 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.08:0.07:0.04:0.03", + "colors": "7:1:11:9:20", + "item_score": 0.42, + "pattern_score": "0.99:0.01:0.0:0.0:0.0", + "patterns": "2:5:16:10:6" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324766", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152006-71.jpg", + "image_width": 800, + "image_height": 800, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152006-71.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:1:5:de15789c-7dff-42ac-927f-7ef35f467a6b:7:2", + "bounding_box": { + "lt_x": 177, + "lt_y": 138, + "rb_x": 622, + "rb_y": 665 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.83:0.09:0.02:0.02:0.01", + "colors": "7:1:9:11:20", + "item_score": 0.61, + "pattern_score": "1.0:0.0:0.0:0.0:0.0", + "patterns": "2:5:17:3:6" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324767", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152007-33.jpg", + "image_width": 1200, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqh4qugP7Wc-20230403152007-33.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324768", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152008-15.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152008-15.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 692, + "lt_y": 244, + "rb_x": 855, + "rb_y": 795 + }, + "style": [ + "BASIC" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "BASIC:VACATION:RETRO", + "style_score": "0.27:0.13:0.08" + } + ], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324769", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152009-43.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152009-43.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 271, + "lt_y": 29, + "rb_x": 765, + "rb_y": 1197 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:RETRO:BASIC", + "style_score": "0.53:0.34:0.06" + } + ], + "item_info": [ + { + "item_id": "0:-1:4:23:410f4ce9-adc6-483a-83cf-0fe4e921f835:8:5", + "bounding_box": { + "lt_x": 299, + "lt_y": 707, + "rb_x": 627, + "rb_y": 1197 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.43:0.39:0.11:0.04:0.0", + "colors": "8:1:7:6:3", + "item_score": 0.37, + "pattern_score": "0.63:0.31:0.02:0.01:0.01", + "patterns": "5:2:14:17:13" + }, + { + "item_id": "0:-1:10:54:83c98f11-230f-4b54-8d3d-26e786350418:1:14", + "bounding_box": { + "lt_x": 390, + "lt_y": 30, + "rb_x": 611, + "rb_y": 227 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.85:0.1:0.02:0.01:0.01", + "colors": "1:3:14:7:2", + "item_score": 0.57, + "pattern_score": "0.35:0.33:0.21:0.04:0.02", + "patterns": "14:15:11:17:13" + }, + { + "item_id": "0:-1:3:16:376f53ac-2365-4f6e-bed2-c0197ecd951a:8:5", + "bounding_box": { + "lt_x": 299, + "lt_y": 698, + "rb_x": 629, + "rb_y": 1197 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.39:0.1:0.03:0.01", + "colors": "8:1:7:6:5", + "item_score": 0.63, + "pattern_score": "0.57:0.37:0.03:0.02:0.01", + "patterns": "5:2:14:17:13" + }, + { + "item_id": "0:-1:12:64:fd4a8465-668f-470e-896d-aa024d62dbf7:1:14", + "bounding_box": { + "lt_x": 416, + "lt_y": 147, + "rb_x": 577, + "rb_y": 217 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.94:0.02:0.02:0.01:0.01", + "colors": "1:8:7:3:2", + "item_score": 0.87, + "pattern_score": "0.76:0.13:0.04:0.02:0.01", + "patterns": "14:13:15:4:11" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324770", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152010-13.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152010-13.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 324, + "lt_y": 61, + "rb_x": 735, + "rb_y": 1191 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:TECH", + "style_score": "0.61:0.18:0.07" + } + ], + "item_info": [ + { + "item_id": "0:-1:9:42:30cfd880-2dac-4456-a9f3-f1fe45ce567d:1:5", + "bounding_box": { + "lt_x": 368, + "lt_y": 229, + "rb_x": 648, + "rb_y": 611 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.79:0.06:0.05:0.04:0.02", + "colors": "1:6:8:7:3", + "item_score": 0.87, + "pattern_score": "0.95:0.02:0.01:0.01:0.0", + "patterns": "5:17:13:2:4" + }, + { + "item_id": "0:-1:3:16:efffb40e-57ea-462c-bef4-c960f0652950:8:14", + "bounding_box": { + "lt_x": 328, + "lt_y": 522, + "rb_x": 673, + "rb_y": 1190 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.86:0.08:0.03:0.01:0.0", + "colors": "8:6:7:1:3", + "item_score": 0.95, + "pattern_score": "0.95:0.02:0.01:0.01:0.01", + "patterns": "14:13:15:17:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324771", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152010-61.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_Cqe8J3kvqja-20230403152010-61.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:-1:-1", + "bounding_box": { + "lt_x": 186, + "lt_y": 15, + "rb_x": 925, + "rb_y": 1197 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": -1, + "style_candidates": "STREET:BASIC:RETRO", + "style_score": "0.45:0.17:0.14" + } + ], + "item_info": [ + { + "item_id": "0:-1:1:5:0f33e4cc-8d8e-440c-9984-c936d1587e89:1:5", + "bounding_box": { + "lt_x": 290, + "lt_y": 293, + "rb_x": 775, + "rb_y": 926 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "1:6:8:9:7", + "item_score": 0.3, + "pattern_score": "0.82:0.1:0.06:0.01:0.0", + "patterns": "5:2:17:14:13" + }, + { + "item_id": "0:-1:10:56:a7ad32f0-1d7f-4e0b-a9ef-98b2a3e05629:1:15", + "bounding_box": { + "lt_x": 385, + "lt_y": 15, + "rb_x": 662, + "rb_y": 283 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.01:0.01:0.01:0.0", + "colors": "1:2:7:3:14", + "item_score": 0.31, + "pattern_score": "0.4:0.35:0.09:0.06:0.05", + "patterns": "15:14:11:17:13" + }, + { + "item_id": "0:-1:12:64:c8c86901-8461-480a-a66d-bd93a2f3efec:1:14", + "bounding_box": { + "lt_x": 401, + "lt_y": 138, + "rb_x": 534, + "rb_y": 224 + }, + "style": [ + "STREET" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.97:0.01:0.01:0.0:0.0", + "colors": "1:8:3:7:21", + "item_score": 0.77, + "pattern_score": "0.95:0.03:0.01:0.0:0.0", + "patterns": "14:13:15:11:17" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324772", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152011-82.jpg", + "image_width": 1200, + "image_height": 1183, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152011-82.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:5f4aa3d3-62ea-48bc-8d4e-b1b8d17b98ed:1:13", + "bounding_box": { + "lt_x": 237, + "lt_y": 248, + "rb_x": 961, + "rb_y": 938 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "1:3:14:8:2", + "item_score": 0.97, + "pattern_score": "0.78:0.19:0.02:0.01:0.0", + "patterns": "13:14:15:2:17" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324773", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152012-45.jpg", + "image_width": 1200, + "image_height": 1183, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152012-45.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:6dd6fb43-7993-4844-8f43-78670c2d0ad8:1:13", + "bounding_box": { + "lt_x": 242, + "lt_y": 259, + "rb_x": 963, + "rb_y": 937 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.01:0.0:0.0:0.0", + "colors": "1:3:14:8:2", + "item_score": 0.97, + "pattern_score": "0.9:0.08:0.0:0.0:0.0", + "patterns": "13:14:17:18:2" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324774", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152012-85.jpg", + "image_width": 1200, + "image_height": 1183, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152012-85.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:d2d91329-430e-40d4-96eb-8988d81ea9d7:3:13", + "bounding_box": { + "lt_x": 249, + "lt_y": 261, + "rb_x": 953, + "rb_y": 934 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.75:0.22:0.02:0.01:0.0", + "colors": "3:11:1:8:14", + "item_score": 0.97, + "pattern_score": "0.92:0.07:0.0:0.0:0.0", + "patterns": "13:14:6:15:17" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324775", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152013-04.jpg", + "image_width": 1200, + "image_height": 1183, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152013-04.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [ + { + "item_id": "-1:-1:3:14:3b28132a-4a38-4a5f-8c25-2bc1780c6b92:3:13", + "bounding_box": { + "lt_x": 243, + "lt_y": 256, + "rb_x": 961, + "rb_y": 934 + }, + "style": [], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.84:0.14:0.01:0.0:0.0", + "colors": "3:11:1:14:8", + "item_score": 0.92, + "pattern_score": "0.7:0.28:0.01:0.0:0.0", + "patterns": "13:14:17:6:10" + } + ] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324776", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152014-51.jpg", + "image_width": 1200, + "image_height": 1184, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/multi.haus/multi.haus_001/multi.haus_Male_Street_CqefmovP8qL-20230403152014-51.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "23", + "name": "Street" + } + ] + }, + { + "image_id": "1324282", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140602-81.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140602-81.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 216, + "lt_y": 242, + "rb_x": 958, + "rb_y": 1199 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:SEXY:ELEGANCE", + "style_score": "0.67:0.11:0.1" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:8ad83fe6-bb42-4845-a68b-fd96fc54274c:5:1", + "bounding_box": { + "lt_x": 302, + "lt_y": 383, + "rb_x": 705, + "rb_y": 992 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "5:17:6:7:2", + "item_score": 0.92, + "pattern_score": "0.48:0.22:0.11:0.06:0.03", + "patterns": "1:14:18:2:10" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324283", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140603-53.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140603-53.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 230, + "lt_y": 204, + "rb_x": 869, + "rb_y": 1063 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:VACATION", + "style_score": "0.83:0.05:0.04" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:6bbe7056-4749-4278-91f1-75f08bd6dba0:5:1", + "bounding_box": { + "lt_x": 299, + "lt_y": 411, + "rb_x": 834, + "rb_y": 993 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.0:0.0:0.0:0.0", + "colors": "5:6:17:7:4", + "item_score": 0.56, + "pattern_score": "0.48:0.32:0.13:0.04:0.01", + "patterns": "1:18:10:14:2" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324284", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140604-19.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140604-19.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 140, + "lt_y": 193, + "rb_x": 777, + "rb_y": 1194 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:VACATION", + "style_score": "0.82:0.07:0.03" + } + ], + "item_info": [ + { + "item_id": "0:2:8:38:3e687a20-4830-46d7-a98e-d24628712a5f:7:14", + "bounding_box": { + "lt_x": 439, + "lt_y": 967, + "rb_x": 543, + "rb_y": 1193 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.45:0.43:0.05:0.03:0.01", + "colors": "7:2:6:5:8", + "item_score": 0.26, + "pattern_score": "0.72:0.21:0.06:0.0:0.0", + "patterns": "14:2:17:10:18" + }, + { + "item_id": "0:2:8:41:243a2409-dea6-4414-8440-9fc1eae03b8b:7:14", + "bounding_box": { + "lt_x": 439, + "lt_y": 966, + "rb_x": 544, + "rb_y": 1194 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.48:0.42:0.04:0.02:0.01", + "colors": "7:2:6:5:8", + "item_score": 0.79, + "pattern_score": "0.74:0.18:0.06:0.01:0.0", + "patterns": "14:2:17:10:15" + }, + { + "item_id": "0:2:5:24:9a584f3e-274b-4e87-b1d3-b0a648676b6d:5:1", + "bounding_box": { + "lt_x": 169, + "lt_y": 351, + "rb_x": 694, + "rb_y": 819 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.01:0.0:0.0:0.0", + "colors": "5:17:6:12:7", + "item_score": 0.98, + "pattern_score": "0.86:0.06:0.04:0.01:0.01", + "patterns": "1:10:18:14:15" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324285", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140606-20.jpg", + "image_width": null, + "image_height": null, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140606-20.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [], + "item_info": [] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324286", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140606-53.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140606-53.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 240, + "lt_y": 190, + "rb_x": 849, + "rb_y": 1195 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:VACATION", + "style_score": "0.89:0.03:0.02" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:506a6a97-557e-4c3e-a030-48ac0c63cc7f:5:1", + "bounding_box": { + "lt_x": 312, + "lt_y": 360, + "rb_x": 732, + "rb_y": 924 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.99:0.01:0.0:0.0:0.0", + "colors": "5:17:6:2:7", + "item_score": 0.95, + "pattern_score": "0.97:0.01:0.01:0.0:0.0", + "patterns": "1:18:10:2:14" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + }, + { + "image_id": "1324287", + "image_status": "S", + "image_url": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140607-51.jpg", + "image_width": 960, + "image_height": 1200, + "labeling_json": { + "img_path": "https://static.showniq.ai/public/post/cover/large/thebitsy.chic/thebitsy.chic_001/thebitsy.chic_Female_Girly-Elegance_Cp5I3TqPhbd-20230403140607-51.jpg", + "writer_id": "mj@dasomx.com", + "version": "Beta 2", + "color_opt": "1", + "human_info": [ + { + "human_id": "0:2:-1", + "bounding_box": { + "lt_x": 107, + "lt_y": 215, + "rb_x": 848, + "rb_y": 1036 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "gender_score": 1, + "style_candidates": "GIRLY:ELEGANCE:SEXY", + "style_score": "0.79:0.06:0.05" + } + ], + "item_info": [ + { + "item_id": "0:2:5:24:045f98ee-22cf-4ae1-8cd0-29cdcb627275:5:1", + "bounding_box": { + "lt_x": 305, + "lt_y": 446, + "rb_x": 804, + "rb_y": 978 + }, + "style": [ + "GIRLY" + ], + "qc_status": "W", + "qc_comment": "", + "box_position_rejected": "F", + "color_score": "0.96:0.03:0.01:0.0:0.0", + "colors": "5:6:7:4:2", + "item_score": 0.34, + "pattern_score": "0.68:0.22:0.05:0.02:0.01", + "patterns": "1:18:14:10:2" + } + ] + }, + "style_list": [ + { + "seq": "25", + "name": "Girly" + }, + { + "seq": "19", + "name": "Elegance" + } + ] + } + ], + "score_criteria": { + "gender": 0.95, + "style": 0.9, + "color": 0.85, + "pattern": 0.75, + "item": 0.65 + } + } +} \ No newline at end of file diff --git a/src/views/MainView/MainView.scss b/src/views/MainView/MainView.scss index 123392051..324cffb27 100644 --- a/src/views/MainView/MainView.scss +++ b/src/views/MainView/MainView.scss @@ -2,8 +2,10 @@ .MainView { position: absolute; - height: 100vh; - width: 100vw; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; margin: 0; padding: 0; @@ -35,11 +37,42 @@ } .RightColumn { + label + .MuiInput-formControl{ + margin-top: unset; + } .ImagesDropZone { animation-duration: 1.5s; animation-name: cssAnimationShow; animation-fill-mode: forwards; } + .MuiFormControl-root{ + width: 100%; + margin-bottom: 12px; + } + .MuiInputBase-input { + background: #FFFF; + border-radius: 9.73271px; + height: 65px ; + max-height: 65px; + width: 100%; + padding: 0px 19px; + color: #000000 !important; + &::placeholder{ + color: #BABABA; + font-weight: 400; + font-size: 14.5991px; + line-height: 18px; + } + } + .MuiInput-underline{ + &::after{ + display: none !important; + } + &::before{ + display: none !important; + } + } + } .LeftColumn { @@ -144,18 +177,18 @@ } .RightColumn { - padding: 20px; - align-self: stretch; - flex: 1; - min-width: 200px; - z-index: 100; - - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: space-between; - align-items: center; - align-content: center; + // padding: 20px; + // align-self: stretch; + // flex: 1; + // min-width: 200px; + // z-index: 100; + + // display: flex; + // flex-direction: row; + // flex-wrap: nowrap; + // justify-content: center; + // align-items: center; + // align-content: center; .TextButton { box-shadow: black 0 0 0 2px inset; @@ -280,4 +313,21 @@ 100% { background-position: 0 50%; } +} + +.loginShowniq{ + background-image: url("../../assets/img/backgroundImage.png"); + background-size: cover; + background-repeat: no-repeat; + height: 100vh; + background-color: #00dafe; + background-position: center center; + width: 100%; + &__content{ + margin-top: auto; + @media screen and (max-width: 1500px) { + background: rgba(0, 120, 147, 0.55) !important; + position: fixed; + } + } } \ No newline at end of file diff --git a/src/views/MainView/MainView.tsx b/src/views/MainView/MainView.tsx index 57d10e555..e9ff1e4ee 100644 --- a/src/views/MainView/MainView.tsx +++ b/src/views/MainView/MainView.tsx @@ -1,17 +1,52 @@ import React, {useState} from 'react'; import './MainView.scss'; -import {TextButton} from '../Common/TextButton/TextButton'; import classNames from 'classnames'; import {ISize} from '../../interfaces/ISize'; import {ImageButton} from '../Common/ImageButton/ImageButton'; import {ISocialMedia, SocialMediaData} from '../../data/info/SocialMediaData'; -import {EditorFeatureData, IEditorFeature} from '../../data/info/EditorFeatureData'; +import { + EditorFeatureData, + IEditorFeature +} from '../../data/info/EditorFeatureData'; +import { + updateActiveImageIndex, + updateActiveLabelNameId, + updateFirstLabelCreatedFlag, + updateImageData, + updateLabelNames +} from '../../store/labels/actionCreators'; +import {PopupActions} from '../../logic/actions/PopupActions'; import {Tooltip} from '@material-ui/core'; import Fade from '@material-ui/core/Fade'; import withStyles from '@material-ui/core/styles/withStyles'; -import ImagesDropZone from './ImagesDropZone/ImagesDropZone'; +import {updateAuthData} from '../../store/auth/actionCreators'; +import ImagesFetcher from './ImagesFetcher/ImagesFetcher'; +import {connect} from 'react-redux'; +import {updateActivePopupType, updateProjectData} from '../../store/general/actionCreators'; +import {PopupWindowType} from '../../data/enums/PopupWindowType'; +import {AppState} from '../../store'; +import {AuthData} from '../../store/auth/types'; +import WrapperLogin from "../../components/WrapperLogin/index" -const MainView: React.FC = () => { +interface IProps { + authData: AuthData; + updateActivePopupTypeAction: (type: PopupWindowType) => void; + updateActiveImageIndex: (activeImageIndex: number) => any; + updateActiveLabelNameId: (activeLabelId: string) => any; + //updateImageData: (imageData: ImageData[]) => any; + updateFirstLabelCreatedFlag: (firstLabelCreatedFlag: boolean) => any; + updateAuthDataAction: (authData: AuthData) => any; + +} + +const MainView: React.FC = ({ + authData, + updateActivePopupTypeAction, + updateActiveLabelNameId, + updateActiveImageIndex, + updateFirstLabelCreatedFlag, + updateAuthDataAction +}) => { const [projectInProgress, setProjectInProgress] = useState(false); const [projectCanceled, setProjectCanceled] = useState(false); @@ -22,118 +57,102 @@ const MainView: React.FC = () => { const endProject = () => { setProjectInProgress(false); setProjectCanceled(true); + updateActivePopupTypeAction(PopupWindowType.LOGIN); + updateAuthDataAction({ + email: null, + displayName: null, + authToken: null, + role: null + }); + window.localStorage.removeItem('@@auth'); + updateActiveLabelNameId(null); + updateActiveImageIndex(null); + updateFirstLabelCreatedFlag(false); + PopupActions.close(); }; const getClassName = () => { - return classNames( - 'MainView', { - 'InProgress': projectInProgress, - 'Canceled': !projectInProgress && projectCanceled - } - ); + return classNames('MainView', { + InProgress: projectInProgress, + Canceled: !projectInProgress && projectCanceled + }); }; - const DarkTooltip = withStyles(theme => ({ + const DarkTooltip = withStyles((theme) => ({ tooltip: { backgroundColor: '#171717', color: '#ffffff', boxShadow: theme.shadows[1], fontSize: 11, maxWidth: 120 - }, + } }))(Tooltip); - const getSocialMediaButtons = (size:ISize) => { - return SocialMediaData.map((data:ISocialMedia, index: number) => { - return -
- -
-
+ const getSocialMediaButtons = (size: ISize) => { + return SocialMediaData.map((data: ISocialMedia, index: number) => { + return ( + +
+ +
+
+ ); }); }; const getEditorFeatureTiles = () => { - return EditorFeatureData.map((data:IEditorFeature) => { - return
-
- {data.imageAlt} -
- {data.displayText} + return EditorFeatureData.map((data: IEditorFeature) => { + return ( +
+
+ {data.imageAlt} +
+ {data.displayText} +
-
+ ); }); }; return ( -
-
-
-
-
-
- -
-
-
+
+ +
+ {/* */} +
-
- -
-
- {'main-logo'} -
-
- {getEditorFeatureTiles()} -
-
-
-
- {projectInProgress && } -
-
-
- -
- {getSocialMediaButtons({width: 30, height: 30})} -
- {!projectInProgress && } -
+
); }; +const mapDispatchToProps = { + updateActivePopupTypeAction: updateActivePopupType, + updateActiveLabelNameId, + updateLabelNames, + updateProjectData, + updateActiveImageIndex, + updateImageData, + updateFirstLabelCreatedFlag, + updateAuthDataAction: updateAuthData, +}; +const mapStateToProps = (state: AppState) => ({ + authData: state.auth.authData +}); -export default MainView; +export default connect(mapStateToProps, mapDispatchToProps)(MainView); diff --git a/src/views/MobileMainView/MobileMainView.tsx b/src/views/MobileMainView/MobileMainView.tsx index e24846879..a84e1d475 100644 --- a/src/views/MobileMainView/MobileMainView.tsx +++ b/src/views/MobileMainView/MobileMainView.tsx @@ -1,13 +1,16 @@ import React, {useState} from 'react'; import './MobileMainView.scss'; import Scrollbars from 'react-custom-scrollbars'; -import {ISize} from "../../interfaces/ISize"; -import {AppState} from "../../store"; -import {connect} from "react-redux"; -import classNames from 'classnames' -import {EditorFeatureData, IEditorFeature} from "../../data/info/EditorFeatureData"; -import {ISocialMedia, SocialMediaData} from "../../data/info/SocialMediaData"; -import {ImageButton} from "../Common/ImageButton/ImageButton"; +import {ISize} from '../../interfaces/ISize'; +import {AppState} from '../../store'; +import {connect} from 'react-redux'; +import classNames from 'classnames'; +import { + EditorFeatureData, + IEditorFeature +} from '../../data/info/EditorFeatureData'; +import {ISocialMedia, SocialMediaData} from '../../data/info/SocialMediaData'; +import {ImageButton} from '../Common/ImageButton/ImageButton'; interface IProps { size: ISize; @@ -20,8 +23,8 @@ const MobileMainView: React.FC = ({size}) => { const getClassName = () => { return classNames('MobileTopNavigationBar', { Hide: scrollPosition < scrollPositionThreshold, - Show: scrollPosition >= scrollPositionThreshold, - }) + Show: scrollPosition >= scrollPositionThreshold + }); }; const onScroll = (value) => { @@ -29,105 +32,116 @@ const MobileMainView: React.FC = ({size}) => { }; const getEditorFeatureTiles = (features: IEditorFeature[]) => { - return features.map((data:IEditorFeature) => { - return
-
- {data.imageAlt} -
- {data.displayText} + return features.map((data: IEditorFeature) => { + return ( +
+
+ {data.imageAlt} +
+ {data.displayText} +
-
+ ); }); }; - const getSocialMediaButtons = (size:ISize) => { - return SocialMediaData.map((data:ISocialMedia, index: number) => { - return + const getSocialMediaButtons = (size: ISize) => { + return SocialMediaData.map((data: ISocialMedia, index: number) => { + return ( + + ); }); }; - const topNavigationBar =
-
-
- {"make-sense"} - Make Sense + + const topNavigationBar = ( +
+
+
+ {'make-sense'} + SHOWNIQ Platforms +
+
+
+
-
-
-
-
; - - const firstStage =
- {"main-logo"} -
-
-
-
; + ); - const secondStage =
- {getEditorFeatureTiles(EditorFeatureData.slice(0, 3))} -
; + const firstStage = ( +
+ {'main-logo'} +
+
+
+
+ ); - const thirdStage =
- {getEditorFeatureTiles(EditorFeatureData.slice(3, 6))} -
-
+ const secondStage = ( +
+ {getEditorFeatureTiles(EditorFeatureData.slice(0, 3))}
-
-
+ ); + + const thirdStage = ( +
+ {getEditorFeatureTiles(EditorFeatureData.slice(3, 6))} +
+
+
+
+
+
-
; + ); - const fourthStage =
-
- Due to the small size of the screen we do not support our editor on mobile devices. Check what you missed and visit us from a desktop. + const fourthStage = ( +
+
+ Due to the small size of the screen we do not support our editor + on mobile devices. Check what you missed and visit us from a + desktop. +
+
+ {getSocialMediaButtons({width: 40, height: 40})} +
-
- {getSocialMediaButtons({width: 40, height: 40})} + ); + + return ( +
+ {topNavigationBar} + +
+ {firstStage} + {secondStage} + {thirdStage} + {fourthStage} +
+
-
; - - return(
- {topNavigationBar} - -
- {firstStage} - {secondStage} - {thirdStage} - {fourthStage} -
-
-
) + ); }; const mapDispatchToProps = {}; @@ -136,7 +150,4 @@ const mapStateToProps = (state: AppState) => ({ size: state.general.windowSize }); -export default connect( - mapStateToProps, - mapDispatchToProps -)(MobileMainView); \ No newline at end of file +export default connect(mapStateToProps, mapDispatchToProps)(MobileMainView); diff --git a/src/views/PopupView/DeleteConfirmPopup/DeleteConfirmPopup.scss b/src/views/PopupView/DeleteConfirmPopup/DeleteConfirmPopup.scss new file mode 100644 index 000000000..c45058672 --- /dev/null +++ b/src/views/PopupView/DeleteConfirmPopup/DeleteConfirmPopup.scss @@ -0,0 +1,20 @@ +@import '../../../settings/Settings'; + +.DeleteConfirmPopupContent { + align-self: stretch; + flex: 1; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + align-content: flex-start; + padding-top: 30px; + + .Message { + align-self: stretch; + color: white; + font-size: 15px; + padding: 0 40px 30px 40px; + } +} diff --git a/src/views/PopupView/DeleteConfirmPopup/DeleteConfirmPopup.tsx b/src/views/PopupView/DeleteConfirmPopup/DeleteConfirmPopup.tsx new file mode 100644 index 000000000..6478f2da6 --- /dev/null +++ b/src/views/PopupView/DeleteConfirmPopup/DeleteConfirmPopup.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import './DeleteConfirmPopup.scss'; +import {GenericYesNoPopup} from '../GenericYesNoPopup/GenericYesNoPopup'; +import {AppState} from '../../../store'; +import {connect} from 'react-redux'; +import {PopupActions} from '../../../logic/actions/PopupActions'; +import {LabelsSelector} from '../../../store/selectors/LabelsSelector'; +import {LabelActions} from '../../../logic/actions/LabelActions'; + +interface IProps {} + +const DeleteConfirmPopup: React.FC = (props) => { + const {} = props; + + const renderContent = () => { + return ( +
+
Are you sure you want to Delete?
+
+ ); + }; + + const onAccept = () => { + PopupActions.close(); + const {id: labelId} = LabelsSelector.getActiveRectLabel(); + const {id: imageId} = LabelsSelector.getActiveImageData(); + console.log('imageId = ', imageId); + console.log('labelId = ', labelId); + LabelActions.deleteRectLabelById(imageId, labelId); + }; + + const onReject = () => { + PopupActions.close(); + }; + + return ( +
+ +
+ ); +}; + +const mapDispatchToProps = {}; + +const mapStateToProps = (state: AppState) => ({}); + +export default connect(mapStateToProps, mapDispatchToProps)(DeleteConfirmPopup); diff --git a/src/views/PopupView/ExitProjectPopup/ExitProjectPopup.tsx b/src/views/PopupView/ExitProjectPopup/ExitProjectPopup.tsx index 70157f8fc..f697f74e4 100644 --- a/src/views/PopupView/ExitProjectPopup/ExitProjectPopup.tsx +++ b/src/views/PopupView/ExitProjectPopup/ExitProjectPopup.tsx @@ -1,19 +1,23 @@ -import React from 'react' -import './ExitProjectPopup.scss' -import {GenericYesNoPopup} from "../GenericYesNoPopup/GenericYesNoPopup"; +import React from 'react'; +import './ExitProjectPopup.scss'; +import {GenericYesNoPopup} from '../GenericYesNoPopup/GenericYesNoPopup'; import { updateActiveImageIndex, updateActiveLabelNameId, updateFirstLabelCreatedFlag, updateImageData, updateLabelNames -} from "../../../store/labels/actionCreators"; -import {AppState} from "../../../store"; -import {connect} from "react-redux"; -import {ImageData, LabelName} from "../../../store/labels/types"; -import {PopupActions} from "../../../logic/actions/PopupActions"; -import {ProjectData} from "../../../store/general/types"; -import {updateProjectData} from "../../../store/general/actionCreators"; +} from '../../../store/labels/actionCreators'; +import {updateActiveContext} from '../../../store/general/actionCreators'; + +import {AppState} from '../../../store'; +import {connect} from 'react-redux'; +import {ImageData, LabelName} from '../../../store/labels/types'; +import {PopupActions} from '../../../logic/actions/PopupActions'; +import {ProjectData} from '../../../store/general/types'; +import {updateProjectData} from '../../../store/general/actionCreators'; +import {ContextType} from '../../../data/enums/ContextType'; +import {ContextManager} from '../../../logic/context/ContextManager'; interface IProps { updateActiveImageIndex: (activeImageIndex: number) => any; @@ -22,6 +26,7 @@ interface IProps { updateImageData: (imageData: ImageData[]) => any; updateFirstLabelCreatedFlag: (firstLabelCreatedFlag: boolean) => any; updateProjectData: (projectData: ProjectData) => any; + updateActiveContext: (activeContext: ContextType) => any; } const ExitProjectPopup: React.FC = (props) => { @@ -31,26 +36,29 @@ const ExitProjectPopup: React.FC = (props) => { updateActiveImageIndex, updateImageData, updateFirstLabelCreatedFlag, - updateProjectData + updateProjectData, + updateActiveContext } = props; const renderContent = () => { - return( + return (
- Are you sure you want to leave the editor? You will permanently lose all your progress. + Are you sure you want to leave the editor? You will + permanently lose all your progress.
- ) + ); }; const onAccept = () => { updateActiveLabelNameId(null); updateLabelNames([]); - updateProjectData({type: null, name: "my-project-name"}); + updateProjectData({type: null, name: 'my-project-name'}); updateActiveImageIndex(null); updateImageData([]); updateFirstLabelCreatedFlag(false); + ContextManager.switchCtx(null); PopupActions.close(); }; @@ -58,15 +66,18 @@ const ExitProjectPopup: React.FC = (props) => { PopupActions.close(); }; - return( + return ( +
) + /> +
+ ); }; const mapDispatchToProps = { @@ -75,12 +86,10 @@ const mapDispatchToProps = { updateProjectData, updateActiveImageIndex, updateImageData, - updateFirstLabelCreatedFlag + updateFirstLabelCreatedFlag, + updateActiveContext }; const mapStateToProps = (state: AppState) => ({}); -export default connect( - mapStateToProps, - mapDispatchToProps -)(ExitProjectPopup); \ No newline at end of file +export default connect(mapStateToProps, mapDispatchToProps)(ExitProjectPopup); diff --git a/src/views/PopupView/GenericLabelTypePopup/GenericLabelTypePopup.tsx b/src/views/PopupView/GenericLabelTypePopup/GenericLabelTypePopup.tsx index 6ec3e99c4..8bbe83564 100644 --- a/src/views/PopupView/GenericLabelTypePopup/GenericLabelTypePopup.tsx +++ b/src/views/PopupView/GenericLabelTypePopup/GenericLabelTypePopup.tsx @@ -69,6 +69,7 @@ const GenericLabelTypePopup: React.FC = ( } return( +
= ( rejectLabel={rejectLabel} onReject={() => onReject(labelType)} /> +
); }; diff --git a/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.scss b/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.scss index 7232882cd..aad95f3ee 100644 --- a/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.scss +++ b/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.scss @@ -1,90 +1,79 @@ @import '../../../settings/Settings'; .GenericYesNoPopup { - max-height: 600px; - max-width: 500px; - width: 50%; - border-radius: 5px; - user-select: none; - box-shadow: 0px 0px 10px 3px rgba(255, 255, 255, 0.02); - - display: flex; - flex-direction: column; - flex-wrap: nowrap; - overflow: hidden; - - .Header { - align-self: stretch; - height: 40px; - box-shadow: 0px 2px 15px 0px rgba(0,0,0,0.4); - color: white; - font-weight: 900; - font-size: 18px; - background-color: $darkThemeFirstColor; - + margin-top: auto; + margin-bottom: -22px; + padding: 41px 70px; display: flex; - flex-direction: column; - flex-wrap: nowrap; justify-content: center; - align-items: center; - align-content: center; - } - - .Content { - align-self: stretch; - font-size: 14px; - background-color: $darkThemeSecondColor; - flex: 1; - + background: rgba(255, 255, 255, 0.58); + border-radius: 11.0791px; + max-width: 575.58px; display: flex; flex-direction: column; flex-wrap: nowrap; - justify-content: center; - align-items: center; - align-content: center; - } + overflow: hidden; - .Footer { - padding: 0 40px; - height: 80px; - align-self: stretch; - background-color: $darkThemeSecondColor; - border-top: solid 1px $darkThemeFirstColor; + .Content { + align-self: stretch; + font-size: 14px; + + flex: 1; - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: flex-end; - align-items: center; - align-content: flex-end; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: center; + align-items: center; + align-content: center; + } + + .Footer { + + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-end; + align-items: center; + align-content: flex-end; - .TextButton { - margin-left: 20px; - box-shadow: $secondaryColor 0 0 0 2px inset; // fallback if new css variables are not supported by browser - box-shadow: var(--leading-color) 0 0 0 2px inset; - background-color: $secondaryColor; // fallback if new css variables are not supported by browser - background-color: var(--leading-color); - color: white; // fallback if new css variables are not supported by browser - color: var(--button-text-color); + .TextButton { + margin-left: 20px; + background: #FF7DA9; + border-radius: 9.23261px; + color: #FFFFFF; + font-style: normal; + font-weight: 400; + font-size: 18.4652px; + line-height: 22px; + min-width: 210px; + text-align: center; + padding: 12px; + box-shadow: unset; + border: 1px solid #FF7DA9; + &:hover { + background: #FFFFFF !important; + color: #000000 !important; + border: 1px solid #000000 !important; + } - &:hover { - background-color: transparent; - color: $secondaryColor; // fallback if new css variables are not supported by browser - color: var(--leading-color); - } + &.disabled { + box-shadow: $darkThemeThirdColor 0 0 0 2px inset; + background-color: $darkThemeThirdColor; + cursor: default; + opacity: 0.6; - &.disabled { - box-shadow: $darkThemeThirdColor 0 0 0 2px inset; - background-color: $darkThemeThirdColor; - cursor: default; - opacity: 0.6; + &:hover { + box-shadow: $darkThemeThirdColor 0 0 0 2px inset; + background-color: $darkThemeThirdColor; + color: white; + } + } + } - &:hover { - box-shadow: $darkThemeThirdColor 0 0 0 2px inset; - background-color: $darkThemeThirdColor; - color: white; + .TextButton.reject{ + background: #26D7FF; + border: 1px solid #26D7FF; } - } } - } -} \ No newline at end of file +} diff --git a/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.tsx b/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.tsx index ffae6d7fe..d13aad6be 100644 --- a/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.tsx +++ b/src/views/PopupView/GenericYesNoPopup/GenericYesNoPopup.tsx @@ -40,7 +40,7 @@ export const GenericYesNoPopup: React.FC = ( }, [status]); return ( -
+
{title}
@@ -51,13 +51,13 @@ export const GenericYesNoPopup: React.FC = ( {!skipAcceptButton && } {!skipRejectButton && }
diff --git a/src/views/PopupView/GenericYesNoPopupDraggable/GenericYesNoPopupDraggable.scss b/src/views/PopupView/GenericYesNoPopupDraggable/GenericYesNoPopupDraggable.scss new file mode 100644 index 000000000..2acbd373e --- /dev/null +++ b/src/views/PopupView/GenericYesNoPopupDraggable/GenericYesNoPopupDraggable.scss @@ -0,0 +1,146 @@ +@import '../../../settings/Settings'; + +.GenericYesNoPopupDraggable { + max-height: 800px; + max-width: 700px; + + // width: 50%; + border-radius: 5px; + user-select: none; + box-shadow: 0px 0px 10px 3px rgba(255, 255, 255, 0.02); + + display: flex; + flex-direction: column; + flex-wrap: nowrap; + overflow: hidden; + + .Header { + align-self: stretch; + height: 40px; + box-shadow: 0px 2px 15px 0px rgba(0, 0, 0, 0.4); + color: white; + font-weight: 900; + font-size: 18px; + background-color: $darkThemeFirstColor; + + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: center; + align-items: center; + align-content: center; + } + + .Content { + align-self: stretch; + font-size: 14px; + background-color: $darkThemeSecondColor; + flex: 1; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: center; + align-items: center; + align-content: center; + } + + .Footer { + padding: 0 40px; + height: 80px; + align-self: stretch; + background-color: $darkThemeSecondColor; + border-top: solid 1px $darkThemeFirstColor; + + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-end; + align-items: center; + align-content: flex-end; + + .TextButton { + box-shadow: $secondaryColor 0 0 0 2px inset; // fallback if new css variables are not supported by browser + box-shadow: var(--leading-color) 0 0 0 2px inset; + background-color: $secondaryColor; // fallback if new css variables are not supported by browser + background-color: var(--leading-color); + color: white; // fallback if new css variables are not supported by browser + color: var(--button-text-color); + + &:hover { + background-color: transparent; + color: $secondaryColor; // fallback if new css variables are not supported by browser + color: var(--leading-color); + } + + &.disabled { + box-shadow: $darkThemeThirdColor 0 0 0 2px inset; + background-color: $darkThemeThirdColor; + cursor: default; + opacity: 0.6; + + &:hover { + box-shadow: $darkThemeThirdColor 0 0 0 2px inset; + background-color: $darkThemeThirdColor; + color: white; + } + } + } + } +} + +.flexible-modal { + position: absolute; + z-index: 1; + border: 1px solid #ccc; + background: white; +} +.flexible-modal-mask { + position: fixed; + height: 100%; + background: rgba(0, 0, 0, 0) !important; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +.flexible-modal-resizer { + position: absolute; + right: 0; + bottom: 0; + cursor: se-resize; + margin: 5px; + border-bottom: solid 2px #333; + border-right: solid 2px #333; +} +.flexible-modal-drag-area { + background: rgba(255, 0, 0, 0) !important; + height: 30px; + position: absolute; + right: 0; + top: 0; + cursor: move; +} +.flexible-modal-drag-area-left { + background: rgba(255, 0, 0, 0); + height: 30px; + position: absolute; + right: 0; + top: 0; + cursor: move; +} +.flexible-modal-drag-area-right { + background: rgba(255, 0, 0, 0); + height: 30px; + position: absolute; + right: 0; + top: 0; + cursor: move; +} + +.text-success{ + color: $lightSuccess; +} + +.text-fail{ + color: $dangerColor; +} \ No newline at end of file diff --git a/src/views/PopupView/GenericYesNoPopupDraggable/GenericYesNoPopupDraggable.tsx b/src/views/PopupView/GenericYesNoPopupDraggable/GenericYesNoPopupDraggable.tsx new file mode 100644 index 000000000..9b93153a8 --- /dev/null +++ b/src/views/PopupView/GenericYesNoPopupDraggable/GenericYesNoPopupDraggable.tsx @@ -0,0 +1,76 @@ +import React, {useEffect, useState} from 'react'; +import './GenericYesNoPopupDraggable.scss'; +import {TextButton} from '../../Common/TextButton/TextButton'; +import {ContextManager} from '../../../logic/context/ContextManager'; +import {ContextType} from '../../../data/enums/ContextType'; +import ReactModal from 'react-modal-resizable-draggable'; + +interface IProps { + title: string; + renderContent: () => any; + acceptLabel?: string; + onAccept?: () => any; + skipAcceptButton?: boolean; + disableAcceptButton?: boolean; + rejectLabel?: string; + onReject?: () => any; + skipRejectButton?: boolean; + disableRejectButton?: boolean; +} + +export const GenericYesNoPopupDraggable: React.FC = ({ + title, + renderContent, + acceptLabel, + onAccept, + skipAcceptButton, + disableAcceptButton, + rejectLabel, + onReject, + skipRejectButton, + disableRejectButton +}) => { + const [status, setMountStatus] = useState(false); + useEffect(() => { + if (!status) { + ContextManager.switchCtx(ContextType.POPUP); + setMountStatus(true); + } + + // console.log('viewPortSize = ', window.innerWidth); + }, [status]); + + return ( + console.log('on focused')} + isOpen={true} + isMinimised={false} + onRequestClose={() => console.group('on request close')}> +
{title}
+
{renderContent()}
+
+ {!skipAcceptButton && ( + + )} + {!skipRejectButton && ( + + )} +
+
+ ); +}; diff --git a/src/views/PopupView/ImportLabelPopup/ImportLabelPopup.tsx b/src/views/PopupView/ImportLabelPopup/ImportLabelPopup.tsx index c0fae3d57..02b90d5db 100644 --- a/src/views/PopupView/ImportLabelPopup/ImportLabelPopup.tsx +++ b/src/views/PopupView/ImportLabelPopup/ImportLabelPopup.tsx @@ -1,5 +1,5 @@ -import React, {useState} from 'react' -import './ImportLabelPopup.scss' +import React, {useState} from 'react'; +import './ImportLabelPopup.scss'; import {LabelType} from '../../../data/enums/LabelType'; import {PopupActions} from '../../../logic/actions/PopupActions'; import GenericLabelTypePopup from '../GenericLabelTypePopup/GenericLabelTypePopup'; @@ -10,32 +10,39 @@ import {connect} from 'react-redux'; import {useDropzone} from 'react-dropzone'; import {AcceptedFileType} from '../../../data/enums/AcceptedFileType'; import {ImageData, LabelName} from '../../../store/labels/types'; -import {updateActiveLabelType, updateImageData, updateLabelNames} from '../../../store/labels/actionCreators'; +import { + updateActiveLabelType, + updateImageData, + updateLabelNames +} from '../../../store/labels/actionCreators'; import {ImporterSpecData} from '../../../data/ImporterSpecData'; import {AnnotationFormatType} from '../../../data/enums/AnnotationFormatType'; import {ILabelFormatData} from '../../../interfaces/ILabelFormatData'; interface IProps { - activeLabelType: LabelType, - updateImageDataAction: (imageData: ImageData[]) => any, - updateLabelNamesAction: (labels: LabelName[]) => any, - updateActiveLabelTypeAction: (activeLabelType: LabelType) => any + activeLabelType: LabelType; + updateImageDataAction: (imageData: ImageData[]) => any; + updateLabelNamesAction: (labels: LabelName[]) => any; + updateActiveLabelTypeAction: (activeLabelType: LabelType) => any; } -const ImportLabelPopup: React.FC = ( - { - activeLabelType, - updateImageDataAction, - updateLabelNamesAction, - updateActiveLabelTypeAction - }) => { +const ImportLabelPopup: React.FC = ({ + activeLabelType, + updateImageDataAction, + updateLabelNamesAction, + updateActiveLabelTypeAction +}) => { const resolveFormatType = (labelType: LabelType): AnnotationFormatType => { - const possibleImportFormats = ImportFormatData[labelType] - return possibleImportFormats.length === 1 ? possibleImportFormats[0].type : null - } + const possibleImportFormats = ImportFormatData[labelType]; + return possibleImportFormats.length === 1 + ? possibleImportFormats[0].type + : null; + }; const [labelType, setLabelType] = useState(activeLabelType); - const [formatType, setFormatType] = useState(resolveFormatType(activeLabelType)); + const [formatType, setFormatType] = useState( + resolveFormatType(activeLabelType) + ); const [loadedLabelNames, setLoadedLabelNames] = useState([]); const [loadedImageData, setLoadedImageData] = useState([]); const [annotationsLoadedError, setAnnotationsLoadedError] = useState(null); @@ -44,33 +51,40 @@ const ImportLabelPopup: React.FC = ( accept: [AcceptedFileType.JSON, AcceptedFileType.TEXT], multiple: true, onDrop: (acceptedFiles) => { - const importer = new (ImporterSpecData[formatType])([labelType]) - importer.import(acceptedFiles, onAnnotationLoadSuccess, onAnnotationsLoadFailure); + const importer = new ImporterSpecData[formatType]([labelType]); + importer.import( + acceptedFiles, + onAnnotationLoadSuccess, + onAnnotationsLoadFailure + ); } }); const onLabelTypeChange = (labelType: LabelType) => { setLabelType(labelType); - setFormatType(resolveFormatType(labelType)) + setFormatType(resolveFormatType(labelType)); setLoadedLabelNames([]); setLoadedImageData([]); setAnnotationsLoadedError(null); - } + }; - const onAnnotationLoadSuccess = (imagesData: ImageData[], labelNames: LabelName[]) => { + const onAnnotationLoadSuccess = ( + imagesData: ImageData[], + labelNames: LabelName[] + ) => { setLoadedLabelNames(labelNames); setLoadedImageData(imagesData); setAnnotationsLoadedError(null); - } + }; - const onAnnotationsLoadFailure = (error?:Error) => { + const onAnnotationsLoadFailure = (error?: Error) => { setLoadedLabelNames([]); setLoadedImageData([]); setAnnotationsLoadedError(error); }; const onAccept = (labelType: LabelType) => { - if (loadedLabelNames.length !== 0 && loadedImageData.length !== 0) { + if (loadedImageData.length !== 0) { updateImageDataAction(loadedImageData); updateLabelNamesAction(loadedLabelNames); updateActiveLabelTypeAction(labelType); @@ -84,90 +98,102 @@ const ImportLabelPopup: React.FC = ( const onAnnotationFormatChange = (format: AnnotationFormatType) => { setFormatType(format); - } + }; const getDropZoneContent = () => { if (!!annotationsLoadedError) { - return <> - - {'upload'} -

Annotation import was unsuccessful

- {annotationsLoadedError.message} -

Try again

- ; - } else if (loadedImageData.length !== 0 && loadedLabelNames.length !== 0) { - return <> - {'uploaded'} -

Annotation ready for import

- After import you will lose - all your current annotations - ; + return ( + <> + + {'upload'} +

+ Annotation import was unsuccessful +

+ {annotationsLoadedError.message} +

Try again

+ + ); + } else if (loadedImageData.length !== 0) { + return ( + <> + {'uploaded'} +

Annotation ready for import

+ After import you will lose all your current annotations + + ); } else { - return <> - - {'upload'} -

{`Drop ${formatType} annotations`}

-

or

-

Click here to select them

- ; + return ( + <> + + {'upload'} +

{`Drop ${formatType} annotations`}

+

or

+

Click here to select them

+ + ); } }; const getOptions = (exportFormatData: ILabelFormatData[]) => { return exportFormatData.map((entry: ILabelFormatData) => { - return
onAnnotationFormatChange(entry.type)} - key={entry.type} - > - {entry.type === formatType ? - {'checked'} : - {'unchecked'}} - {entry.label} -
- }) + return ( +
onAnnotationFormatChange(entry.type)} + key={entry.type}> + {entry.type === formatType ? ( + {'checked'} + ) : ( + {'unchecked'} + )} + {entry.label} +
+ ); + }); }; const renderInternalContent = (labelType: LabelType) => { if (!formatType && ImportFormatData[labelType].length !== 0) { return [ -
+
Select file format you would like to use to import labels.
, -
+
{getOptions(ImportFormatData[labelType])}
- ] + ]; } const importFormatData = ImportFormatData[labelType]; - return importFormatData.length === 0 ? - : + return importFormatData.length === 0 ? ( + + ) : (
{getDropZoneContent()}
- } + ); + }; - return( + return ( = ( acceptLabel={'Import'} onAccept={onAccept} skipAcceptButton={ImportFormatData[labelType].length === 0} - disableAcceptButton={loadedImageData.length === 0 || loadedLabelNames.length === 0 || !!annotationsLoadedError} + disableAcceptButton={ + loadedImageData.length === 0 || !!annotationsLoadedError + } rejectLabel={'Cancel'} onReject={onReject} renderInternalContent={renderInternalContent} /> - ) + ); }; const mapDispatchToProps = { @@ -190,10 +218,7 @@ const mapDispatchToProps = { }; const mapStateToProps = (state: AppState) => ({ - activeLabelType: state.labels.activeLabelType, + activeLabelType: state.labels.activeLabelType }); -export default connect( - mapStateToProps, - mapDispatchToProps -)(ImportLabelPopup); +export default connect(mapStateToProps, mapDispatchToProps)(ImportLabelPopup); diff --git a/src/views/PopupView/InsertLabelNamesPopup/InsertLabelNamesPopup.tsx b/src/views/PopupView/InsertLabelNamesPopup/InsertLabelNamesPopup.tsx index e9cf08621..d7ee391d0 100644 --- a/src/views/PopupView/InsertLabelNamesPopup/InsertLabelNamesPopup.tsx +++ b/src/views/PopupView/InsertLabelNamesPopup/InsertLabelNamesPopup.tsx @@ -256,6 +256,7 @@ const InsertLabelNamesPopup: React.FC = ( }; return ( +
= ( onAccept={isUpdate ? safeOnUpdateAcceptCallback : safeOnCreateAcceptCallback} rejectLabel={isUpdate ? 'Cancel' : 'Load labels from file'} onReject={isUpdate ? onUpdateRejectCallback : onCreateRejectCallback} - />) + + /> +
+ ) + }; const mapDispatchToProps = { diff --git a/src/views/PopupView/LabelInfoPopup/LabelInfoPopup.scss b/src/views/PopupView/LabelInfoPopup/LabelInfoPopup.scss new file mode 100644 index 000000000..59b67eab7 --- /dev/null +++ b/src/views/PopupView/LabelInfoPopup/LabelInfoPopup.scss @@ -0,0 +1,75 @@ +@import '../../../settings/Settings'; + +.LabelInfoPopupContent { + align-self: stretch; + flex: 1; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + align-content: flex-start; + min-height: 300px; + max-height: 650px; + overflow-y: auto; +} + +.AttributeContainer { + display: flex; + align-self: stretch; + max-height: 5em; + flex-direction: row; +} + +.AttributeName { + display: flex; + flex: 1; + align-self: stretch; + color: white; + font-size: 15px; + padding: 0 40px 30px 40px; + border-bottom: solid 1px $darkThemeFirstColor; +} + +@mixin score($isFlag) { + font-size: 15px; + @if ($isFlag) { + color: red; + } @else { + color: green; + } +} +.AttributeScore { + @include score($isFlag: false); +} +.AttributeScoreFlag{ + @include score($isFlag: true); +} + +.AttributeSelector { + display: flex; + flex: 2; + align-self: stretch; + flex-wrap: wrap; + max-height: 28px; + .title { + color: white; + } +} +.SampleImage { + position: absolute; + bottom: 1em; + left: 1em; + max-width: 230px; + max-height: 230px; +} +.IconItem { + display: flex; + flex: 1; + // justify-content: center; + align-items: center; + + .ItemTitle { + margin-left: 1em; + } +} diff --git a/src/views/PopupView/LabelInfoPopup/LabelInfoPopup.tsx b/src/views/PopupView/LabelInfoPopup/LabelInfoPopup.tsx new file mode 100644 index 000000000..7668c5ac8 --- /dev/null +++ b/src/views/PopupView/LabelInfoPopup/LabelInfoPopup.tsx @@ -0,0 +1,551 @@ +/* eslint-disable jsx-a11y/alt-text */ +import React, {useEffect, useState} from 'react'; +import './LabelInfoPopup.scss'; +import {AppState} from '../../../store'; +import {connect} from 'react-redux'; +import {HumanInfo, ImageData, ItemInfo} from '../../../store/labels/types'; +import {GenericYesNoPopup} from '../GenericYesNoPopup/GenericYesNoPopup'; +import {updateActivePopupType} from '../../../store/general/actionCreators'; +import {PopupWindowType} from '../../../data/enums/PopupWindowType'; +import {LabelsSelector} from '../../../store/selectors/LabelsSelector'; +import {TagButton} from '../../Common/TagButton/TagButton'; +import { + ATTRIBUTE_TYPE, + FASHION_STYLE, + FASHION_STYLE_MAN, + FASHION_STYLE_WOMAN, + GENDER, + ITEM_COLOR, + ITEM_PATTERN, + MAIN_CATEGORY_CODE, + SOURCE, + SUB_CATEGORY_CODE, + SUB_CATEGORY_TO_MAIN +} from '../../../data/enums/ItemType'; +import {LabelModeType} from '../../../data/enums/LabelType'; +import {AttributeSelect} from '../../Common/AttributeSelect/AttributeSelect'; +import _ from 'lodash'; +import { + updateActiveColor, + updateActiveGender, + updateActiveHumanID, + updateActiveHumanType, + updateActiveMainCategory, + updateActivePattern, + updateActiveStyles, + updateActiveSubCategory, + updateImageDataById +} from '../../../store/labels/actionCreators'; + +import {vi as lang} from '../../../lang'; +import {GenericYesNoPopupDraggable} from '../GenericYesNoPopupDraggable/GenericYesNoPopupDraggable'; +import {JSONUploadStatus} from '../../../data/enums/JSONUploadStatus'; +import {Settings} from '../../../settings/Settings'; +import { FlagIcon } from 'assets/icons'; +import { AISelector } from 'store/selectors/AISelector'; + +interface IProps { + labelRectId: string; + imageData: ImageData; + updateActivePopupTypeAction: (popupType: PopupWindowType) => any; + updateImageDataByIdAction: (id: string, newImageData: ImageData) => any; + updateActiveGenderAction: (gender: number) => any; + updateActiveHumanTypeAction: (humanType: number) => any; + updateActiveStylesAction: (styles: string[]) => any; + updateActiveHumanIDAction: (humanId: string) => any; + updateActiveMainCategoryAction: (mainCategory: number) => any; + updateActiveSubCategoryAction: (subCategory: number) => any; + updateActiveColorAction: (color: number) => any; + updateActivePatternAction: (pattern: number) => any; +} + +interface ISelectedItem { + [key: string]: any; +} + +const LabelInfoPopup: React.FC = ({ + labelRectId, + imageData, + updateActivePopupTypeAction, + updateImageDataByIdAction, + updateActiveGenderAction, + updateActiveHumanTypeAction, + updateActiveStylesAction, + updateActiveHumanIDAction, + updateActiveMainCategoryAction, + updateActiveSubCategoryAction, + updateActiveColorAction, + updateActivePatternAction +}) => { + const labelRect = LabelsSelector.getActiveRectLabel(); + const {id, mode} = labelRect; + const [humanInfo, setHumanInfo] = useState(); + const [itemInfo, setItemInfo] = useState(); + const [selectedItems, setSelectedItems] = useState({}); + const [gender, setGender] = useState(); + const [image, setImage] = useState(); + const [isFollowHumanSetting, setFollowHumanSetting] = useState(false); + + const criteria = AISelector.getScoreCriteria(); + + useEffect(() => { + if (mode === LabelModeType.HUMAN) { + const found = _.find(imageData.humans, {uuid: id}); + const foundGender = gender ? gender : found?.gender; + const genderStyles = + foundGender === GENDER.MAN + ? FASHION_STYLE_MAN + : FASHION_STYLE_WOMAN; + setHumanInfo(found); + setSelectedItems({ + [ATTRIBUTE_TYPE.SOURCE]: found.type, + [ATTRIBUTE_TYPE.GENDER]: foundGender, + [ATTRIBUTE_TYPE.GENDER_SCORE]: found.genderScore, + [ATTRIBUTE_TYPE.STYLE_SCORE]: found.styleScore?.length > 0 ? found.styleScore[0].score : null, + [ATTRIBUTE_TYPE.FASHION_STYLE]: + found.styles.length > 0 + ? genderStyles.filter((style) => + found.styles.includes(style.name.toUpperCase()) + ) + : genderStyles.filter((style) => + imageData.guideStyles + .map((gs) => parseInt(gs.seq)) + .includes(style.seq) + ) + }); + } else { + const found = _.find(imageData.items, {uuid: id}); + setItemInfo(found); + const foundHuman = imageData.humans.find( + (human) => human.uuid === found.humanId + ); + setHumanInfo(foundHuman ? foundHuman : null); + const foundGender = gender + ? gender + : foundHuman?.gender + ? foundHuman.gender + : found?.gender; + + const genderStyles = + foundGender === GENDER.MAN + ? FASHION_STYLE_MAN + : FASHION_STYLE_WOMAN; + + setSelectedItems({ + [ATTRIBUTE_TYPE.HUMAN_ID]: found.humanId, + [ATTRIBUTE_TYPE.GENDER]: foundGender, + [ATTRIBUTE_TYPE.MAIN_CATEGORY]: found.mainCategory, + [ATTRIBUTE_TYPE.SUB_CATEGORY]: found.subCategory, + [ATTRIBUTE_TYPE.ITEM_COLOR]: found.color, + [ATTRIBUTE_TYPE.ITEM_PATTERN]: found.pattern, + [ATTRIBUTE_TYPE.FASHION_STYLE]: + (foundHuman ? foundHuman : found).styles.length > 0 + ? genderStyles.filter((style) => + found.styles.includes(style.name.toUpperCase()) + ) + : genderStyles.filter((style) => + imageData.guideStyles + .map((gs) => parseInt(gs.seq)) + .includes(style.seq) + ), + [ATTRIBUTE_TYPE.ITEM_SCORE]: found.itemScore, + [ATTRIBUTE_TYPE.COLOR_SCORE]: found.colorScore, + [ATTRIBUTE_TYPE.PATTERN_SCORE]: found.patternScore + }); + } + + return () => { + // nothing + }; + }, [mode, gender]); + + useEffect(() => { + console.log('humanInfo = ', humanInfo); + setFollowHumanSetting(Boolean(humanInfo)); + }, [humanInfo]); + + const onSelect = (item: any, type: ATTRIBUTE_TYPE) => { + // const imageURL = item.label?.props?.children[0]?.props?.src; + setImage(null); + + switch (type) { + case ATTRIBUTE_TYPE.HUMAN_ID: { + const human = imageData.humans.find( + (human) => human.uuid === item + ); + + let composedGender; + let selectiveStyles; + + if (item === '-1' || !human) { + setHumanInfo(null); + composedGender = LabelsSelector.getActiveGender(); + selectiveStyles = LabelsSelector.getActiveStyles(); + } else { + setHumanInfo(human); + composedGender = human.gender; + selectiveStyles = human.styles; + } + + const genderStyles = + composedGender === GENDER.MAN + ? FASHION_STYLE_MAN + : FASHION_STYLE_WOMAN; + + const composedStyles = + selectiveStyles.length > 0 + ? genderStyles.filter((style) => + selectiveStyles.includes(style.name.toUpperCase()) + ) + : genderStyles.filter((style) => + imageData.guideStyles + .map((gs) => parseInt(gs.seq)) + .includes(style.seq) + ); + + setSelectedItems({ + ...selectedItems, + [type]: item, + [ATTRIBUTE_TYPE.GENDER]: composedGender, + [ATTRIBUTE_TYPE.FASHION_STYLE]: composedStyles + }); + break; + } + case ATTRIBUTE_TYPE.GENDER: { + setGender(item); + setSelectedItems({...selectedItems, [type]: item}); + break; + } + case ATTRIBUTE_TYPE.MAIN_CATEGORY: { + setSelectedItems({ + ...selectedItems, + [ATTRIBUTE_TYPE.MAIN_CATEGORY]: item, + [ATTRIBUTE_TYPE.SUB_CATEGORY]: SUB_CATEGORY_CODE.UNKNOWN + }); + break; + } + case ATTRIBUTE_TYPE.SUB_CATEGORY: { + setSelectedItems({ + ...selectedItems, + [ATTRIBUTE_TYPE.SUB_CATEGORY]: item + }); + break; + } + default: { + setSelectedItems({...selectedItems, [type]: item}); + } + } + }; + + const save = () => { + if (selectedItems[ATTRIBUTE_TYPE.FASHION_STYLE]?.length !== 1) { + alert(lang.ALERT.SELECT_ONE_STYLE); + return; + } + imageData.uploadStatus = JSONUploadStatus.NEED_UPLOAD; + + if (mode === LabelModeType.HUMAN) { + const updatedHumanInfo = { + ...humanInfo, + gender: selectedItems[ATTRIBUTE_TYPE.GENDER], + type: selectedItems[ATTRIBUTE_TYPE.SOURCE], + styles: selectedItems[ATTRIBUTE_TYPE.FASHION_STYLE].map( + (style) => style.name.toUpperCase() + ) + }; + // update active* + updateActiveGenderAction(updatedHumanInfo.gender); + updateActiveHumanTypeAction(updatedHumanInfo.type); + updateActiveStylesAction(updatedHumanInfo.styles); + + // update imageData + imageData.humans = imageData.humans.map((human) => + human.uuid === humanInfo.uuid ? updatedHumanInfo : human + ); + // console.log('next = ', updatedHumanInfo, imageData); + updateImageDataByIdAction(imageData.id, imageData); + } + if (mode === LabelModeType.ITEM) { + // console.log('selectedItems', selectedItems); + const updateItemInfo: ItemInfo = { + ...itemInfo, + humanId: selectedItems[ATTRIBUTE_TYPE.HUMAN_ID], + gender: selectedItems[ATTRIBUTE_TYPE.GENDER], + mainCategory: selectedItems[ATTRIBUTE_TYPE.MAIN_CATEGORY], + subCategory: selectedItems[ATTRIBUTE_TYPE.SUB_CATEGORY], + color: selectedItems[ATTRIBUTE_TYPE.ITEM_COLOR], + pattern: selectedItems[ATTRIBUTE_TYPE.ITEM_PATTERN], + styles: selectedItems[ATTRIBUTE_TYPE.FASHION_STYLE].map( + (style) => style.name.toUpperCase() + ) + }; + + // update active* + updateActiveGenderAction(updateItemInfo.gender); + updateActiveMainCategoryAction(updateItemInfo.mainCategory); + updateActiveSubCategoryAction(updateItemInfo.subCategory); + updateActiveColorAction(updateItemInfo.color); + updateActivePatternAction(updateItemInfo.pattern); + updateActiveStylesAction(updateItemInfo.styles); + updateActiveHumanIDAction(updateItemInfo.humanId); + + // update imageData + imageData.items = imageData.items.map((item) => + item.uuid === itemInfo.uuid ? updateItemInfo : item + ); + updateImageDataByIdAction(imageData.id, imageData); + } + updateActivePopupTypeAction(null); + }; + + const AttributeNameWithScore = ({title, score, criteria}:{title: string, score: number | null, criteria: number}) => +
+
+
{title}
+ { + score && criteria + ? + score > criteria + ?
+ {score} +
+ :
+ + {score} +
+ : null + } +
+
+ + const renderComment = () =>{ + const {qc_comment, qc_status} = itemInfo || humanInfo + + if(qc_comment) { + return ( +
+
{qc_comment}
+
+ ) + } + return null + } + + const renderContent = () => { + // console.log('humanInfo', humanInfo); + // console.log('itemInfo', itemInfo); + // console.log('selectedItems', selectedItems); + if (!humanInfo && !itemInfo) { + return null; + } + console.log('follow? ', isFollowHumanSetting); + return mode === LabelModeType.HUMAN ? ( +
+ {renderComment()} +
+ +
+ +
+
+
+
Human type
+
+ +
+
+
+ +
+ +
+
+ {image ? ( +
+ +
+ ) : null} + +
+ ) : ( +
+ {renderComment()} +
+
Item UUID
+
+
{labelRectId}
+
+
+ +
+
Linked Human ID
+
+ +
+
+
+
Gender
+
+ +
+
+
+ + +
+ +
+
+
+
+ +
+ +
+
+
+ 0 + ? parseFloat(selectedItems[ATTRIBUTE_TYPE.COLOR_SCORE][0].score) + : null} + criteria={criteria.color} /> +
+ +
+
+
+ 0 + ? parseFloat(selectedItems[ATTRIBUTE_TYPE.PATTERN_SCORE][0].score) + : null} + criteria={criteria.pattern} /> +
+ +
+
+ +
+
Styles
+
+ +
+
+ {image ? ( +
+ +
+ ) : null} + +
+ ); + }; + + return ( + updateActivePopupTypeAction(null)} + /> + ); +}; + +const mapDispatchToProps = { + updateActivePopupTypeAction: updateActivePopupType, + updateImageDataByIdAction: updateImageDataById, + updateActiveGenderAction: updateActiveGender, + updateActiveHumanTypeAction: updateActiveHumanType, + updateActiveStylesAction: updateActiveStyles, + updateActiveHumanIDAction: updateActiveHumanID, + updateActiveMainCategoryAction: updateActiveMainCategory, + updateActiveSubCategoryAction: updateActiveSubCategory, + updateActiveColorAction: updateActiveColor, + updateActivePatternAction: updateActivePattern +}; + +const mapStateToProps = (state: AppState) => ({ + imageData: state.labels.imagesData[state.labels.activeImageIndex], + labelRectId: state.labels.activeLabelId +}); + +export default connect(mapStateToProps, mapDispatchToProps)(LabelInfoPopup); diff --git a/src/views/PopupView/LoadLabelNamesPopup/LoadLabelNamesPopup.tsx b/src/views/PopupView/LoadLabelNamesPopup/LoadLabelNamesPopup.tsx index 6810ccaa5..3a5567071 100644 --- a/src/views/PopupView/LoadLabelNamesPopup/LoadLabelNamesPopup.tsx +++ b/src/views/PopupView/LoadLabelNamesPopup/LoadLabelNamesPopup.tsx @@ -107,6 +107,7 @@ const LoadLabelNamesPopup: React.FC = ({updateActivePopupType, updateLab }; return( +
= ({updateActivePopupType, updateLab rejectLabel={"Create labels list"} onReject={onReject} /> +
); }; diff --git a/src/views/PopupView/LoadModelPopup/LoadModelPopup.tsx b/src/views/PopupView/LoadModelPopup/LoadModelPopup.tsx index 71d62e466..fb2877a73 100644 --- a/src/views/PopupView/LoadModelPopup/LoadModelPopup.tsx +++ b/src/views/PopupView/LoadModelPopup/LoadModelPopup.tsx @@ -124,6 +124,7 @@ export const LoadModelPopup: React.FC = () => { }; return ( +
{ onReject={onReject} disableRejectButton={modelIsLoadingStatus} /> +
); }; \ No newline at end of file diff --git a/src/views/PopupView/LoadMoreImagesPopup/LoadMoreImagesPopup.tsx b/src/views/PopupView/LoadMoreImagesPopup/LoadMoreImagesPopup.tsx index d9273ea2a..b1cbfbe98 100644 --- a/src/views/PopupView/LoadMoreImagesPopup/LoadMoreImagesPopup.tsx +++ b/src/views/PopupView/LoadMoreImagesPopup/LoadMoreImagesPopup.tsx @@ -73,6 +73,7 @@ const LoadMoreImagesPopup: React.FC = ({addImageData}) => { }; return( +
= ({addImageData}) => { rejectLabel={"Cancel"} onReject={onReject} /> +
); }; diff --git a/src/views/PopupView/LoginPopup/LoginPopup.scss b/src/views/PopupView/LoginPopup/LoginPopup.scss new file mode 100644 index 000000000..ed89153da --- /dev/null +++ b/src/views/PopupView/LoginPopup/LoginPopup.scss @@ -0,0 +1,111 @@ +@import '../../../settings//Settings'; +@keyframes mymove { + from { left: 0px; opacity: 0.8; } + to { right: 0px; } + } +.LoginPopupContent { + align-self: stretch; + flex: 1; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + align-content: flex-start; + min-height: 100px; + width: 100%; + &__row{ + display: flex; + width: 100%; + } + &__parent{ + position: relative; + } + &__move{ + position: absolute; + top: 0px; + right: 0px; + animation: mymove 1s ease-in; + z-index: 100; + + } + &__icon{ + position: absolute; + top: 22px; + left: 20px; + z-index: 100; + } + .MuiInputBase-input { + background: #FFFF; + border-radius: 9.73271px; + height: 65px ; + max-height: 65px; + width: 100%; + padding: 0px 50px; + color: #000000 !important; + &::placeholder{ + color: #BABABA; + font-weight: 400; + font-size: 14.5991px; + line-height: 18px; + } + } + .MuiInput-underline{ + &::after{ + display: none !important; + } + &::before{ + display: none !important; + } + } + + &__label{ + font-style: normal; + font-weight: 400; + font-size: 16.2212px; + line-height: 20px; + color: #000000; + margin-bottom: 12px; + + } + &__control{ + &__second{ + margin-left: 5px; + width: 100%; + } + &__first{ + margin-right: 5px; + width: 100%; + } + } + &__select{ + width: 100%; + .MuiSelect-select{ + display: flex; + align-items: center; + } + } +} + +.LoginPopupInputContainer { + width: 100%; + padding-bottom: 25px; + +} + +.LoginPopupInput { + color: white; +} +.LoginPopupMessage { + color: white; +} + +.LoginPopupInputName { + display: flex; + flex: 1; + align-self: stretch; + color: white; + font-size: 15px; + padding: 0 40px 30px 40px; + border-bottom: solid 1px $darkThemeFirstColor; +} diff --git a/src/views/PopupView/LoginPopup/LoginPopup.tsx b/src/views/PopupView/LoginPopup/LoginPopup.tsx new file mode 100644 index 000000000..93fb37413 --- /dev/null +++ b/src/views/PopupView/LoginPopup/LoginPopup.tsx @@ -0,0 +1,136 @@ +import React, {useEffect, useState} from 'react'; +import './LoginPopup.scss'; +import {Input} from '@material-ui/core'; +import {connect} from 'react-redux'; +import {AppState} from '../../../store'; +import {updateAuthData} from '../../../store/auth/actionCreators'; +import {updateActivePopupType} from '../../../store/general/actionCreators'; +import {GenericYesNoPopup} from '../GenericYesNoPopup/GenericYesNoPopup'; +import {AuthData} from '../../../store/auth/types'; +import {ClipLoader} from 'react-spinners'; +import {CSSHelper} from '../../../logic/helpers/CSSHelper'; +import {APIService} from '../../../services/API'; +import {PopupWindowType} from '../../../data/enums/PopupWindowType'; +import WrapperLogin from "../../../components/WrapperLogin/index" +import {CodiconAccount, Eye, MoveIcon} from "../../../assets/icons" + +interface IProps { + updateAuthDataAction: (authData: AuthData) => any; + updateActivePopupTypeAction: (type: PopupWindowType) => any; +} + +const LoginPopup: React.FC = ({ + updateAuthDataAction, + updateActivePopupTypeAction +}) => { + const [isLoadingStatus, setIsLoadingStatus] = useState(false); + const [email, setEmail] = useState(); + const [password, setPassword] = useState(); + const [message, setMessage] = useState(); + + useEffect(() => { + setMessage(''); + + return () => { + // do nothing + }; + }, [email, password]); + + const renderContent = () => ( +
+
+ +
+ + setEmail(e.target.value)} + inputProps={{style: {color: 'white'}}} + /> +
+
+
+ +
+ + + setPassword(e.target.value)} + /> +
+
+
+ {isLoadingStatus ? ( + + ) : ( + message + )} +
+
+ ); + + const doLogin = async () => { + try { + setIsLoadingStatus(true); + const {data} = await APIService.login({email, password}); + // console.log('result.data', data); + if (data.code === 200) { + const {displayName, role, token: authToken} = data.data; + updateAuthDataAction({ + email, + displayName, + authToken, + role + }); + window.localStorage.setItem( + '@@auth', + JSON.stringify({email, displayName, authToken, role}) + ); + setTimeout(() => { + window.location.href = `${process.env.REACT_APP_API_ROOT || "/labeler"}` + }, 1000) + } else if (data.errors) { + setMessage(data.errors.map((error) => error.error['en']).join('\n')); + } + } catch (error) { + console.error('failed to login: ', error); + } finally { + setIsLoadingStatus(false); + } + }; + + return ( +
+ + alert('Login required!')} + /> + +
+ ); +}; + +const mapDispatchToProps = { + updateAuthDataAction: updateAuthData, + updateActivePopupTypeAction: updateActivePopupType +}; + +const mapStateToProps = (state: AppState) => ({ + authData: state.auth.authData +}); + +export default connect(mapStateToProps, mapDispatchToProps)(LoginPopup); diff --git a/src/views/PopupView/LogoutPopup/LogoutPopup.scss b/src/views/PopupView/LogoutPopup/LogoutPopup.scss new file mode 100644 index 000000000..508544df1 --- /dev/null +++ b/src/views/PopupView/LogoutPopup/LogoutPopup.scss @@ -0,0 +1,20 @@ +@import '../../../settings/Settings'; + +.LogoutPopupContent { + align-self: stretch; + flex: 1; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + align-content: flex-start; + padding-top: 30px; + + .Message { + align-self: stretch; + color: white; + font-size: 15px; + padding: 0 40px 30px 40px; + } +} diff --git a/src/views/PopupView/LogoutPopup/LogoutPopup.tsx b/src/views/PopupView/LogoutPopup/LogoutPopup.tsx new file mode 100644 index 000000000..f20fc4872 --- /dev/null +++ b/src/views/PopupView/LogoutPopup/LogoutPopup.tsx @@ -0,0 +1,105 @@ +import React from 'react'; +import './LogoutPopup.scss'; +import {GenericYesNoPopup} from '../GenericYesNoPopup/GenericYesNoPopup'; +import { + updateActiveImageIndex, + updateActiveLabelNameId, + updateFirstLabelCreatedFlag, + updateImageData, + updateLabelNames +} from '../../../store/labels/actionCreators'; +import {AppState} from '../../../store'; +import {connect} from 'react-redux'; +import {ImageData, LabelName} from '../../../store/labels/types'; +import {PopupActions} from '../../../logic/actions/PopupActions'; +import {ProjectData} from '../../../store/general/types'; +import { + updateActivePopupType, + updateProjectData +} from '../../../store/general/actionCreators'; +import {updateAuthData} from '../../../store/auth/actionCreators'; +import {AuthData} from '../../../store/auth/types'; +import {PopupWindowType} from '../../../data/enums/PopupWindowType'; +import WrapperLogin from "../../../components/WrapperLogin/index" +interface IProps { + updateActiveImageIndex: (activeImageIndex: number) => any; + updateActiveLabelNameId: (activeLabelId: string) => any; + updateLabelNames: (labelNames: LabelName[]) => any; + updateImageData: (imageData: ImageData[]) => any; + updateFirstLabelCreatedFlag: (firstLabelCreatedFlag: boolean) => any; + updateProjectData: (projectData: ProjectData) => any; + updateAuthDataAction: (authData: AuthData) => any; + updateActivePopupType: (type: PopupWindowType) => any; +} + +const LogoutPopup: React.FC = (props) => { + const { + updateActiveLabelNameId, + updateLabelNames, + updateActiveImageIndex, + updateImageData, + updateFirstLabelCreatedFlag, + updateProjectData, + updateAuthDataAction + } = props; + + const renderContent = () => { + return ( +
+
+ Are you sure you want to logout? You will permanently lose + all your progress. +
+
+ ); + }; + + const onAccept = () => { + updateAuthDataAction({ + email: null, + displayName: null, + authToken: null, + role: null + }); + window.localStorage.removeItem('@@auth'); + updateActiveLabelNameId(null); + updateLabelNames([]); + updateProjectData({type: null, name: 'my-project-name'}); + updateActiveImageIndex(null); + updateImageData([]); + updateFirstLabelCreatedFlag(false); + PopupActions.close(); + }; + + const onReject = () => { + PopupActions.close(); + }; + + return ( +
+ +
+ ); +}; + +const mapDispatchToProps = { + updateActiveLabelNameId, + updateLabelNames, + updateProjectData, + updateActiveImageIndex, + updateImageData, + updateFirstLabelCreatedFlag, + updateAuthDataAction: updateAuthData, + updateActivePopupType +}; + +const mapStateToProps = (state: AppState) => ({}); + +export default connect(mapStateToProps, mapDispatchToProps)(LogoutPopup); diff --git a/src/views/PopupView/PerformancePopup/PerformancePopup.scss b/src/views/PopupView/PerformancePopup/PerformancePopup.scss new file mode 100644 index 000000000..de22356b3 --- /dev/null +++ b/src/views/PopupView/PerformancePopup/PerformancePopup.scss @@ -0,0 +1,33 @@ +@import '../../../settings/Settings'; + +.PerformancePopupContent { + display: flex; + padding: 10px; + color: white; + width: 100%; + justify-content: flex-start; + flex-direction: column; + overflow: auto; +} + +table { + width: 100%; +} + +th { + background-color: rgba($color: yellow, $alpha: 0.7); + color: $darkThemeFirstColor; + border: 1px solid $darkThemeFirstColor; + text-align: center; +} +tr, +td { + border: 1px solid lightgray; + text-align: center; +} + +.Title { + text-align: center; + font-size: 1.5em; + font-weight: bold; +} diff --git a/src/views/PopupView/PerformancePopup/PerformancePopup.tsx b/src/views/PopupView/PerformancePopup/PerformancePopup.tsx new file mode 100644 index 000000000..3c3bcdc83 --- /dev/null +++ b/src/views/PopupView/PerformancePopup/PerformancePopup.tsx @@ -0,0 +1,170 @@ +import {PopupWindowType} from 'data/enums/PopupWindowType'; +import React, {useEffect} from 'react'; +import {connect} from 'react-redux'; +import {APIService} from 'services/API'; +import {AppState} from 'store'; +import {updateActivePopupType} from 'store/general/actionCreators'; +import { + updateCommonSummary, + updateTasks +} from 'store/performance/actionCreators'; +import {CommonSummary, Task} from 'store/performance/types'; +import {GenericYesNoPopupDraggable} from '../GenericYesNoPopupDraggable/GenericYesNoPopupDraggable'; +import './PerformancePopup.scss'; + +interface IProps { + tasks: Task[]; + commonSummary: CommonSummary; + updateTasksDataAction: (data: Task[]) => any; + updateActivePopupTypeAction: (popupType: PopupWindowType) => any; + updateCommonSummaryAction: (data: CommonSummary) => any; +} + +const PerformancePopup: React.FC = ({ + tasks, + commonSummary, + updateTasksDataAction, + updateActivePopupTypeAction, + updateCommonSummaryAction +}) => { + useEffect(() => { + loadTasks(); + loadSummary(); + }, []); + + const loadTasks = async () => { + try { + const {data} = await APIService.getTasks(); + updateTasksDataAction(data.tasks); + } catch (error) { + console.error('failed to loadTasks: ', error); + } + }; + + const loadSummary = async () => { + try { + const {data} = await APIService.getSummary(); + const { + total_images: total, + labeled_images: labeled, + unchecked_images: unchecked, + waiting_qc_images: waitingQC, + passed_images: passed, + rejected_images: rejected + } = data.data; + + const commonSummary: CommonSummary = { + images: { + total, + labeled, + unchecked, + waitingQC, + passed, + rejected + } + }; + updateCommonSummaryAction(commonSummary); + } catch (error) { + console.error('failed to loadSummary: ', error); + } + }; + + const renderContent = () => { + const { + images: {total, labeled, unchecked, waitingQC, passed, rejected} + } = commonSummary; + + return ( +
+
+
Tasks
+ + + + + + + + + + + + + + + + + + {tasks.map((task, index) => ( + + + + + + + + + + ))} + +
Display NameImagesLabels
8H1HMin8H1HMin
{task.name}{task.imagesTPD}{task.imagesTPH}{task.averageTimePerImage}{task.labeledTPD}{task.labeledTPH}{task.averageTimePerLabeled}
+
+ Summary +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Number of Images
totallabeleduncheckedwaitingQCpassedrejected
{total}{labeled}{unchecked}{waitingQC}{passed}{rejected}
+
+
+ ); + }; + + return ( + { + loadTasks(); + loadSummary(); + }} + rejectLabel="Close" + onReject={() => updateActivePopupTypeAction(null)} + /> + ); +}; + +const mapDispatchToProps = { + updateActivePopupTypeAction: updateActivePopupType, + updateTasksDataAction: updateTasks, + updateCommonSummaryAction: updateCommonSummary +}; + +const mapStateToProps = (state: AppState) => ({ + tasks: state.performance.tasks, + commonSummary: state.performance.commonSummary +}); + +export default connect(mapStateToProps, mapDispatchToProps)(PerformancePopup); diff --git a/src/views/PopupView/PopupView.tsx b/src/views/PopupView/PopupView.tsx index 700b47b55..076b78cd9 100644 --- a/src/views/PopupView/PopupView.tsx +++ b/src/views/PopupView/PopupView.tsx @@ -1,27 +1,35 @@ import React from 'react'; import './PopupView.scss'; -import { PopupWindowType } from "../../data/enums/PopupWindowType"; -import { AppState } from "../../store"; -import { connect } from "react-redux"; -import LoadLabelsPopup from "./LoadLabelNamesPopup/LoadLabelNamesPopup"; -import InsertLabelNamesPopup from "./InsertLabelNamesPopup/InsertLabelNamesPopup"; -import ExitProjectPopup from "./ExitProjectPopup/ExitProjectPopup"; -import LoadMoreImagesPopup from "./LoadMoreImagesPopup/LoadMoreImagesPopup"; -import { LoadModelPopup } from "./LoadModelPopup/LoadModelPopup"; -import SuggestLabelNamesPopup from "./SuggestLabelNamesPopup/SuggestLabelNamesPopup"; -import { CSSHelper } from "../../logic/helpers/CSSHelper"; -import { ClipLoader } from "react-spinners"; -import ImportLabelPopup from "./ImportLabelPopup/ImportLabelPopup"; -import ExportLabelPopup from "./ExportLabelsPopup/ExportLabelPopup"; +import {PopupWindowType} from '../../data/enums/PopupWindowType'; +import {AppState} from '../../store'; +import {connect} from 'react-redux'; +import LoadLabelsPopup from './LoadLabelNamesPopup/LoadLabelNamesPopup'; +import InsertLabelNamesPopup from './InsertLabelNamesPopup/InsertLabelNamesPopup'; +import ExitProjectPopup from './ExitProjectPopup/ExitProjectPopup'; +import LoadMoreImagesPopup from './LoadMoreImagesPopup/LoadMoreImagesPopup'; +import {LoadModelPopup} from './LoadModelPopup/LoadModelPopup'; +import SuggestLabelNamesPopup from './SuggestLabelNamesPopup/SuggestLabelNamesPopup'; +import {CSSHelper} from '../../logic/helpers/CSSHelper'; +import {ClipLoader} from 'react-spinners'; +import ImportLabelPopup from './ImportLabelPopup/ImportLabelPopup'; +import ExportLabelPopup from './ExportLabelsPopup/ExportLabelPopup'; +import LabelInfoPopup from './LabelInfoPopup/LabelInfoPopup'; +import LoginPopup from './LoginPopup/LoginPopup'; +import LogoutPopup from './LogoutPopup/LogoutPopup'; +import DeleteConfirmPopup from './DeleteConfirmPopup/DeleteConfirmPopup'; +import PerformancePopup from './PerformancePopup/PerformancePopup'; interface IProps { activePopupType: PopupWindowType; } -const PopupView: React.FC = ({ activePopupType }) => { - +const PopupView: React.FC = ({activePopupType}) => { const selectPopup = () => { switch (activePopupType) { + case PopupWindowType.LOGIN: + return ; + case PopupWindowType.LOGOUT: + return ; case PopupWindowType.LOAD_LABEL_NAMES: return ; case PopupWindowType.EXPORT_ANNOTATIONS: @@ -29,13 +37,11 @@ const PopupView: React.FC = ({ activePopupType }) => { case PopupWindowType.IMPORT_ANNOTATIONS: return ; case PopupWindowType.INSERT_LABEL_NAMES: - return ; + return ; case PopupWindowType.UPDATE_LABEL: - return ; + return ; + case PopupWindowType.LABEL_INFO: + return ; case PopupWindowType.EXIT_PROJECT: return ; case PopupWindowType.IMPORT_IMAGES: @@ -44,28 +50,28 @@ const PopupView: React.FC = ({ activePopupType }) => { return ; case PopupWindowType.SUGGEST_LABEL_NAMES: return ; + case PopupWindowType.DELETE_CONFIRM: + return ; case PopupWindowType.LOADER: - return ; + return ( + + ); + case PopupWindowType.PERFORMANCE: + return ; default: - return null; + return ; } }; - return ( - activePopupType &&
- {selectPopup()} -
- ); + return activePopupType &&
{selectPopup()}
; }; const mapStateToProps = (state: AppState) => ({ activePopupType: state.general.activePopupType }); -export default connect( - mapStateToProps -)(PopupView); \ No newline at end of file +export default connect(mapStateToProps)(PopupView); diff --git a/src/views/PopupView/SuggestLabelNamesPopup/SuggestLabelNamesPopup.tsx b/src/views/PopupView/SuggestLabelNamesPopup/SuggestLabelNamesPopup.tsx index faeb566bf..46e73a841 100644 --- a/src/views/PopupView/SuggestLabelNamesPopup/SuggestLabelNamesPopup.tsx +++ b/src/views/PopupView/SuggestLabelNamesPopup/SuggestLabelNamesPopup.tsx @@ -185,6 +185,7 @@ const SuggestLabelNamesPopup: React.FC = ( }; return( +
= ( rejectLabel={'Reject'} onReject={onReject} /> +
); }; diff --git a/tsconfig.json b/tsconfig.json index d082ce909..b1b7e0874 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "target": "es5", + "target": "ES6", + "baseUrl": "src", "downlevelIteration": true, "lib": [ "dom", @@ -28,6 +29,6 @@ "noFallthroughCasesInSwitch": true }, "include": [ - "src" + "src", ] -} +} \ No newline at end of file diff --git a/tslint.json b/tslint.json index a6b9d34e2..8937c6842 100644 --- a/tslint.json +++ b/tslint.json @@ -14,3 +14,4 @@ ] } } +∏ \ No newline at end of file