@searpent/react-image-annotate 2.0.76 → 2.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/Annotator/exampleImages.js +41 -0
  2. package/Annotator/examplePhotos.js +6980 -0
  3. package/Annotator/index.js +417 -0
  4. package/Annotator/reducers/combine-reducers.js +14 -0
  5. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  6. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  7. package/Annotator/reducers/general-reducer.js +1430 -0
  8. package/Annotator/reducers/get-active-image.js +27 -0
  9. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  10. package/Annotator/reducers/history-handler.js +38 -0
  11. package/Annotator/reducers/image-reducer.js +20 -0
  12. package/Annotator/reducers/video-reducer.js +88 -0
  13. package/ClassSelectionMenu/index.js +140 -0
  14. package/Crosshairs/index.js +53 -0
  15. package/DebugSidebarBox/index.js +20 -0
  16. package/DemoSite/Editor.js +194 -0
  17. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  18. package/DemoSite/index.js +40 -0
  19. package/{src/Editor → Editor}/annotation-plugin/annotation.css +20 -0
  20. package/Editor/annotation-plugin/annotation.js +697 -0
  21. package/Editor/index.js +93 -0
  22. package/Editor/readOnly.js +123 -0
  23. package/{src/Editor → Editor}/tools.js +2 -3
  24. package/Errorer/index.js +11 -0
  25. package/FullImageSegmentationAnnotator/index.js +7 -0
  26. package/GroupSelectorSidebarBox/index.js +63 -0
  27. package/GroupsEditorSidebarBox/index.js +138 -0
  28. package/HelpSidebarBox/index.js +58 -0
  29. package/HighlightBox/index.js +102 -0
  30. package/HistorySidebarBox/index.js +71 -0
  31. package/ImageCanvas/index.js +441 -0
  32. package/ImageCanvas/region-tools.js +165 -0
  33. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  34. package/ImageCanvas/use-mouse.js +180 -0
  35. package/ImageCanvas/use-project-box.js +27 -0
  36. package/ImageCanvas/use-wasd-mode.js +62 -0
  37. package/ImageMask/index.js +133 -0
  38. package/ImageMask/load-image.js +25 -0
  39. package/ImageSelectorSidebarBox/index.js +60 -0
  40. package/KeyframeTimeline/get-time-string.js +27 -0
  41. package/KeyframeTimeline/index.js +233 -0
  42. package/KeyframesSelectorSidebarBox/index.js +93 -0
  43. package/LandingPage/index.js +159 -0
  44. package/Locker/index.js +11 -0
  45. package/MainLayout/RightSidebarItemsWrapper.js +19 -0
  46. package/MainLayout/icon-dictionary.js +104 -0
  47. package/MainLayout/index.js +526 -0
  48. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  49. package/MainLayout/types.js +0 -0
  50. package/MainLayout/use-implied-video-regions.js +13 -0
  51. package/MetadataEditorSidebarBox/index.js +231 -0
  52. package/PageSelector/index.js +180 -0
  53. package/PointDistances/index.js +73 -0
  54. package/PreventScrollToParents/index.js +51 -0
  55. package/RegionLabel/index.js +232 -0
  56. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  57. package/RegionSelectAndTransformBoxes/index.js +169 -0
  58. package/RegionSelectorSidebarBox/index.js +254 -0
  59. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  60. package/RegionShapes/index.js +294 -0
  61. package/RegionTags/index.js +144 -0
  62. package/SettingsDialog/index.js +52 -0
  63. package/SettingsProvider/index.js +60 -0
  64. package/Shortcuts/ShortcutField.js +46 -0
  65. package/Shortcuts/index.js +133 -0
  66. package/ShortcutsManager/index.js +155 -0
  67. package/Sidebar/index.js +69 -0
  68. package/SidebarBoxContainer/index.js +93 -0
  69. package/SmallToolButton/index.js +42 -0
  70. package/TagsSidebarBox/index.js +105 -0
  71. package/TaskDescriptionSidebarBox/index.js +58 -0
  72. package/Theme/index.js +30 -0
  73. package/VideoOrImageCanvasBackground/index.js +151 -0
  74. package/colors.js +14 -0
  75. package/hooks/use-colors.js +127 -0
  76. package/hooks/use-event-callback.js +10 -0
  77. package/hooks/use-exclude-pattern.js +24 -0
  78. package/hooks/use-load-image.js +26 -0
  79. package/hooks/use-window-size.js +46 -0
  80. package/{src/hooks → hooks}/xpattern.js +1 -1
  81. package/index.js +3 -0
  82. package/lib.js +3 -0
  83. package/package.json +1 -1
  84. package/stories.js +5 -0
  85. package/utils/blocks-to-article.js +60 -0
  86. package/{src/utils → utils}/blocks-to-article.test.js +5 -8
  87. package/{src/utils → utils}/default-locked-until.js +2 -1
  88. package/{src/utils → utils}/filter-only-unique.js +1 -1
  89. package/utils/get-from-local-storage.js +7 -0
  90. package/utils/get-hotkey-help-text.js +9 -0
  91. package/utils/get-landmarks-with-transform.js +40 -0
  92. package/utils/photosToImages.js +85 -0
  93. package/utils/regions-groups.js +28 -0
  94. package/utils/regions-to-blocks.js +18 -0
  95. package/utils/saveable-actions-enum.js +3 -0
  96. package/utils/set-in-local-storage.js +3 -0
  97. package/utils/sleep.js +7 -0
  98. package/utils/uuid-to-hash.js +5 -0
  99. package/.babelrc +0 -6
  100. package/.env +0 -1
  101. package/.flowconfig +0 -2
  102. package/.github/workflows/release-on-master.yml +0 -32
  103. package/.github/workflows/test.yml +0 -16
  104. package/.prettierrc +0 -3
  105. package/.releaserc.js +0 -18
  106. package/.storybook/addons.js +0 -2
  107. package/.storybook/config.js +0 -16
  108. package/LICENSE +0 -21
  109. package/public/favicon.ico +0 -0
  110. package/public/index.html +0 -38
  111. package/src/Annotator/bike-pic.png +0 -0
  112. package/src/Annotator/bike-pic2.png +0 -0
  113. package/src/Annotator/dab-keyframes.story.json +0 -1
  114. package/src/Annotator/exampleImages.js +0 -48
  115. package/src/Annotator/examplePhotos.js +0 -7603
  116. package/src/Annotator/index.js +0 -380
  117. package/src/Annotator/index.story.js +0 -877
  118. package/src/Annotator/poses.story.js +0 -150
  119. package/src/Annotator/reducers/combine-reducers.js +0 -7
  120. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  121. package/src/Annotator/reducers/general-reducer.js +0 -1228
  122. package/src/Annotator/reducers/get-active-image.js +0 -21
  123. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  124. package/src/Annotator/reducers/history-handler.js +0 -60
  125. package/src/Annotator/reducers/image-reducer.js +0 -23
  126. package/src/Annotator/reducers/video-reducer.js +0 -85
  127. package/src/Annotator/video.story.js +0 -51
  128. package/src/ClassSelectionMenu/index.js +0 -112
  129. package/src/Crosshairs/index.js +0 -64
  130. package/src/DebugSidebarBox/index.js +0 -36
  131. package/src/DemoSite/Editor.js +0 -235
  132. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  133. package/src/DemoSite/index.js +0 -41
  134. package/src/DemoSite/index.story.js +0 -10
  135. package/src/DemoSite/simple-segmentation-example.json +0 -572
  136. package/src/Editor/annotation-plugin/annotation.js +0 -536
  137. package/src/Editor/index.js +0 -50
  138. package/src/Editor/readOnly.js +0 -21
  139. package/src/Errorer/index.js +0 -13
  140. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  141. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  142. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  143. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  144. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  145. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  146. package/src/GroupSelectorSidebarBox/index.js +0 -48
  147. package/src/GroupsEditorSidebarBox/index.js +0 -108
  148. package/src/HelpSidebarBox/index.js +0 -43
  149. package/src/HighlightBox/index.js +0 -143
  150. package/src/HistorySidebarBox/index.js +0 -78
  151. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  152. package/src/ImageCanvas/index.js +0 -515
  153. package/src/ImageCanvas/index.story.js +0 -314
  154. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  155. package/src/ImageCanvas/region-tools.js +0 -171
  156. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  157. package/src/ImageCanvas/use-mouse.js +0 -168
  158. package/src/ImageCanvas/use-project-box.js +0 -23
  159. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  160. package/src/ImageMask/index.js +0 -127
  161. package/src/ImageMask/load-image.js +0 -32
  162. package/src/ImageSelectorSidebarBox/index.js +0 -54
  163. package/src/KeyframeTimeline/get-time-string.js +0 -25
  164. package/src/KeyframeTimeline/index.js +0 -223
  165. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  166. package/src/LandingPage/content.md +0 -57
  167. package/src/LandingPage/github-markdown.css +0 -964
  168. package/src/LandingPage/index.js +0 -147
  169. package/src/Locker/index.js +0 -13
  170. package/src/MainLayout/RightSidebarItemsWrapper.js +0 -21
  171. package/src/MainLayout/icon-dictionary.js +0 -79
  172. package/src/MainLayout/index.js +0 -564
  173. package/src/MainLayout/index.story.js +0 -240
  174. package/src/MainLayout/types.js +0 -171
  175. package/src/MainLayout/use-implied-video-regions.js +0 -17
  176. package/src/MetadataEditorSidebarBox/index.js +0 -160
  177. package/src/PageSelector/index.js +0 -159
  178. package/src/PointDistances/index.js +0 -90
  179. package/src/PreventScrollToParents/index.js +0 -48
  180. package/src/PreventScrollToParents/index.story.js +0 -23
  181. package/src/RegionLabel/index.js +0 -236
  182. package/src/RegionSelectAndTransformBoxes/index.js +0 -236
  183. package/src/RegionSelectorSidebarBox/index.js +0 -220
  184. package/src/RegionShapes/index.js +0 -254
  185. package/src/RegionTags/index.js +0 -136
  186. package/src/SettingsDialog/index.js +0 -58
  187. package/src/SettingsProvider/index.js +0 -57
  188. package/src/Shortcuts/ShortcutField.js +0 -44
  189. package/src/Shortcuts/index.js +0 -129
  190. package/src/ShortcutsManager/index.js +0 -162
  191. package/src/Sidebar/index.js +0 -117
  192. package/src/SidebarBoxContainer/index.js +0 -93
  193. package/src/SmallToolButton/index.js +0 -57
  194. package/src/TagsSidebarBox/index.js +0 -93
  195. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  196. package/src/Theme/index.js +0 -36
  197. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  198. package/src/colors.js +0 -32
  199. package/src/hooks/use-colors.js +0 -75
  200. package/src/hooks/use-event-callback.js +0 -11
  201. package/src/hooks/use-exclude-pattern.js +0 -27
  202. package/src/hooks/use-load-image.js +0 -21
  203. package/src/hooks/use-window-size.js +0 -46
  204. package/src/hooks/xpattern.png +0 -0
  205. package/src/index.js +0 -18
  206. package/src/lib.js +0 -7
  207. package/src/screenshot.png +0 -0
  208. package/src/site.css +0 -5
  209. package/src/stories.js +0 -2
  210. package/src/utils/blocks-to-article.js +0 -61
  211. package/src/utils/get-from-local-storage.js +0 -7
  212. package/src/utils/get-hotkey-help-text.js +0 -11
  213. package/src/utils/get-landmarks-with-transform.js +0 -23
  214. package/src/utils/photosToImages.js +0 -67
  215. package/src/utils/regions-groups.js +0 -19
  216. package/src/utils/regions-to-blocks.js +0 -16
  217. package/src/utils/saveable-actions-enum.js +0 -5
  218. package/src/utils/set-in-local-storage.js +0 -6
  219. package/src/utils/sleep.js +0 -3
  220. package/src/utils/uuid-to-hash.js +0 -5
  221. /package/{src/Errorer → Errorer}/errorer.css +0 -0
  222. /package/{src/Locker → Locker}/locker.css +0 -0
  223. /package/{src/PageSelector → PageSelector}/page-selector.css +0 -0
  224. /package/{src/utils → utils}/next-group-id.js +0 -0
