evals-lab 0.2.0 → 0.3.0

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.
@@ -1,1836 +1,2379 @@
1
1
  {
2
2
  "format": "evals-lab/dataset",
3
- "version": 4,
3
+ "version": 6,
4
4
  "dataset": {
5
5
  "name": "Demo 1",
6
6
  "body": {
7
+ "version": 6,
8
+ "source": {
9
+ "id": "Demo 1",
10
+ "name": "Demo 1"
11
+ },
7
12
  "cases": [
8
13
  {
9
14
  "id": "basketball-hoop",
10
- "filename": "basketball-hoop.jpg",
15
+ "item": "basketball-hoop.jpg",
11
16
  "todo": false,
12
- "traits": [
13
- "control",
14
- "colour"
15
- ],
16
- "why": "A single basketball hoop on a green plywood backboard against a pale sky, with the net's shadow on the wall. One clear subject and no ball or players.",
17
- "expect": [],
18
- "anyOf": [
19
- [
20
- "hoop",
21
- "basketball",
22
- "basket",
23
- "rim"
24
- ],
25
- [
26
- "backboard",
27
- "board"
28
- ],
29
- [
30
- "wall",
31
- "plywood",
32
- "wood"
33
- ]
34
- ],
35
- "forbid": [
36
- "ball",
37
- "person"
38
- ],
39
- "allow": [],
40
- "minCount": null,
41
- "maxCount": null,
42
- "watch": []
17
+ "note": "A single basketball hoop on a green plywood backboard against a pale sky, with the net's shadow on the wall. One clear subject and no ball or players.",
18
+ "metrics": [
19
+ {
20
+ "type": "contains-any",
21
+ "values": "hoop\nbasketball\nbasket\nrim",
22
+ "ignoreCase": true
23
+ },
24
+ {
25
+ "type": "contains-any",
26
+ "values": "backboard\nboard",
27
+ "ignoreCase": true
28
+ },
29
+ {
30
+ "type": "contains-any",
31
+ "values": "wall\nplywood\nwood",
32
+ "ignoreCase": true
33
+ },
34
+ {
35
+ "type": "contains",
36
+ "value": "ball",
37
+ "not": true,
38
+ "ignoreCase": true
39
+ },
40
+ {
41
+ "type": "contains",
42
+ "value": "person",
43
+ "not": true,
44
+ "ignoreCase": true
45
+ }
46
+ ]
43
47
  },
44
48
  {
45
49
  "id": "blue-boardwalk",
46
- "filename": "blue-boardwalk.jpg",
50
+ "item": "blue-boardwalk.jpg",
47
51
  "todo": false,
48
- "traits": [
49
- "colour"
50
- ],
51
- "why": "A man holding a camera stands on a wooden footbridge in woodland, the whole image washed blue with sun rays. Tests naming the scene through a heavy colour cast.",
52
- "expect": [],
53
- "anyOf": [
54
- [
55
- "bridge",
56
- "boardwalk",
57
- "walkway",
58
- "footbridge"
59
- ],
60
- [
61
- "person",
62
- "man"
63
- ],
64
- [
65
- "tree",
66
- "trees",
67
- "forest",
68
- "woods"
69
- ]
70
- ],
71
- "forbid": [
72
- "car",
73
- "dog"
74
- ],
75
- "allow": [],
76
- "minCount": null,
77
- "maxCount": null,
78
- "watch": []
52
+ "note": "A man holding a camera stands on a wooden footbridge in woodland, the whole image washed blue with sun rays. Tests naming the scene through a heavy colour cast.",
53
+ "metrics": [
54
+ {
55
+ "type": "contains-any",
56
+ "values": "bridge\nboardwalk\nwalkway\nfootbridge",
57
+ "ignoreCase": true
58
+ },
59
+ {
60
+ "type": "contains-any",
61
+ "values": "person\nman",
62
+ "ignoreCase": true
63
+ },
64
+ {
65
+ "type": "contains-any",
66
+ "values": "tree\ntrees\nforest\nwoods",
67
+ "ignoreCase": true
68
+ },
69
+ {
70
+ "type": "contains",
71
+ "value": "car",
72
+ "not": true,
73
+ "ignoreCase": true
74
+ },
75
+ {
76
+ "type": "contains",
77
+ "value": "dog",
78
+ "not": true,
79
+ "ignoreCase": true
80
+ }
81
+ ]
79
82
  },
80
83
  {
81
84
  "id": "busy-beach",
82
- "filename": "busy-beach.jpg",
85
+ "item": "busy-beach.jpg",
83
86
  "todo": false,
84
- "traits": [
85
- "busy",
86
- "landscape"
87
- ],
88
- "why": "A crowded sandy beach under a blue sky, with many people, striped windbreaks, tents and a green headland over turquoise sea. Tests covering a busy scene without inventing things.",
89
- "expect": [
90
- "beach"
91
- ],
92
- "anyOf": [
93
- [
94
- "people",
95
- "person",
96
- "crowd",
97
- "beachgoers",
98
- "tourists"
99
- ],
100
- [
101
- "sea",
102
- "ocean",
103
- "water"
104
- ],
105
- [
106
- "windbreak",
107
- "windbreaks",
108
- "tent",
109
- "tents"
110
- ]
111
- ],
112
- "forbid": [
113
- "snow",
114
- "palm"
115
- ],
116
- "allow": [],
117
- "minCount": 3,
118
- "maxCount": null,
119
- "watch": []
87
+ "note": "A crowded sandy beach under a blue sky, with many people, striped windbreaks, tents and a green headland over turquoise sea. Tests covering a busy scene without inventing things.",
88
+ "metrics": [
89
+ {
90
+ "type": "contains-all",
91
+ "values": "beach",
92
+ "ignoreCase": true
93
+ },
94
+ {
95
+ "type": "contains-any",
96
+ "values": "people\nperson\ncrowd\nbeachgoers\ntourists",
97
+ "ignoreCase": true
98
+ },
99
+ {
100
+ "type": "contains-any",
101
+ "values": "sea\nocean\nwater",
102
+ "ignoreCase": true
103
+ },
104
+ {
105
+ "type": "contains-any",
106
+ "values": "windbreak\nwindbreaks\ntent\ntents",
107
+ "ignoreCase": true
108
+ },
109
+ {
110
+ "type": "contains",
111
+ "value": "snow",
112
+ "not": true,
113
+ "ignoreCase": true
114
+ },
115
+ {
116
+ "type": "contains",
117
+ "value": "palm",
118
+ "not": true,
119
+ "ignoreCase": true
120
+ },
121
+ {
122
+ "type": "item-count",
123
+ "min": 3,
124
+ "max": null
125
+ }
126
+ ]
120
127
  },
121
128
  {
122
129
  "id": "butcher-sign",
123
- "filename": "butcher-sign.jpg",
130
+ "item": "butcher-sign.jpg",
124
131
  "todo": false,
125
- "traits": [
126
- "sign",
127
- "text"
128
- ],
129
- "why": "A white A-frame sidewalk sign reading BUTCHER CUT FRESH MEATS beside an empty road. Tests reading the sign while not inventing meat or traffic.",
130
- "expect": [
131
- "sign"
132
- ],
133
- "anyOf": [
134
- [
135
- "road",
136
- "street",
137
- "asphalt",
138
- "pavement",
139
- "sidewalk",
140
- "curb"
141
- ]
142
- ],
143
- "forbid": [
144
- "car",
145
- "person"
146
- ],
147
- "allow": [],
148
- "minCount": null,
149
- "maxCount": null,
150
- "watch": [
151
- "butcher",
152
- "cut",
153
- "fresh",
154
- "meats",
155
- "fresh meats"
132
+ "note": "A white A-frame sidewalk sign reading BUTCHER CUT FRESH MEATS beside an empty road. Tests reading the sign while not inventing meat or traffic.",
133
+ "metrics": [
134
+ {
135
+ "type": "contains-all",
136
+ "values": "sign",
137
+ "ignoreCase": true
138
+ },
139
+ {
140
+ "type": "contains-any",
141
+ "values": "road\nstreet\nasphalt\npavement\nsidewalk\ncurb",
142
+ "ignoreCase": true
143
+ },
144
+ {
145
+ "type": "contains",
146
+ "value": "car",
147
+ "not": true,
148
+ "ignoreCase": true
149
+ },
150
+ {
151
+ "type": "contains",
152
+ "value": "person",
153
+ "not": true,
154
+ "ignoreCase": true
155
+ },
156
+ {
157
+ "type": "contains-any",
158
+ "values": "butcher",
159
+ "weight": 0,
160
+ "ignoreCase": true
161
+ },
162
+ {
163
+ "type": "contains-any",
164
+ "values": "cut",
165
+ "weight": 0,
166
+ "ignoreCase": true
167
+ },
168
+ {
169
+ "type": "contains-any",
170
+ "values": "fresh",
171
+ "weight": 0,
172
+ "ignoreCase": true
173
+ },
174
+ {
175
+ "type": "contains-any",
176
+ "values": "meats",
177
+ "weight": 0,
178
+ "ignoreCase": true
179
+ },
180
+ {
181
+ "type": "contains-any",
182
+ "values": "fresh meats",
183
+ "weight": 0,
184
+ "ignoreCase": true
185
+ }
156
186
  ]
157
187
  },
158
188
  {
159
189
  "id": "cactus-flower",
160
- "filename": "cactus-flower.jpg",
190
+ "item": "cactus-flower.jpg",
161
191
  "todo": false,
162
- "traits": [
163
- "control"
164
- ],
165
- "why": "Prickly pear cactus pads with spines and two pink-orange flowers against a flat teal background. One clear subject.",
166
- "expect": [
167
- "cactus"
168
- ],
169
- "anyOf": [
170
- [
171
- "flower",
172
- "flowers",
173
- "blossom",
174
- "blossoms",
175
- "bloom",
176
- "blooms"
177
- ],
178
- [
179
- "spines",
180
- "spikes",
181
- "thorns",
182
- "needles"
183
- ]
184
- ],
185
- "forbid": [
186
- "sand",
187
- "bee"
188
- ],
189
- "allow": [],
190
- "minCount": null,
191
- "maxCount": null,
192
- "watch": []
192
+ "note": "Prickly pear cactus pads with spines and two pink-orange flowers against a flat teal background. One clear subject.",
193
+ "metrics": [
194
+ {
195
+ "type": "contains-all",
196
+ "values": "cactus",
197
+ "ignoreCase": true
198
+ },
199
+ {
200
+ "type": "contains-any",
201
+ "values": "flower\nflowers\nblossom\nblossoms\nbloom\nblooms",
202
+ "ignoreCase": true
203
+ },
204
+ {
205
+ "type": "contains-any",
206
+ "values": "spines\nspikes\nthorns\nneedles",
207
+ "ignoreCase": true
208
+ },
209
+ {
210
+ "type": "contains",
211
+ "value": "sand",
212
+ "not": true,
213
+ "ignoreCase": true
214
+ },
215
+ {
216
+ "type": "contains",
217
+ "value": "bee",
218
+ "not": true,
219
+ "ignoreCase": true
220
+ }
221
+ ]
193
222
  },
194
223
  {
195
224
  "id": "corner-shop",
196
- "filename": "corner-shop.jpg",
225
+ "item": "corner-shop.jpg",
197
226
  "todo": false,
198
- "traits": [
199
- "sign",
200
- "text"
201
- ],
202
- "why": "A corner discount store with a yellow 99 cent awning and a stocked window, a man with a large plastic bag walking past in hard light. Tests the shop, the awning text and the passer-by.",
203
- "expect": [],
204
- "anyOf": [
205
- [
206
- "shop",
207
- "store",
208
- "storefront",
209
- "shopfront"
210
- ],
211
- [
212
- "awning",
213
- "sign",
214
- "signage"
215
- ],
216
- [
217
- "person",
218
- "man",
219
- "pedestrian"
220
- ]
221
- ],
222
- "forbid": [
223
- "car",
224
- "dog"
225
- ],
226
- "allow": [],
227
- "minCount": null,
228
- "maxCount": null,
229
- "watch": [
230
- "99¢",
231
- "& up",
232
- "gift",
233
- "toy",
234
- "hardware",
235
- "houseware",
236
- "stationery",
237
- "cheap & quality",
238
- "59 4th ave",
239
- "open"
227
+ "note": "A corner discount store with a yellow 99 cent awning and a stocked window, a man with a large plastic bag walking past in hard light. Tests the shop, the awning text and the passer-by.",
228
+ "metrics": [
229
+ {
230
+ "type": "contains-any",
231
+ "values": "shop\nstore\nstorefront\nshopfront",
232
+ "ignoreCase": true
233
+ },
234
+ {
235
+ "type": "contains-any",
236
+ "values": "awning\nsign\nsignage",
237
+ "ignoreCase": true
238
+ },
239
+ {
240
+ "type": "contains-any",
241
+ "values": "person\nman\npedestrian",
242
+ "ignoreCase": true
243
+ },
244
+ {
245
+ "type": "contains",
246
+ "value": "car",
247
+ "not": true,
248
+ "ignoreCase": true
249
+ },
250
+ {
251
+ "type": "contains",
252
+ "value": "dog",
253
+ "not": true,
254
+ "ignoreCase": true
255
+ },
256
+ {
257
+ "type": "contains-any",
258
+ "values": "99¢",
259
+ "weight": 0,
260
+ "ignoreCase": true
261
+ },
262
+ {
263
+ "type": "contains-any",
264
+ "values": "& up",
265
+ "weight": 0,
266
+ "ignoreCase": true
267
+ },
268
+ {
269
+ "type": "contains-any",
270
+ "values": "gift",
271
+ "weight": 0,
272
+ "ignoreCase": true
273
+ },
274
+ {
275
+ "type": "contains-any",
276
+ "values": "toy",
277
+ "weight": 0,
278
+ "ignoreCase": true
279
+ },
280
+ {
281
+ "type": "contains-any",
282
+ "values": "hardware",
283
+ "weight": 0,
284
+ "ignoreCase": true
285
+ },
286
+ {
287
+ "type": "contains-any",
288
+ "values": "houseware",
289
+ "weight": 0,
290
+ "ignoreCase": true
291
+ },
292
+ {
293
+ "type": "contains-any",
294
+ "values": "stationery",
295
+ "weight": 0,
296
+ "ignoreCase": true
297
+ },
298
+ {
299
+ "type": "contains-any",
300
+ "values": "cheap & quality",
301
+ "weight": 0,
302
+ "ignoreCase": true
303
+ },
304
+ {
305
+ "type": "contains-any",
306
+ "values": "59 4th ave",
307
+ "weight": 0,
308
+ "ignoreCase": true
309
+ },
310
+ {
311
+ "type": "contains-any",
312
+ "values": "open",
313
+ "weight": 0,
314
+ "ignoreCase": true
315
+ }
240
316
  ]
241
317
  },
242
318
  {
243
319
  "id": "crosswalk-cyclist-panorama",
244
- "filename": "crosswalk-cyclist-panorama.jpg",
320
+ "item": "crosswalk-cyclist-panorama.jpg",
245
321
  "todo": false,
246
- "traits": [
247
- "wide",
248
- "compound"
249
- ],
250
- "why": "A very wide strip showing a cyclist crossing a zebra crossing, cropped at the shoulders. Tests an extreme aspect ratio and the multi-word crossing.",
251
- "expect": [],
252
- "anyOf": [
253
- [
254
- "bicycle",
255
- "bike",
256
- "cyclist"
257
- ],
258
- [
259
- "crosswalk",
260
- "zebra crossing",
261
- "pedestrian crossing",
262
- "crossing",
263
- "road",
264
- "street",
265
- "stripes"
266
- ],
267
- [
268
- "person",
269
- "rider",
270
- "man"
271
- ]
272
- ],
273
- "forbid": [
274
- "car",
275
- "dog"
276
- ],
277
- "allow": [],
278
- "minCount": null,
279
- "maxCount": null,
280
- "watch": []
322
+ "note": "A very wide strip showing a cyclist crossing a zebra crossing, cropped at the shoulders. Tests an extreme aspect ratio and the multi-word crossing.",
323
+ "metrics": [
324
+ {
325
+ "type": "contains-any",
326
+ "values": "bicycle\nbike\ncyclist",
327
+ "ignoreCase": true
328
+ },
329
+ {
330
+ "type": "contains-any",
331
+ "values": "crosswalk\nzebra crossing\npedestrian crossing\ncrossing\nroad\nstreet\nstripes",
332
+ "ignoreCase": true
333
+ },
334
+ {
335
+ "type": "contains-any",
336
+ "values": "person\nrider\nman",
337
+ "ignoreCase": true
338
+ },
339
+ {
340
+ "type": "contains",
341
+ "value": "car",
342
+ "not": true,
343
+ "ignoreCase": true
344
+ },
345
+ {
346
+ "type": "contains",
347
+ "value": "dog",
348
+ "not": true,
349
+ "ignoreCase": true
350
+ }
351
+ ]
281
352
  },
282
353
  {
283
354
  "id": "cyanotype-room",
284
- "filename": "cyanotype-room.jpg",
355
+ "item": "cyanotype-room.jpg",
285
356
  "todo": false,
286
- "traits": [
287
- "monochrome",
288
- "interior"
289
- ],
290
- "why": "An old cyanotype print of a room with glass-fronted cabinets full of scientific instruments, a table and a chair on a mosaic floor. Tests naming the contents through a blue monochrome print with no people.",
291
- "expect": [],
292
- "anyOf": [
293
- [
294
- "table",
295
- "desk"
296
- ],
297
- [
298
- "chair"
299
- ],
300
- [
301
- "cabinet",
302
- "cabinets",
303
- "shelves",
304
- "shelf",
305
- "bookcase",
306
- "display case"
307
- ]
308
- ],
309
- "forbid": [
310
- "person",
311
- "people"
312
- ],
313
- "allow": [],
314
- "minCount": null,
315
- "maxCount": null,
316
- "watch": [
317
- "13403"
357
+ "note": "An old cyanotype print of a room with glass-fronted cabinets full of scientific instruments, a table and a chair on a mosaic floor. Tests naming the contents through a blue monochrome print with no people.",
358
+ "metrics": [
359
+ {
360
+ "type": "contains-any",
361
+ "values": "table\ndesk",
362
+ "ignoreCase": true
363
+ },
364
+ {
365
+ "type": "contains-any",
366
+ "values": "chair",
367
+ "ignoreCase": true
368
+ },
369
+ {
370
+ "type": "contains-any",
371
+ "values": "cabinet\ncabinets\nshelves\nshelf\nbookcase\ndisplay case",
372
+ "ignoreCase": true
373
+ },
374
+ {
375
+ "type": "contains",
376
+ "value": "person",
377
+ "not": true,
378
+ "ignoreCase": true
379
+ },
380
+ {
381
+ "type": "contains",
382
+ "value": "people",
383
+ "not": true,
384
+ "ignoreCase": true
385
+ },
386
+ {
387
+ "type": "contains-any",
388
+ "values": "13403",
389
+ "weight": 0,
390
+ "ignoreCase": true
391
+ }
318
392
  ]
319
393
  },
320
394
  {
321
395
  "id": "dead-end-sign",
322
- "filename": "dead-end-sign.jpg",
396
+ "item": "dead-end-sign.jpg",
323
397
  "todo": false,
324
- "traits": [
325
- "sign",
326
- "text"
327
- ],
328
- "why": "A red sign reading STOP DEAD END NO OUTLET TURN AROUND HERE nailed to a wooden utility pole among trees. Tests reading a sign and naming its post.",
329
- "expect": [
330
- "sign"
331
- ],
332
- "anyOf": [
333
- [
334
- "pole",
335
- "utility pole",
336
- "telephone pole",
337
- "post"
338
- ],
339
- [
340
- "tree",
341
- "trees",
342
- "forest",
343
- "woods"
344
- ]
345
- ],
346
- "forbid": [
347
- "car",
348
- "person"
349
- ],
350
- "allow": [],
351
- "minCount": null,
352
- "maxCount": null,
353
- "watch": [
354
- "stop",
355
- "dead end",
356
- "no outlet",
357
- "turn around here"
398
+ "note": "A red sign reading STOP DEAD END NO OUTLET TURN AROUND HERE nailed to a wooden utility pole among trees. Tests reading a sign and naming its post.",
399
+ "metrics": [
400
+ {
401
+ "type": "contains-all",
402
+ "values": "sign",
403
+ "ignoreCase": true
404
+ },
405
+ {
406
+ "type": "contains-any",
407
+ "values": "pole\nutility pole\ntelephone pole\npost",
408
+ "ignoreCase": true
409
+ },
410
+ {
411
+ "type": "contains-any",
412
+ "values": "tree\ntrees\nforest\nwoods",
413
+ "ignoreCase": true
414
+ },
415
+ {
416
+ "type": "contains",
417
+ "value": "car",
418
+ "not": true,
419
+ "ignoreCase": true
420
+ },
421
+ {
422
+ "type": "contains",
423
+ "value": "person",
424
+ "not": true,
425
+ "ignoreCase": true
426
+ },
427
+ {
428
+ "type": "contains-any",
429
+ "values": "stop",
430
+ "weight": 0,
431
+ "ignoreCase": true
432
+ },
433
+ {
434
+ "type": "contains-any",
435
+ "values": "dead end",
436
+ "weight": 0,
437
+ "ignoreCase": true
438
+ },
439
+ {
440
+ "type": "contains-any",
441
+ "values": "no outlet",
442
+ "weight": 0,
443
+ "ignoreCase": true
444
+ },
445
+ {
446
+ "type": "contains-any",
447
+ "values": "turn around here",
448
+ "weight": 0,
449
+ "ignoreCase": true
450
+ }
358
451
  ]
359
452
  },
360
453
  {
361
454
  "id": "dog-in-snow",
362
- "filename": "dog-in-snow.jpg",
455
+ "item": "dog-in-snow.jpg",
363
456
  "todo": false,
364
- "traits": [
365
- "animal",
366
- "landscape"
367
- ],
368
- "why": "A merle dog with a pale blue eye stands in a snowy field at dusk. One animal and an unmistakable setting.",
369
- "expect": [
370
- "dog",
371
- "snow"
372
- ],
373
- "anyOf": [
374
- [
375
- "field",
376
- "snowy field",
377
- "grass",
378
- "prairie",
379
- "farmland"
380
- ]
381
- ],
382
- "forbid": [
383
- "cat",
384
- "sand"
385
- ],
386
- "allow": [],
387
- "minCount": null,
388
- "maxCount": null,
389
- "watch": []
457
+ "note": "A merle dog with a pale blue eye stands in a snowy field at dusk. One animal and an unmistakable setting.",
458
+ "metrics": [
459
+ {
460
+ "type": "contains-all",
461
+ "values": "dog\nsnow",
462
+ "ignoreCase": true
463
+ },
464
+ {
465
+ "type": "contains-any",
466
+ "values": "field\nsnowy field\ngrass\nprairie\nfarmland",
467
+ "ignoreCase": true
468
+ },
469
+ {
470
+ "type": "contains",
471
+ "value": "cat",
472
+ "not": true,
473
+ "ignoreCase": true
474
+ },
475
+ {
476
+ "type": "contains",
477
+ "value": "sand",
478
+ "not": true,
479
+ "ignoreCase": true
480
+ }
481
+ ]
390
482
  },
391
483
  {
392
484
  "id": "empty-bedroom",
393
- "filename": "empty-bedroom.jpg",
485
+ "item": "empty-bedroom.jpg",
394
486
  "todo": false,
395
- "traits": [
396
- "interior",
397
- "empty"
398
- ],
399
- "why": "A quiet bedroom: a made bed with pillows and a blanket, a bedside lamp, a window and striped wallpaper, with nobody in it. Easy to pad with a person or a television that is not there.",
400
- "expect": [
401
- "bed"
402
- ],
403
- "anyOf": [
404
- [
405
- "pillow",
406
- "pillows",
407
- "cushion",
408
- "cushions"
409
- ],
410
- [
411
- "window"
412
- ],
413
- [
414
- "lamp",
415
- "table lamp",
416
- "bedside lamp"
417
- ]
418
- ],
419
- "forbid": [
420
- "person",
421
- "television",
422
- "cat"
423
- ],
424
- "allow": [],
425
- "minCount": null,
426
- "maxCount": null,
427
- "watch": []
487
+ "note": "A quiet bedroom: a made bed with pillows and a blanket, a bedside lamp, a window and striped wallpaper, with nobody in it. Easy to pad with a person or a television that is not there.",
488
+ "metrics": [
489
+ {
490
+ "type": "contains-all",
491
+ "values": "bed",
492
+ "ignoreCase": true
493
+ },
494
+ {
495
+ "type": "contains-any",
496
+ "values": "pillow\npillows\ncushion\ncushions",
497
+ "ignoreCase": true
498
+ },
499
+ {
500
+ "type": "contains-any",
501
+ "values": "window",
502
+ "ignoreCase": true
503
+ },
504
+ {
505
+ "type": "contains-any",
506
+ "values": "lamp\ntable lamp\nbedside lamp",
507
+ "ignoreCase": true
508
+ },
509
+ {
510
+ "type": "contains",
511
+ "value": "person",
512
+ "not": true,
513
+ "ignoreCase": true
514
+ },
515
+ {
516
+ "type": "contains",
517
+ "value": "television",
518
+ "not": true,
519
+ "ignoreCase": true
520
+ },
521
+ {
522
+ "type": "contains",
523
+ "value": "cat",
524
+ "not": true,
525
+ "ignoreCase": true
526
+ }
527
+ ]
428
528
  },
429
529
  {
430
530
  "id": "farmers-market-stall",
431
- "filename": "farmers-market-stall.jpg",
531
+ "item": "farmers-market-stall.jpg",
432
532
  "todo": false,
433
- "traits": [
434
- "busy",
435
- "food",
436
- "sign"
437
- ],
438
- "why": "A market stall under white canopies with baskets of squash, zucchini, greens and blueberries, a chalkboard price list and a few people. Tests a busy food scene and a handwritten board.",
439
- "expect": [],
440
- "anyOf": [
441
- [
442
- "vegetables",
443
- "vegetable",
444
- "produce",
445
- "veggies",
446
- "squash",
447
- "zucchini"
448
- ],
449
- [
450
- "tent",
451
- "tents",
452
- "canopy",
453
- "canopies"
454
- ],
455
- [
456
- "chalkboard",
457
- "blackboard",
458
- "sign",
459
- "menu board"
460
- ],
461
- [
462
- "people",
463
- "person",
464
- "man",
465
- "vendor",
466
- "customer"
467
- ]
468
- ],
469
- "forbid": [
470
- "meat",
471
- "fish"
472
- ],
473
- "allow": [],
474
- "minCount": 3,
475
- "maxCount": null,
476
- "watch": [
477
- "greenbrier farms",
478
- "veggies",
479
- "per bunch",
480
- "kale",
481
- "chard",
482
- "carrots",
483
- "blueberries",
484
- "zucchini",
485
- "squash",
486
- "cucumbers",
487
- "usda organic"
533
+ "note": "A market stall under white canopies with baskets of squash, zucchini, greens and blueberries, a chalkboard price list and a few people. Tests a busy food scene and a handwritten board.",
534
+ "metrics": [
535
+ {
536
+ "type": "contains-any",
537
+ "values": "vegetables\nvegetable\nproduce\nveggies\nsquash\nzucchini",
538
+ "ignoreCase": true
539
+ },
540
+ {
541
+ "type": "contains-any",
542
+ "values": "tent\ntents\ncanopy\ncanopies",
543
+ "ignoreCase": true
544
+ },
545
+ {
546
+ "type": "contains-any",
547
+ "values": "chalkboard\nblackboard\nsign\nmenu board",
548
+ "ignoreCase": true
549
+ },
550
+ {
551
+ "type": "contains-any",
552
+ "values": "people\nperson\nman\nvendor\ncustomer",
553
+ "ignoreCase": true
554
+ },
555
+ {
556
+ "type": "contains",
557
+ "value": "meat",
558
+ "not": true,
559
+ "ignoreCase": true
560
+ },
561
+ {
562
+ "type": "contains",
563
+ "value": "fish",
564
+ "not": true,
565
+ "ignoreCase": true
566
+ },
567
+ {
568
+ "type": "item-count",
569
+ "min": 3,
570
+ "max": null
571
+ },
572
+ {
573
+ "type": "contains-any",
574
+ "values": "greenbrier farms",
575
+ "weight": 0,
576
+ "ignoreCase": true
577
+ },
578
+ {
579
+ "type": "contains-any",
580
+ "values": "veggies",
581
+ "weight": 0,
582
+ "ignoreCase": true
583
+ },
584
+ {
585
+ "type": "contains-any",
586
+ "values": "per bunch",
587
+ "weight": 0,
588
+ "ignoreCase": true
589
+ },
590
+ {
591
+ "type": "contains-any",
592
+ "values": "kale",
593
+ "weight": 0,
594
+ "ignoreCase": true
595
+ },
596
+ {
597
+ "type": "contains-any",
598
+ "values": "chard",
599
+ "weight": 0,
600
+ "ignoreCase": true
601
+ },
602
+ {
603
+ "type": "contains-any",
604
+ "values": "carrots",
605
+ "weight": 0,
606
+ "ignoreCase": true
607
+ },
608
+ {
609
+ "type": "contains-any",
610
+ "values": "blueberries",
611
+ "weight": 0,
612
+ "ignoreCase": true
613
+ },
614
+ {
615
+ "type": "contains-any",
616
+ "values": "zucchini",
617
+ "weight": 0,
618
+ "ignoreCase": true
619
+ },
620
+ {
621
+ "type": "contains-any",
622
+ "values": "squash",
623
+ "weight": 0,
624
+ "ignoreCase": true
625
+ },
626
+ {
627
+ "type": "contains-any",
628
+ "values": "cucumbers",
629
+ "weight": 0,
630
+ "ignoreCase": true
631
+ },
632
+ {
633
+ "type": "contains-any",
634
+ "values": "usda organic",
635
+ "weight": 0,
636
+ "ignoreCase": true
637
+ }
488
638
  ]
489
639
  },
490
640
  {
491
641
  "id": "four-jets",
492
- "filename": "four-jets.jpg",
642
+ "item": "four-jets.jpg",
493
643
  "todo": false,
494
- "traits": [
495
- "count",
496
- "vehicle"
497
- ],
498
- "why": "Exactly four red and white jets climb in formation against a dark blue sky, trailing white smoke. Tests the aircraft and their trails; the count of four is the point of the image.",
499
- "expect": [],
500
- "anyOf": [
501
- [
502
- "jet",
503
- "jets",
504
- "plane",
505
- "planes",
506
- "airplane",
507
- "airplanes",
508
- "aircraft"
509
- ],
510
- [
511
- "smoke",
512
- "trail",
513
- "trails",
514
- "contrail",
515
- "contrails",
516
- "vapor trail"
517
- ],
518
- [
519
- "sky"
520
- ]
521
- ],
522
- "forbid": [
523
- "bird",
524
- "helicopter"
525
- ],
526
- "allow": [],
527
- "minCount": null,
528
- "maxCount": null,
529
- "watch": []
644
+ "note": "Exactly four red and white jets climb in formation against a dark blue sky, trailing white smoke. Tests the aircraft and their trails; the count of four is the point of the image.",
645
+ "metrics": [
646
+ {
647
+ "type": "contains-any",
648
+ "values": "jet\njets\nplane\nplanes\nairplane\nairplanes\naircraft",
649
+ "ignoreCase": true
650
+ },
651
+ {
652
+ "type": "contains-any",
653
+ "values": "smoke\ntrail\ntrails\ncontrail\ncontrails\nvapor trail",
654
+ "ignoreCase": true
655
+ },
656
+ {
657
+ "type": "contains-any",
658
+ "values": "sky",
659
+ "ignoreCase": true
660
+ },
661
+ {
662
+ "type": "contains",
663
+ "value": "bird",
664
+ "not": true,
665
+ "ignoreCase": true
666
+ },
667
+ {
668
+ "type": "contains",
669
+ "value": "helicopter",
670
+ "not": true,
671
+ "ignoreCase": true
672
+ }
673
+ ]
530
674
  },
531
675
  {
532
676
  "id": "german-shepherd",
533
- "filename": "german-shepherd.jpg",
677
+ "item": "german-shepherd.jpg",
534
678
  "todo": false,
535
- "traits": [
536
- "animal",
537
- "control"
538
- ],
539
- "why": "A German Shepherd lying on a concrete floor looking at the camera, a blurred chair and table behind. One clear animal subject.",
540
- "expect": [
541
- "dog"
542
- ],
543
- "anyOf": [
544
- [
545
- "floor",
546
- "concrete",
547
- "ground"
548
- ]
549
- ],
550
- "forbid": [
551
- "cat",
552
- "wolf",
553
- "person"
554
- ],
555
- "allow": [],
556
- "minCount": null,
557
- "maxCount": null,
558
- "watch": []
679
+ "note": "A German Shepherd lying on a concrete floor looking at the camera, a blurred chair and table behind. One clear animal subject.",
680
+ "metrics": [
681
+ {
682
+ "type": "contains-all",
683
+ "values": "dog",
684
+ "ignoreCase": true
685
+ },
686
+ {
687
+ "type": "contains-any",
688
+ "values": "floor\nconcrete\nground",
689
+ "ignoreCase": true
690
+ },
691
+ {
692
+ "type": "contains",
693
+ "value": "cat",
694
+ "not": true,
695
+ "ignoreCase": true
696
+ },
697
+ {
698
+ "type": "contains",
699
+ "value": "wolf",
700
+ "not": true,
701
+ "ignoreCase": true
702
+ },
703
+ {
704
+ "type": "contains",
705
+ "value": "person",
706
+ "not": true,
707
+ "ignoreCase": true
708
+ }
709
+ ]
559
710
  },
560
711
  {
561
712
  "id": "harbour-bridge-dusk",
562
- "filename": "harbour-bridge-dusk.jpg",
713
+ "item": "harbour-bridge-dusk.jpg",
563
714
  "todo": false,
564
- "traits": [
565
- "landscape"
566
- ],
567
- "why": "A steel arch bridge silhouetted over a harbour at dusk, with flags on top and a city skyline and Ferris wheel beyond. Tests the landmark shape and the water.",
568
- "expect": [
569
- "bridge"
570
- ],
571
- "anyOf": [
572
- [
573
- "water",
574
- "harbour",
575
- "harbor",
576
- "river",
577
- "sea"
578
- ],
579
- [
580
- "city",
581
- "skyline",
582
- "buildings",
583
- "cityscape"
584
- ],
585
- [
586
- "sky",
587
- "dusk",
588
- "sunset",
589
- "evening"
590
- ]
591
- ],
592
- "forbid": [
593
- "snow",
594
- "mountain"
595
- ],
596
- "allow": [],
597
- "minCount": null,
598
- "maxCount": null,
599
- "watch": []
715
+ "note": "A steel arch bridge silhouetted over a harbour at dusk, with flags on top and a city skyline and Ferris wheel beyond. Tests the landmark shape and the water.",
716
+ "metrics": [
717
+ {
718
+ "type": "contains-all",
719
+ "values": "bridge",
720
+ "ignoreCase": true
721
+ },
722
+ {
723
+ "type": "contains-any",
724
+ "values": "water\nharbour\nharbor\nriver\nsea",
725
+ "ignoreCase": true
726
+ },
727
+ {
728
+ "type": "contains-any",
729
+ "values": "city\nskyline\nbuildings\ncityscape",
730
+ "ignoreCase": true
731
+ },
732
+ {
733
+ "type": "contains-any",
734
+ "values": "sky\ndusk\nsunset\nevening",
735
+ "ignoreCase": true
736
+ },
737
+ {
738
+ "type": "contains",
739
+ "value": "snow",
740
+ "not": true,
741
+ "ignoreCase": true
742
+ },
743
+ {
744
+ "type": "contains",
745
+ "value": "mountain",
746
+ "not": true,
747
+ "ignoreCase": true
748
+ }
749
+ ]
600
750
  },
601
751
  {
602
752
  "id": "harrow-on-the-hill-sign",
603
- "filename": "harrow-on-the-hill-sign.jpg",
753
+ "item": "harrow-on-the-hill-sign.jpg",
604
754
  "todo": false,
605
- "traits": [
606
- "sign",
607
- "text"
608
- ],
609
- "why": "A white arrow-shaped direction sign reading Harrow on the Hill 1, with an Except for access plate above and brick buildings behind. Tests reading a road sign.",
610
- "expect": [
611
- "sign"
612
- ],
613
- "anyOf": [
614
- [
615
- "building",
616
- "buildings",
617
- "house",
618
- "houses",
619
- "apartment",
620
- "apartments"
621
- ],
622
- [
623
- "tree",
624
- "trees",
625
- "branches"
626
- ],
627
- [
628
- "pole",
629
- "post",
630
- "lamp post"
631
- ]
632
- ],
633
- "forbid": [
634
- "car",
635
- "person"
636
- ],
637
- "allow": [],
638
- "minCount": null,
639
- "maxCount": null,
640
- "watch": [
641
- "harrow",
642
- "on the hill",
643
- "harrow on the hill",
644
- "except for access"
755
+ "note": "A white arrow-shaped direction sign reading Harrow on the Hill 1, with an Except for access plate above and brick buildings behind. Tests reading a road sign.",
756
+ "metrics": [
757
+ {
758
+ "type": "contains-all",
759
+ "values": "sign",
760
+ "ignoreCase": true
761
+ },
762
+ {
763
+ "type": "contains-any",
764
+ "values": "building\nbuildings\nhouse\nhouses\napartment\napartments",
765
+ "ignoreCase": true
766
+ },
767
+ {
768
+ "type": "contains-any",
769
+ "values": "tree\ntrees\nbranches",
770
+ "ignoreCase": true
771
+ },
772
+ {
773
+ "type": "contains-any",
774
+ "values": "pole\npost\nlamp post",
775
+ "ignoreCase": true
776
+ },
777
+ {
778
+ "type": "contains",
779
+ "value": "car",
780
+ "not": true,
781
+ "ignoreCase": true
782
+ },
783
+ {
784
+ "type": "contains",
785
+ "value": "person",
786
+ "not": true,
787
+ "ignoreCase": true
788
+ },
789
+ {
790
+ "type": "contains-any",
791
+ "values": "harrow",
792
+ "weight": 0,
793
+ "ignoreCase": true
794
+ },
795
+ {
796
+ "type": "contains-any",
797
+ "values": "on the hill",
798
+ "weight": 0,
799
+ "ignoreCase": true
800
+ },
801
+ {
802
+ "type": "contains-any",
803
+ "values": "harrow on the hill",
804
+ "weight": 0,
805
+ "ignoreCase": true
806
+ },
807
+ {
808
+ "type": "contains-any",
809
+ "values": "except for access",
810
+ "weight": 0,
811
+ "ignoreCase": true
812
+ }
645
813
  ]
646
814
  },
647
815
  {
648
816
  "id": "hong-kong-street",
649
- "filename": "hong-kong-street.jpg",
817
+ "item": "hong-kong-street.jpg",
650
818
  "todo": false,
651
- "traits": [
652
- "busy",
653
- "sign",
654
- "text"
655
- ],
656
- "why": "A Hong Kong street with a tiled mosaic wall reading I love Hong Kong, a Kai Chiu Road street sign, a souvenir shop and several pedestrians. Tests a busy street scene full of text.",
657
- "expect": [],
658
- "anyOf": [
659
- [
660
- "people",
661
- "person",
662
- "pedestrians",
663
- "pedestrian"
664
- ],
665
- [
666
- "sign",
667
- "street sign",
668
- "road sign"
669
- ],
670
- [
671
- "mosaic",
672
- "mural",
673
- "tiles",
674
- "tile",
675
- "wall art"
676
- ],
677
- [
678
- "shop",
679
- "store",
680
- "storefront",
681
- "souvenir shop"
682
- ]
683
- ],
684
- "forbid": [
685
- "bicycle",
686
- "dog"
687
- ],
688
- "allow": [],
689
- "minCount": 3,
690
- "maxCount": null,
691
- "watch": [
692
- "kai chiu road",
693
- "hong kong",
694
- "i love hong kong",
695
- "souvenir",
696
- "hello from hong kong",
697
- "disneyland"
819
+ "note": "A Hong Kong street with a tiled mosaic wall reading I love Hong Kong, a Kai Chiu Road street sign, a souvenir shop and several pedestrians. Tests a busy street scene full of text.",
820
+ "metrics": [
821
+ {
822
+ "type": "contains-any",
823
+ "values": "people\nperson\npedestrians\npedestrian",
824
+ "ignoreCase": true
825
+ },
826
+ {
827
+ "type": "contains-any",
828
+ "values": "sign\nstreet sign\nroad sign",
829
+ "ignoreCase": true
830
+ },
831
+ {
832
+ "type": "contains-any",
833
+ "values": "mosaic\nmural\ntiles\ntile\nwall art",
834
+ "ignoreCase": true
835
+ },
836
+ {
837
+ "type": "contains-any",
838
+ "values": "shop\nstore\nstorefront\nsouvenir shop",
839
+ "ignoreCase": true
840
+ },
841
+ {
842
+ "type": "contains",
843
+ "value": "bicycle",
844
+ "not": true,
845
+ "ignoreCase": true
846
+ },
847
+ {
848
+ "type": "contains",
849
+ "value": "dog",
850
+ "not": true,
851
+ "ignoreCase": true
852
+ },
853
+ {
854
+ "type": "item-count",
855
+ "min": 3,
856
+ "max": null
857
+ },
858
+ {
859
+ "type": "contains-any",
860
+ "values": "kai chiu road",
861
+ "weight": 0,
862
+ "ignoreCase": true
863
+ },
864
+ {
865
+ "type": "contains-any",
866
+ "values": "hong kong",
867
+ "weight": 0,
868
+ "ignoreCase": true
869
+ },
870
+ {
871
+ "type": "contains-any",
872
+ "values": "i love hong kong",
873
+ "weight": 0,
874
+ "ignoreCase": true
875
+ },
876
+ {
877
+ "type": "contains-any",
878
+ "values": "souvenir",
879
+ "weight": 0,
880
+ "ignoreCase": true
881
+ },
882
+ {
883
+ "type": "contains-any",
884
+ "values": "hello from hong kong",
885
+ "weight": 0,
886
+ "ignoreCase": true
887
+ },
888
+ {
889
+ "type": "contains-any",
890
+ "values": "disneyland",
891
+ "weight": 0,
892
+ "ignoreCase": true
893
+ }
698
894
  ]
699
895
  },
700
896
  {
701
897
  "id": "house-salisbury-street",
702
- "filename": "house-salisbury-street.jpg",
898
+ "item": "house-salisbury-street.jpg",
703
899
  "todo": false,
704
- "traits": [
705
- "sign",
706
- "text"
707
- ],
708
- "why": "A cream rendered house with a red front door, sash windows and a small porch, a Salisbury St sign on the wall beside it and a house name plate. Tests the house, its door and the street sign.",
709
- "expect": [],
710
- "anyOf": [
711
- [
712
- "house",
713
- "home",
714
- "building",
715
- "cottage"
716
- ],
717
- [
718
- "door",
719
- "red door",
720
- "front door"
721
- ],
722
- [
723
- "window",
724
- "windows"
725
- ],
726
- [
727
- "sign",
728
- "street sign",
729
- "plaque"
730
- ]
731
- ],
732
- "forbid": [
733
- "car",
734
- "person"
735
- ],
736
- "allow": [],
737
- "minCount": null,
738
- "maxCount": null,
739
- "watch": [
740
- "salisbury st",
741
- "the old house at home",
742
- "blood"
900
+ "note": "A cream rendered house with a red front door, sash windows and a small porch, a Salisbury St sign on the wall beside it and a house name plate. Tests the house, its door and the street sign.",
901
+ "metrics": [
902
+ {
903
+ "type": "contains-any",
904
+ "values": "house\nhome\nbuilding\ncottage",
905
+ "ignoreCase": true
906
+ },
907
+ {
908
+ "type": "contains-any",
909
+ "values": "door\nred door\nfront door",
910
+ "ignoreCase": true
911
+ },
912
+ {
913
+ "type": "contains-any",
914
+ "values": "window\nwindows",
915
+ "ignoreCase": true
916
+ },
917
+ {
918
+ "type": "contains-any",
919
+ "values": "sign\nstreet sign\nplaque",
920
+ "ignoreCase": true
921
+ },
922
+ {
923
+ "type": "contains",
924
+ "value": "car",
925
+ "not": true,
926
+ "ignoreCase": true
927
+ },
928
+ {
929
+ "type": "contains",
930
+ "value": "person",
931
+ "not": true,
932
+ "ignoreCase": true
933
+ },
934
+ {
935
+ "type": "contains-any",
936
+ "values": "salisbury st",
937
+ "weight": 0,
938
+ "ignoreCase": true
939
+ },
940
+ {
941
+ "type": "contains-any",
942
+ "values": "the old house at home",
943
+ "weight": 0,
944
+ "ignoreCase": true
945
+ },
946
+ {
947
+ "type": "contains-any",
948
+ "values": "blood",
949
+ "weight": 0,
950
+ "ignoreCase": true
951
+ }
743
952
  ]
744
953
  },
745
954
  {
746
955
  "id": "infrared-orchard",
747
- "filename": "infrared-orchard.jpg",
956
+ "item": "infrared-orchard.jpg",
748
957
  "todo": false,
749
- "traits": [
750
- "colour",
751
- "landscape"
752
- ],
753
- "why": "Rows of spreading trees over dry grass, rendered magenta by infrared. The pale ground is easy to misread as snow.",
754
- "expect": [],
755
- "anyOf": [
756
- [
757
- "tree",
758
- "trees"
759
- ],
760
- [
761
- "orchard",
762
- "forest",
763
- "woods",
764
- "grove",
765
- "woodland",
766
- "park"
767
- ],
768
- [
769
- "grass",
770
- "field",
771
- "ground",
772
- "meadow"
773
- ]
774
- ],
775
- "forbid": [
776
- "snow",
777
- "person",
778
- "building"
779
- ],
780
- "allow": [],
781
- "minCount": null,
782
- "maxCount": null,
783
- "watch": []
958
+ "note": "Rows of spreading trees over dry grass, rendered magenta by infrared. The pale ground is easy to misread as snow.",
959
+ "metrics": [
960
+ {
961
+ "type": "contains-any",
962
+ "values": "tree\ntrees",
963
+ "ignoreCase": true
964
+ },
965
+ {
966
+ "type": "contains-any",
967
+ "values": "orchard\nforest\nwoods\ngrove\nwoodland\npark",
968
+ "ignoreCase": true
969
+ },
970
+ {
971
+ "type": "contains-any",
972
+ "values": "grass\nfield\nground\nmeadow",
973
+ "ignoreCase": true
974
+ },
975
+ {
976
+ "type": "contains",
977
+ "value": "snow",
978
+ "not": true,
979
+ "ignoreCase": true
980
+ },
981
+ {
982
+ "type": "contains",
983
+ "value": "person",
984
+ "not": true,
985
+ "ignoreCase": true
986
+ },
987
+ {
988
+ "type": "contains",
989
+ "value": "building",
990
+ "not": true,
991
+ "ignoreCase": true
992
+ }
993
+ ]
784
994
  },
785
995
  {
786
996
  "id": "keyboard-desk",
787
- "filename": "keyboard-desk.jpg",
997
+ "item": "keyboard-desk.jpg",
788
998
  "todo": false,
789
- "traits": [
790
- "interior",
791
- "control"
792
- ],
793
- "why": "A black and orange mechanical keyboard on a felt desk mat beside two potted succulents, a mouse in the foreground and a monitor stand behind. Tests the main object and the small things around it.",
794
- "expect": [
795
- "keyboard"
796
- ],
797
- "anyOf": [
798
- [
799
- "plant",
800
- "plants",
801
- "succulent",
802
- "succulents",
803
- "potted plant",
804
- "cactus"
805
- ],
806
- [
807
- "mouse",
808
- "computer mouse"
809
- ],
810
- [
811
- "desk",
812
- "desk mat",
813
- "mat",
814
- "table"
815
- ]
816
- ],
817
- "forbid": [
818
- "laptop",
819
- "person",
820
- "coffee"
821
- ],
822
- "allow": [],
823
- "minCount": null,
824
- "maxCount": null,
825
- "watch": [
826
- "enter",
827
- "backspace",
828
- "shift",
829
- "ctrl"
999
+ "note": "A black and orange mechanical keyboard on a felt desk mat beside two potted succulents, a mouse in the foreground and a monitor stand behind. Tests the main object and the small things around it.",
1000
+ "metrics": [
1001
+ {
1002
+ "type": "contains-all",
1003
+ "values": "keyboard",
1004
+ "ignoreCase": true
1005
+ },
1006
+ {
1007
+ "type": "contains-any",
1008
+ "values": "plant\nplants\nsucculent\nsucculents\npotted plant\ncactus",
1009
+ "ignoreCase": true
1010
+ },
1011
+ {
1012
+ "type": "contains-any",
1013
+ "values": "mouse\ncomputer mouse",
1014
+ "ignoreCase": true
1015
+ },
1016
+ {
1017
+ "type": "contains-any",
1018
+ "values": "desk\ndesk mat\nmat\ntable",
1019
+ "ignoreCase": true
1020
+ },
1021
+ {
1022
+ "type": "contains",
1023
+ "value": "laptop",
1024
+ "not": true,
1025
+ "ignoreCase": true
1026
+ },
1027
+ {
1028
+ "type": "contains",
1029
+ "value": "person",
1030
+ "not": true,
1031
+ "ignoreCase": true
1032
+ },
1033
+ {
1034
+ "type": "contains",
1035
+ "value": "coffee",
1036
+ "not": true,
1037
+ "ignoreCase": true
1038
+ },
1039
+ {
1040
+ "type": "contains-any",
1041
+ "values": "enter",
1042
+ "weight": 0,
1043
+ "ignoreCase": true
1044
+ },
1045
+ {
1046
+ "type": "contains-any",
1047
+ "values": "backspace",
1048
+ "weight": 0,
1049
+ "ignoreCase": true
1050
+ },
1051
+ {
1052
+ "type": "contains-any",
1053
+ "values": "shift",
1054
+ "weight": 0,
1055
+ "ignoreCase": true
1056
+ },
1057
+ {
1058
+ "type": "contains-any",
1059
+ "values": "ctrl",
1060
+ "weight": 0,
1061
+ "ignoreCase": true
1062
+ }
830
1063
  ]
831
1064
  },
832
1065
  {
833
1066
  "id": "lighthouse-dunes",
834
- "filename": "lighthouse-dunes.jpg",
1067
+ "item": "lighthouse-dunes.jpg",
835
1068
  "todo": false,
836
- "traits": [
837
- "landscape"
838
- ],
839
- "why": "A single brick lighthouse behind grassy sand dunes under a pale sky. Tests naming the one landmark and the dune setting without inventing a sea that is not shown.",
840
- "expect": [
841
- "lighthouse"
842
- ],
843
- "anyOf": [
844
- [
845
- "dune",
846
- "dunes",
847
- "sand",
848
- "sand dune",
849
- "sand dunes"
850
- ],
851
- [
852
- "grass",
853
- "grasses",
854
- "marram grass",
855
- "beach grass",
856
- "dune grass"
857
- ],
858
- [
859
- "sky",
860
- "clouds",
861
- "cloud"
862
- ]
863
- ],
864
- "forbid": [
865
- "boat",
866
- "person",
867
- "snow"
868
- ],
869
- "allow": [],
870
- "minCount": null,
871
- "maxCount": null,
872
- "watch": []
1069
+ "note": "A single brick lighthouse behind grassy sand dunes under a pale sky. Tests naming the one landmark and the dune setting without inventing a sea that is not shown.",
1070
+ "metrics": [
1071
+ {
1072
+ "type": "contains-all",
1073
+ "values": "lighthouse",
1074
+ "ignoreCase": true
1075
+ },
1076
+ {
1077
+ "type": "contains-any",
1078
+ "values": "dune\ndunes\nsand\nsand dune\nsand dunes",
1079
+ "ignoreCase": true
1080
+ },
1081
+ {
1082
+ "type": "contains-any",
1083
+ "values": "grass\ngrasses\nmarram grass\nbeach grass\ndune grass",
1084
+ "ignoreCase": true
1085
+ },
1086
+ {
1087
+ "type": "contains-any",
1088
+ "values": "sky\nclouds\ncloud",
1089
+ "ignoreCase": true
1090
+ },
1091
+ {
1092
+ "type": "contains",
1093
+ "value": "boat",
1094
+ "not": true,
1095
+ "ignoreCase": true
1096
+ },
1097
+ {
1098
+ "type": "contains",
1099
+ "value": "person",
1100
+ "not": true,
1101
+ "ignoreCase": true
1102
+ },
1103
+ {
1104
+ "type": "contains",
1105
+ "value": "snow",
1106
+ "not": true,
1107
+ "ignoreCase": true
1108
+ }
1109
+ ]
873
1110
  },
874
1111
  {
875
1112
  "id": "mountain-lake",
876
- "filename": "mountain-lake.jpg",
1113
+ "item": "mountain-lake.jpg",
877
1114
  "todo": false,
878
- "traits": [
879
- "landscape"
880
- ],
881
- "why": "A turquoise lake with a small tree-covered island, framed by rocky mountains and pine forest. Tests the core elements of a classic landscape.",
882
- "expect": [],
883
- "anyOf": [
884
- [
885
- "lake",
886
- "water",
887
- "river"
888
- ],
889
- [
890
- "mountain",
891
- "mountains",
892
- "mountain range",
893
- "peaks"
894
- ],
895
- [
896
- "tree",
897
- "trees",
898
- "forest",
899
- "pine",
900
- "pines",
901
- "evergreen",
902
- "evergreens",
903
- "conifer",
904
- "conifers",
905
- "spruce"
906
- ],
907
- [
908
- "island",
909
- "islet"
910
- ]
911
- ],
912
- "forbid": [
913
- "boat",
914
- "person",
915
- "building"
916
- ],
917
- "allow": [],
918
- "minCount": null,
919
- "maxCount": null,
920
- "watch": []
1115
+ "note": "A turquoise lake with a small tree-covered island, framed by rocky mountains and pine forest. Tests the core elements of a classic landscape.",
1116
+ "metrics": [
1117
+ {
1118
+ "type": "contains-any",
1119
+ "values": "lake\nwater\nriver",
1120
+ "ignoreCase": true
1121
+ },
1122
+ {
1123
+ "type": "contains-any",
1124
+ "values": "mountain\nmountains\nmountain range\npeaks",
1125
+ "ignoreCase": true
1126
+ },
1127
+ {
1128
+ "type": "contains-any",
1129
+ "values": "tree\ntrees\nforest\npine\npines\nevergreen\nevergreens\nconifer\nconifers\nspruce",
1130
+ "ignoreCase": true
1131
+ },
1132
+ {
1133
+ "type": "contains-any",
1134
+ "values": "island\nislet",
1135
+ "ignoreCase": true
1136
+ },
1137
+ {
1138
+ "type": "contains",
1139
+ "value": "boat",
1140
+ "not": true,
1141
+ "ignoreCase": true
1142
+ },
1143
+ {
1144
+ "type": "contains",
1145
+ "value": "person",
1146
+ "not": true,
1147
+ "ignoreCase": true
1148
+ },
1149
+ {
1150
+ "type": "contains",
1151
+ "value": "building",
1152
+ "not": true,
1153
+ "ignoreCase": true
1154
+ }
1155
+ ]
921
1156
  },
922
1157
  {
923
1158
  "id": "museum-skeleton",
924
- "filename": "museum-skeleton.jpg",
1159
+ "item": "museum-skeleton.jpg",
925
1160
  "todo": false,
926
- "traits": [
927
- "monochrome",
928
- "interior"
929
- ],
930
- "why": "An old black-and-white image of a museum hall with a giant ground sloth skeleton on a tree and a glyptodont shell, charts on the walls and display cases. Tests recognising the skeleton and the museum setting in monochrome.",
931
- "expect": [
932
- "skeleton"
933
- ],
934
- "anyOf": [
935
- [
936
- "museum",
937
- "exhibit",
938
- "exhibition",
939
- "gallery",
940
- "display"
941
- ],
942
- [
943
- "poster",
944
- "posters",
945
- "chart",
946
- "charts",
947
- "picture",
948
- "pictures",
949
- "painting",
950
- "paintings",
951
- "frame",
952
- "frames",
953
- "illustration",
954
- "illustrations"
955
- ],
956
- [
957
- "display case",
958
- "display cases",
959
- "case",
960
- "cases",
961
- "cabinet",
962
- "cabinets",
963
- "showcase",
964
- "showcases",
965
- "vitrine"
966
- ]
967
- ],
968
- "forbid": [
969
- "person",
970
- "people",
971
- "car"
972
- ],
973
- "allow": [],
974
- "minCount": null,
975
- "maxCount": null,
976
- "watch": [
977
- "ordovician",
978
- "silurian"
1161
+ "note": "An old black-and-white image of a museum hall with a giant ground sloth skeleton on a tree and a glyptodont shell, charts on the walls and display cases. Tests recognising the skeleton and the museum setting in monochrome.",
1162
+ "metrics": [
1163
+ {
1164
+ "type": "contains-all",
1165
+ "values": "skeleton",
1166
+ "ignoreCase": true
1167
+ },
1168
+ {
1169
+ "type": "contains-any",
1170
+ "values": "museum\nexhibit\nexhibition\ngallery\ndisplay",
1171
+ "ignoreCase": true
1172
+ },
1173
+ {
1174
+ "type": "contains-any",
1175
+ "values": "poster\nposters\nchart\ncharts\npicture\npictures\npainting\npaintings\nframe\nframes\nillustration\nillustrations",
1176
+ "ignoreCase": true
1177
+ },
1178
+ {
1179
+ "type": "contains-any",
1180
+ "values": "display case\ndisplay cases\ncase\ncases\ncabinet\ncabinets\nshowcase\nshowcases\nvitrine",
1181
+ "ignoreCase": true
1182
+ },
1183
+ {
1184
+ "type": "contains",
1185
+ "value": "person",
1186
+ "not": true,
1187
+ "ignoreCase": true
1188
+ },
1189
+ {
1190
+ "type": "contains",
1191
+ "value": "people",
1192
+ "not": true,
1193
+ "ignoreCase": true
1194
+ },
1195
+ {
1196
+ "type": "contains",
1197
+ "value": "car",
1198
+ "not": true,
1199
+ "ignoreCase": true
1200
+ },
1201
+ {
1202
+ "type": "contains-any",
1203
+ "values": "ordovician",
1204
+ "weight": 0,
1205
+ "ignoreCase": true
1206
+ },
1207
+ {
1208
+ "type": "contains-any",
1209
+ "values": "silurian",
1210
+ "weight": 0,
1211
+ "ignoreCase": true
1212
+ }
979
1213
  ]
980
1214
  },
981
1215
  {
982
1216
  "id": "music-room",
983
- "filename": "music-room.jpg",
1217
+ "item": "music-room.jpg",
984
1218
  "todo": false,
985
- "traits": [
986
- "interior",
987
- "busy"
988
- ],
989
- "why": "A sunlit room with a teal electric guitar on a stand, an amplifier, bookshelves full of books, a music stand, effects pedals and a houseplant. Tests listing several distinct objects in an everyday interior.",
990
- "expect": [
991
- "guitar"
992
- ],
993
- "anyOf": [
994
- [
995
- "book",
996
- "books",
997
- "bookshelf",
998
- "bookshelves",
999
- "bookcase",
1000
- "bookcases"
1001
- ],
1002
- [
1003
- "amplifier",
1004
- "amp",
1005
- "speaker",
1006
- "guitar amp"
1007
- ],
1008
- [
1009
- "music stand",
1010
- "stand",
1011
- "sheet music"
1012
- ]
1013
- ],
1014
- "forbid": [
1015
- "piano",
1016
- "drum",
1017
- "drums"
1018
- ],
1019
- "allow": [],
1020
- "minCount": 3,
1021
- "maxCount": null,
1022
- "watch": [
1023
- "fender",
1024
- "the times atlas of the world",
1025
- "lore of running",
1026
- "history of the world"
1219
+ "note": "A sunlit room with a teal electric guitar on a stand, an amplifier, bookshelves full of books, a music stand, effects pedals and a houseplant. Tests listing several distinct objects in an everyday interior.",
1220
+ "metrics": [
1221
+ {
1222
+ "type": "contains-all",
1223
+ "values": "guitar",
1224
+ "ignoreCase": true
1225
+ },
1226
+ {
1227
+ "type": "contains-any",
1228
+ "values": "book\nbooks\nbookshelf\nbookshelves\nbookcase\nbookcases",
1229
+ "ignoreCase": true
1230
+ },
1231
+ {
1232
+ "type": "contains-any",
1233
+ "values": "amplifier\namp\nspeaker\nguitar amp",
1234
+ "ignoreCase": true
1235
+ },
1236
+ {
1237
+ "type": "contains-any",
1238
+ "values": "music stand\nstand\nsheet music",
1239
+ "ignoreCase": true
1240
+ },
1241
+ {
1242
+ "type": "contains",
1243
+ "value": "piano",
1244
+ "not": true,
1245
+ "ignoreCase": true
1246
+ },
1247
+ {
1248
+ "type": "contains",
1249
+ "value": "drum",
1250
+ "not": true,
1251
+ "ignoreCase": true
1252
+ },
1253
+ {
1254
+ "type": "contains",
1255
+ "value": "drums",
1256
+ "not": true,
1257
+ "ignoreCase": true
1258
+ },
1259
+ {
1260
+ "type": "item-count",
1261
+ "min": 3,
1262
+ "max": null
1263
+ },
1264
+ {
1265
+ "type": "contains-any",
1266
+ "values": "fender",
1267
+ "weight": 0,
1268
+ "ignoreCase": true
1269
+ },
1270
+ {
1271
+ "type": "contains-any",
1272
+ "values": "the times atlas of the world",
1273
+ "weight": 0,
1274
+ "ignoreCase": true
1275
+ },
1276
+ {
1277
+ "type": "contains-any",
1278
+ "values": "lore of running",
1279
+ "weight": 0,
1280
+ "ignoreCase": true
1281
+ },
1282
+ {
1283
+ "type": "contains-any",
1284
+ "values": "history of the world",
1285
+ "weight": 0,
1286
+ "ignoreCase": true
1287
+ }
1027
1288
  ]
1028
1289
  },
1029
1290
  {
1030
1291
  "id": "old-red-car",
1031
- "filename": "old-red-car.jpg",
1292
+ "item": "old-red-car.jpg",
1032
1293
  "todo": false,
1033
- "traits": [
1034
- "vehicle"
1035
- ],
1036
- "why": "A rusty old red-orange sedan with a flat tyre and a mismatched door, parked on a street before an iron fence, flowering trees and an apartment block. Tests naming the car and its setting.",
1037
- "expect": [
1038
- "car"
1039
- ],
1040
- "anyOf": [
1041
- [
1042
- "tree",
1043
- "trees",
1044
- "flowering tree",
1045
- "dogwood"
1046
- ],
1047
- [
1048
- "fence",
1049
- "iron fence",
1050
- "railing",
1051
- "railings"
1052
- ],
1053
- [
1054
- "building",
1055
- "apartment",
1056
- "apartments",
1057
- "apartment building",
1058
- "house"
1059
- ],
1060
- [
1061
- "street",
1062
- "road"
1063
- ]
1064
- ],
1065
- "forbid": [
1066
- "person",
1067
- "truck",
1068
- "bicycle"
1069
- ],
1070
- "allow": [],
1071
- "minCount": null,
1072
- "maxCount": null,
1073
- "watch": []
1294
+ "note": "A rusty old red-orange sedan with a flat tyre and a mismatched door, parked on a street before an iron fence, flowering trees and an apartment block. Tests naming the car and its setting.",
1295
+ "metrics": [
1296
+ {
1297
+ "type": "contains-all",
1298
+ "values": "car",
1299
+ "ignoreCase": true
1300
+ },
1301
+ {
1302
+ "type": "contains-any",
1303
+ "values": "tree\ntrees\nflowering tree\ndogwood",
1304
+ "ignoreCase": true
1305
+ },
1306
+ {
1307
+ "type": "contains-any",
1308
+ "values": "fence\niron fence\nrailing\nrailings",
1309
+ "ignoreCase": true
1310
+ },
1311
+ {
1312
+ "type": "contains-any",
1313
+ "values": "building\napartment\napartments\napartment building\nhouse",
1314
+ "ignoreCase": true
1315
+ },
1316
+ {
1317
+ "type": "contains-any",
1318
+ "values": "street\nroad",
1319
+ "ignoreCase": true
1320
+ },
1321
+ {
1322
+ "type": "contains",
1323
+ "value": "person",
1324
+ "not": true,
1325
+ "ignoreCase": true
1326
+ },
1327
+ {
1328
+ "type": "contains",
1329
+ "value": "truck",
1330
+ "not": true,
1331
+ "ignoreCase": true
1332
+ },
1333
+ {
1334
+ "type": "contains",
1335
+ "value": "bicycle",
1336
+ "not": true,
1337
+ "ignoreCase": true
1338
+ }
1339
+ ]
1074
1340
  },
1075
1341
  {
1076
1342
  "id": "parked-car-plate",
1077
- "filename": "parked-car-plate.jpg",
1343
+ "item": "parked-car-plate.jpg",
1078
1344
  "todo": false,
1079
- "traits": [
1080
- "vehicle",
1081
- "plate"
1082
- ],
1083
- "why": "The rear of a grey saloon car in a parking lot, with a readable French registration plate, trees and apartment buildings behind. Tests naming the car and plate without inventing people in the foreground.",
1084
- "expect": [
1085
- "car"
1086
- ],
1087
- "anyOf": [
1088
- [
1089
- "license plate",
1090
- "licence plate",
1091
- "number plate",
1092
- "registration plate",
1093
- "plate"
1094
- ],
1095
- [
1096
- "tree",
1097
- "trees",
1098
- "bush",
1099
- "bushes",
1100
- "shrub",
1101
- "shrubs"
1102
- ],
1103
- [
1104
- "parking lot",
1105
- "parking",
1106
- "car park",
1107
- "parking space",
1108
- "asphalt"
1109
- ]
1110
- ],
1111
- "forbid": [
1112
- "truck",
1113
- "motorcycle",
1114
- "bus"
1115
- ],
1116
- "allow": [],
1117
- "minCount": null,
1118
- "maxCount": null,
1119
- "watch": [
1120
- "gg-190-hx",
1121
- "gg 190 hx",
1122
- "subaru",
1123
- "legacy"
1345
+ "note": "The rear of a grey saloon car in a parking lot, with a readable French registration plate, trees and apartment buildings behind. Tests naming the car and plate without inventing people in the foreground.",
1346
+ "metrics": [
1347
+ {
1348
+ "type": "contains-all",
1349
+ "values": "car",
1350
+ "ignoreCase": true
1351
+ },
1352
+ {
1353
+ "type": "contains-any",
1354
+ "values": "license plate\nlicence plate\nnumber plate\nregistration plate\nplate",
1355
+ "ignoreCase": true
1356
+ },
1357
+ {
1358
+ "type": "contains-any",
1359
+ "values": "tree\ntrees\nbush\nbushes\nshrub\nshrubs",
1360
+ "ignoreCase": true
1361
+ },
1362
+ {
1363
+ "type": "contains-any",
1364
+ "values": "parking lot\nparking\ncar park\nparking space\nasphalt",
1365
+ "ignoreCase": true
1366
+ },
1367
+ {
1368
+ "type": "contains",
1369
+ "value": "truck",
1370
+ "not": true,
1371
+ "ignoreCase": true
1372
+ },
1373
+ {
1374
+ "type": "contains",
1375
+ "value": "motorcycle",
1376
+ "not": true,
1377
+ "ignoreCase": true
1378
+ },
1379
+ {
1380
+ "type": "contains",
1381
+ "value": "bus",
1382
+ "not": true,
1383
+ "ignoreCase": true
1384
+ },
1385
+ {
1386
+ "type": "contains-any",
1387
+ "values": "gg-190-hx",
1388
+ "weight": 0,
1389
+ "ignoreCase": true
1390
+ },
1391
+ {
1392
+ "type": "contains-any",
1393
+ "values": "gg 190 hx",
1394
+ "weight": 0,
1395
+ "ignoreCase": true
1396
+ },
1397
+ {
1398
+ "type": "contains-any",
1399
+ "values": "subaru",
1400
+ "weight": 0,
1401
+ "ignoreCase": true
1402
+ },
1403
+ {
1404
+ "type": "contains-any",
1405
+ "values": "legacy",
1406
+ "weight": 0,
1407
+ "ignoreCase": true
1408
+ }
1124
1409
  ]
1125
1410
  },
1126
1411
  {
1127
1412
  "id": "phone-and-wallet",
1128
- "filename": "phone-and-wallet.png",
1413
+ "item": "phone-and-wallet.png",
1129
1414
  "todo": false,
1130
- "traits": [
1131
- "control",
1132
- "png"
1133
- ],
1134
- "why": "A smartphone seen from the back with a black leather card wallet attached, on a plain white background. Tests a simple two-object product image without padding.",
1135
- "expect": [
1136
- "phone"
1137
- ],
1138
- "anyOf": [
1139
- [
1140
- "wallet",
1141
- "card holder",
1142
- "card wallet",
1143
- "cardholder",
1144
- "case"
1145
- ],
1146
- [
1147
- "white background",
1148
- "background",
1149
- "surface",
1150
- "table"
1151
- ]
1152
- ],
1153
- "forbid": [
1154
- "keys",
1155
- "laptop",
1156
- "hand"
1157
- ],
1158
- "allow": [],
1159
- "minCount": null,
1160
- "maxCount": 8,
1161
- "watch": []
1415
+ "note": "A smartphone seen from the back with a black leather card wallet attached, on a plain white background. Tests a simple two-object product image without padding.",
1416
+ "metrics": [
1417
+ {
1418
+ "type": "contains-all",
1419
+ "values": "phone",
1420
+ "ignoreCase": true
1421
+ },
1422
+ {
1423
+ "type": "contains-any",
1424
+ "values": "wallet\ncard holder\ncard wallet\ncardholder\ncase",
1425
+ "ignoreCase": true
1426
+ },
1427
+ {
1428
+ "type": "contains-any",
1429
+ "values": "white background\nbackground\nsurface\ntable",
1430
+ "ignoreCase": true
1431
+ },
1432
+ {
1433
+ "type": "contains",
1434
+ "value": "keys",
1435
+ "not": true,
1436
+ "ignoreCase": true
1437
+ },
1438
+ {
1439
+ "type": "contains",
1440
+ "value": "laptop",
1441
+ "not": true,
1442
+ "ignoreCase": true
1443
+ },
1444
+ {
1445
+ "type": "contains",
1446
+ "value": "hand",
1447
+ "not": true,
1448
+ "ignoreCase": true
1449
+ },
1450
+ {
1451
+ "type": "item-count",
1452
+ "min": null,
1453
+ "max": 8
1454
+ }
1455
+ ]
1162
1456
  },
1163
1457
  {
1164
1458
  "id": "phone-box",
1165
- "filename": "phone-box.jpg",
1459
+ "item": "phone-box.jpg",
1166
1460
  "todo": false,
1167
- "traits": [
1168
- "compound",
1169
- "sign",
1170
- "colour"
1171
- ],
1172
- "why": "A red telephone box, signed 'telephone', standing on a brick waterfront promenade with a marina and palm trees behind. Tests the multi-word subject 'phone box' in its common spellings.",
1173
- "expect": [],
1174
- "anyOf": [
1175
- [
1176
- "phone box",
1177
- "telephone box",
1178
- "phone booth",
1179
- "telephone booth",
1180
- "telephone kiosk",
1181
- "phone kiosk",
1182
- "call box"
1183
- ],
1184
- [
1185
- "water",
1186
- "marina",
1187
- "harbor",
1188
- "harbour",
1189
- "lake",
1190
- "dock",
1191
- "docks",
1192
- "pier"
1193
- ],
1194
- [
1195
- "pavement",
1196
- "promenade",
1197
- "walkway",
1198
- "brick",
1199
- "bricks",
1200
- "paving",
1201
- "boardwalk"
1202
- ],
1203
- [
1204
- "sky",
1205
- "blue sky"
1206
- ]
1207
- ],
1208
- "forbid": [
1209
- "person",
1210
- "car"
1211
- ],
1212
- "allow": [],
1213
- "minCount": null,
1214
- "maxCount": null,
1215
- "watch": [
1216
- "telephone"
1461
+ "note": "A red telephone box, signed 'telephone', standing on a brick waterfront promenade with a marina and palm trees behind. Tests the multi-word subject 'phone box' in its common spellings.",
1462
+ "metrics": [
1463
+ {
1464
+ "type": "contains-any",
1465
+ "values": "phone box\ntelephone box\nphone booth\ntelephone booth\ntelephone kiosk\nphone kiosk\ncall box",
1466
+ "ignoreCase": true
1467
+ },
1468
+ {
1469
+ "type": "contains-any",
1470
+ "values": "water\nmarina\nharbor\nharbour\nlake\ndock\ndocks\npier",
1471
+ "ignoreCase": true
1472
+ },
1473
+ {
1474
+ "type": "contains-any",
1475
+ "values": "pavement\npromenade\nwalkway\nbrick\nbricks\npaving\nboardwalk",
1476
+ "ignoreCase": true
1477
+ },
1478
+ {
1479
+ "type": "contains-any",
1480
+ "values": "sky\nblue sky",
1481
+ "ignoreCase": true
1482
+ },
1483
+ {
1484
+ "type": "contains",
1485
+ "value": "person",
1486
+ "not": true,
1487
+ "ignoreCase": true
1488
+ },
1489
+ {
1490
+ "type": "contains",
1491
+ "value": "car",
1492
+ "not": true,
1493
+ "ignoreCase": true
1494
+ },
1495
+ {
1496
+ "type": "contains-any",
1497
+ "values": "telephone",
1498
+ "weight": 0,
1499
+ "ignoreCase": true
1500
+ }
1217
1501
  ]
1218
1502
  },
1219
1503
  {
1220
1504
  "id": "pink-flamingo",
1221
- "filename": "pink-flamingo.jpg",
1505
+ "item": "pink-flamingo.jpg",
1222
1506
  "todo": false,
1223
- "traits": [
1224
- "colour"
1225
- ],
1226
- "why": "A large pink concrete flamingo statue beside a marsh with tall grass, power lines and palms, in an old colour slide with a black border. Tests naming the flamingo whether or not the model sees it is a statue.",
1227
- "expect": [
1228
- "flamingo"
1229
- ],
1230
- "anyOf": [
1231
- [
1232
- "grass",
1233
- "grasses",
1234
- "reeds",
1235
- "marsh",
1236
- "wetland",
1237
- "swamp",
1238
- "vegetation"
1239
- ],
1240
- [
1241
- "sky",
1242
- "blue sky"
1243
- ],
1244
- [
1245
- "statue",
1246
- "sculpture",
1247
- "figure",
1248
- "lawn ornament",
1249
- "ornament"
1250
- ]
1251
- ],
1252
- "forbid": [
1253
- "person",
1254
- "car",
1255
- "snow"
1256
- ],
1257
- "allow": [],
1258
- "minCount": null,
1259
- "maxCount": null,
1260
- "watch": []
1507
+ "note": "A large pink concrete flamingo statue beside a marsh with tall grass, power lines and palms, in an old colour slide with a black border. Tests naming the flamingo whether or not the model sees it is a statue.",
1508
+ "metrics": [
1509
+ {
1510
+ "type": "contains-all",
1511
+ "values": "flamingo",
1512
+ "ignoreCase": true
1513
+ },
1514
+ {
1515
+ "type": "contains-any",
1516
+ "values": "grass\ngrasses\nreeds\nmarsh\nwetland\nswamp\nvegetation",
1517
+ "ignoreCase": true
1518
+ },
1519
+ {
1520
+ "type": "contains-any",
1521
+ "values": "sky\nblue sky",
1522
+ "ignoreCase": true
1523
+ },
1524
+ {
1525
+ "type": "contains-any",
1526
+ "values": "statue\nsculpture\nfigure\nlawn ornament\nornament",
1527
+ "ignoreCase": true
1528
+ },
1529
+ {
1530
+ "type": "contains",
1531
+ "value": "person",
1532
+ "not": true,
1533
+ "ignoreCase": true
1534
+ },
1535
+ {
1536
+ "type": "contains",
1537
+ "value": "car",
1538
+ "not": true,
1539
+ "ignoreCase": true
1540
+ },
1541
+ {
1542
+ "type": "contains",
1543
+ "value": "snow",
1544
+ "not": true,
1545
+ "ignoreCase": true
1546
+ }
1547
+ ]
1261
1548
  },
1262
1549
  {
1263
1550
  "id": "postcards",
1264
- "filename": "postcards.jpg",
1551
+ "item": "postcards.jpg",
1265
1552
  "todo": false,
1266
- "traits": [
1267
- "document",
1268
- "handwriting",
1269
- "text"
1270
- ],
1271
- "why": "Several antique postcards laid out overlapping: handwritten addresses, stamps, postmarks and printed coastal and bridge scenes. Tests naming the postcards and their parts, with much text a model may echo.",
1272
- "expect": [
1273
- "postcard"
1274
- ],
1275
- "anyOf": [
1276
- [
1277
- "stamp",
1278
- "stamps",
1279
- "postage stamp",
1280
- "postmark",
1281
- "postmarks"
1282
- ],
1283
- [
1284
- "handwriting",
1285
- "writing",
1286
- "script",
1287
- "address",
1288
- "handwritten"
1289
- ],
1290
- [
1291
- "bridge",
1292
- "landscape",
1293
- "coast",
1294
- "water",
1295
- "bay"
1296
- ]
1297
- ],
1298
- "forbid": [
1299
- "envelope",
1300
- "computer"
1301
- ],
1302
- "allow": [],
1303
- "minCount": null,
1304
- "maxCount": null,
1305
- "watch": [
1306
- "post card",
1307
- "address",
1308
- "little narragansett bay",
1309
- "watch hill",
1310
- "brooklyn",
1311
- "1908",
1312
- "1906",
1313
- "halfpenny"
1553
+ "note": "Several antique postcards laid out overlapping: handwritten addresses, stamps, postmarks and printed coastal and bridge scenes. Tests naming the postcards and their parts, with much text a model may echo.",
1554
+ "metrics": [
1555
+ {
1556
+ "type": "contains-all",
1557
+ "values": "postcard",
1558
+ "ignoreCase": true
1559
+ },
1560
+ {
1561
+ "type": "contains-any",
1562
+ "values": "stamp\nstamps\npostage stamp\npostmark\npostmarks",
1563
+ "ignoreCase": true
1564
+ },
1565
+ {
1566
+ "type": "contains-any",
1567
+ "values": "handwriting\nwriting\nscript\naddress\nhandwritten",
1568
+ "ignoreCase": true
1569
+ },
1570
+ {
1571
+ "type": "contains-any",
1572
+ "values": "bridge\nlandscape\ncoast\nwater\nbay",
1573
+ "ignoreCase": true
1574
+ },
1575
+ {
1576
+ "type": "contains",
1577
+ "value": "envelope",
1578
+ "not": true,
1579
+ "ignoreCase": true
1580
+ },
1581
+ {
1582
+ "type": "contains",
1583
+ "value": "computer",
1584
+ "not": true,
1585
+ "ignoreCase": true
1586
+ },
1587
+ {
1588
+ "type": "contains-any",
1589
+ "values": "post card",
1590
+ "weight": 0,
1591
+ "ignoreCase": true
1592
+ },
1593
+ {
1594
+ "type": "contains-any",
1595
+ "values": "address",
1596
+ "weight": 0,
1597
+ "ignoreCase": true
1598
+ },
1599
+ {
1600
+ "type": "contains-any",
1601
+ "values": "little narragansett bay",
1602
+ "weight": 0,
1603
+ "ignoreCase": true
1604
+ },
1605
+ {
1606
+ "type": "contains-any",
1607
+ "values": "watch hill",
1608
+ "weight": 0,
1609
+ "ignoreCase": true
1610
+ },
1611
+ {
1612
+ "type": "contains-any",
1613
+ "values": "brooklyn",
1614
+ "weight": 0,
1615
+ "ignoreCase": true
1616
+ },
1617
+ {
1618
+ "type": "contains-any",
1619
+ "values": "1908",
1620
+ "weight": 0,
1621
+ "ignoreCase": true
1622
+ },
1623
+ {
1624
+ "type": "contains-any",
1625
+ "values": "1906",
1626
+ "weight": 0,
1627
+ "ignoreCase": true
1628
+ },
1629
+ {
1630
+ "type": "contains-any",
1631
+ "values": "halfpenny",
1632
+ "weight": 0,
1633
+ "ignoreCase": true
1634
+ }
1314
1635
  ]
1315
1636
  },
1316
1637
  {
1317
1638
  "id": "red-roof-church",
1318
- "filename": "red-roof-church.jpg",
1639
+ "item": "red-roof-church.jpg",
1319
1640
  "todo": false,
1320
- "traits": [
1321
- "landscape",
1322
- "colour"
1323
- ],
1324
- "why": "A white church with a red roof and steeple on a grassy hill, with a brown mountain and clear blue sky behind. Tests naming the church and its setting.",
1325
- "expect": [
1326
- "church"
1327
- ],
1328
- "anyOf": [
1329
- [
1330
- "steeple",
1331
- "spire",
1332
- "tower",
1333
- "bell tower"
1334
- ],
1335
- [
1336
- "mountain",
1337
- "mountains",
1338
- "hill",
1339
- "hills"
1340
- ],
1341
- [
1342
- "sky",
1343
- "blue sky"
1344
- ],
1345
- [
1346
- "grass",
1347
- "field",
1348
- "meadow"
1349
- ]
1350
- ],
1351
- "forbid": [
1352
- "person",
1353
- "car",
1354
- "tree"
1355
- ],
1356
- "allow": [],
1357
- "minCount": null,
1358
- "maxCount": null,
1359
- "watch": []
1641
+ "note": "A white church with a red roof and steeple on a grassy hill, with a brown mountain and clear blue sky behind. Tests naming the church and its setting.",
1642
+ "metrics": [
1643
+ {
1644
+ "type": "contains-all",
1645
+ "values": "church",
1646
+ "ignoreCase": true
1647
+ },
1648
+ {
1649
+ "type": "contains-any",
1650
+ "values": "steeple\nspire\ntower\nbell tower",
1651
+ "ignoreCase": true
1652
+ },
1653
+ {
1654
+ "type": "contains-any",
1655
+ "values": "mountain\nmountains\nhill\nhills",
1656
+ "ignoreCase": true
1657
+ },
1658
+ {
1659
+ "type": "contains-any",
1660
+ "values": "sky\nblue sky",
1661
+ "ignoreCase": true
1662
+ },
1663
+ {
1664
+ "type": "contains-any",
1665
+ "values": "grass\nfield\nmeadow",
1666
+ "ignoreCase": true
1667
+ },
1668
+ {
1669
+ "type": "contains",
1670
+ "value": "person",
1671
+ "not": true,
1672
+ "ignoreCase": true
1673
+ },
1674
+ {
1675
+ "type": "contains",
1676
+ "value": "car",
1677
+ "not": true,
1678
+ "ignoreCase": true
1679
+ },
1680
+ {
1681
+ "type": "contains",
1682
+ "value": "tree",
1683
+ "not": true,
1684
+ "ignoreCase": true
1685
+ }
1686
+ ]
1360
1687
  },
1361
1688
  {
1362
1689
  "id": "roadside-mailboxes",
1363
- "filename": "roadside-mailboxes.jpg",
1690
+ "item": "roadside-mailboxes.jpg",
1364
1691
  "todo": false,
1365
- "traits": [
1366
- "count",
1367
- "house-number",
1368
- "sign"
1369
- ],
1370
- "why": "A row of about a dozen varied mailboxes on posts along a roadside curb, including a birdhouse-shaped one, a keg and an old computer case, with pine trees and mountains behind. Tests naming the mailboxes as the subject despite their odd shapes.",
1371
- "expect": [],
1372
- "anyOf": [
1373
- [
1374
- "mailbox",
1375
- "mailboxes",
1376
- "letterbox",
1377
- "letterboxes",
1378
- "letter box",
1379
- "letter boxes",
1380
- "postbox",
1381
- "postboxes",
1382
- "mail box",
1383
- "mail boxes"
1384
- ],
1385
- [
1386
- "tree",
1387
- "trees",
1388
- "pine",
1389
- "pines",
1390
- "conifer",
1391
- "conifers",
1392
- "evergreen",
1393
- "evergreens"
1394
- ],
1395
- [
1396
- "road",
1397
- "street",
1398
- "curb",
1399
- "kerb"
1400
- ],
1401
- [
1402
- "post",
1403
- "posts",
1404
- "wooden post",
1405
- "wooden posts"
1406
- ]
1407
- ],
1408
- "forbid": [
1409
- "person",
1410
- "car",
1411
- "dog"
1412
- ],
1413
- "allow": [],
1414
- "minCount": 3,
1415
- "maxCount": null,
1416
- "watch": [
1417
- "hello",
1418
- "67b",
1419
- "65c",
1420
- "alley road"
1692
+ "note": "A row of about a dozen varied mailboxes on posts along a roadside curb, including a birdhouse-shaped one, a keg and an old computer case, with pine trees and mountains behind. Tests naming the mailboxes as the subject despite their odd shapes.",
1693
+ "metrics": [
1694
+ {
1695
+ "type": "contains-any",
1696
+ "values": "mailbox\nmailboxes\nletterbox\nletterboxes\nletter box\nletter boxes\npostbox\npostboxes\nmail box\nmail boxes",
1697
+ "ignoreCase": true
1698
+ },
1699
+ {
1700
+ "type": "contains-any",
1701
+ "values": "tree\ntrees\npine\npines\nconifer\nconifers\nevergreen\nevergreens",
1702
+ "ignoreCase": true
1703
+ },
1704
+ {
1705
+ "type": "contains-any",
1706
+ "values": "road\nstreet\ncurb\nkerb",
1707
+ "ignoreCase": true
1708
+ },
1709
+ {
1710
+ "type": "contains-any",
1711
+ "values": "post\nposts\nwooden post\nwooden posts",
1712
+ "ignoreCase": true
1713
+ },
1714
+ {
1715
+ "type": "contains",
1716
+ "value": "person",
1717
+ "not": true,
1718
+ "ignoreCase": true
1719
+ },
1720
+ {
1721
+ "type": "contains",
1722
+ "value": "car",
1723
+ "not": true,
1724
+ "ignoreCase": true
1725
+ },
1726
+ {
1727
+ "type": "contains",
1728
+ "value": "dog",
1729
+ "not": true,
1730
+ "ignoreCase": true
1731
+ },
1732
+ {
1733
+ "type": "item-count",
1734
+ "min": 3,
1735
+ "max": null
1736
+ },
1737
+ {
1738
+ "type": "contains-any",
1739
+ "values": "hello",
1740
+ "weight": 0,
1741
+ "ignoreCase": true
1742
+ },
1743
+ {
1744
+ "type": "contains-any",
1745
+ "values": "67b",
1746
+ "weight": 0,
1747
+ "ignoreCase": true
1748
+ },
1749
+ {
1750
+ "type": "contains-any",
1751
+ "values": "65c",
1752
+ "weight": 0,
1753
+ "ignoreCase": true
1754
+ },
1755
+ {
1756
+ "type": "contains-any",
1757
+ "values": "alley road",
1758
+ "weight": 0,
1759
+ "ignoreCase": true
1760
+ }
1421
1761
  ]
1422
1762
  },
1423
1763
  {
1424
1764
  "id": "rodeo",
1425
- "filename": "rodeo.jpg",
1765
+ "item": "rodeo.jpg",
1426
1766
  "todo": false,
1427
- "traits": [
1428
- "animal",
1429
- "busy"
1430
- ],
1431
- "why": "A bucking bronco kicks up dust as its rider is thrown into the dirt of a rodeo arena, with spectators at the fence and sponsor banners overhead. Tests naming the horse, rider and the rodeo event.",
1432
- "expect": [
1433
- "horse"
1434
- ],
1435
- "anyOf": [
1436
- [
1437
- "rodeo",
1438
- "bronco",
1439
- "bucking horse",
1440
- "bucking bronco",
1441
- "arena"
1442
- ],
1443
- [
1444
- "rider",
1445
- "cowboy",
1446
- "person",
1447
- "people",
1448
- "man"
1449
- ],
1450
- [
1451
- "dirt",
1452
- "dust",
1453
- "sand",
1454
- "ground"
1455
- ]
1456
- ],
1457
- "forbid": [
1458
- "bull",
1459
- "cow",
1460
- "car"
1461
- ],
1462
- "allow": [
1463
- "bull riding"
1464
- ],
1465
- "minCount": null,
1466
- "maxCount": null,
1467
- "watch": [
1468
- "welk",
1469
- "excavating",
1470
- "tito's",
1471
- "vodka",
1472
- "jumping horse"
1767
+ "note": "A bucking bronco kicks up dust as its rider is thrown into the dirt of a rodeo arena, with spectators at the fence and sponsor banners overhead. Tests naming the horse, rider and the rodeo event.",
1768
+ "metrics": [
1769
+ {
1770
+ "type": "contains-all",
1771
+ "values": "horse",
1772
+ "ignoreCase": true
1773
+ },
1774
+ {
1775
+ "type": "contains-any",
1776
+ "values": "rodeo\nbronco\nbucking horse\nbucking bronco\narena",
1777
+ "ignoreCase": true
1778
+ },
1779
+ {
1780
+ "type": "contains-any",
1781
+ "values": "rider\ncowboy\nperson\npeople\nman",
1782
+ "ignoreCase": true
1783
+ },
1784
+ {
1785
+ "type": "contains-any",
1786
+ "values": "dirt\ndust\nsand\nground",
1787
+ "ignoreCase": true
1788
+ },
1789
+ {
1790
+ "type": "contains",
1791
+ "value": "bull",
1792
+ "not": true,
1793
+ "except": "bull riding",
1794
+ "ignoreCase": true
1795
+ },
1796
+ {
1797
+ "type": "contains",
1798
+ "value": "cow",
1799
+ "not": true,
1800
+ "ignoreCase": true
1801
+ },
1802
+ {
1803
+ "type": "contains",
1804
+ "value": "car",
1805
+ "not": true,
1806
+ "ignoreCase": true
1807
+ },
1808
+ {
1809
+ "type": "contains-any",
1810
+ "values": "welk",
1811
+ "weight": 0,
1812
+ "ignoreCase": true
1813
+ },
1814
+ {
1815
+ "type": "contains-any",
1816
+ "values": "excavating",
1817
+ "weight": 0,
1818
+ "ignoreCase": true
1819
+ },
1820
+ {
1821
+ "type": "contains-any",
1822
+ "values": "tito's",
1823
+ "weight": 0,
1824
+ "ignoreCase": true
1825
+ },
1826
+ {
1827
+ "type": "contains-any",
1828
+ "values": "vodka",
1829
+ "weight": 0,
1830
+ "ignoreCase": true
1831
+ },
1832
+ {
1833
+ "type": "contains-any",
1834
+ "values": "jumping horse",
1835
+ "weight": 0,
1836
+ "ignoreCase": true
1837
+ }
1473
1838
  ]
1474
1839
  },
1475
1840
  {
1476
1841
  "id": "snail-on-stem",
1477
- "filename": "snail-on-stem.jpg",
1842
+ "item": "snail-on-stem.jpg",
1478
1843
  "todo": false,
1479
- "traits": [
1480
- "animal",
1481
- "control"
1482
- ],
1483
- "why": "A close-up of a small white snail shell with brown spiral markings on a green plant stem, a leaf beside it and a soft blurred background. Tests a single small subject in macro.",
1484
- "expect": [
1485
- "snail"
1486
- ],
1487
- "anyOf": [
1488
- [
1489
- "stem",
1490
- "plant",
1491
- "branch",
1492
- "plant stem"
1493
- ],
1494
- [
1495
- "leaf",
1496
- "leaves"
1497
- ]
1498
- ],
1499
- "forbid": [
1500
- "flower",
1501
- "insect",
1502
- "slug"
1503
- ],
1504
- "allow": [],
1505
- "minCount": null,
1506
- "maxCount": 8,
1507
- "watch": []
1844
+ "note": "A close-up of a small white snail shell with brown spiral markings on a green plant stem, a leaf beside it and a soft blurred background. Tests a single small subject in macro.",
1845
+ "metrics": [
1846
+ {
1847
+ "type": "contains-all",
1848
+ "values": "snail",
1849
+ "ignoreCase": true
1850
+ },
1851
+ {
1852
+ "type": "contains-any",
1853
+ "values": "stem\nplant\nbranch\nplant stem",
1854
+ "ignoreCase": true
1855
+ },
1856
+ {
1857
+ "type": "contains-any",
1858
+ "values": "leaf\nleaves",
1859
+ "ignoreCase": true
1860
+ },
1861
+ {
1862
+ "type": "contains",
1863
+ "value": "flower",
1864
+ "not": true,
1865
+ "ignoreCase": true
1866
+ },
1867
+ {
1868
+ "type": "contains",
1869
+ "value": "insect",
1870
+ "not": true,
1871
+ "ignoreCase": true
1872
+ },
1873
+ {
1874
+ "type": "contains",
1875
+ "value": "slug",
1876
+ "not": true,
1877
+ "ignoreCase": true
1878
+ },
1879
+ {
1880
+ "type": "item-count",
1881
+ "min": null,
1882
+ "max": 8
1883
+ }
1884
+ ]
1508
1885
  },
1509
1886
  {
1510
1887
  "id": "two-horses-field",
1511
- "filename": "two-horses-field.jpg",
1888
+ "item": "two-horses-field.jpg",
1512
1889
  "todo": false,
1513
- "traits": [
1514
- "animal",
1515
- "count"
1516
- ],
1517
- "why": "Two chestnut horses with white blazes stand side by side behind a barbed-wire fence in a grassy field, with trees and hills behind. There are exactly two horses.",
1518
- "expect": [
1519
- "horse"
1520
- ],
1521
- "anyOf": [
1522
- [
1523
- "fence",
1524
- "wire fence",
1525
- "barbed wire"
1526
- ],
1527
- [
1528
- "field",
1529
- "grass",
1530
- "pasture",
1531
- "meadow"
1532
- ],
1533
- [
1534
- "tree",
1535
- "trees",
1536
- "forest"
1537
- ]
1538
- ],
1539
- "forbid": [
1540
- "cow",
1541
- "person",
1542
- "dog"
1543
- ],
1544
- "allow": [],
1545
- "minCount": null,
1546
- "maxCount": null,
1547
- "watch": []
1890
+ "note": "Two chestnut horses with white blazes stand side by side behind a barbed-wire fence in a grassy field, with trees and hills behind. There are exactly two horses.",
1891
+ "metrics": [
1892
+ {
1893
+ "type": "contains-all",
1894
+ "values": "horse",
1895
+ "ignoreCase": true
1896
+ },
1897
+ {
1898
+ "type": "contains-any",
1899
+ "values": "fence\nwire fence\nbarbed wire",
1900
+ "ignoreCase": true
1901
+ },
1902
+ {
1903
+ "type": "contains-any",
1904
+ "values": "field\ngrass\npasture\nmeadow",
1905
+ "ignoreCase": true
1906
+ },
1907
+ {
1908
+ "type": "contains-any",
1909
+ "values": "tree\ntrees\nforest",
1910
+ "ignoreCase": true
1911
+ },
1912
+ {
1913
+ "type": "contains",
1914
+ "value": "cow",
1915
+ "not": true,
1916
+ "ignoreCase": true
1917
+ },
1918
+ {
1919
+ "type": "contains",
1920
+ "value": "person",
1921
+ "not": true,
1922
+ "ignoreCase": true
1923
+ },
1924
+ {
1925
+ "type": "contains",
1926
+ "value": "dog",
1927
+ "not": true,
1928
+ "ignoreCase": true
1929
+ }
1930
+ ]
1548
1931
  },
1549
1932
  {
1550
1933
  "id": "university-sign",
1551
- "filename": "university-sign.jpg",
1934
+ "item": "university-sign.jpg",
1552
1935
  "todo": false,
1553
- "traits": [
1554
- "sign",
1555
- "text"
1556
- ],
1557
- "why": "A large weathered metal sign reading 'The Ohio State University, Established 1870', with a 'Research Center' plate below, on a lawn before a brick building and trees. Tests naming the sign and reading its words.",
1558
- "expect": [
1559
- "sign"
1560
- ],
1561
- "anyOf": [
1562
- [
1563
- "tree",
1564
- "trees"
1565
- ],
1566
- [
1567
- "grass",
1568
- "lawn"
1569
- ],
1570
- [
1571
- "building",
1572
- "brick building",
1573
- "campus"
1574
- ]
1575
- ],
1576
- "forbid": [
1577
- "person",
1578
- "car",
1579
- "snow"
1580
- ],
1581
- "allow": [],
1582
- "minCount": null,
1583
- "maxCount": null,
1584
- "watch": [
1585
- "ohio state university",
1586
- "ohio state",
1587
- "university",
1588
- "established 1870",
1589
- "1870",
1590
- "research center"
1936
+ "note": "A large weathered metal sign reading 'The Ohio State University, Established 1870', with a 'Research Center' plate below, on a lawn before a brick building and trees. Tests naming the sign and reading its words.",
1937
+ "metrics": [
1938
+ {
1939
+ "type": "contains-all",
1940
+ "values": "sign",
1941
+ "ignoreCase": true
1942
+ },
1943
+ {
1944
+ "type": "contains-any",
1945
+ "values": "tree\ntrees",
1946
+ "ignoreCase": true
1947
+ },
1948
+ {
1949
+ "type": "contains-any",
1950
+ "values": "grass\nlawn",
1951
+ "ignoreCase": true
1952
+ },
1953
+ {
1954
+ "type": "contains-any",
1955
+ "values": "building\nbrick building\ncampus",
1956
+ "ignoreCase": true
1957
+ },
1958
+ {
1959
+ "type": "contains",
1960
+ "value": "person",
1961
+ "not": true,
1962
+ "ignoreCase": true
1963
+ },
1964
+ {
1965
+ "type": "contains",
1966
+ "value": "car",
1967
+ "not": true,
1968
+ "ignoreCase": true
1969
+ },
1970
+ {
1971
+ "type": "contains",
1972
+ "value": "snow",
1973
+ "not": true,
1974
+ "ignoreCase": true
1975
+ },
1976
+ {
1977
+ "type": "contains-any",
1978
+ "values": "ohio state university",
1979
+ "weight": 0,
1980
+ "ignoreCase": true
1981
+ },
1982
+ {
1983
+ "type": "contains-any",
1984
+ "values": "ohio state",
1985
+ "weight": 0,
1986
+ "ignoreCase": true
1987
+ },
1988
+ {
1989
+ "type": "contains-any",
1990
+ "values": "university",
1991
+ "weight": 0,
1992
+ "ignoreCase": true
1993
+ },
1994
+ {
1995
+ "type": "contains-any",
1996
+ "values": "established 1870",
1997
+ "weight": 0,
1998
+ "ignoreCase": true
1999
+ },
2000
+ {
2001
+ "type": "contains-any",
2002
+ "values": "1870",
2003
+ "weight": 0,
2004
+ "ignoreCase": true
2005
+ },
2006
+ {
2007
+ "type": "contains-any",
2008
+ "values": "research center",
2009
+ "weight": 0,
2010
+ "ignoreCase": true
2011
+ }
1591
2012
  ]
1592
2013
  },
1593
2014
  {
1594
2015
  "id": "vegetable-crates",
1595
- "filename": "vegetable-crates.jpg",
2016
+ "item": "vegetable-crates.jpg",
1596
2017
  "todo": false,
1597
- "traits": [
1598
- "food",
1599
- "busy",
1600
- "colour"
1601
- ],
1602
- "why": "Yellow plastic crates of produce at a stall: tomatoes, limes, carrots, radishes, green beans, chillies, potatoes, green peppers, coconuts, cucumbers, aubergines and cauliflower. Tests listing many different foods.",
1603
- "expect": [],
1604
- "anyOf": [
1605
- [
1606
- "tomato",
1607
- "tomatoes"
1608
- ],
1609
- [
1610
- "crate",
1611
- "crates",
1612
- "basket",
1613
- "baskets",
1614
- "box",
1615
- "boxes"
1616
- ],
1617
- [
1618
- "potato",
1619
- "potatoes"
1620
- ],
1621
- [
1622
- "pepper",
1623
- "peppers",
1624
- "bell pepper",
1625
- "bell peppers",
1626
- "capsicum",
1627
- "green pepper",
1628
- "green peppers"
1629
- ],
1630
- [
1631
- "bean",
1632
- "beans",
1633
- "green beans",
1634
- "chili",
1635
- "chilies",
1636
- "chillies",
1637
- "chilli",
1638
- "chili peppers"
1639
- ]
1640
- ],
1641
- "forbid": [
1642
- "apple",
1643
- "apples",
1644
- "banana"
1645
- ],
1646
- "allow": [],
1647
- "minCount": 3,
1648
- "maxCount": null,
1649
- "watch": []
2018
+ "note": "Yellow plastic crates of produce at a stall: tomatoes, limes, carrots, radishes, green beans, chillies, potatoes, green peppers, coconuts, cucumbers, aubergines and cauliflower. Tests listing many different foods.",
2019
+ "metrics": [
2020
+ {
2021
+ "type": "contains-any",
2022
+ "values": "tomato\ntomatoes",
2023
+ "ignoreCase": true
2024
+ },
2025
+ {
2026
+ "type": "contains-any",
2027
+ "values": "crate\ncrates\nbasket\nbaskets\nbox\nboxes",
2028
+ "ignoreCase": true
2029
+ },
2030
+ {
2031
+ "type": "contains-any",
2032
+ "values": "potato\npotatoes",
2033
+ "ignoreCase": true
2034
+ },
2035
+ {
2036
+ "type": "contains-any",
2037
+ "values": "pepper\npeppers\nbell pepper\nbell peppers\ncapsicum\ngreen pepper\ngreen peppers",
2038
+ "ignoreCase": true
2039
+ },
2040
+ {
2041
+ "type": "contains-any",
2042
+ "values": "bean\nbeans\ngreen beans\nchili\nchilies\nchillies\nchilli\nchili peppers",
2043
+ "ignoreCase": true
2044
+ },
2045
+ {
2046
+ "type": "contains",
2047
+ "value": "apple",
2048
+ "not": true,
2049
+ "ignoreCase": true
2050
+ },
2051
+ {
2052
+ "type": "contains",
2053
+ "value": "apples",
2054
+ "not": true,
2055
+ "ignoreCase": true
2056
+ },
2057
+ {
2058
+ "type": "contains",
2059
+ "value": "banana",
2060
+ "not": true,
2061
+ "ignoreCase": true
2062
+ },
2063
+ {
2064
+ "type": "item-count",
2065
+ "min": 3,
2066
+ "max": null
2067
+ }
2068
+ ]
1650
2069
  },
1651
2070
  {
1652
2071
  "id": "watermarked-car",
1653
- "filename": "watermarked-car.jpg",
2072
+ "item": "watermarked-car.jpg",
1654
2073
  "todo": false,
1655
- "traits": [
1656
- "vehicle",
1657
- "watermark"
1658
- ],
1659
- "why": "A blue 1980s Ford Falcon sedan on a red dirt track by a rocky cutting, with faint security watermark text across it. Tests naming the car without the watermark derailing the answer.",
1660
- "expect": [
1661
- "car"
1662
- ],
1663
- "anyOf": [
1664
- [
1665
- "dirt",
1666
- "dirt road",
1667
- "road",
1668
- "gravel",
1669
- "track"
1670
- ],
1671
- [
1672
- "rock",
1673
- "rocks",
1674
- "hill",
1675
- "hills",
1676
- "cliff",
1677
- "landscape"
1678
- ]
1679
- ],
1680
- "forbid": [
1681
- "person",
1682
- "truck",
1683
- "water"
1684
- ],
1685
- "allow": [],
1686
- "minCount": null,
1687
- "maxCount": null,
1688
- "watch": [
1689
- "falcon",
1690
- "ford",
1691
- "watermark",
1692
- "does not appear on",
1693
- "when you purchase it"
2074
+ "note": "A blue 1980s Ford Falcon sedan on a red dirt track by a rocky cutting, with faint security watermark text across it. Tests naming the car without the watermark derailing the answer.",
2075
+ "metrics": [
2076
+ {
2077
+ "type": "contains-all",
2078
+ "values": "car",
2079
+ "ignoreCase": true
2080
+ },
2081
+ {
2082
+ "type": "contains-any",
2083
+ "values": "dirt\ndirt road\nroad\ngravel\ntrack",
2084
+ "ignoreCase": true
2085
+ },
2086
+ {
2087
+ "type": "contains-any",
2088
+ "values": "rock\nrocks\nhill\nhills\ncliff\nlandscape",
2089
+ "ignoreCase": true
2090
+ },
2091
+ {
2092
+ "type": "contains",
2093
+ "value": "person",
2094
+ "not": true,
2095
+ "ignoreCase": true
2096
+ },
2097
+ {
2098
+ "type": "contains",
2099
+ "value": "truck",
2100
+ "not": true,
2101
+ "ignoreCase": true
2102
+ },
2103
+ {
2104
+ "type": "contains",
2105
+ "value": "water",
2106
+ "not": true,
2107
+ "ignoreCase": true
2108
+ },
2109
+ {
2110
+ "type": "contains-any",
2111
+ "values": "falcon",
2112
+ "weight": 0,
2113
+ "ignoreCase": true
2114
+ },
2115
+ {
2116
+ "type": "contains-any",
2117
+ "values": "ford",
2118
+ "weight": 0,
2119
+ "ignoreCase": true
2120
+ },
2121
+ {
2122
+ "type": "contains-any",
2123
+ "values": "watermark",
2124
+ "weight": 0,
2125
+ "ignoreCase": true
2126
+ },
2127
+ {
2128
+ "type": "contains-any",
2129
+ "values": "does not appear on",
2130
+ "weight": 0,
2131
+ "ignoreCase": true
2132
+ },
2133
+ {
2134
+ "type": "contains-any",
2135
+ "values": "when you purchase it",
2136
+ "weight": 0,
2137
+ "ignoreCase": true
2138
+ }
1694
2139
  ]
1695
2140
  },
1696
2141
  {
1697
2142
  "id": "watermarked-pills",
1698
- "filename": "watermarked-pills.jpg",
2143
+ "item": "watermarked-pills.jpg",
1699
2144
  "todo": false,
1700
- "traits": [
1701
- "watermark",
1702
- "control"
1703
- ],
1704
- "why": "Two pale round pills, one stamped 'M' and one '30', on the rim of a glass dish against a black background, with a large 'DEA' watermark. Tests naming the pills and whether the watermark text is echoed.",
1705
- "expect": [],
1706
- "anyOf": [
1707
- [
1708
- "pill",
1709
- "pills",
1710
- "tablet",
1711
- "tablets",
1712
- "medication",
1713
- "medicine",
1714
- "capsule",
1715
- "capsules"
1716
- ],
1717
- [
1718
- "glass",
1719
- "dish",
1720
- "petri dish",
1721
- "glass dish",
1722
- "surface"
1723
- ],
1724
- [
1725
- "black background",
1726
- "background",
1727
- "dark background"
1728
- ]
1729
- ],
1730
- "forbid": [
1731
- "bottle",
1732
- "hand",
1733
- "syringe"
1734
- ],
1735
- "allow": [],
1736
- "minCount": null,
1737
- "maxCount": null,
1738
- "watch": [
1739
- "dea",
1740
- "m",
1741
- "30"
2145
+ "note": "Two pale round pills, one stamped 'M' and one '30', on the rim of a glass dish against a black background, with a large 'DEA' watermark. Tests naming the pills and whether the watermark text is echoed.",
2146
+ "metrics": [
2147
+ {
2148
+ "type": "contains-any",
2149
+ "values": "pill\npills\ntablet\ntablets\nmedication\nmedicine\ncapsule\ncapsules",
2150
+ "ignoreCase": true
2151
+ },
2152
+ {
2153
+ "type": "contains-any",
2154
+ "values": "glass\ndish\npetri dish\nglass dish\nsurface",
2155
+ "ignoreCase": true
2156
+ },
2157
+ {
2158
+ "type": "contains-any",
2159
+ "values": "black background\nbackground\ndark background",
2160
+ "ignoreCase": true
2161
+ },
2162
+ {
2163
+ "type": "contains",
2164
+ "value": "bottle",
2165
+ "not": true,
2166
+ "ignoreCase": true
2167
+ },
2168
+ {
2169
+ "type": "contains",
2170
+ "value": "hand",
2171
+ "not": true,
2172
+ "ignoreCase": true
2173
+ },
2174
+ {
2175
+ "type": "contains",
2176
+ "value": "syringe",
2177
+ "not": true,
2178
+ "ignoreCase": true
2179
+ },
2180
+ {
2181
+ "type": "contains-any",
2182
+ "values": "dea",
2183
+ "weight": 0,
2184
+ "ignoreCase": true
2185
+ },
2186
+ {
2187
+ "type": "contains-any",
2188
+ "values": "m",
2189
+ "weight": 0,
2190
+ "ignoreCase": true
2191
+ },
2192
+ {
2193
+ "type": "contains-any",
2194
+ "values": "30",
2195
+ "weight": 0,
2196
+ "ignoreCase": true
2197
+ }
1742
2198
  ]
1743
2199
  },
1744
2200
  {
1745
2201
  "id": "whiteboard-delegate",
1746
- "filename": "whiteboard-delegate.jpg",
2202
+ "item": "whiteboard-delegate.jpg",
1747
2203
  "todo": false,
1748
- "traits": [
1749
- "handwriting",
1750
- "text"
1751
- ],
1752
- "why": "A whiteboard with four words handwritten in blue marker as a list: delegate, delay, diminish, delete, with a wavy line below. Tests naming the whiteboard and whether the model reads the words.",
1753
- "expect": [
1754
- "whiteboard"
1755
- ],
1756
- "anyOf": [
1757
- [
1758
- "writing",
1759
- "handwriting",
1760
- "text",
1761
- "words",
1762
- "list",
1763
- "marker"
1764
- ]
1765
- ],
1766
- "forbid": [
1767
- "person",
1768
- "chalkboard",
1769
- "blackboard"
1770
- ],
1771
- "allow": [],
1772
- "minCount": null,
1773
- "maxCount": null,
1774
- "watch": [
1775
- "delegate",
1776
- "delay",
1777
- "diminish",
1778
- "delete"
2204
+ "note": "A whiteboard with four words handwritten in blue marker as a list: delegate, delay, diminish, delete, with a wavy line below. Tests naming the whiteboard and whether the model reads the words.",
2205
+ "metrics": [
2206
+ {
2207
+ "type": "contains-all",
2208
+ "values": "whiteboard",
2209
+ "ignoreCase": true
2210
+ },
2211
+ {
2212
+ "type": "contains-any",
2213
+ "values": "writing\nhandwriting\ntext\nwords\nlist\nmarker",
2214
+ "ignoreCase": true
2215
+ },
2216
+ {
2217
+ "type": "contains",
2218
+ "value": "person",
2219
+ "not": true,
2220
+ "ignoreCase": true
2221
+ },
2222
+ {
2223
+ "type": "contains",
2224
+ "value": "chalkboard",
2225
+ "not": true,
2226
+ "ignoreCase": true
2227
+ },
2228
+ {
2229
+ "type": "contains",
2230
+ "value": "blackboard",
2231
+ "not": true,
2232
+ "ignoreCase": true
2233
+ },
2234
+ {
2235
+ "type": "contains-any",
2236
+ "values": "delegate",
2237
+ "weight": 0,
2238
+ "ignoreCase": true
2239
+ },
2240
+ {
2241
+ "type": "contains-any",
2242
+ "values": "delay",
2243
+ "weight": 0,
2244
+ "ignoreCase": true
2245
+ },
2246
+ {
2247
+ "type": "contains-any",
2248
+ "values": "diminish",
2249
+ "weight": 0,
2250
+ "ignoreCase": true
2251
+ },
2252
+ {
2253
+ "type": "contains-any",
2254
+ "values": "delete",
2255
+ "weight": 0,
2256
+ "ignoreCase": true
2257
+ }
1779
2258
  ]
1780
2259
  },
1781
2260
  {
1782
2261
  "id": "whiteboard-germ-layers",
1783
- "filename": "whiteboard-germ-layers.jpg",
2262
+ "item": "whiteboard-germ-layers.jpg",
1784
2263
  "todo": false,
1785
- "traits": [
1786
- "handwriting",
1787
- "text",
1788
- "busy"
1789
- ],
1790
- "why": "A whiteboard of biology notes titled 'germ layer derivation', with hand-drawn diagrams of a denticle, a scale, an egg and an embryonic cross section, all labelled. Tests naming the whiteboard and its diagrams amid dense handwriting.",
1791
- "expect": [
1792
- "whiteboard"
1793
- ],
1794
- "anyOf": [
1795
- [
1796
- "diagram",
1797
- "diagrams",
1798
- "drawing",
1799
- "drawings",
1800
- "sketch",
1801
- "sketches",
1802
- "illustration"
1803
- ],
1804
- [
1805
- "writing",
1806
- "handwriting",
1807
- "notes",
1808
- "text",
1809
- "labels"
1810
- ]
1811
- ],
1812
- "forbid": [
1813
- "person",
1814
- "chalkboard",
1815
- "blackboard"
1816
- ],
1817
- "allow": [],
1818
- "minCount": null,
1819
- "maxCount": null,
1820
- "watch": [
1821
- "germ",
1822
- "layer",
1823
- "derivation",
1824
- "denticle",
1825
- "enamel",
1826
- "dentin",
1827
- "chorion",
1828
- "allantois",
1829
- "yolk sac",
1830
- "amnion",
1831
- "embryo",
1832
- "endoderm",
1833
- "lvl 100"
2264
+ "note": "A whiteboard of biology notes titled 'germ layer derivation', with hand-drawn diagrams of a denticle, a scale, an egg and an embryonic cross section, all labelled. Tests naming the whiteboard and its diagrams amid dense handwriting.",
2265
+ "metrics": [
2266
+ {
2267
+ "type": "contains-all",
2268
+ "values": "whiteboard",
2269
+ "ignoreCase": true
2270
+ },
2271
+ {
2272
+ "type": "contains-any",
2273
+ "values": "diagram\ndiagrams\ndrawing\ndrawings\nsketch\nsketches\nillustration",
2274
+ "ignoreCase": true
2275
+ },
2276
+ {
2277
+ "type": "contains-any",
2278
+ "values": "writing\nhandwriting\nnotes\ntext\nlabels",
2279
+ "ignoreCase": true
2280
+ },
2281
+ {
2282
+ "type": "contains",
2283
+ "value": "person",
2284
+ "not": true,
2285
+ "ignoreCase": true
2286
+ },
2287
+ {
2288
+ "type": "contains",
2289
+ "value": "chalkboard",
2290
+ "not": true,
2291
+ "ignoreCase": true
2292
+ },
2293
+ {
2294
+ "type": "contains",
2295
+ "value": "blackboard",
2296
+ "not": true,
2297
+ "ignoreCase": true
2298
+ },
2299
+ {
2300
+ "type": "contains-any",
2301
+ "values": "germ",
2302
+ "weight": 0,
2303
+ "ignoreCase": true
2304
+ },
2305
+ {
2306
+ "type": "contains-any",
2307
+ "values": "layer",
2308
+ "weight": 0,
2309
+ "ignoreCase": true
2310
+ },
2311
+ {
2312
+ "type": "contains-any",
2313
+ "values": "derivation",
2314
+ "weight": 0,
2315
+ "ignoreCase": true
2316
+ },
2317
+ {
2318
+ "type": "contains-any",
2319
+ "values": "denticle",
2320
+ "weight": 0,
2321
+ "ignoreCase": true
2322
+ },
2323
+ {
2324
+ "type": "contains-any",
2325
+ "values": "enamel",
2326
+ "weight": 0,
2327
+ "ignoreCase": true
2328
+ },
2329
+ {
2330
+ "type": "contains-any",
2331
+ "values": "dentin",
2332
+ "weight": 0,
2333
+ "ignoreCase": true
2334
+ },
2335
+ {
2336
+ "type": "contains-any",
2337
+ "values": "chorion",
2338
+ "weight": 0,
2339
+ "ignoreCase": true
2340
+ },
2341
+ {
2342
+ "type": "contains-any",
2343
+ "values": "allantois",
2344
+ "weight": 0,
2345
+ "ignoreCase": true
2346
+ },
2347
+ {
2348
+ "type": "contains-any",
2349
+ "values": "yolk sac",
2350
+ "weight": 0,
2351
+ "ignoreCase": true
2352
+ },
2353
+ {
2354
+ "type": "contains-any",
2355
+ "values": "amnion",
2356
+ "weight": 0,
2357
+ "ignoreCase": true
2358
+ },
2359
+ {
2360
+ "type": "contains-any",
2361
+ "values": "embryo",
2362
+ "weight": 0,
2363
+ "ignoreCase": true
2364
+ },
2365
+ {
2366
+ "type": "contains-any",
2367
+ "values": "endoderm",
2368
+ "weight": 0,
2369
+ "ignoreCase": true
2370
+ },
2371
+ {
2372
+ "type": "contains-any",
2373
+ "values": "lvl 100",
2374
+ "weight": 0,
2375
+ "ignoreCase": true
2376
+ }
1834
2377
  ]
1835
2378
  }
1836
2379
  ]