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,1680 +1,2065 @@
1
1
  {
2
2
  "format": "evals-lab/dataset",
3
- "version": 4,
3
+ "version": 6,
4
4
  "dataset": {
5
5
  "name": "Demo 2",
6
6
  "body": {
7
+ "version": 6,
8
+ "source": {
9
+ "id": "Demo 2",
10
+ "name": "Demo 2"
11
+ },
7
12
  "cases": [
8
13
  {
9
14
  "id": "aerial-city",
10
- "filename": "aerial-city.jpg",
15
+ "item": "aerial-city.jpg",
11
16
  "todo": false,
12
- "traits": [
13
- "busy",
14
- "landscape"
15
- ],
16
- "why": "A dense city seen from high above, towers packed to a hazy horizon. Tests naming a cityscape without inventing features that are not there.",
17
- "expect": [],
18
- "anyOf": [
19
- [
20
- "city",
21
- "cityscape",
22
- "skyline",
23
- "urban"
24
- ],
25
- [
26
- "building",
27
- "buildings",
28
- "skyscraper",
29
- "skyscrapers",
30
- "tower",
31
- "towers",
32
- "high-rise"
33
- ]
34
- ],
35
- "forbid": [
36
- "snow",
37
- "desert",
38
- "beach"
39
- ],
40
- "allow": [],
41
- "minCount": 3,
42
- "maxCount": null,
43
- "watch": []
17
+ "note": "A dense city seen from high above, towers packed to a hazy horizon. Tests naming a cityscape without inventing features that are not there.",
18
+ "metrics": [
19
+ {
20
+ "type": "contains-any",
21
+ "values": "city\ncityscape\nskyline\nurban",
22
+ "ignoreCase": true
23
+ },
24
+ {
25
+ "type": "contains-any",
26
+ "values": "building\nbuildings\nskyscraper\nskyscrapers\ntower\ntowers\nhigh-rise",
27
+ "ignoreCase": true
28
+ },
29
+ {
30
+ "type": "contains",
31
+ "value": "snow",
32
+ "not": true,
33
+ "ignoreCase": true
34
+ },
35
+ {
36
+ "type": "contains",
37
+ "value": "desert",
38
+ "not": true,
39
+ "ignoreCase": true
40
+ },
41
+ {
42
+ "type": "contains",
43
+ "value": "beach",
44
+ "not": true,
45
+ "ignoreCase": true
46
+ },
47
+ {
48
+ "type": "item-count",
49
+ "min": 3,
50
+ "max": null
51
+ }
52
+ ]
44
53
  },
45
54
  {
46
55
  "id": "alligator-pen",
47
- "filename": "alligator-pen.jpg",
56
+ "item": "alligator-pen.jpg",
48
57
  "todo": false,
49
- "traits": [
50
- "animal",
51
- "count",
52
- "monochrome"
53
- ],
54
- "why": "An old black-and-white print of dozens of young alligators heaped in a fenced pen beside a pond, under palms. Tests the animal, the enclosure and the water.",
55
- "expect": [],
56
- "anyOf": [
57
- [
58
- "alligator",
59
- "alligators",
60
- "crocodile",
61
- "crocodiles",
62
- "reptile",
63
- "reptiles"
64
- ],
65
- [
66
- "fence",
67
- "fencing",
68
- "pen",
69
- "enclosure"
70
- ],
71
- [
72
- "pond",
73
- "pool",
74
- "water"
75
- ]
76
- ],
77
- "forbid": [
78
- "person",
79
- "people",
80
- "snow"
81
- ],
82
- "allow": [],
83
- "minCount": null,
84
- "maxCount": null,
85
- "watch": []
58
+ "note": "An old black-and-white print of dozens of young alligators heaped in a fenced pen beside a pond, under palms. Tests the animal, the enclosure and the water.",
59
+ "metrics": [
60
+ {
61
+ "type": "contains-any",
62
+ "values": "alligator\nalligators\ncrocodile\ncrocodiles\nreptile\nreptiles",
63
+ "ignoreCase": true
64
+ },
65
+ {
66
+ "type": "contains-any",
67
+ "values": "fence\nfencing\npen\nenclosure",
68
+ "ignoreCase": true
69
+ },
70
+ {
71
+ "type": "contains-any",
72
+ "values": "pond\npool\nwater",
73
+ "ignoreCase": true
74
+ },
75
+ {
76
+ "type": "contains",
77
+ "value": "person",
78
+ "not": true,
79
+ "ignoreCase": true
80
+ },
81
+ {
82
+ "type": "contains",
83
+ "value": "people",
84
+ "not": true,
85
+ "ignoreCase": true
86
+ },
87
+ {
88
+ "type": "contains",
89
+ "value": "snow",
90
+ "not": true,
91
+ "ignoreCase": true
92
+ }
93
+ ]
86
94
  },
87
95
  {
88
96
  "id": "arm-tattoo",
89
- "filename": "arm-tattoo.jpg",
97
+ "item": "arm-tattoo.jpg",
90
98
  "todo": false,
91
- "traits": [
92
- "text",
93
- "control"
94
- ],
95
- "why": "A bare forearm lying on a white sheet, with a short line of script tattooed on it. Tests the arm and the tattoo, and whether the tattooed words are echoed.",
96
- "expect": [],
97
- "anyOf": [
98
- [
99
- "arm",
100
- "forearm"
101
- ],
102
- [
103
- "tattoo",
104
- "tattoos"
105
- ]
106
- ],
107
- "forbid": [
108
- "watch",
109
- "bracelet",
110
- "ring"
111
- ],
112
- "allow": [],
113
- "minCount": null,
114
- "maxCount": null,
115
- "watch": [
116
- "life is a breath"
99
+ "note": "A bare forearm lying on a white sheet, with a short line of script tattooed on it. Tests the arm and the tattoo, and whether the tattooed words are echoed.",
100
+ "metrics": [
101
+ {
102
+ "type": "contains-any",
103
+ "values": "arm\nforearm",
104
+ "ignoreCase": true
105
+ },
106
+ {
107
+ "type": "contains-any",
108
+ "values": "tattoo\ntattoos",
109
+ "ignoreCase": true
110
+ },
111
+ {
112
+ "type": "contains",
113
+ "value": "watch",
114
+ "not": true,
115
+ "ignoreCase": true
116
+ },
117
+ {
118
+ "type": "contains",
119
+ "value": "bracelet",
120
+ "not": true,
121
+ "ignoreCase": true
122
+ },
123
+ {
124
+ "type": "contains",
125
+ "value": "ring",
126
+ "not": true,
127
+ "ignoreCase": true
128
+ },
129
+ {
130
+ "type": "contains-any",
131
+ "values": "life is a breath",
132
+ "weight": 0,
133
+ "ignoreCase": true
134
+ }
117
135
  ]
118
136
  },
119
137
  {
120
138
  "id": "bed-and-plant",
121
- "filename": "bed-and-plant.jpg",
139
+ "item": "bed-and-plant.jpg",
122
140
  "todo": false,
123
- "traits": [
124
- "interior"
125
- ],
126
- "why": "A bedroom corner: a potted palm beside a bedside table with a lamp and bottle, a blurred white duvet in front and a painting above. Tests a quiet interior with several ordinary objects.",
127
- "expect": [],
128
- "anyOf": [
129
- [
130
- "plant",
131
- "plants",
132
- "palm",
133
- "houseplant",
134
- "potted plant"
135
- ],
136
- [
137
- "lamp",
138
- "table lamp"
139
- ],
140
- [
141
- "bed",
142
- "duvet",
143
- "bedding",
144
- "comforter",
145
- "blanket",
146
- "sheets"
147
- ]
148
- ],
149
- "forbid": [
150
- "cat",
151
- "dog",
152
- "window"
153
- ],
154
- "allow": [],
155
- "minCount": null,
156
- "maxCount": null,
157
- "watch": []
141
+ "note": "A bedroom corner: a potted palm beside a bedside table with a lamp and bottle, a blurred white duvet in front and a painting above. Tests a quiet interior with several ordinary objects.",
142
+ "metrics": [
143
+ {
144
+ "type": "contains-any",
145
+ "values": "plant\nplants\npalm\nhouseplant\npotted plant",
146
+ "ignoreCase": true
147
+ },
148
+ {
149
+ "type": "contains-any",
150
+ "values": "lamp\ntable lamp",
151
+ "ignoreCase": true
152
+ },
153
+ {
154
+ "type": "contains-any",
155
+ "values": "bed\nduvet\nbedding\ncomforter\nblanket\nsheets",
156
+ "ignoreCase": true
157
+ },
158
+ {
159
+ "type": "contains",
160
+ "value": "cat",
161
+ "not": true,
162
+ "ignoreCase": true
163
+ },
164
+ {
165
+ "type": "contains",
166
+ "value": "dog",
167
+ "not": true,
168
+ "ignoreCase": true
169
+ },
170
+ {
171
+ "type": "contains",
172
+ "value": "window",
173
+ "not": true,
174
+ "ignoreCase": true
175
+ }
176
+ ]
158
177
  },
159
178
  {
160
179
  "id": "bright-bedroom",
161
- "filename": "bright-bedroom.jpg",
180
+ "item": "bright-bedroom.jpg",
162
181
  "todo": false,
163
- "traits": [
164
- "interior",
165
- "busy"
166
- ],
167
- "why": "A sunlit bedroom with wood panelling, four windows, a curved white sofa, a ceiling fan and a bed with an open book. Tests a furnished room with many nameable things.",
168
- "expect": [],
169
- "anyOf": [
170
- [
171
- "bed"
172
- ],
173
- [
174
- "window",
175
- "windows"
176
- ],
177
- [
178
- "sofa",
179
- "couch",
180
- "settee",
181
- "loveseat",
182
- "chaise"
183
- ],
184
- [
185
- "ceiling fan",
186
- "fan"
187
- ]
188
- ],
189
- "forbid": [
190
- "television",
191
- "tv",
192
- "person"
193
- ],
194
- "allow": [],
195
- "minCount": 3,
196
- "maxCount": null,
197
- "watch": [
198
- "merremaker",
199
- "japanese kitchen"
182
+ "note": "A sunlit bedroom with wood panelling, four windows, a curved white sofa, a ceiling fan and a bed with an open book. Tests a furnished room with many nameable things.",
183
+ "metrics": [
184
+ {
185
+ "type": "contains-any",
186
+ "values": "bed",
187
+ "ignoreCase": true
188
+ },
189
+ {
190
+ "type": "contains-any",
191
+ "values": "window\nwindows",
192
+ "ignoreCase": true
193
+ },
194
+ {
195
+ "type": "contains-any",
196
+ "values": "sofa\ncouch\nsettee\nloveseat\nchaise",
197
+ "ignoreCase": true
198
+ },
199
+ {
200
+ "type": "contains-any",
201
+ "values": "ceiling fan\nfan",
202
+ "ignoreCase": true
203
+ },
204
+ {
205
+ "type": "contains",
206
+ "value": "television",
207
+ "not": true,
208
+ "ignoreCase": true
209
+ },
210
+ {
211
+ "type": "contains",
212
+ "value": "tv",
213
+ "not": true,
214
+ "ignoreCase": true
215
+ },
216
+ {
217
+ "type": "contains",
218
+ "value": "person",
219
+ "not": true,
220
+ "ignoreCase": true
221
+ },
222
+ {
223
+ "type": "item-count",
224
+ "min": 3,
225
+ "max": null
226
+ },
227
+ {
228
+ "type": "contains-any",
229
+ "values": "merremaker",
230
+ "weight": 0,
231
+ "ignoreCase": true
232
+ },
233
+ {
234
+ "type": "contains-any",
235
+ "values": "japanese kitchen",
236
+ "weight": 0,
237
+ "ignoreCase": true
238
+ }
200
239
  ]
201
240
  },
202
241
  {
203
242
  "id": "car-headlight",
204
- "filename": "car-headlight.jpg",
243
+ "item": "car-headlight.jpg",
205
244
  "todo": false,
206
- "traits": [
207
- "vehicle"
208
- ],
209
- "why": "A close crop of a pale blue classic car's round headlight and chrome bumper on asphalt. Tests recognising a car from a detail rather than the whole vehicle.",
210
- "expect": [],
211
- "anyOf": [
212
- [
213
- "car",
214
- "vintage car",
215
- "classic car",
216
- "automobile",
217
- "vehicle"
218
- ],
219
- [
220
- "headlight",
221
- "headlights",
222
- "headlamp",
223
- "light"
224
- ],
225
- [
226
- "bumper",
227
- "chrome"
228
- ]
229
- ],
230
- "forbid": [
231
- "person",
232
- "motorcycle"
233
- ],
234
- "allow": [],
235
- "minCount": null,
236
- "maxCount": null,
237
- "watch": []
245
+ "note": "A close crop of a pale blue classic car's round headlight and chrome bumper on asphalt. Tests recognising a car from a detail rather than the whole vehicle.",
246
+ "metrics": [
247
+ {
248
+ "type": "contains-any",
249
+ "values": "car\nvintage car\nclassic car\nautomobile\nvehicle",
250
+ "ignoreCase": true
251
+ },
252
+ {
253
+ "type": "contains-any",
254
+ "values": "headlight\nheadlights\nheadlamp\nlight",
255
+ "ignoreCase": true
256
+ },
257
+ {
258
+ "type": "contains-any",
259
+ "values": "bumper\nchrome",
260
+ "ignoreCase": true
261
+ },
262
+ {
263
+ "type": "contains",
264
+ "value": "person",
265
+ "not": true,
266
+ "ignoreCase": true
267
+ },
268
+ {
269
+ "type": "contains",
270
+ "value": "motorcycle",
271
+ "not": true,
272
+ "ignoreCase": true
273
+ }
274
+ ]
238
275
  },
239
276
  {
240
277
  "id": "child-in-surf",
241
- "filename": "child-in-surf.jpg",
278
+ "item": "child-in-surf.jpg",
242
279
  "todo": false,
243
- "traits": [
244
- "landscape"
245
- ],
246
- "why": "A child in a dark T-shirt stands ankle-deep in the shallows, back to the camera, facing breaking waves under a pink evening sky. Tests a single figure against sea and sky.",
247
- "expect": [],
248
- "anyOf": [
249
- [
250
- "child",
251
- "boy",
252
- "kid",
253
- "person"
254
- ],
255
- [
256
- "ocean",
257
- "sea",
258
- "water",
259
- "surf"
260
- ],
261
- [
262
- "wave",
263
- "waves"
264
- ]
265
- ],
266
- "forbid": [
267
- "dog",
268
- "surfboard",
269
- "boat"
270
- ],
271
- "allow": [],
272
- "minCount": null,
273
- "maxCount": null,
274
- "watch": []
280
+ "note": "A child in a dark T-shirt stands ankle-deep in the shallows, back to the camera, facing breaking waves under a pink evening sky. Tests a single figure against sea and sky.",
281
+ "metrics": [
282
+ {
283
+ "type": "contains-any",
284
+ "values": "child\nboy\nkid\nperson",
285
+ "ignoreCase": true
286
+ },
287
+ {
288
+ "type": "contains-any",
289
+ "values": "ocean\nsea\nwater\nsurf",
290
+ "ignoreCase": true
291
+ },
292
+ {
293
+ "type": "contains-any",
294
+ "values": "wave\nwaves",
295
+ "ignoreCase": true
296
+ },
297
+ {
298
+ "type": "contains",
299
+ "value": "dog",
300
+ "not": true,
301
+ "ignoreCase": true
302
+ },
303
+ {
304
+ "type": "contains",
305
+ "value": "surfboard",
306
+ "not": true,
307
+ "ignoreCase": true
308
+ },
309
+ {
310
+ "type": "contains",
311
+ "value": "boat",
312
+ "not": true,
313
+ "ignoreCase": true
314
+ }
315
+ ]
275
316
  },
276
317
  {
277
318
  "id": "city-highway",
278
- "filename": "city-highway.jpg",
319
+ "item": "city-highway.jpg",
279
320
  "todo": false,
280
- "traits": [
281
- "busy",
282
- "sign",
283
- "vehicle"
284
- ],
285
- "why": "A downtown skyline behind an expressway, with an elevated train, cars and green overhead road signs. Tests a busy urban scene and whether the sign text is echoed.",
286
- "expect": [],
287
- "anyOf": [
288
- [
289
- "skyscraper",
290
- "skyscrapers",
291
- "skyline",
292
- "building",
293
- "buildings",
294
- "tower"
295
- ],
296
- [
297
- "highway",
298
- "expressway",
299
- "freeway",
300
- "road",
301
- "motorway"
302
- ],
303
- [
304
- "train",
305
- "subway",
306
- "metro"
307
- ],
308
- [
309
- "car",
310
- "cars",
311
- "traffic",
312
- "vehicle",
313
- "vehicles"
314
- ]
315
- ],
316
- "forbid": [
317
- "boat",
318
- "bicycle"
319
- ],
320
- "allow": [],
321
- "minCount": 3,
322
- "maxCount": null,
323
- "watch": [
324
- "expressway ends",
325
- "ida b wells dr",
326
- "wisconsin",
327
- "exit only",
328
- "west",
329
- "portillo's",
330
- "speed limit",
331
- "45",
332
- "bmo"
321
+ "note": "A downtown skyline behind an expressway, with an elevated train, cars and green overhead road signs. Tests a busy urban scene and whether the sign text is echoed.",
322
+ "metrics": [
323
+ {
324
+ "type": "contains-any",
325
+ "values": "skyscraper\nskyscrapers\nskyline\nbuilding\nbuildings\ntower",
326
+ "ignoreCase": true
327
+ },
328
+ {
329
+ "type": "contains-any",
330
+ "values": "highway\nexpressway\nfreeway\nroad\nmotorway",
331
+ "ignoreCase": true
332
+ },
333
+ {
334
+ "type": "contains-any",
335
+ "values": "train\nsubway\nmetro",
336
+ "ignoreCase": true
337
+ },
338
+ {
339
+ "type": "contains-any",
340
+ "values": "car\ncars\ntraffic\nvehicle\nvehicles",
341
+ "ignoreCase": true
342
+ },
343
+ {
344
+ "type": "contains",
345
+ "value": "boat",
346
+ "not": true,
347
+ "ignoreCase": true
348
+ },
349
+ {
350
+ "type": "contains",
351
+ "value": "bicycle",
352
+ "not": true,
353
+ "ignoreCase": true
354
+ },
355
+ {
356
+ "type": "item-count",
357
+ "min": 3,
358
+ "max": null
359
+ },
360
+ {
361
+ "type": "contains-any",
362
+ "values": "expressway ends",
363
+ "weight": 0,
364
+ "ignoreCase": true
365
+ },
366
+ {
367
+ "type": "contains-any",
368
+ "values": "ida b wells dr",
369
+ "weight": 0,
370
+ "ignoreCase": true
371
+ },
372
+ {
373
+ "type": "contains-any",
374
+ "values": "wisconsin",
375
+ "weight": 0,
376
+ "ignoreCase": true
377
+ },
378
+ {
379
+ "type": "contains-any",
380
+ "values": "exit only",
381
+ "weight": 0,
382
+ "ignoreCase": true
383
+ },
384
+ {
385
+ "type": "contains-any",
386
+ "values": "west",
387
+ "weight": 0,
388
+ "ignoreCase": true
389
+ },
390
+ {
391
+ "type": "contains-any",
392
+ "values": "portillo's",
393
+ "weight": 0,
394
+ "ignoreCase": true
395
+ },
396
+ {
397
+ "type": "contains-any",
398
+ "values": "speed limit",
399
+ "weight": 0,
400
+ "ignoreCase": true
401
+ },
402
+ {
403
+ "type": "contains-any",
404
+ "values": "45",
405
+ "weight": 0,
406
+ "ignoreCase": true
407
+ },
408
+ {
409
+ "type": "contains-any",
410
+ "values": "bmo",
411
+ "weight": 0,
412
+ "ignoreCase": true
413
+ }
333
414
  ]
334
415
  },
335
416
  {
336
417
  "id": "corner-bakery",
337
- "filename": "corner-bakery.jpg",
418
+ "item": "corner-bakery.jpg",
338
419
  "todo": false,
339
- "traits": [
340
- "sign",
341
- "busy"
342
- ],
343
- "why": "A small white-brick bakery with an awning and string lights; two women stand at its window and a parking sign stands at the kerb. Tests the shop, the people and the signage.",
344
- "expect": [],
345
- "anyOf": [
346
- [
347
- "bakery",
348
- "shop",
349
- "store",
350
- "storefront",
351
- "cafe",
352
- "pastry shop"
353
- ],
354
- [
355
- "woman",
356
- "women",
357
- "people",
358
- "person",
359
- "customers"
360
- ],
361
- [
362
- "sign",
363
- "signs",
364
- "street sign",
365
- "parking sign"
366
- ],
367
- [
368
- "awning"
369
- ]
370
- ],
371
- "forbid": [
372
- "dog",
373
- "bicycle"
374
- ],
375
- "allow": [],
376
- "minCount": 3,
377
- "maxCount": null,
378
- "watch": [
379
- "tartes",
380
- "fine cakes",
381
- "pastries",
382
- "no stopping",
383
- "2 hr parking",
384
- "tow away zone",
385
- "212",
386
- "closed"
420
+ "note": "A small white-brick bakery with an awning and string lights; two women stand at its window and a parking sign stands at the kerb. Tests the shop, the people and the signage.",
421
+ "metrics": [
422
+ {
423
+ "type": "contains-any",
424
+ "values": "bakery\nshop\nstore\nstorefront\ncafe\npastry shop",
425
+ "ignoreCase": true
426
+ },
427
+ {
428
+ "type": "contains-any",
429
+ "values": "woman\nwomen\npeople\nperson\ncustomers",
430
+ "ignoreCase": true
431
+ },
432
+ {
433
+ "type": "contains-any",
434
+ "values": "sign\nsigns\nstreet sign\nparking sign",
435
+ "ignoreCase": true
436
+ },
437
+ {
438
+ "type": "contains-any",
439
+ "values": "awning",
440
+ "ignoreCase": true
441
+ },
442
+ {
443
+ "type": "contains",
444
+ "value": "dog",
445
+ "not": true,
446
+ "ignoreCase": true
447
+ },
448
+ {
449
+ "type": "contains",
450
+ "value": "bicycle",
451
+ "not": true,
452
+ "ignoreCase": true
453
+ },
454
+ {
455
+ "type": "item-count",
456
+ "min": 3,
457
+ "max": null
458
+ },
459
+ {
460
+ "type": "contains-any",
461
+ "values": "tartes",
462
+ "weight": 0,
463
+ "ignoreCase": true
464
+ },
465
+ {
466
+ "type": "contains-any",
467
+ "values": "fine cakes",
468
+ "weight": 0,
469
+ "ignoreCase": true
470
+ },
471
+ {
472
+ "type": "contains-any",
473
+ "values": "pastries",
474
+ "weight": 0,
475
+ "ignoreCase": true
476
+ },
477
+ {
478
+ "type": "contains-any",
479
+ "values": "no stopping",
480
+ "weight": 0,
481
+ "ignoreCase": true
482
+ },
483
+ {
484
+ "type": "contains-any",
485
+ "values": "2 hr parking",
486
+ "weight": 0,
487
+ "ignoreCase": true
488
+ },
489
+ {
490
+ "type": "contains-any",
491
+ "values": "tow away zone",
492
+ "weight": 0,
493
+ "ignoreCase": true
494
+ },
495
+ {
496
+ "type": "contains-any",
497
+ "values": "212",
498
+ "weight": 0,
499
+ "ignoreCase": true
500
+ },
501
+ {
502
+ "type": "contains-any",
503
+ "values": "closed",
504
+ "weight": 0,
505
+ "ignoreCase": true
506
+ }
387
507
  ]
388
508
  },
389
509
  {
390
510
  "id": "cyclist-yellow-jacket",
391
- "filename": "cyclist-yellow-jacket.jpg",
511
+ "item": "cyclist-yellow-jacket.jpg",
392
512
  "todo": false,
393
- "traits": [
394
- "vehicle",
395
- "colour"
396
- ],
397
- "why": "An older woman in a bright yellow jacket rides a red bicycle along a leafy street, with a 30 speed-limit sign ahead. Tests the rider, the bicycle and the street.",
398
- "expect": [],
399
- "anyOf": [
400
- [
401
- "bicycle",
402
- "bike"
403
- ],
404
- [
405
- "woman",
406
- "person",
407
- "cyclist",
408
- "rider"
409
- ],
410
- [
411
- "tree",
412
- "trees"
413
- ],
414
- [
415
- "road",
416
- "street"
417
- ]
418
- ],
419
- "forbid": [
420
- "dog",
421
- "motorcycle"
422
- ],
423
- "allow": [],
424
- "minCount": null,
425
- "maxCount": null,
426
- "watch": [
427
- "30"
513
+ "note": "An older woman in a bright yellow jacket rides a red bicycle along a leafy street, with a 30 speed-limit sign ahead. Tests the rider, the bicycle and the street.",
514
+ "metrics": [
515
+ {
516
+ "type": "contains-any",
517
+ "values": "bicycle\nbike",
518
+ "ignoreCase": true
519
+ },
520
+ {
521
+ "type": "contains-any",
522
+ "values": "woman\nperson\ncyclist\nrider",
523
+ "ignoreCase": true
524
+ },
525
+ {
526
+ "type": "contains-any",
527
+ "values": "tree\ntrees",
528
+ "ignoreCase": true
529
+ },
530
+ {
531
+ "type": "contains-any",
532
+ "values": "road\nstreet",
533
+ "ignoreCase": true
534
+ },
535
+ {
536
+ "type": "contains",
537
+ "value": "dog",
538
+ "not": true,
539
+ "ignoreCase": true
540
+ },
541
+ {
542
+ "type": "contains",
543
+ "value": "motorcycle",
544
+ "not": true,
545
+ "ignoreCase": true
546
+ },
547
+ {
548
+ "type": "contains-any",
549
+ "values": "30",
550
+ "weight": 0,
551
+ "ignoreCase": true
552
+ }
428
553
  ]
429
554
  },
430
555
  {
431
556
  "id": "excavator-street-signs",
432
- "filename": "excavator-street-signs.jpg",
557
+ "item": "excavator-street-signs.jpg",
433
558
  "todo": false,
434
- "traits": [
435
- "sign",
436
- "vehicle",
437
- "compound"
438
- ],
439
- "why": "A yellow excavator clearing a demolition site behind two green street-name signs, with a white house beyond. Tests the machine, the signs and whether their names are echoed.",
440
- "expect": [],
441
- "anyOf": [
442
- [
443
- "excavator",
444
- "digger",
445
- "backhoe",
446
- "construction equipment"
447
- ],
448
- [
449
- "street sign",
450
- "street signs",
451
- "sign",
452
- "signs"
453
- ],
454
- [
455
- "house",
456
- "houses",
457
- "home"
458
- ]
459
- ],
460
- "forbid": [
461
- "person",
462
- "dog"
463
- ],
464
- "allow": [],
465
- "minCount": null,
466
- "maxCount": null,
467
- "watch": [
468
- "roosevelt",
469
- "ave",
470
- "w 5th st",
471
- "5th",
472
- "500"
559
+ "note": "A yellow excavator clearing a demolition site behind two green street-name signs, with a white house beyond. Tests the machine, the signs and whether their names are echoed.",
560
+ "metrics": [
561
+ {
562
+ "type": "contains-any",
563
+ "values": "excavator\ndigger\nbackhoe\nconstruction equipment",
564
+ "ignoreCase": true
565
+ },
566
+ {
567
+ "type": "contains-any",
568
+ "values": "street sign\nstreet signs\nsign\nsigns",
569
+ "ignoreCase": true
570
+ },
571
+ {
572
+ "type": "contains-any",
573
+ "values": "house\nhouses\nhome",
574
+ "ignoreCase": true
575
+ },
576
+ {
577
+ "type": "contains",
578
+ "value": "person",
579
+ "not": true,
580
+ "ignoreCase": true
581
+ },
582
+ {
583
+ "type": "contains",
584
+ "value": "dog",
585
+ "not": true,
586
+ "ignoreCase": true
587
+ },
588
+ {
589
+ "type": "contains-any",
590
+ "values": "roosevelt",
591
+ "weight": 0,
592
+ "ignoreCase": true
593
+ },
594
+ {
595
+ "type": "contains-any",
596
+ "values": "ave",
597
+ "weight": 0,
598
+ "ignoreCase": true
599
+ },
600
+ {
601
+ "type": "contains-any",
602
+ "values": "w 5th st",
603
+ "weight": 0,
604
+ "ignoreCase": true
605
+ },
606
+ {
607
+ "type": "contains-any",
608
+ "values": "5th",
609
+ "weight": 0,
610
+ "ignoreCase": true
611
+ },
612
+ {
613
+ "type": "contains-any",
614
+ "values": "500",
615
+ "weight": 0,
616
+ "ignoreCase": true
617
+ }
473
618
  ]
474
619
  },
475
620
  {
476
621
  "id": "globe-closeup",
477
- "filename": "globe-closeup.jpg",
622
+ "item": "globe-closeup.jpg",
478
623
  "todo": false,
479
- "traits": [
480
- "text",
481
- "control"
482
- ],
483
- "why": "A shallow-focus close-up of a desk globe showing the west coast of Africa with printed place names, against a plain wall. Tests the globe and the map, and whether printed names are echoed.",
484
- "expect": [],
485
- "anyOf": [
486
- [
487
- "globe",
488
- "world globe"
489
- ],
490
- [
491
- "map",
492
- "africa",
493
- "atlantic",
494
- "ocean"
495
- ]
496
- ],
497
- "forbid": [
498
- "person",
499
- "book"
500
- ],
501
- "allow": [],
502
- "minCount": null,
503
- "maxCount": null,
504
- "watch": [
505
- "mauritania",
506
- "western sahara",
507
- "senegal",
508
- "guinea",
509
- "atlantic",
510
- "canary",
511
- "azores",
512
- "madeira"
624
+ "note": "A shallow-focus close-up of a desk globe showing the west coast of Africa with printed place names, against a plain wall. Tests the globe and the map, and whether printed names are echoed.",
625
+ "metrics": [
626
+ {
627
+ "type": "contains-any",
628
+ "values": "globe\nworld globe",
629
+ "ignoreCase": true
630
+ },
631
+ {
632
+ "type": "contains-any",
633
+ "values": "map\nafrica\natlantic\nocean",
634
+ "ignoreCase": true
635
+ },
636
+ {
637
+ "type": "contains",
638
+ "value": "person",
639
+ "not": true,
640
+ "ignoreCase": true
641
+ },
642
+ {
643
+ "type": "contains",
644
+ "value": "book",
645
+ "not": true,
646
+ "ignoreCase": true
647
+ },
648
+ {
649
+ "type": "contains-any",
650
+ "values": "mauritania",
651
+ "weight": 0,
652
+ "ignoreCase": true
653
+ },
654
+ {
655
+ "type": "contains-any",
656
+ "values": "western sahara",
657
+ "weight": 0,
658
+ "ignoreCase": true
659
+ },
660
+ {
661
+ "type": "contains-any",
662
+ "values": "senegal",
663
+ "weight": 0,
664
+ "ignoreCase": true
665
+ },
666
+ {
667
+ "type": "contains-any",
668
+ "values": "guinea",
669
+ "weight": 0,
670
+ "ignoreCase": true
671
+ },
672
+ {
673
+ "type": "contains-any",
674
+ "values": "atlantic",
675
+ "weight": 0,
676
+ "ignoreCase": true
677
+ },
678
+ {
679
+ "type": "contains-any",
680
+ "values": "canary",
681
+ "weight": 0,
682
+ "ignoreCase": true
683
+ },
684
+ {
685
+ "type": "contains-any",
686
+ "values": "azores",
687
+ "weight": 0,
688
+ "ignoreCase": true
689
+ },
690
+ {
691
+ "type": "contains-any",
692
+ "values": "madeira",
693
+ "weight": 0,
694
+ "ignoreCase": true
695
+ }
513
696
  ]
514
697
  },
515
698
  {
516
699
  "id": "harbour-village",
517
- "filename": "harbour-village.jpg",
700
+ "item": "harbour-village.jpg",
518
701
  "todo": false,
519
- "traits": [
520
- "landscape",
521
- "busy"
522
- ],
523
- "why": "A fishing village of yellow wooden buildings on a pier beside a fjord, between rocky mountains under a cloudy sky. Tests a landscape with buildings, water and mountains.",
524
- "expect": [],
525
- "anyOf": [
526
- [
527
- "mountain",
528
- "mountains",
529
- "cliff",
530
- "cliffs",
531
- "rock",
532
- "rocks"
533
- ],
534
- [
535
- "water",
536
- "fjord",
537
- "sea",
538
- "harbour",
539
- "harbor",
540
- "bay",
541
- "lake"
542
- ],
543
- [
544
- "building",
545
- "buildings",
546
- "house",
547
- "houses",
548
- "village"
549
- ]
550
- ],
551
- "forbid": [
552
- "snow",
553
- "beach"
554
- ],
555
- "allow": [],
556
- "minCount": 3,
557
- "maxCount": null,
558
- "watch": [
559
- "nusfjord"
702
+ "note": "A fishing village of yellow wooden buildings on a pier beside a fjord, between rocky mountains under a cloudy sky. Tests a landscape with buildings, water and mountains.",
703
+ "metrics": [
704
+ {
705
+ "type": "contains-any",
706
+ "values": "mountain\nmountains\ncliff\ncliffs\nrock\nrocks",
707
+ "ignoreCase": true
708
+ },
709
+ {
710
+ "type": "contains-any",
711
+ "values": "water\nfjord\nsea\nharbour\nharbor\nbay\nlake",
712
+ "ignoreCase": true
713
+ },
714
+ {
715
+ "type": "contains-any",
716
+ "values": "building\nbuildings\nhouse\nhouses\nvillage",
717
+ "ignoreCase": true
718
+ },
719
+ {
720
+ "type": "contains",
721
+ "value": "snow",
722
+ "not": true,
723
+ "ignoreCase": true
724
+ },
725
+ {
726
+ "type": "contains",
727
+ "value": "beach",
728
+ "not": true,
729
+ "ignoreCase": true
730
+ },
731
+ {
732
+ "type": "item-count",
733
+ "min": 3,
734
+ "max": null
735
+ },
736
+ {
737
+ "type": "contains-any",
738
+ "values": "nusfjord",
739
+ "weight": 0,
740
+ "ignoreCase": true
741
+ }
560
742
  ]
561
743
  },
562
744
  {
563
745
  "id": "high-street-walkers",
564
- "filename": "high-street-walkers.jpg",
746
+ "item": "high-street-walkers.jpg",
565
747
  "todo": false,
566
- "traits": [
567
- "busy",
568
- "compound"
569
- ],
570
- "why": "Two older women walk away down a narrow shopping street of old buildings, one with a walking stick, with a red telephone box on the right. Tests people, the street and a multi-word object.",
571
- "expect": [],
572
- "anyOf": [
573
- [
574
- "woman",
575
- "women",
576
- "people",
577
- "person",
578
- "pedestrians"
579
- ],
580
- [
581
- "street",
582
- "road",
583
- "lane"
584
- ],
585
- [
586
- "building",
587
- "buildings",
588
- "shop",
589
- "shops",
590
- "house",
591
- "houses"
592
- ]
593
- ],
594
- "forbid": [
595
- "car",
596
- "dog"
597
- ],
598
- "allow": [],
599
- "minCount": 3,
600
- "maxCount": null,
601
- "watch": [
602
- "telephone",
603
- "circus"
748
+ "note": "Two older women walk away down a narrow shopping street of old buildings, one with a walking stick, with a red telephone box on the right. Tests people, the street and a multi-word object.",
749
+ "metrics": [
750
+ {
751
+ "type": "contains-any",
752
+ "values": "woman\nwomen\npeople\nperson\npedestrians",
753
+ "ignoreCase": true
754
+ },
755
+ {
756
+ "type": "contains-any",
757
+ "values": "street\nroad\nlane",
758
+ "ignoreCase": true
759
+ },
760
+ {
761
+ "type": "contains-any",
762
+ "values": "building\nbuildings\nshop\nshops\nhouse\nhouses",
763
+ "ignoreCase": true
764
+ },
765
+ {
766
+ "type": "contains",
767
+ "value": "car",
768
+ "not": true,
769
+ "ignoreCase": true
770
+ },
771
+ {
772
+ "type": "contains",
773
+ "value": "dog",
774
+ "not": true,
775
+ "ignoreCase": true
776
+ },
777
+ {
778
+ "type": "item-count",
779
+ "min": 3,
780
+ "max": null
781
+ },
782
+ {
783
+ "type": "contains-any",
784
+ "values": "telephone",
785
+ "weight": 0,
786
+ "ignoreCase": true
787
+ },
788
+ {
789
+ "type": "contains-any",
790
+ "values": "circus",
791
+ "weight": 0,
792
+ "ignoreCase": true
793
+ }
604
794
  ]
605
795
  },
606
796
  {
607
797
  "id": "hillside-rooftops",
608
- "filename": "hillside-rooftops.jpg",
798
+ "item": "hillside-rooftops.jpg",
609
799
  "todo": false,
610
- "traits": [
611
- "busy",
612
- "colour"
613
- ],
614
- "why": "Packed old town houses with orange tiled roofs, tiled facades, balconies and hanging laundry, with a church tower and cranes on the skyline. Tests a dense townscape.",
615
- "expect": [],
616
- "anyOf": [
617
- [
618
- "roof",
619
- "roofs",
620
- "rooftops",
621
- "tiles",
622
- "roof tiles"
623
- ],
624
- [
625
- "building",
626
- "buildings",
627
- "house",
628
- "houses",
629
- "city",
630
- "town"
631
- ],
632
- [
633
- "laundry",
634
- "clothes",
635
- "washing",
636
- "clothesline"
637
- ]
638
- ],
639
- "forbid": [
640
- "snow",
641
- "beach",
642
- "river"
643
- ],
644
- "allow": [],
645
- "minCount": 3,
646
- "maxCount": null,
647
- "watch": []
800
+ "note": "Packed old town houses with orange tiled roofs, tiled facades, balconies and hanging laundry, with a church tower and cranes on the skyline. Tests a dense townscape.",
801
+ "metrics": [
802
+ {
803
+ "type": "contains-any",
804
+ "values": "roof\nroofs\nrooftops\ntiles\nroof tiles",
805
+ "ignoreCase": true
806
+ },
807
+ {
808
+ "type": "contains-any",
809
+ "values": "building\nbuildings\nhouse\nhouses\ncity\ntown",
810
+ "ignoreCase": true
811
+ },
812
+ {
813
+ "type": "contains-any",
814
+ "values": "laundry\nclothes\nwashing\nclothesline",
815
+ "ignoreCase": true
816
+ },
817
+ {
818
+ "type": "contains",
819
+ "value": "snow",
820
+ "not": true,
821
+ "ignoreCase": true
822
+ },
823
+ {
824
+ "type": "contains",
825
+ "value": "beach",
826
+ "not": true,
827
+ "ignoreCase": true
828
+ },
829
+ {
830
+ "type": "contains",
831
+ "value": "river",
832
+ "not": true,
833
+ "ignoreCase": true
834
+ },
835
+ {
836
+ "type": "item-count",
837
+ "min": 3,
838
+ "max": null
839
+ }
840
+ ]
648
841
  },
649
842
  {
650
843
  "id": "house-at-night",
651
- "filename": "house-at-night.jpg",
844
+ "item": "house-at-night.jpg",
652
845
  "todo": false,
653
- "traits": [
654
- "night",
655
- "vehicle",
656
- "plate"
657
- ],
658
- "why": "A stone house at night, its driveway leading to a lit garage with a parked car, a gate in front and red light trails from passing traffic. Tests a dark scene and a readable number plate.",
659
- "expect": [],
660
- "anyOf": [
661
- [
662
- "house",
663
- "home",
664
- "building"
665
- ],
666
- [
667
- "car",
668
- "suv",
669
- "vehicle"
670
- ],
671
- [
672
- "night",
673
- "light trails",
674
- "light trail",
675
- "streetlight",
676
- "street light"
677
- ]
678
- ],
679
- "forbid": [
680
- "person",
681
- "moon",
682
- "snow"
683
- ],
684
- "allow": [],
685
- "minCount": null,
686
- "maxCount": null,
687
- "watch": [
688
- "a20 ejn"
846
+ "note": "A stone house at night, its driveway leading to a lit garage with a parked car, a gate in front and red light trails from passing traffic. Tests a dark scene and a readable number plate.",
847
+ "metrics": [
848
+ {
849
+ "type": "contains-any",
850
+ "values": "house\nhome\nbuilding",
851
+ "ignoreCase": true
852
+ },
853
+ {
854
+ "type": "contains-any",
855
+ "values": "car\nsuv\nvehicle",
856
+ "ignoreCase": true
857
+ },
858
+ {
859
+ "type": "contains-any",
860
+ "values": "night\nlight trails\nlight trail\nstreetlight\nstreet light",
861
+ "ignoreCase": true
862
+ },
863
+ {
864
+ "type": "contains",
865
+ "value": "person",
866
+ "not": true,
867
+ "ignoreCase": true
868
+ },
869
+ {
870
+ "type": "contains",
871
+ "value": "moon",
872
+ "not": true,
873
+ "ignoreCase": true
874
+ },
875
+ {
876
+ "type": "contains",
877
+ "value": "snow",
878
+ "not": true,
879
+ "ignoreCase": true
880
+ },
881
+ {
882
+ "type": "contains-any",
883
+ "values": "a20 ejn",
884
+ "weight": 0,
885
+ "ignoreCase": true
886
+ }
689
887
  ]
690
888
  },
691
889
  {
692
890
  "id": "ivy-leaves",
693
- "filename": "ivy-leaves.jpg",
891
+ "item": "ivy-leaves.jpg",
694
892
  "todo": false,
695
- "traits": [
696
- "empty"
697
- ],
698
- "why": "A frame filled with glossy ivy leaves and nothing else. Tests naming foliage without inventing objects or scenery.",
699
- "expect": [],
700
- "anyOf": [
701
- [
702
- "leaves",
703
- "leaf",
704
- "foliage"
705
- ],
706
- [
707
- "ivy",
708
- "plant",
709
- "plants",
710
- "vine",
711
- "vines"
712
- ]
713
- ],
714
- "forbid": [
715
- "flower",
716
- "flowers",
717
- "person"
718
- ],
719
- "allow": [],
720
- "minCount": null,
721
- "maxCount": null,
722
- "watch": []
893
+ "note": "A frame filled with glossy ivy leaves and nothing else. Tests naming foliage without inventing objects or scenery.",
894
+ "metrics": [
895
+ {
896
+ "type": "contains-any",
897
+ "values": "leaves\nleaf\nfoliage",
898
+ "ignoreCase": true
899
+ },
900
+ {
901
+ "type": "contains-any",
902
+ "values": "ivy\nplant\nplants\nvine\nvines",
903
+ "ignoreCase": true
904
+ },
905
+ {
906
+ "type": "contains",
907
+ "value": "flower",
908
+ "not": true,
909
+ "ignoreCase": true
910
+ },
911
+ {
912
+ "type": "contains",
913
+ "value": "flowers",
914
+ "not": true,
915
+ "ignoreCase": true
916
+ },
917
+ {
918
+ "type": "contains",
919
+ "value": "person",
920
+ "not": true,
921
+ "ignoreCase": true
922
+ }
923
+ ]
723
924
  },
724
925
  {
725
926
  "id": "man-with-alligator",
726
- "filename": "man-with-alligator.jpg",
927
+ "item": "man-with-alligator.jpg",
727
928
  "todo": false,
728
- "traits": [
729
- "animal",
730
- "monochrome"
731
- ],
732
- "why": "An old black-and-white print of a man in a hat kneeling beside a large alligator on grass, with more alligators and a pond behind. Tests the animal and the person.",
733
- "expect": [],
734
- "anyOf": [
735
- [
736
- "alligator",
737
- "alligators",
738
- "crocodile",
739
- "crocodiles",
740
- "reptile"
741
- ],
742
- [
743
- "man",
744
- "person",
745
- "boy"
746
- ],
747
- [
748
- "grass",
749
- "lawn"
750
- ]
751
- ],
752
- "forbid": [
753
- "dog",
754
- "horse"
755
- ],
756
- "allow": [],
757
- "minCount": null,
758
- "maxCount": null,
759
- "watch": [
760
- "6314"
929
+ "note": "An old black-and-white print of a man in a hat kneeling beside a large alligator on grass, with more alligators and a pond behind. Tests the animal and the person.",
930
+ "metrics": [
931
+ {
932
+ "type": "contains-any",
933
+ "values": "alligator\nalligators\ncrocodile\ncrocodiles\nreptile",
934
+ "ignoreCase": true
935
+ },
936
+ {
937
+ "type": "contains-any",
938
+ "values": "man\nperson\nboy",
939
+ "ignoreCase": true
940
+ },
941
+ {
942
+ "type": "contains-any",
943
+ "values": "grass\nlawn",
944
+ "ignoreCase": true
945
+ },
946
+ {
947
+ "type": "contains",
948
+ "value": "dog",
949
+ "not": true,
950
+ "ignoreCase": true
951
+ },
952
+ {
953
+ "type": "contains",
954
+ "value": "horse",
955
+ "not": true,
956
+ "ignoreCase": true
957
+ },
958
+ {
959
+ "type": "contains-any",
960
+ "values": "6314",
961
+ "weight": 0,
962
+ "ignoreCase": true
963
+ }
761
964
  ]
762
965
  },
763
966
  {
764
967
  "id": "orange-mailbox-hedge",
765
- "filename": "orange-mailbox-hedge.jpg",
968
+ "item": "orange-mailbox-hedge.jpg",
766
969
  "todo": false,
767
- "traits": [
768
- "compound",
769
- "colour"
770
- ],
771
- "why": "An orange post box on a grey stand in front of a trimmed hedge, beside a brick apartment building and a paved path. Tests a multi-word object in strong colour.",
772
- "expect": [],
773
- "anyOf": [
774
- [
775
- "mailbox",
776
- "post box",
777
- "postbox",
778
- "letterbox",
779
- "letter box",
780
- "mail box"
781
- ],
782
- [
783
- "hedge",
784
- "hedges",
785
- "bush",
786
- "bushes",
787
- "shrub"
788
- ],
789
- [
790
- "building",
791
- "brick",
792
- "apartment"
793
- ]
794
- ],
795
- "forbid": [
796
- "person",
797
- "dog"
798
- ],
799
- "allow": [],
800
- "minCount": null,
801
- "maxCount": null,
802
- "watch": [
803
- "postnl"
970
+ "note": "An orange post box on a grey stand in front of a trimmed hedge, beside a brick apartment building and a paved path. Tests a multi-word object in strong colour.",
971
+ "metrics": [
972
+ {
973
+ "type": "contains-any",
974
+ "values": "mailbox\npost box\npostbox\nletterbox\nletter box\nmail box",
975
+ "ignoreCase": true
976
+ },
977
+ {
978
+ "type": "contains-any",
979
+ "values": "hedge\nhedges\nbush\nbushes\nshrub",
980
+ "ignoreCase": true
981
+ },
982
+ {
983
+ "type": "contains-any",
984
+ "values": "building\nbrick\napartment",
985
+ "ignoreCase": true
986
+ },
987
+ {
988
+ "type": "contains",
989
+ "value": "person",
990
+ "not": true,
991
+ "ignoreCase": true
992
+ },
993
+ {
994
+ "type": "contains",
995
+ "value": "dog",
996
+ "not": true,
997
+ "ignoreCase": true
998
+ },
999
+ {
1000
+ "type": "contains-any",
1001
+ "values": "postnl",
1002
+ "weight": 0,
1003
+ "ignoreCase": true
1004
+ }
804
1005
  ]
805
1006
  },
806
1007
  {
807
1008
  "id": "pedal-boats",
808
- "filename": "pedal-boats.jpg",
1009
+ "item": "pedal-boats.jpg",
809
1010
  "todo": false,
810
- "traits": [
811
- "colour",
812
- "compound",
813
- "count"
814
- ],
815
- "why": "Three pedal boats with water slides and ladders, drawn up on dark sand under a clear sky. Tests a multi-word object in saturated colour.",
816
- "expect": [],
817
- "anyOf": [
818
- [
819
- "pedal boat",
820
- "pedal boats",
821
- "paddle boat",
822
- "paddle boats",
823
- "pedalo",
824
- "pedalos",
825
- "boat",
826
- "boats"
827
- ],
828
- [
829
- "slide",
830
- "slides",
831
- "water slide",
832
- "water slides"
833
- ],
834
- [
835
- "sky",
836
- "beach",
837
- "sand"
838
- ]
839
- ],
840
- "forbid": [
841
- "person",
842
- "playground"
843
- ],
844
- "allow": [],
845
- "minCount": null,
846
- "maxCount": null,
847
- "watch": []
1011
+ "note": "Three pedal boats with water slides and ladders, drawn up on dark sand under a clear sky. Tests a multi-word object in saturated colour.",
1012
+ "metrics": [
1013
+ {
1014
+ "type": "contains-any",
1015
+ "values": "pedal boat\npedal boats\npaddle boat\npaddle boats\npedalo\npedalos\nboat\nboats",
1016
+ "ignoreCase": true
1017
+ },
1018
+ {
1019
+ "type": "contains-any",
1020
+ "values": "slide\nslides\nwater slide\nwater slides",
1021
+ "ignoreCase": true
1022
+ },
1023
+ {
1024
+ "type": "contains-any",
1025
+ "values": "sky\nbeach\nsand",
1026
+ "ignoreCase": true
1027
+ },
1028
+ {
1029
+ "type": "contains",
1030
+ "value": "person",
1031
+ "not": true,
1032
+ "ignoreCase": true
1033
+ },
1034
+ {
1035
+ "type": "contains",
1036
+ "value": "playground",
1037
+ "not": true,
1038
+ "ignoreCase": true
1039
+ }
1040
+ ]
848
1041
  },
849
1042
  {
850
1043
  "id": "pink-trees-vignette",
851
- "filename": "pink-trees-vignette.jpg",
1044
+ "item": "pink-trees-vignette.jpg",
852
1045
  "todo": false,
853
- "traits": [
854
- "colour",
855
- "watermark"
856
- ],
857
- "why": "Bare winter trees against a pale sky, tinted pink with a white vignette and a faint watermark in the corner. Tests naming the trees without reading the tint as blossom.",
858
- "expect": [],
859
- "anyOf": [
860
- [
861
- "tree",
862
- "trees"
863
- ],
864
- [
865
- "branch",
866
- "branches"
867
- ]
868
- ],
869
- "forbid": [
870
- "blossom",
871
- "blossoms",
872
- "flowers"
873
- ],
874
- "allow": [],
875
- "minCount": null,
876
- "maxCount": null,
877
- "watch": [
878
- "topaz films"
1046
+ "note": "Bare winter trees against a pale sky, tinted pink with a white vignette and a faint watermark in the corner. Tests naming the trees without reading the tint as blossom.",
1047
+ "metrics": [
1048
+ {
1049
+ "type": "contains-any",
1050
+ "values": "tree\ntrees",
1051
+ "ignoreCase": true
1052
+ },
1053
+ {
1054
+ "type": "contains-any",
1055
+ "values": "branch\nbranches",
1056
+ "ignoreCase": true
1057
+ },
1058
+ {
1059
+ "type": "contains",
1060
+ "value": "blossom",
1061
+ "not": true,
1062
+ "ignoreCase": true
1063
+ },
1064
+ {
1065
+ "type": "contains",
1066
+ "value": "blossoms",
1067
+ "not": true,
1068
+ "ignoreCase": true
1069
+ },
1070
+ {
1071
+ "type": "contains",
1072
+ "value": "flowers",
1073
+ "not": true,
1074
+ "ignoreCase": true
1075
+ },
1076
+ {
1077
+ "type": "contains-any",
1078
+ "values": "topaz films",
1079
+ "weight": 0,
1080
+ "ignoreCase": true
1081
+ }
879
1082
  ]
880
1083
  },
881
1084
  {
882
1085
  "id": "please-leave-quietly-sign",
883
- "filename": "please-leave-quietly-sign.jpg",
1086
+ "item": "please-leave-quietly-sign.jpg",
884
1087
  "todo": false,
885
- "traits": [
886
- "sign",
887
- "text"
888
- ],
889
- "why": "A small printed sign asking people to leave quietly, with a cartoon creature and a speech bubble, screwed to a green-painted wall. Tests the sign and whether its words are echoed.",
890
- "expect": [
891
- "sign"
892
- ],
893
- "anyOf": [
894
- [
895
- "wall",
896
- "building",
897
- "facade"
898
- ]
899
- ],
900
- "forbid": [
901
- "person",
902
- "car"
903
- ],
904
- "allow": [],
905
- "minCount": null,
906
- "maxCount": null,
907
- "watch": [
908
- "please",
909
- "leave quietly",
910
- "shhh"
1088
+ "note": "A small printed sign asking people to leave quietly, with a cartoon creature and a speech bubble, screwed to a green-painted wall. Tests the sign and whether its words are echoed.",
1089
+ "metrics": [
1090
+ {
1091
+ "type": "contains-all",
1092
+ "values": "sign",
1093
+ "ignoreCase": true
1094
+ },
1095
+ {
1096
+ "type": "contains-any",
1097
+ "values": "wall\nbuilding\nfacade",
1098
+ "ignoreCase": true
1099
+ },
1100
+ {
1101
+ "type": "contains",
1102
+ "value": "person",
1103
+ "not": true,
1104
+ "ignoreCase": true
1105
+ },
1106
+ {
1107
+ "type": "contains",
1108
+ "value": "car",
1109
+ "not": true,
1110
+ "ignoreCase": true
1111
+ },
1112
+ {
1113
+ "type": "contains-any",
1114
+ "values": "please",
1115
+ "weight": 0,
1116
+ "ignoreCase": true
1117
+ },
1118
+ {
1119
+ "type": "contains-any",
1120
+ "values": "leave quietly",
1121
+ "weight": 0,
1122
+ "ignoreCase": true
1123
+ },
1124
+ {
1125
+ "type": "contains-any",
1126
+ "values": "shhh",
1127
+ "weight": 0,
1128
+ "ignoreCase": true
1129
+ }
911
1130
  ]
912
1131
  },
913
1132
  {
914
1133
  "id": "railroad-crossing-sign",
915
- "filename": "railroad-crossing-sign.jpg",
1134
+ "item": "railroad-crossing-sign.jpg",
916
1135
  "todo": false,
917
- "traits": [
918
- "sign",
919
- "text"
920
- ],
921
- "why": "A weathered crossbuck sign reading RAILROAD CROSSING against a blue sky with clouds. Tests naming the sign without inventing a train.",
922
- "expect": [
923
- "sign"
924
- ],
925
- "anyOf": [
926
- [
927
- "sky",
928
- "blue sky"
929
- ],
930
- [
931
- "clouds",
932
- "cloud"
933
- ],
934
- [
935
- "crossing",
936
- "railroad",
937
- "railway",
938
- "crossbuck"
939
- ]
940
- ],
941
- "forbid": [
942
- "train"
943
- ],
944
- "allow": [
945
- "train crossing"
946
- ],
947
- "minCount": null,
948
- "maxCount": null,
949
- "watch": [
950
- "railroad",
951
- "crossing",
952
- "railroad crossing"
1136
+ "note": "A weathered crossbuck sign reading RAILROAD CROSSING against a blue sky with clouds. Tests naming the sign without inventing a train.",
1137
+ "metrics": [
1138
+ {
1139
+ "type": "contains-all",
1140
+ "values": "sign",
1141
+ "ignoreCase": true
1142
+ },
1143
+ {
1144
+ "type": "contains-any",
1145
+ "values": "sky\nblue sky",
1146
+ "ignoreCase": true
1147
+ },
1148
+ {
1149
+ "type": "contains-any",
1150
+ "values": "clouds\ncloud",
1151
+ "ignoreCase": true
1152
+ },
1153
+ {
1154
+ "type": "contains-any",
1155
+ "values": "crossing\nrailroad\nrailway\ncrossbuck",
1156
+ "ignoreCase": true
1157
+ },
1158
+ {
1159
+ "type": "contains",
1160
+ "value": "train",
1161
+ "not": true,
1162
+ "except": "train crossing",
1163
+ "ignoreCase": true
1164
+ },
1165
+ {
1166
+ "type": "contains-any",
1167
+ "values": "railroad",
1168
+ "weight": 0,
1169
+ "ignoreCase": true
1170
+ },
1171
+ {
1172
+ "type": "contains-any",
1173
+ "values": "crossing",
1174
+ "weight": 0,
1175
+ "ignoreCase": true
1176
+ },
1177
+ {
1178
+ "type": "contains-any",
1179
+ "values": "railroad crossing",
1180
+ "weight": 0,
1181
+ "ignoreCase": true
1182
+ }
953
1183
  ]
954
1184
  },
955
1185
  {
956
1186
  "id": "roadworks-sign",
957
- "filename": "roadworks-sign.jpg",
1187
+ "item": "roadworks-sign.jpg",
958
1188
  "todo": false,
959
- "traits": [
960
- "sign",
961
- "colour"
962
- ],
963
- "why": "An orange work-zone sign with a black pictogram of a surveyor at a tripod, on a metal stand against a chain-link fence. Tests reading a symbol-only sign.",
964
- "expect": [
965
- "sign"
966
- ],
967
- "anyOf": [
968
- [
969
- "fence",
970
- "chain link",
971
- "chain-link fence",
972
- "wire fence"
973
- ],
974
- [
975
- "orange",
976
- "construction",
977
- "roadwork",
978
- "roadworks",
979
- "road work",
980
- "work zone",
981
- "surveyor"
982
- ]
983
- ],
984
- "forbid": [
985
- "car",
986
- "traffic cone"
987
- ],
988
- "allow": [],
989
- "minCount": null,
990
- "maxCount": null,
991
- "watch": []
1189
+ "note": "An orange work-zone sign with a black pictogram of a surveyor at a tripod, on a metal stand against a chain-link fence. Tests reading a symbol-only sign.",
1190
+ "metrics": [
1191
+ {
1192
+ "type": "contains-all",
1193
+ "values": "sign",
1194
+ "ignoreCase": true
1195
+ },
1196
+ {
1197
+ "type": "contains-any",
1198
+ "values": "fence\nchain link\nchain-link fence\nwire fence",
1199
+ "ignoreCase": true
1200
+ },
1201
+ {
1202
+ "type": "contains-any",
1203
+ "values": "orange\nconstruction\nroadwork\nroadworks\nroad work\nwork zone\nsurveyor",
1204
+ "ignoreCase": true
1205
+ },
1206
+ {
1207
+ "type": "contains",
1208
+ "value": "car",
1209
+ "not": true,
1210
+ "ignoreCase": true
1211
+ },
1212
+ {
1213
+ "type": "contains",
1214
+ "value": "traffic cone",
1215
+ "not": true,
1216
+ "ignoreCase": true
1217
+ }
1218
+ ]
992
1219
  },
993
1220
  {
994
1221
  "id": "roundabout-sign",
995
- "filename": "roundabout-sign.jpg",
1222
+ "item": "roundabout-sign.jpg",
996
1223
  "todo": false,
997
- "traits": [
998
- "sign",
999
- "text"
1000
- ],
1001
- "why": "A British roundabout direction sign for Harrow Weald and Belmont beside houses, with vans and a bus down the street. Tests naming the sign and its roundabout symbol.",
1002
- "expect": [
1003
- "sign"
1004
- ],
1005
- "anyOf": [
1006
- [
1007
- "roundabout"
1008
- ],
1009
- [
1010
- "house",
1011
- "houses",
1012
- "building",
1013
- "buildings"
1014
- ],
1015
- [
1016
- "sky",
1017
- "blue sky"
1018
- ]
1019
- ],
1020
- "forbid": [
1021
- "traffic light"
1022
- ],
1023
- "allow": [],
1024
- "minCount": null,
1025
- "maxCount": null,
1026
- "watch": [
1027
- "harrow weald",
1028
- "belmont"
1224
+ "note": "A British roundabout direction sign for Harrow Weald and Belmont beside houses, with vans and a bus down the street. Tests naming the sign and its roundabout symbol.",
1225
+ "metrics": [
1226
+ {
1227
+ "type": "contains-all",
1228
+ "values": "sign",
1229
+ "ignoreCase": true
1230
+ },
1231
+ {
1232
+ "type": "contains-any",
1233
+ "values": "roundabout",
1234
+ "ignoreCase": true
1235
+ },
1236
+ {
1237
+ "type": "contains-any",
1238
+ "values": "house\nhouses\nbuilding\nbuildings",
1239
+ "ignoreCase": true
1240
+ },
1241
+ {
1242
+ "type": "contains-any",
1243
+ "values": "sky\nblue sky",
1244
+ "ignoreCase": true
1245
+ },
1246
+ {
1247
+ "type": "contains",
1248
+ "value": "traffic light",
1249
+ "not": true,
1250
+ "ignoreCase": true
1251
+ },
1252
+ {
1253
+ "type": "contains-any",
1254
+ "values": "harrow weald",
1255
+ "weight": 0,
1256
+ "ignoreCase": true
1257
+ },
1258
+ {
1259
+ "type": "contains-any",
1260
+ "values": "belmont",
1261
+ "weight": 0,
1262
+ "ignoreCase": true
1263
+ }
1029
1264
  ]
1030
1265
  },
1031
1266
  {
1032
1267
  "id": "sea-cave",
1033
- "filename": "sea-cave.jpg",
1268
+ "item": "sea-cave.jpg",
1034
1269
  "todo": false,
1035
- "traits": [
1036
- "landscape"
1037
- ],
1038
- "why": "A view out of a sea cave onto chalk cliffs, a sea stack and an arch, with rocks and pebbles on the cave floor. Tests naming the cave frame and the coastline beyond it.",
1039
- "expect": [],
1040
- "anyOf": [
1041
- [
1042
- "cave",
1043
- "cavern",
1044
- "grotto"
1045
- ],
1046
- [
1047
- "cliff",
1048
- "cliffs",
1049
- "sea stack",
1050
- "arch",
1051
- "rock formation"
1052
- ],
1053
- [
1054
- "rock",
1055
- "rocks",
1056
- "boulder",
1057
- "boulders",
1058
- "pebbles"
1059
- ],
1060
- [
1061
- "sea",
1062
- "ocean",
1063
- "beach",
1064
- "coast"
1065
- ]
1066
- ],
1067
- "forbid": [
1068
- "snow",
1069
- "boat"
1070
- ],
1071
- "allow": [],
1072
- "minCount": null,
1073
- "maxCount": null,
1074
- "watch": []
1270
+ "note": "A view out of a sea cave onto chalk cliffs, a sea stack and an arch, with rocks and pebbles on the cave floor. Tests naming the cave frame and the coastline beyond it.",
1271
+ "metrics": [
1272
+ {
1273
+ "type": "contains-any",
1274
+ "values": "cave\ncavern\ngrotto",
1275
+ "ignoreCase": true
1276
+ },
1277
+ {
1278
+ "type": "contains-any",
1279
+ "values": "cliff\ncliffs\nsea stack\narch\nrock formation",
1280
+ "ignoreCase": true
1281
+ },
1282
+ {
1283
+ "type": "contains-any",
1284
+ "values": "rock\nrocks\nboulder\nboulders\npebbles",
1285
+ "ignoreCase": true
1286
+ },
1287
+ {
1288
+ "type": "contains-any",
1289
+ "values": "sea\nocean\nbeach\ncoast",
1290
+ "ignoreCase": true
1291
+ },
1292
+ {
1293
+ "type": "contains",
1294
+ "value": "snow",
1295
+ "not": true,
1296
+ "ignoreCase": true
1297
+ },
1298
+ {
1299
+ "type": "contains",
1300
+ "value": "boat",
1301
+ "not": true,
1302
+ "ignoreCase": true
1303
+ }
1304
+ ]
1075
1305
  },
1076
1306
  {
1077
1307
  "id": "shadow-on-sand",
1078
- "filename": "shadow-on-sand.jpg",
1308
+ "item": "shadow-on-sand.jpg",
1079
1309
  "todo": false,
1080
- "traits": [
1081
- "landscape"
1082
- ],
1083
- "why": "The long shadow of a person making a peace sign on a sandy beach at the water's edge, with their sneakers at the bottom. Tests naming a shadow rather than a visible person.",
1084
- "expect": [
1085
- "shadow"
1086
- ],
1087
- "anyOf": [
1088
- [
1089
- "sand",
1090
- "beach"
1091
- ],
1092
- [
1093
- "waves",
1094
- "wave",
1095
- "sea",
1096
- "ocean",
1097
- "water",
1098
- "surf"
1099
- ],
1100
- [
1101
- "shoes",
1102
- "shoe",
1103
- "sneakers",
1104
- "sneaker",
1105
- "trainers",
1106
- "feet"
1107
- ]
1108
- ],
1109
- "forbid": [
1110
- "dog",
1111
- "umbrella"
1112
- ],
1113
- "allow": [],
1114
- "minCount": null,
1115
- "maxCount": null,
1116
- "watch": []
1310
+ "note": "The long shadow of a person making a peace sign on a sandy beach at the water's edge, with their sneakers at the bottom. Tests naming a shadow rather than a visible person.",
1311
+ "metrics": [
1312
+ {
1313
+ "type": "contains-all",
1314
+ "values": "shadow",
1315
+ "ignoreCase": true
1316
+ },
1317
+ {
1318
+ "type": "contains-any",
1319
+ "values": "sand\nbeach",
1320
+ "ignoreCase": true
1321
+ },
1322
+ {
1323
+ "type": "contains-any",
1324
+ "values": "waves\nwave\nsea\nocean\nwater\nsurf",
1325
+ "ignoreCase": true
1326
+ },
1327
+ {
1328
+ "type": "contains-any",
1329
+ "values": "shoes\nshoe\nsneakers\nsneaker\ntrainers\nfeet",
1330
+ "ignoreCase": true
1331
+ },
1332
+ {
1333
+ "type": "contains",
1334
+ "value": "dog",
1335
+ "not": true,
1336
+ "ignoreCase": true
1337
+ },
1338
+ {
1339
+ "type": "contains",
1340
+ "value": "umbrella",
1341
+ "not": true,
1342
+ "ignoreCase": true
1343
+ }
1344
+ ]
1117
1345
  },
1118
1346
  {
1119
1347
  "id": "signpost-a404",
1120
- "filename": "signpost-a404.jpg",
1348
+ "item": "signpost-a404.jpg",
1121
1349
  "todo": false,
1122
- "traits": [
1123
- "sign",
1124
- "text"
1125
- ],
1126
- "why": "An old white cast-iron fingerpost pointing to Harrow Hill, Wembley and London on the A404, with houses, a brick building and a red bus behind. Tests naming a fingerpost and reading its text.",
1127
- "expect": [],
1128
- "anyOf": [
1129
- [
1130
- "signpost",
1131
- "sign",
1132
- "fingerpost",
1133
- "road sign",
1134
- "street sign"
1135
- ],
1136
- [
1137
- "sky",
1138
- "cloudy sky",
1139
- "clouds"
1140
- ],
1141
- [
1142
- "building",
1143
- "buildings",
1144
- "houses",
1145
- "brick building"
1146
- ]
1147
- ],
1148
- "forbid": [
1149
- "person",
1150
- "traffic light"
1151
- ],
1152
- "allow": [],
1153
- "minCount": null,
1154
- "maxCount": null,
1155
- "watch": [
1156
- "harrow hill",
1157
- "wembley",
1158
- "london",
1159
- "a404"
1350
+ "note": "An old white cast-iron fingerpost pointing to Harrow Hill, Wembley and London on the A404, with houses, a brick building and a red bus behind. Tests naming a fingerpost and reading its text.",
1351
+ "metrics": [
1352
+ {
1353
+ "type": "contains-any",
1354
+ "values": "signpost\nsign\nfingerpost\nroad sign\nstreet sign",
1355
+ "ignoreCase": true
1356
+ },
1357
+ {
1358
+ "type": "contains-any",
1359
+ "values": "sky\ncloudy sky\nclouds",
1360
+ "ignoreCase": true
1361
+ },
1362
+ {
1363
+ "type": "contains-any",
1364
+ "values": "building\nbuildings\nhouses\nbrick building",
1365
+ "ignoreCase": true
1366
+ },
1367
+ {
1368
+ "type": "contains",
1369
+ "value": "person",
1370
+ "not": true,
1371
+ "ignoreCase": true
1372
+ },
1373
+ {
1374
+ "type": "contains",
1375
+ "value": "traffic light",
1376
+ "not": true,
1377
+ "ignoreCase": true
1378
+ },
1379
+ {
1380
+ "type": "contains-any",
1381
+ "values": "harrow hill",
1382
+ "weight": 0,
1383
+ "ignoreCase": true
1384
+ },
1385
+ {
1386
+ "type": "contains-any",
1387
+ "values": "wembley",
1388
+ "weight": 0,
1389
+ "ignoreCase": true
1390
+ },
1391
+ {
1392
+ "type": "contains-any",
1393
+ "values": "london",
1394
+ "weight": 0,
1395
+ "ignoreCase": true
1396
+ },
1397
+ {
1398
+ "type": "contains-any",
1399
+ "values": "a404",
1400
+ "weight": 0,
1401
+ "ignoreCase": true
1402
+ }
1160
1403
  ]
1161
1404
  },
1162
1405
  {
1163
1406
  "id": "street-fruit-cart",
1164
- "filename": "street-fruit-cart.jpg",
1407
+ "item": "street-fruit-cart.jpg",
1165
1408
  "todo": false,
1166
- "traits": [
1167
- "busy",
1168
- "food"
1169
- ],
1170
- "why": "A street vendor in a conical hat pushes a cart of rambutans and oranges down a busy street of shops, scooters and flags. Tests picking the vendor and fruit out of a crowded scene.",
1171
- "expect": [
1172
- "cart"
1173
- ],
1174
- "anyOf": [
1175
- [
1176
- "fruit",
1177
- "rambutan",
1178
- "rambutans",
1179
- "lychee",
1180
- "lychees",
1181
- "oranges",
1182
- "orange"
1183
- ],
1184
- [
1185
- "street",
1186
- "road"
1187
- ],
1188
- [
1189
- "scooter",
1190
- "scooters",
1191
- "motorbike",
1192
- "motorbikes",
1193
- "motorcycle",
1194
- "motorcycles"
1195
- ],
1196
- [
1197
- "conical hat",
1198
- "hat",
1199
- "vendor",
1200
- "woman",
1201
- "person",
1202
- "people"
1203
- ]
1204
- ],
1205
- "forbid": [
1206
- "dog",
1207
- "horse"
1208
- ],
1209
- "allow": [],
1210
- "minCount": 3,
1211
- "maxCount": null,
1212
- "watch": [
1213
- "ocean sun tours",
1214
- "local art store",
1215
- "cul cat"
1409
+ "note": "A street vendor in a conical hat pushes a cart of rambutans and oranges down a busy street of shops, scooters and flags. Tests picking the vendor and fruit out of a crowded scene.",
1410
+ "metrics": [
1411
+ {
1412
+ "type": "contains-all",
1413
+ "values": "cart",
1414
+ "ignoreCase": true
1415
+ },
1416
+ {
1417
+ "type": "contains-any",
1418
+ "values": "fruit\nrambutan\nrambutans\nlychee\nlychees\noranges\norange",
1419
+ "ignoreCase": true
1420
+ },
1421
+ {
1422
+ "type": "contains-any",
1423
+ "values": "street\nroad",
1424
+ "ignoreCase": true
1425
+ },
1426
+ {
1427
+ "type": "contains-any",
1428
+ "values": "scooter\nscooters\nmotorbike\nmotorbikes\nmotorcycle\nmotorcycles",
1429
+ "ignoreCase": true
1430
+ },
1431
+ {
1432
+ "type": "contains-any",
1433
+ "values": "conical hat\nhat\nvendor\nwoman\nperson\npeople",
1434
+ "ignoreCase": true
1435
+ },
1436
+ {
1437
+ "type": "contains",
1438
+ "value": "dog",
1439
+ "not": true,
1440
+ "ignoreCase": true
1441
+ },
1442
+ {
1443
+ "type": "contains",
1444
+ "value": "horse",
1445
+ "not": true,
1446
+ "ignoreCase": true
1447
+ },
1448
+ {
1449
+ "type": "item-count",
1450
+ "min": 3,
1451
+ "max": null
1452
+ },
1453
+ {
1454
+ "type": "contains-any",
1455
+ "values": "ocean sun tours",
1456
+ "weight": 0,
1457
+ "ignoreCase": true
1458
+ },
1459
+ {
1460
+ "type": "contains-any",
1461
+ "values": "local art store",
1462
+ "weight": 0,
1463
+ "ignoreCase": true
1464
+ },
1465
+ {
1466
+ "type": "contains-any",
1467
+ "values": "cul cat",
1468
+ "weight": 0,
1469
+ "ignoreCase": true
1470
+ }
1216
1471
  ]
1217
1472
  },
1218
1473
  {
1219
1474
  "id": "street-sign-parnassusweg",
1220
- "filename": "street-sign-parnassusweg.jpg",
1475
+ "item": "street-sign-parnassusweg.jpg",
1221
1476
  "todo": false,
1222
- "traits": [
1223
- "sign",
1224
- "text"
1225
- ],
1226
- "why": "A blue Dutch street-name plate reading Parnassusweg on a red brick wall above mosaic tiles. Tests naming the sign and the brick wall and echoing the street name.",
1227
- "expect": [
1228
- "sign"
1229
- ],
1230
- "anyOf": [
1231
- [
1232
- "brick",
1233
- "bricks",
1234
- "brick wall",
1235
- "wall"
1236
- ],
1237
- [
1238
- "tiles",
1239
- "tile",
1240
- "mosaic"
1241
- ]
1242
- ],
1243
- "forbid": [
1244
- "car",
1245
- "tree",
1246
- "person"
1247
- ],
1248
- "allow": [],
1249
- "minCount": null,
1250
- "maxCount": null,
1251
- "watch": [
1252
- "parnassusweg",
1253
- "prinses irenebuurt",
1254
- "zuid"
1477
+ "note": "A blue Dutch street-name plate reading Parnassusweg on a red brick wall above mosaic tiles. Tests naming the sign and the brick wall and echoing the street name.",
1478
+ "metrics": [
1479
+ {
1480
+ "type": "contains-all",
1481
+ "values": "sign",
1482
+ "ignoreCase": true
1483
+ },
1484
+ {
1485
+ "type": "contains-any",
1486
+ "values": "brick\nbricks\nbrick wall\nwall",
1487
+ "ignoreCase": true
1488
+ },
1489
+ {
1490
+ "type": "contains-any",
1491
+ "values": "tiles\ntile\nmosaic",
1492
+ "ignoreCase": true
1493
+ },
1494
+ {
1495
+ "type": "contains",
1496
+ "value": "car",
1497
+ "not": true,
1498
+ "ignoreCase": true
1499
+ },
1500
+ {
1501
+ "type": "contains",
1502
+ "value": "tree",
1503
+ "not": true,
1504
+ "ignoreCase": true
1505
+ },
1506
+ {
1507
+ "type": "contains",
1508
+ "value": "person",
1509
+ "not": true,
1510
+ "ignoreCase": true
1511
+ },
1512
+ {
1513
+ "type": "contains-any",
1514
+ "values": "parnassusweg",
1515
+ "weight": 0,
1516
+ "ignoreCase": true
1517
+ },
1518
+ {
1519
+ "type": "contains-any",
1520
+ "values": "prinses irenebuurt",
1521
+ "weight": 0,
1522
+ "ignoreCase": true
1523
+ },
1524
+ {
1525
+ "type": "contains-any",
1526
+ "values": "zuid",
1527
+ "weight": 0,
1528
+ "ignoreCase": true
1529
+ }
1255
1530
  ]
1256
1531
  },
1257
1532
  {
1258
1533
  "id": "two-horses-close",
1259
- "filename": "two-horses-close.jpg",
1534
+ "item": "two-horses-close.jpg",
1260
1535
  "todo": false,
1261
- "traits": [
1262
- "animal",
1263
- "count"
1264
- ],
1265
- "why": "Two chestnut horses with white blazes look into the camera over a barbed-wire fence. Tests naming the horses; the count is two.",
1266
- "expect": [],
1267
- "anyOf": [
1268
- [
1269
- "horse",
1270
- "horses"
1271
- ],
1272
- [
1273
- "fence",
1274
- "barbed wire",
1275
- "wire"
1276
- ]
1277
- ],
1278
- "forbid": [
1279
- "cow",
1280
- "person",
1281
- "dog"
1282
- ],
1283
- "allow": [],
1284
- "minCount": null,
1285
- "maxCount": null,
1286
- "watch": []
1536
+ "note": "Two chestnut horses with white blazes look into the camera over a barbed-wire fence. Tests naming the horses; the count is two.",
1537
+ "metrics": [
1538
+ {
1539
+ "type": "contains-any",
1540
+ "values": "horse\nhorses",
1541
+ "ignoreCase": true
1542
+ },
1543
+ {
1544
+ "type": "contains-any",
1545
+ "values": "fence\nbarbed wire\nwire",
1546
+ "ignoreCase": true
1547
+ },
1548
+ {
1549
+ "type": "contains",
1550
+ "value": "cow",
1551
+ "not": true,
1552
+ "ignoreCase": true
1553
+ },
1554
+ {
1555
+ "type": "contains",
1556
+ "value": "person",
1557
+ "not": true,
1558
+ "ignoreCase": true
1559
+ },
1560
+ {
1561
+ "type": "contains",
1562
+ "value": "dog",
1563
+ "not": true,
1564
+ "ignoreCase": true
1565
+ }
1566
+ ]
1287
1567
  },
1288
1568
  {
1289
1569
  "id": "victorian-house",
1290
- "filename": "victorian-house.jpg",
1570
+ "item": "victorian-house.jpg",
1291
1571
  "todo": false,
1292
- "traits": [
1293
- "sign"
1294
- ],
1295
- "why": "A cream Victorian house with teal trim, a front porch and steps, and a chalkboard welcome sign on the path. Tests naming the house and its porch.",
1296
- "expect": [],
1297
- "anyOf": [
1298
- [
1299
- "house",
1300
- "home",
1301
- "building",
1302
- "victorian"
1303
- ],
1304
- [
1305
- "porch",
1306
- "steps",
1307
- "stairs"
1308
- ],
1309
- [
1310
- "sign",
1311
- "chalkboard",
1312
- "sandwich board"
1313
- ],
1314
- [
1315
- "window",
1316
- "windows"
1317
- ]
1318
- ],
1319
- "forbid": [
1320
- "car",
1321
- "snow"
1322
- ],
1323
- "allow": [],
1324
- "minCount": null,
1325
- "maxCount": null,
1326
- "watch": [
1327
- "welcome",
1328
- "visitor info",
1329
- "free wifi",
1330
- "open"
1572
+ "note": "A cream Victorian house with teal trim, a front porch and steps, and a chalkboard welcome sign on the path. Tests naming the house and its porch.",
1573
+ "metrics": [
1574
+ {
1575
+ "type": "contains-any",
1576
+ "values": "house\nhome\nbuilding\nvictorian",
1577
+ "ignoreCase": true
1578
+ },
1579
+ {
1580
+ "type": "contains-any",
1581
+ "values": "porch\nsteps\nstairs",
1582
+ "ignoreCase": true
1583
+ },
1584
+ {
1585
+ "type": "contains-any",
1586
+ "values": "sign\nchalkboard\nsandwich board",
1587
+ "ignoreCase": true
1588
+ },
1589
+ {
1590
+ "type": "contains-any",
1591
+ "values": "window\nwindows",
1592
+ "ignoreCase": true
1593
+ },
1594
+ {
1595
+ "type": "contains",
1596
+ "value": "car",
1597
+ "not": true,
1598
+ "ignoreCase": true
1599
+ },
1600
+ {
1601
+ "type": "contains",
1602
+ "value": "snow",
1603
+ "not": true,
1604
+ "ignoreCase": true
1605
+ },
1606
+ {
1607
+ "type": "contains-any",
1608
+ "values": "welcome",
1609
+ "weight": 0,
1610
+ "ignoreCase": true
1611
+ },
1612
+ {
1613
+ "type": "contains-any",
1614
+ "values": "visitor info",
1615
+ "weight": 0,
1616
+ "ignoreCase": true
1617
+ },
1618
+ {
1619
+ "type": "contains-any",
1620
+ "values": "free wifi",
1621
+ "weight": 0,
1622
+ "ignoreCase": true
1623
+ },
1624
+ {
1625
+ "type": "contains-any",
1626
+ "values": "open",
1627
+ "weight": 0,
1628
+ "ignoreCase": true
1629
+ }
1331
1630
  ]
1332
1631
  },
1333
1632
  {
1334
1633
  "id": "vintage-dashboard",
1335
- "filename": "vintage-dashboard.jpg",
1634
+ "item": "vintage-dashboard.jpg",
1336
1635
  "todo": false,
1337
- "traits": [
1338
- "interior",
1339
- "vehicle",
1340
- "colour"
1341
- ],
1342
- "why": "The pink interior of a classic car: a thin black steering wheel, chrome dashboard gauges and a column shifter. Tests naming a car interior from its parts.",
1343
- "expect": [
1344
- "steering wheel"
1345
- ],
1346
- "anyOf": [
1347
- [
1348
- "dashboard",
1349
- "dash",
1350
- "gauges",
1351
- "gauge",
1352
- "speedometer"
1353
- ],
1354
- [
1355
- "car",
1356
- "vintage car",
1357
- "classic car",
1358
- "car interior"
1359
- ]
1360
- ],
1361
- "forbid": [
1362
- "person",
1363
- "dog"
1364
- ],
1365
- "allow": [],
1366
- "minCount": null,
1367
- "maxCount": null,
1368
- "watch": []
1636
+ "note": "The pink interior of a classic car: a thin black steering wheel, chrome dashboard gauges and a column shifter. Tests naming a car interior from its parts.",
1637
+ "metrics": [
1638
+ {
1639
+ "type": "contains-all",
1640
+ "values": "steering wheel",
1641
+ "ignoreCase": true
1642
+ },
1643
+ {
1644
+ "type": "contains-any",
1645
+ "values": "dashboard\ndash\ngauges\ngauge\nspeedometer",
1646
+ "ignoreCase": true
1647
+ },
1648
+ {
1649
+ "type": "contains-any",
1650
+ "values": "car\nvintage car\nclassic car\ncar interior",
1651
+ "ignoreCase": true
1652
+ },
1653
+ {
1654
+ "type": "contains",
1655
+ "value": "person",
1656
+ "not": true,
1657
+ "ignoreCase": true
1658
+ },
1659
+ {
1660
+ "type": "contains",
1661
+ "value": "dog",
1662
+ "not": true,
1663
+ "ignoreCase": true
1664
+ }
1665
+ ]
1369
1666
  },
1370
1667
  {
1371
1668
  "id": "volcano-at-dusk",
1372
- "filename": "volcano-at-dusk.jpg",
1669
+ "item": "volcano-at-dusk.jpg",
1373
1670
  "todo": false,
1374
- "traits": [
1375
- "landscape",
1376
- "wide"
1377
- ],
1378
- "why": "A snow-capped volcanic peak in dark silhouette at dusk under orange-lit clouds. Tests naming the mountain and the sky without inventing detail in the dark foreground.",
1379
- "expect": [],
1380
- "anyOf": [
1381
- [
1382
- "mountain",
1383
- "volcano",
1384
- "mount fuji",
1385
- "peak"
1386
- ],
1387
- [
1388
- "clouds",
1389
- "cloud",
1390
- "sky"
1391
- ],
1392
- [
1393
- "snow",
1394
- "snow cap",
1395
- "snowcap"
1396
- ],
1397
- [
1398
- "sunset",
1399
- "dusk",
1400
- "sunrise",
1401
- "twilight"
1402
- ]
1403
- ],
1404
- "forbid": [
1405
- "moon",
1406
- "person"
1407
- ],
1408
- "allow": [],
1409
- "minCount": null,
1410
- "maxCount": null,
1411
- "watch": []
1671
+ "note": "A snow-capped volcanic peak in dark silhouette at dusk under orange-lit clouds. Tests naming the mountain and the sky without inventing detail in the dark foreground.",
1672
+ "metrics": [
1673
+ {
1674
+ "type": "contains-any",
1675
+ "values": "mountain\nvolcano\nmount fuji\npeak",
1676
+ "ignoreCase": true
1677
+ },
1678
+ {
1679
+ "type": "contains-any",
1680
+ "values": "clouds\ncloud\nsky",
1681
+ "ignoreCase": true
1682
+ },
1683
+ {
1684
+ "type": "contains-any",
1685
+ "values": "snow\nsnow cap\nsnowcap",
1686
+ "ignoreCase": true
1687
+ },
1688
+ {
1689
+ "type": "contains-any",
1690
+ "values": "sunset\ndusk\nsunrise\ntwilight",
1691
+ "ignoreCase": true
1692
+ },
1693
+ {
1694
+ "type": "contains",
1695
+ "value": "moon",
1696
+ "not": true,
1697
+ "ignoreCase": true
1698
+ },
1699
+ {
1700
+ "type": "contains",
1701
+ "value": "person",
1702
+ "not": true,
1703
+ "ignoreCase": true
1704
+ }
1705
+ ]
1412
1706
  },
1413
1707
  {
1414
1708
  "id": "wall-camera",
1415
- "filename": "wall-camera.jpg",
1709
+ "item": "wall-camera.jpg",
1416
1710
  "todo": false,
1417
- "traits": [
1418
- "control",
1419
- "empty"
1420
- ],
1421
- "why": "A single white security camera on a bracket against a plain wall, casting a long shadow. Tests restraint on a near-empty image.",
1422
- "expect": [
1423
- "camera"
1424
- ],
1425
- "anyOf": [
1426
- [
1427
- "wall"
1428
- ]
1429
- ],
1430
- "forbid": [
1431
- "person",
1432
- "window"
1433
- ],
1434
- "allow": [],
1435
- "minCount": null,
1436
- "maxCount": 6,
1437
- "watch": []
1711
+ "note": "A single white security camera on a bracket against a plain wall, casting a long shadow. Tests restraint on a near-empty image.",
1712
+ "metrics": [
1713
+ {
1714
+ "type": "contains-all",
1715
+ "values": "camera",
1716
+ "ignoreCase": true
1717
+ },
1718
+ {
1719
+ "type": "contains-any",
1720
+ "values": "wall",
1721
+ "ignoreCase": true
1722
+ },
1723
+ {
1724
+ "type": "contains",
1725
+ "value": "person",
1726
+ "not": true,
1727
+ "ignoreCase": true
1728
+ },
1729
+ {
1730
+ "type": "contains",
1731
+ "value": "window",
1732
+ "not": true,
1733
+ "ignoreCase": true
1734
+ },
1735
+ {
1736
+ "type": "item-count",
1737
+ "min": null,
1738
+ "max": 6
1739
+ }
1740
+ ]
1438
1741
  },
1439
1742
  {
1440
1743
  "id": "watch-for-rocks-sign",
1441
- "filename": "watch-for-rocks-sign.jpg",
1744
+ "item": "watch-for-rocks-sign.jpg",
1442
1745
  "todo": false,
1443
- "traits": [
1444
- "sign",
1445
- "text",
1446
- "control"
1447
- ],
1448
- "why": "A yellow diamond warning sign reading WATCH FOR ROCKS against a clear blue sky. Tests naming the sign without listing rocks that are only written on it.",
1449
- "expect": [
1450
- "sign"
1451
- ],
1452
- "anyOf": [
1453
- [
1454
- "sky",
1455
- "blue sky"
1456
- ]
1457
- ],
1458
- "forbid": [
1459
- "car",
1460
- "tree",
1461
- "cloud"
1462
- ],
1463
- "allow": [],
1464
- "minCount": null,
1465
- "maxCount": null,
1466
- "watch": [
1467
- "watch for rocks",
1468
- "rocks"
1746
+ "note": "A yellow diamond warning sign reading WATCH FOR ROCKS against a clear blue sky. Tests naming the sign without listing rocks that are only written on it.",
1747
+ "metrics": [
1748
+ {
1749
+ "type": "contains-all",
1750
+ "values": "sign",
1751
+ "ignoreCase": true
1752
+ },
1753
+ {
1754
+ "type": "contains-any",
1755
+ "values": "sky\nblue sky",
1756
+ "ignoreCase": true
1757
+ },
1758
+ {
1759
+ "type": "contains",
1760
+ "value": "car",
1761
+ "not": true,
1762
+ "ignoreCase": true
1763
+ },
1764
+ {
1765
+ "type": "contains",
1766
+ "value": "tree",
1767
+ "not": true,
1768
+ "ignoreCase": true
1769
+ },
1770
+ {
1771
+ "type": "contains",
1772
+ "value": "cloud",
1773
+ "not": true,
1774
+ "ignoreCase": true
1775
+ },
1776
+ {
1777
+ "type": "contains-any",
1778
+ "values": "watch for rocks",
1779
+ "weight": 0,
1780
+ "ignoreCase": true
1781
+ },
1782
+ {
1783
+ "type": "contains-any",
1784
+ "values": "rocks",
1785
+ "weight": 0,
1786
+ "ignoreCase": true
1787
+ }
1469
1788
  ]
1470
1789
  },
1471
1790
  {
1472
1791
  "id": "waterfall",
1473
- "filename": "waterfall.jpg",
1792
+ "item": "waterfall.jpg",
1474
1793
  "todo": false,
1475
- "traits": [
1476
- "landscape"
1477
- ],
1478
- "why": "A huge waterfall pouring over a cliff into spray and churning water, with dark rocks at its foot. Tests naming the falls, the mist and the rocks.",
1479
- "expect": [],
1480
- "anyOf": [
1481
- [
1482
- "waterfall",
1483
- "waterfalls",
1484
- "falls",
1485
- "cascade"
1486
- ],
1487
- [
1488
- "rock",
1489
- "rocks",
1490
- "cliff"
1491
- ],
1492
- [
1493
- "mist",
1494
- "spray",
1495
- "water"
1496
- ]
1497
- ],
1498
- "forbid": [
1499
- "person",
1500
- "bridge",
1501
- "boat"
1502
- ],
1503
- "allow": [],
1504
- "minCount": null,
1505
- "maxCount": null,
1506
- "watch": []
1794
+ "note": "A huge waterfall pouring over a cliff into spray and churning water, with dark rocks at its foot. Tests naming the falls, the mist and the rocks.",
1795
+ "metrics": [
1796
+ {
1797
+ "type": "contains-any",
1798
+ "values": "waterfall\nwaterfalls\nfalls\ncascade",
1799
+ "ignoreCase": true
1800
+ },
1801
+ {
1802
+ "type": "contains-any",
1803
+ "values": "rock\nrocks\ncliff",
1804
+ "ignoreCase": true
1805
+ },
1806
+ {
1807
+ "type": "contains-any",
1808
+ "values": "mist\nspray\nwater",
1809
+ "ignoreCase": true
1810
+ },
1811
+ {
1812
+ "type": "contains",
1813
+ "value": "person",
1814
+ "not": true,
1815
+ "ignoreCase": true
1816
+ },
1817
+ {
1818
+ "type": "contains",
1819
+ "value": "bridge",
1820
+ "not": true,
1821
+ "ignoreCase": true
1822
+ },
1823
+ {
1824
+ "type": "contains",
1825
+ "value": "boat",
1826
+ "not": true,
1827
+ "ignoreCase": true
1828
+ }
1829
+ ]
1507
1830
  },
1508
1831
  {
1509
1832
  "id": "white-domes",
1510
- "filename": "white-domes.jpg",
1833
+ "item": "white-domes.jpg",
1511
1834
  "todo": false,
1512
- "traits": [
1513
- "colour"
1514
- ],
1515
- "why": "White marble domes of a mosque stacked one behind another, topped with gold finials against a pale sky. Tests naming the domes and the building.",
1516
- "expect": [],
1517
- "anyOf": [
1518
- [
1519
- "dome",
1520
- "domes"
1521
- ],
1522
- [
1523
- "mosque",
1524
- "building",
1525
- "architecture",
1526
- "temple"
1527
- ],
1528
- [
1529
- "finial",
1530
- "finials",
1531
- "spire",
1532
- "spires",
1533
- "gold"
1534
- ]
1535
- ],
1536
- "forbid": [
1537
- "person",
1538
- "tree"
1539
- ],
1540
- "allow": [],
1541
- "minCount": null,
1542
- "maxCount": null,
1543
- "watch": []
1835
+ "note": "White marble domes of a mosque stacked one behind another, topped with gold finials against a pale sky. Tests naming the domes and the building.",
1836
+ "metrics": [
1837
+ {
1838
+ "type": "contains-any",
1839
+ "values": "dome\ndomes",
1840
+ "ignoreCase": true
1841
+ },
1842
+ {
1843
+ "type": "contains-any",
1844
+ "values": "mosque\nbuilding\narchitecture\ntemple",
1845
+ "ignoreCase": true
1846
+ },
1847
+ {
1848
+ "type": "contains-any",
1849
+ "values": "finial\nfinials\nspire\nspires\ngold",
1850
+ "ignoreCase": true
1851
+ },
1852
+ {
1853
+ "type": "contains",
1854
+ "value": "person",
1855
+ "not": true,
1856
+ "ignoreCase": true
1857
+ },
1858
+ {
1859
+ "type": "contains",
1860
+ "value": "tree",
1861
+ "not": true,
1862
+ "ignoreCase": true
1863
+ }
1864
+ ]
1544
1865
  },
1545
1866
  {
1546
1867
  "id": "whiteboard-meeting-notes",
1547
- "filename": "whiteboard-meeting-notes.jpg",
1868
+ "item": "whiteboard-meeting-notes.jpg",
1548
1869
  "todo": false,
1549
- "traits": [
1550
- "handwriting",
1551
- "text",
1552
- "interior"
1553
- ],
1554
- "why": "A low-resolution image of a whiteboard with handwritten HTML notes in blue marker, a wooden frame, and a small camera on the desk below. Tests naming the board and the writing from a blurry image.",
1555
- "expect": [
1556
- "whiteboard"
1557
- ],
1558
- "anyOf": [
1559
- [
1560
- "writing",
1561
- "handwriting",
1562
- "notes",
1563
- "text",
1564
- "code",
1565
- "html"
1566
- ],
1567
- [
1568
- "desk",
1569
- "table",
1570
- "camera",
1571
- "marker"
1572
- ]
1573
- ],
1574
- "forbid": [
1575
- "person",
1576
- "chalkboard",
1577
- "blackboard"
1578
- ],
1579
- "allow": [],
1580
- "minCount": null,
1581
- "maxCount": null,
1582
- "watch": [
1583
- "href",
1584
- "teach the intern",
1585
- "urban vancouver",
1586
- "bryght"
1870
+ "note": "A low-resolution image of a whiteboard with handwritten HTML notes in blue marker, a wooden frame, and a small camera on the desk below. Tests naming the board and the writing from a blurry image.",
1871
+ "metrics": [
1872
+ {
1873
+ "type": "contains-all",
1874
+ "values": "whiteboard",
1875
+ "ignoreCase": true
1876
+ },
1877
+ {
1878
+ "type": "contains-any",
1879
+ "values": "writing\nhandwriting\nnotes\ntext\ncode\nhtml",
1880
+ "ignoreCase": true
1881
+ },
1882
+ {
1883
+ "type": "contains-any",
1884
+ "values": "desk\ntable\ncamera\nmarker",
1885
+ "ignoreCase": true
1886
+ },
1887
+ {
1888
+ "type": "contains",
1889
+ "value": "person",
1890
+ "not": true,
1891
+ "ignoreCase": true
1892
+ },
1893
+ {
1894
+ "type": "contains",
1895
+ "value": "chalkboard",
1896
+ "not": true,
1897
+ "ignoreCase": true
1898
+ },
1899
+ {
1900
+ "type": "contains",
1901
+ "value": "blackboard",
1902
+ "not": true,
1903
+ "ignoreCase": true
1904
+ },
1905
+ {
1906
+ "type": "contains-any",
1907
+ "values": "href",
1908
+ "weight": 0,
1909
+ "ignoreCase": true
1910
+ },
1911
+ {
1912
+ "type": "contains-any",
1913
+ "values": "teach the intern",
1914
+ "weight": 0,
1915
+ "ignoreCase": true
1916
+ },
1917
+ {
1918
+ "type": "contains-any",
1919
+ "values": "urban vancouver",
1920
+ "weight": 0,
1921
+ "ignoreCase": true
1922
+ },
1923
+ {
1924
+ "type": "contains-any",
1925
+ "values": "bryght",
1926
+ "weight": 0,
1927
+ "ignoreCase": true
1928
+ }
1587
1929
  ]
1588
1930
  },
1589
1931
  {
1590
1932
  "id": "whiteboard-messages",
1591
- "filename": "whiteboard-messages.jpg",
1933
+ "item": "whiteboard-messages.jpg",
1592
1934
  "todo": false,
1593
- "traits": [
1594
- "handwriting",
1595
- "text",
1596
- "interior"
1597
- ],
1598
- "why": "A mobile whiteboard covered in coloured handwritten congratulations under the heading Messages to the Firsties, with markers and an eraser on the tray. Tests naming the board and its handwritten messages.",
1599
- "expect": [
1600
- "whiteboard"
1601
- ],
1602
- "anyOf": [
1603
- [
1604
- "writing",
1605
- "handwriting",
1606
- "messages",
1607
- "notes",
1608
- "text"
1609
- ],
1610
- [
1611
- "markers",
1612
- "marker",
1613
- "eraser"
1614
- ],
1615
- [
1616
- "wall",
1617
- "tiles",
1618
- "tile wall"
1619
- ]
1620
- ],
1621
- "forbid": [
1622
- "person",
1623
- "chalkboard",
1624
- "blackboard"
1625
- ],
1626
- "allow": [],
1627
- "minCount": null,
1628
- "maxCount": null,
1629
- "watch": [
1630
- "messages to the firsties",
1631
- "hey guys",
1632
- "be responsible",
1633
- "congrats"
1935
+ "note": "A mobile whiteboard covered in coloured handwritten congratulations under the heading Messages to the Firsties, with markers and an eraser on the tray. Tests naming the board and its handwritten messages.",
1936
+ "metrics": [
1937
+ {
1938
+ "type": "contains-all",
1939
+ "values": "whiteboard",
1940
+ "ignoreCase": true
1941
+ },
1942
+ {
1943
+ "type": "contains-any",
1944
+ "values": "writing\nhandwriting\nmessages\nnotes\ntext",
1945
+ "ignoreCase": true
1946
+ },
1947
+ {
1948
+ "type": "contains-any",
1949
+ "values": "markers\nmarker\neraser",
1950
+ "ignoreCase": true
1951
+ },
1952
+ {
1953
+ "type": "contains-any",
1954
+ "values": "wall\ntiles\ntile wall",
1955
+ "ignoreCase": true
1956
+ },
1957
+ {
1958
+ "type": "contains",
1959
+ "value": "person",
1960
+ "not": true,
1961
+ "ignoreCase": true
1962
+ },
1963
+ {
1964
+ "type": "contains",
1965
+ "value": "chalkboard",
1966
+ "not": true,
1967
+ "ignoreCase": true
1968
+ },
1969
+ {
1970
+ "type": "contains",
1971
+ "value": "blackboard",
1972
+ "not": true,
1973
+ "ignoreCase": true
1974
+ },
1975
+ {
1976
+ "type": "contains-any",
1977
+ "values": "messages to the firsties",
1978
+ "weight": 0,
1979
+ "ignoreCase": true
1980
+ },
1981
+ {
1982
+ "type": "contains-any",
1983
+ "values": "hey guys",
1984
+ "weight": 0,
1985
+ "ignoreCase": true
1986
+ },
1987
+ {
1988
+ "type": "contains-any",
1989
+ "values": "be responsible",
1990
+ "weight": 0,
1991
+ "ignoreCase": true
1992
+ },
1993
+ {
1994
+ "type": "contains-any",
1995
+ "values": "congrats",
1996
+ "weight": 0,
1997
+ "ignoreCase": true
1998
+ }
1634
1999
  ]
1635
2000
  },
1636
2001
  {
1637
2002
  "id": "wooden-house-fence",
1638
- "filename": "wooden-house-fence.jpg",
2003
+ "item": "wooden-house-fence.jpg",
1639
2004
  "todo": false,
1640
- "traits": [
1641
- "house-number",
1642
- "sign"
1643
- ],
1644
- "why": "An old Russian wooden house with carved window frames and satellite dishes behind a grey plank fence bearing a blue street sign with the number 17. Tests naming the house and fence and echoing the number.",
1645
- "expect": [
1646
- "fence"
1647
- ],
1648
- "anyOf": [
1649
- [
1650
- "house",
1651
- "home",
1652
- "wooden house",
1653
- "cottage"
1654
- ],
1655
- [
1656
- "trees",
1657
- "tree",
1658
- "birch"
1659
- ],
1660
- [
1661
- "satellite dish",
1662
- "satellite dishes",
1663
- "dish"
1664
- ]
1665
- ],
1666
- "forbid": [
1667
- "car",
1668
- "person",
1669
- "snow"
1670
- ],
1671
- "allow": [],
1672
- "minCount": null,
1673
- "maxCount": null,
1674
- "watch": [
1675
- "17",
1676
- "пионерская улица",
1677
- "atak"
2005
+ "note": "An old Russian wooden house with carved window frames and satellite dishes behind a grey plank fence bearing a blue street sign with the number 17. Tests naming the house and fence and echoing the number.",
2006
+ "metrics": [
2007
+ {
2008
+ "type": "contains-all",
2009
+ "values": "fence",
2010
+ "ignoreCase": true
2011
+ },
2012
+ {
2013
+ "type": "contains-any",
2014
+ "values": "house\nhome\nwooden house\ncottage",
2015
+ "ignoreCase": true
2016
+ },
2017
+ {
2018
+ "type": "contains-any",
2019
+ "values": "trees\ntree\nbirch",
2020
+ "ignoreCase": true
2021
+ },
2022
+ {
2023
+ "type": "contains-any",
2024
+ "values": "satellite dish\nsatellite dishes\ndish",
2025
+ "ignoreCase": true
2026
+ },
2027
+ {
2028
+ "type": "contains",
2029
+ "value": "car",
2030
+ "not": true,
2031
+ "ignoreCase": true
2032
+ },
2033
+ {
2034
+ "type": "contains",
2035
+ "value": "person",
2036
+ "not": true,
2037
+ "ignoreCase": true
2038
+ },
2039
+ {
2040
+ "type": "contains",
2041
+ "value": "snow",
2042
+ "not": true,
2043
+ "ignoreCase": true
2044
+ },
2045
+ {
2046
+ "type": "contains-any",
2047
+ "values": "17",
2048
+ "weight": 0,
2049
+ "ignoreCase": true
2050
+ },
2051
+ {
2052
+ "type": "contains-any",
2053
+ "values": "пионерская улица",
2054
+ "weight": 0,
2055
+ "ignoreCase": true
2056
+ },
2057
+ {
2058
+ "type": "contains-any",
2059
+ "values": "atak",
2060
+ "weight": 0,
2061
+ "ignoreCase": true
2062
+ }
1678
2063
  ]
1679
2064
  }
1680
2065
  ]