@@ -1,877 +0,0 @@
1
- // @flow
2
-
3
- import React, { useState } from "react"
4
-
5
- import { storiesOf } from "@storybook/react"
6
- import { action as actionAddon } from "@storybook/addon-actions"
7
- import exampleImage from "../ImageCanvas/seves_desk.story.jpg"
8
- import bikeImg1 from "./bike-pic.png"
9
- import bikeImg2 from "./bike-pic2.png"
10
- import { HotKeys } from "react-hotkeys"
11
- import { defaultKeyMap } from "../ShortcutsManager"
12
-
13
- import Annotator from "./"
14
-
15
- import { testRegions, testRegionsBoxes } from "../ImageCanvas/index.story"
16
- import photosToImages from "../utils/photosToImages"
17
- import examplePhotos from "./examplePhotos"
18
- import exampleImages from './exampleImages';
19
-
20
- const middlewares = [
21
- (store) => (next) => (action) => {
22
- actionAddon(action.type)(action)
23
- return next(action)
24
- },
25
- ]
26
-
27
- storiesOf("Annotator", module)
28
- .add("Basic", () => (
29
- <Annotator
30
- onExit={actionAddon("onExit")}
31
- middlewares={middlewares}
32
- labelImages
33
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
34
- regionTagList={["tag1", "tag2", "tag3"]}
35
- imageClsList={["Alpha", "Beta", "Charlie", "Delta"]}
36
- imageTagList={["tag1", "tag2", "tag3"]}
37
- images={[
38
- {
39
- src: exampleImage,
40
- name: "Seve's Desk",
41
- regions: testRegions,
42
- },
43
- {
44
- src: "https://loremflickr.com/100/100/cars?lock=1",
45
- name: "Frame 0036",
46
- },
47
- {
48
- src: "https://loremflickr.com/100/100/cars?lock=2",
49
- name: "Frame 0037",
50
- },
51
- {
52
- src: "https://loremflickr.com/100/100/cars?lock=3",
53
- name: "Frame 0038",
54
- },
55
- ]}
56
- />
57
- ))
58
- .add("Basic with onImagesChange", () => (
59
- <HotKeys keyMap={defaultKeyMap}>
60
- <div>
61
- <div >
62
- <Annotator
63
- middlewares={middlewares}
64
- labelImages
65
- regionClsList={[
66
- "author",
67
- "appendix",
68
- "photo_author",
69
- "photo_caption",
70
- "advertisement",
71
- "other_graphics",
72
- "unknown",
73
- "title",
74
- "about_author",
75
- "image",
76
- "subtitle",
77
- "interview",
78
- "table",
79
- "text",
80
- ]}
81
- help={`# Tools\n\n**E** - select tool\n\n**D** - frame tool\n\n**Ctrl** + **click frame** - edit frame\n\n**1**- **9** - change class`}
82
- onImagesChange={(images) => console.log("[images changed to]:", images)}
83
- images={photosToImages([examplePhotos[0]])}
84
- clsColors={{
85
- title: "#f70202",
86
- subtitle: "#ffb405",
87
- text: "#14deef",
88
- author: "#f8d51e",
89
- appendix: "#bfede2",
90
- photo_author: "#9a17bb",
91
- photo_caption: "#ff84f6",
92
- advertisement: "#ffb201",
93
- other_graphics: "#ff5400",
94
- unknown: "#bfede2",
95
- about_author: "#9a17bb",
96
- image: "#14deef",
97
- interview: "#23b20f",
98
- table: "#02b4ba",
99
- }}
100
- // groupColors={[
101
- // "#3853F1",
102
- // "#F6E54C",
103
- // "#39D33C",
104
- // "#CF24CF",
105
- // "#22E3ED",
106
- // "#EF3029",
107
- // ]}
108
- enabledTools={[]}
109
- groupColors={['#343434', '#989898', '#dcdcdc']}
110
- onGroupSelect={(groupId) => console.log('selected groupid:', groupId)}
111
- hideHeader={true}
112
- hideHistory={true}
113
- hideNotEditingLabel={true}
114
- showEditor={true}
115
- showPageSelector={true}
116
- albumMetadata={[{
117
- key: "issueNumber", value: "12"
118
- }, {
119
- key: "issueType", value: "news"
120
- }]}
121
- metadataConfigs={[{
122
- key: "issueNumber",
123
- level: "album",
124
- options: []
125
- }, {
126
- key: "issueType",
127
- level: "album",
128
- options: ['news', 'magazine', 'q&a']
129
- }, {
130
- key: "mutation",
131
- level: "photo",
132
- options: ['Morava', 'Slezsko', 'Cechy']
133
- }, {
134
- key: "previousArticleId",
135
- level: "photo_metadata-engine",
136
- options: [{
137
- value: "alpha",
138
- label: "0 - alpha"
139
- }, {
140
- value: "beta",
141
- label: "1 - beta"
142
- }, {
143
- value: "gamma",
144
- label: "2 - gamma"
145
- }]
146
- }, {
147
- key: "pageNumber",
148
- level: "photo",
149
- options: []
150
- }, {
151
- key: "articleType",
152
- level: "photo_metadata-engine",
153
- // options: ['news', 'ads', 'interview']
154
- selectable: true,
155
- options: [{
156
- value: "alpha",
157
- label: "0 - alpha"
158
- }, {
159
- value: "beta",
160
- label: "1 - beta"
161
- }, {
162
- value: "gamma",
163
- label: "2 - gamma"
164
- }]
165
- }, {
166
- key: "section",
167
- level: "photo_metadata-engine",
168
- options: ['editorial', 'article', 'last page']
169
- }]}
170
- onSelectedImageChange={(d) => console.log("[onSelectedImageChange] triggered:", d)}
171
- onExit={(s) => console.log('[onExit] triggered:', s)}
172
- save={async ({ image, triggerRecalc, albumMetadata }) => {
173
- console.log(`[SYNC] image ${image.id} saving... recalc: ${triggerRecalc} albumMetadata: ${albumMetadata.length}`)
174
- return new Promise((resolve, reject) => {
175
- setTimeout(() => {
176
- let lockedUntil = null;
177
- if (triggerRecalc) {
178
- var now = new Date();
179
- now.setSeconds(now.getSeconds() + 60);
180
- lockedUntil = now
181
- }
182
- resolve({ lockedUntil })
183
- }, 3000)
184
- })
185
- }}
186
- fetchImage={async ({ imageId }) => {
187
- console.log(`[SYNC] image ${imageId} fetching...`)
188
- return new Promise((resolve, reject) => {
189
- setTimeout(() => {
190
- console.log(`[SYNC] image ${imageId} fetched`,)
191
- // resolve({
192
- // image: { ...exampleImages[0], lockedUntil: new Date().toISOString(), id: imageId }
193
- // })
194
- resolve({
195
- image: { ...exampleImages[0], lockedUntil: null, id: imageId }
196
- })
197
- }, 5000)
198
- })
199
- }}
200
- />
201
- </div>
202
- </div>
203
- </HotKeys >
204
- ))
205
- .add("Basic - Allow Comments", () => (
206
- <Annotator
207
- onExit={actionAddon("onExit")}
208
- middlewares={middlewares}
209
- labelImages
210
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
211
- regionTagList={["tag1", "tag2", "tag3"]}
212
- imageClsList={["Alpha", "Beta", "Charlie", "Delta"]}
213
- imageTagList={["tag1", "tag2", "tag3"]}
214
- images={[
215
- {
216
- src: exampleImage,
217
- name: "Seve's Desk",
218
- regions: testRegions,
219
- },
220
- {
221
- src: "https://loremflickr.com/100/100/cars?lock=1",
222
- name: "Frame 0036",
223
- },
224
- {
225
- src: "https://loremflickr.com/100/100/cars?lock=2",
226
- name: "Frame 0037",
227
- },
228
- {
229
- src: "https://loremflickr.com/100/100/cars?lock=3",
230
- name: "Frame 0038",
231
- },
232
- ]}
233
- allowComments
234
- />
235
- ))
236
- .add("Fixed Size Container", () => (
237
- <div style={{ width: 500, height: 500 }}>
238
- <Annotator
239
- onExit={actionAddon("onExit")}
240
- middlewares={[
241
- (store) => (next) => (action) => {
242
- actionAddon(action.type)(action)
243
- return next(action)
244
- },
245
- ]}
246
- labelImages
247
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
248
- regionTagList={["tag1", "tag2", "tag3"]}
249
- imageClsList={["Alpha", "Beta", "Charlie", "Delta"]}
250
- imageTagList={["tag1", "tag2", "tag3"]}
251
- images={[
252
- {
253
- src: exampleImage,
254
- name: "Seve's Desk",
255
- regions: testRegions,
256
- },
257
- {
258
- src: "https://loremflickr.com/100/100/cars?lock=1",
259
- name: "Frame 0036",
260
- },
261
- {
262
- src: "https://loremflickr.com/100/100/cars?lock=2",
263
- name: "Frame 0037",
264
- },
265
- {
266
- src: "https://loremflickr.com/100/100/cars?lock=3",
267
- name: "Frame 0038",
268
- },
269
- ]}
270
- />
271
- </div>
272
- ))
273
- .add("Shrunk Annotator (Test Fullscreen)", () => (
274
- <div style={{ padding: 100 }}>
275
- <Annotator
276
- onExit={actionAddon("onExit")}
277
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
278
- regionTagList={["tag1", "tag2", "tag3"]}
279
- middlewares={[
280
- (store) => (next) => (action) => {
281
- actionAddon(action.type)(action)
282
- return next(action)
283
- },
284
- ]}
285
- images={[
286
- {
287
- src: exampleImage,
288
- name: "Seve's Desk",
289
- regions: testRegions,
290
- },
291
- ]}
292
- />
293
- </div>
294
- ))
295
- .add("Annotator w/o No Region Labels or Image Labels", () => (
296
- <Annotator
297
- onExit={actionAddon("onExit")}
298
- middlewares={middlewares}
299
- images={[
300
- {
301
- src: exampleImage,
302
- name: "Seve's Desk",
303
- regions: testRegions,
304
- },
305
- ]}
306
- />
307
- ))
308
- .add("Annotator with no enabled tools", () => (
309
- <Annotator
310
- onExit={actionAddon("onExit")}
311
- enabledTools={[]}
312
- showTags={false}
313
- middlewares={middlewares}
314
- images={[
315
- {
316
- src: exampleImage,
317
- name: "Seve's Desk",
318
- regions: testRegions,
319
- },
320
- ]}
321
- />
322
- ))
323
- .add("Bounding Box Annotator with output to console.log", () => (
324
- <Annotator
325
- onExit={(out) => {
326
- window.lastOutput = out
327
- console.log(out)
328
- }}
329
- taskDescription={`## Annotate Hands\nDraw a bounding box around each hand.`}
330
- enabledTools={["select", "create-box"]}
331
- regionClsList={["Hand", "Face"]}
332
- regionTagList={["Open Pinch", "Closed Pinch", "In Frame"]}
333
- showTags={false}
334
- images={[
335
- {
336
- src: "https://s3.amazonaws.com/jobstorage.workaround.online/Atheer/video-frames/VID_20190111_161054.mp4_frame017.png",
337
- name: "Bounding Box Test",
338
- regions: [],
339
- },
340
- {
341
- src: "https://s3.amazonaws.com/jobstorage.workaround.online/Atheer/video-frames/VID_20190111_161054.mp4_frame001.png",
342
- name: "Bounding Box Test",
343
- regions: [],
344
- },
345
- ]}
346
- />
347
- ))
348
- .add("Bounding Box Annotator with allowed area", () => (
349
- <Annotator
350
- taskDescription={`## Annotate Hands\nDraw a bounding box around each hand.`}
351
- enabledTools={["select", "create-box"]}
352
- regionClsList={["Hand", "Face"]}
353
- regionTagList={["Open Pinch", "Closed Pinch", "In Frame"]}
354
- showTags={false}
355
- allowedArea={{ x: 0, y: 0.6, w: 0.3, h: 0.3 }}
356
- images={[
357
- {
358
- src: "https://s3.amazonaws.com/jobstorage.workaround.online/Atheer/video-frames/VID_20190111_161054.mp4_frame017.png",
359
- name: "Bounding Box Test",
360
- regions: [],
361
- },
362
- ]}
363
- />
364
- ))
365
- .add("Car Annotation", () => (
366
- <Annotator
367
- onExit={actionAddon("onExit")}
368
- middlewares={middlewares}
369
- labelImages
370
- regionClsList={["Car", "Sign", "Construction Barrier"]}
371
- regionTagList={["Moving", "Stopped", "Obstacle"]}
372
- imageClsList={["On Street", "Sidewalk", "Other"]}
373
- // imageTagList={["tag1", "tag2", "tag3"]}
374
- images={[
375
- {
376
- src: bikeImg1,
377
- name: "Frame 03021",
378
- regions: [
379
- {
380
- cls: "Car",
381
- color: "hsl(82,100%,50%)",
382
- h: 0.45921666772960146,
383
- w: 0.3932156342484836,
384
- x: 0.6302148980776354,
385
- y: 0.5559504689545722,
386
- type: "box",
387
- id: "8776160642957009",
388
- tags: ["Stopped"],
389
- highlighted: false,
390
- editingLabels: false,
391
- },
392
- {
393
- cls: "Car",
394
- color: "hsl(264,100%,50%)",
395
- type: "box",
396
- id: "885140028730734",
397
- tags: ["Moving"],
398
- w: 0.2627711048576583,
399
- x: 0.20751775748638238,
400
- y: 0.5566583219431673,
401
- h: 0.268717618171478,
402
- highlighted: false,
403
- editingLabels: false,
404
- },
405
- {
406
- cls: "Car",
407
- color: "hsl(127,100%,50%)",
408
- w: 0.033016094117647055,
409
- x: 0.5051247779336334,
410
- y: 0.5396378545840628,
411
- h: 0.03423999999999994,
412
- type: "box",
413
- id: "5952553512262024",
414
- tags: ["Stopped"],
415
- highlighted: false,
416
- editingLabels: false,
417
- },
418
- {
419
- type: "box",
420
- x: 0.7847296794208894,
421
- y: 0.3635007199404308,
422
- w: 0.04871147880041349,
423
- h: 0.10995961095800888,
424
- highlighted: true,
425
- editingLabels: false,
426
- color: "hsl(268,100%,50%)",
427
- id: "5647593040225252",
428
- cls: "Sign",
429
- },
430
- ],
431
- },
432
- {
433
- src: bikeImg2,
434
- name: "Frame 03022",
435
- regions: [
436
- {
437
- type: "box",
438
- x: 0.12226982552783494,
439
- y: 0.5578947368421052,
440
- w: 0.3301518695958121,
441
- h: 0.33562583001232194,
442
- highlighted: false,
443
- editingLabels: false,
444
- color: "hsl(171,100%,50%)",
445
- id: "014393439034159128",
446
- cls: "Car",
447
- tags: ["Stopped"],
448
- },
449
- {
450
- type: "box",
451
- x: 0.5018477698901193,
452
- y: 0.5954194079501558,
453
- w: 0.07194249496837657,
454
- h: 0.06826906557009338,
455
- highlighted: false,
456
- editingLabels: false,
457
- color: "hsl(17,100%,50%)",
458
- id: "02954614542034717",
459
- cls: "Car",
460
- tags: ["Moving"],
461
- },
462
- {
463
- type: "box",
464
- x: 0.6483083881082046,
465
- y: 0.6217109311709718,
466
- w: 0.08786544324705947,
467
- h: 0.20450608002345438,
468
- highlighted: true,
469
- editingLabels: true,
470
- color: "hsl(337,100%,50%)",
471
- id: "9124138360972984",
472
- cls: "Construction Barrier",
473
- tags: ["Obstacle"],
474
- },
475
- {
476
- type: "box",
477
- x: 0.7628671305695606,
478
- y: 0.6299511028935285,
479
- w: 0.12734928166820647,
480
- h: 0.2689292407634438,
481
- highlighted: false,
482
- editingLabels: false,
483
- color: "hsl(89,100%,50%)",
484
- id: "5960600741979638",
485
- cls: "Construction Barrier",
486
- },
487
- {
488
- type: "box",
489
- x: 0.5871362440754417,
490
- y: 0.6232091442114366,
491
- w: 0.06562102723514573,
492
- h: 0.15281773012741662,
493
- highlighted: false,
494
- editingLabels: false,
495
- color: "hsl(326,100%,50%)",
496
- id: "7955287536996538",
497
- cls: "Construction Barrier",
498
- },
499
- {
500
- type: "box",
501
- x: 0.42943330004934643,
502
- y: 0.6054718359824862,
503
- w: 0.053210066743122564,
504
- h: 0.054984658299147116,
505
- highlighted: false,
506
- editingLabels: false,
507
- color: "hsl(66,100%,50%)",
508
- id: "49573139861381166",
509
- cls: "Car",
510
- tags: ["Stopped"],
511
- },
512
- ],
513
- },
514
- ]}
515
- onExit={(out) => {
516
- window.lastOutput = out
517
- console.log(JSON.stringify(out.images))
518
- }}
519
- />
520
- ))
521
- .add("Annotator blocks scroll from propagating", () => (
522
- <div style={{ height: "200vh" }}>
523
- <Annotator
524
- onExit={actionAddon("onExit")}
525
- showTags={false}
526
- middlewares={[
527
- (store) => (next) => (action) => {
528
- actionAddon(action.type)(action)
529
- return next(action)
530
- },
531
- ]}
532
- images={[
533
- {
534
- src: exampleImage,
535
- name: "Seve's Desk",
536
- regions: testRegions,
537
- },
538
- ]}
539
- />
540
- <div style={{ color: "red" }}>You shouldn't be able to see this</div>
541
- </div>
542
- ))
543
- .add("Annotator should not expand beyond parent", () => (
544
- <div
545
- style={{
546
- width: "100vw",
547
- height: "100vh",
548
- padding: 100,
549
- boxSizing: "border-box",
550
- }}
551
- >
552
- <Annotator
553
- onExit={actionAddon("onExit")}
554
- showTags={false}
555
- middlewares={[
556
- (store) => (next) => (action) => {
557
- actionAddon(action.type)(action)
558
- return next(action)
559
- },
560
- ]}
561
- images={[
562
- {
563
- src: exampleImage,
564
- name: "Seve's Desk",
565
- regions: testRegions,
566
- },
567
- ]}
568
- />
569
- </div>
570
- ))
571
- .add("Video with frames as each image", () => (
572
- <div
573
- style={{
574
- width: "100vw",
575
- height: "100vh",
576
- boxSizing: "border-box",
577
- }}
578
- >
579
- <Annotator
580
- onExit={actionAddon("onExit")}
581
- showTags={false}
582
- middlewares={[
583
- (store) => (next) => (action) => {
584
- actionAddon(action.type)(action)
585
- return next(action)
586
- },
587
- ]}
588
- images={[
589
- {
590
- src: "https://s3.amazonaws.com/asset.workaround.online/SampleVideo_1280x720_1mb.mp4",
591
- frameTime: 0,
592
- name: "Frame 1",
593
- },
594
- {
595
- src: "https://s3.amazonaws.com/asset.workaround.online/SampleVideo_1280x720_1mb.mp4",
596
- frameTime: 4500,
597
- name: "Frame 2",
598
- },
599
- ]}
600
- />
601
- </div>
602
- ))
603
- .add("Keyframe video", () => (
604
- <div
605
- style={{
606
- width: "100vw",
607
- height: "100vh",
608
- boxSizing: "border-box",
609
- }}
610
- >
611
- <Annotator
612
- onExit={(...args) => {
613
- console.log(...args)
614
- actionAddon("onExit")(...args)
615
- }}
616
- showTags
617
- videoSrc="https://s3.amazonaws.com/asset.workaround.online/SampleVideo_1280x720_1mb.mp4"
618
- videoTime={1000}
619
- keyframes={{
620
- 0: {
621
- regions: [
622
- {
623
- type: "point",
624
- x: 0.1608187134502924,
625
- y: 0.5769980506822612,
626
- highlighted: true,
627
- editingLabels: false,
628
- color: "hsl(238,100%,50%)",
629
- id: "9995495728521284",
630
- },
631
- {
632
- type: "box",
633
- x: 0.089171974522293,
634
- y: 0.36801132342533616,
635
- w: 0.30573248407643316,
636
- h: 0.4170794998820476,
637
- highlighted: true,
638
- editingLabels: false,
639
- color: "hsl(263,100%,50%)",
640
- id: "04858393322065635",
641
- },
642
- ],
643
- },
644
- 3333: {
645
- regions: [
646
- {
647
- type: "point",
648
- x: 0.1608187134502924,
649
- y: 0.5769980506822612,
650
- highlighted: true,
651
- editingLabels: false,
652
- color: "hsl(238,100%,50%)",
653
- id: "9995495728521284",
654
- },
655
- {
656
- type: "box",
657
- x: 0.14861995753715496,
658
- y: 0.0934182590233546,
659
- w: 0.3163481953290871,
660
- h: 0.7596131163010142,
661
- highlighted: true,
662
- editingLabels: false,
663
- color: "hsl(263,100%,50%)",
664
- id: "04858393322065635",
665
- },
666
- ],
667
- },
668
- }}
669
- />
670
- </div>
671
- ))
672
- .add("Override Next/Prev Button Handling", () => {
673
- const images = [
674
- exampleImage,
675
- "https://loremflickr.com/100/100/cars?lock=1",
676
- "https://loremflickr.com/100/100/cars?lock=2",
677
- ]
678
- const [selectedImageIndex, changeSelectedImageIndex] = useState(0)
679
-
680
- return (
681
- <Annotator
682
- onExit={actionAddon("onExit")}
683
- onNextImage={() => {
684
- actionAddon("onNextImage")()
685
- changeSelectedImageIndex((selectedImageIndex + 1) % 3)
686
- }}
687
- onPrevImage={() => {
688
- actionAddon("onPrevImage")()
689
- changeSelectedImageIndex((selectedImageIndex - 1 + 3) % 3)
690
- }}
691
- labelImages
692
- selectedImage={images[selectedImageIndex]}
693
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
694
- imageClsList={["Alpha", "Beta", "Charlie", "Delta"]}
695
- images={[
696
- {
697
- src: exampleImage,
698
- name: "Seve's Desk",
699
- },
700
- {
701
- src: images[1],
702
- name: "Frame 0036",
703
- },
704
- {
705
- src: images[2],
706
- name: "Frame 0037",
707
- },
708
- ]}
709
- />
710
- )
711
- })
712
- .add("Override RegionEditLabel", () => {
713
- const images = [
714
- exampleImage,
715
- "https://loremflickr.com/100/100/cars?lock=1",
716
- "https://loremflickr.com/100/100/cars?lock=2",
717
- ]
718
-
719
- const NewRegionEditLabel = ({
720
- region,
721
- editing,
722
- onDelete,
723
- onChange,
724
- onClose,
725
- onOpen,
726
- }) => {
727
- return (
728
- <div style={{ backgroundColor: "white" }}>
729
- I'm the closed part
730
- <div style={{ display: editing ? "block" : "none" }}>
731
- I'm the part that shows when it's being edited!
732
- <button onClick={() => onDelete(region)}>Delete This Region</button>
733
- <button
734
- onClick={() => onChange({ ...region, cls: "awesome-value" })}
735
- >
736
- Set Classification to "awesome-value"
737
- </button>
738
- <button onClick={() => onClose(region)}>Close the edit mode</button>
739
- </div>
740
- </div>
741
- )
742
- }
743
-
744
- return (
745
- <Annotator
746
- onExit={actionAddon("onExit")}
747
- labelImages
748
- selectedImage={images[0]}
749
- RegionEditLabel={NewRegionEditLabel}
750
- images={[
751
- {
752
- src: exampleImage,
753
- name: "Seve's Desk",
754
- },
755
- {
756
- src: images[1],
757
- name: "Frame 0036",
758
- },
759
- {
760
- src: images[2],
761
- name: "Frame 0037",
762
- },
763
- ]}
764
- />
765
- )
766
- })
767
- .add("Two on sample page w/ hotkeys", () => {
768
- return (
769
- <HotKeys keyMap={defaultKeyMap}>
770
- <div>
771
- <div style={{ height: 600 }}>
772
- <Annotator
773
- onExit={actionAddon("onExit")}
774
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
775
- imageClsList={["Alpha", "Beta", "Charlie", "Delta"]}
776
- middlewares={[
777
- (store) => (next) => (action) => {
778
- actionAddon(action.type)(action)
779
- return next(action)
780
- },
781
- ]}
782
- images={[
783
- {
784
- src: exampleImage,
785
- name: "Seve's Desk",
786
- regions: testRegions,
787
- },
788
- ]}
789
- />
790
- </div>
791
- <div style={{ height: 600 }}>
792
- <Annotator
793
- onExit={actionAddon("onExit")}
794
- middlewares={[
795
- (store) => (next) => (action) => {
796
- actionAddon(action.type)(action)
797
- return next(action)
798
- },
799
- ]}
800
- images={[
801
- {
802
- src: exampleImage,
803
- name: "Seve's Desk",
804
- regions: testRegions,
805
- },
806
- ]}
807
- />
808
- </div>
809
- </div>
810
- </HotKeys>
811
- )
812
- })
813
- .add("CORs Error (Pixel Segmentation)", () => (
814
- <Annotator
815
- onExit={actionAddon("onExit")}
816
- middlewares={middlewares}
817
- labelImages
818
- fullImageSegmentationMode
819
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
820
- images={[
821
- {
822
- src: "https://placebear.com/200/300",
823
- name: "Frame 0036",
824
- },
825
- ]}
826
- />
827
- ))
828
- .add("Modify Allowed Area", () => (
829
- <Annotator
830
- onExit={actionAddon("onExit")}
831
- middlewares={middlewares}
832
- labelImages
833
- fullImageSegmentationMode
834
- allowedArea={{ x: 0, y: 0.6, w: 0.3, h: 0.3 }}
835
- enabledTools={["modify-allowed-area"]}
836
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
837
- images={[
838
- {
839
- src: exampleImage,
840
- name: "Frame 0036",
841
- },
842
- ]}
843
- />
844
- ))
845
- .add("Hide Next, Hide Header Text", () => (
846
- <Annotator
847
- onExit={actionAddon("onExit")}
848
- labelImages
849
- hideNext
850
- hideHeaderText
851
- fullImageSegmentationMode
852
- enabledTools={["modify-allowed-area"]}
853
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
854
- images={[
855
- {
856
- src: exampleImage,
857
- name: "Frame 0036",
858
- },
859
- ]}
860
- />
861
- ))
862
- .add("Hide Header", () => (
863
- <Annotator
864
- onExit={actionAddon("onExit")}
865
- labelImages
866
- hideHeader
867
- fullImageSegmentationMode
868
- enabledTools={["modify-allowed-area"]}
869
- regionClsList={["Alpha", "Beta", "Charlie", "Delta"]}
870
- images={[
871
- {
872
- src: exampleImage,
873
- name: "Frame 0036",
874
- },
875
- ]}
876
- />
877
- ))