This code demonstrates how to store, modify and parse metadata in ImageViews.
This code demonstrates how to store, modify and parse metadata in ImageViews. An ImageView is created and metadata are stored into it. Then the metadata are modified and parsed.
1import iolink
2
3
7
8
9def add_metadata(image: iolink.ImageView):
10
11 if not image.support(iolink.ImageCapability.WRITE):
12 raise AttributeError("Image does not have WRITE capability")
13
14
15
16
17
18
19
20
21
22
23
24
25
26 root = iolink.MetadataNodeFactory.create("root", None)
27 nameNode = iolink.MetadataNodeFactory.create("name", iolink.VariantDataValueFactory.create("generated image for example"))
28 authorNode = iolink.MetadataNodeFactory.create("author", iolink.VariantDataValueFactory.create("Arthur Conley"))
29 createDateNode = iolink.MetadataNodeFactory.create("creation_date", iolink.VariantDataValueFactory.create("2024-08-23"))
30
31 root.add_child(nameNode)
32 root.add_child(authorNode)
33 root.add_child(createDateNode)
34
35
36
37 iolink.MetadataNodeHelper.create_path(root, "parameters/param1", iolink.VariantDataValueFactory.create(42))
38 iolink.MetadataNodeHelper.create_path(root, "parameters/param2", iolink.VariantDataValueFactory.create(3.14))
39 iolink.MetadataNodeHelper.create_path(root, "parameters/param3", iolink.VariantDataValueFactory.create("Hello world!"));
40
41 iolink.MetadataNodeHelper.create_path(root, "parameters/version", iolink.VariantDataValueFactory.create(1))
42
43
44 image.metadata = root
45
46
47def increment_version_metadata(image: iolink.ImageView):
48
49 if not image.support(iolink.ImageCapability.WRITE):
50 raise AttributeError("Image does not have WRITE capability")
51
52
53
54 root = image.metadata
55
56
57 versionValue = iolink.MetadataNodeHelper.get_node(root, "parameters/version")
58
59
60 if versionValue is None:
61 raise AttributeError("version node does not exist")
62
63 version = versionValue.value[0]
64
65
66 rootCloned = root.clone()
67 iolink.MetadataNodeHelper.create_path(rootCloned, "parameters/version", iolink.VariantDataValueFactory.create(version + 1))
68
69
70 image.metadata = rootCloned
71
72
73def recursive_display_method(root: iolink.MetadataNode, level: int):
74 indent = " " * level
75 print(indent, root.key, ":", end='')
76
77
78 if root.value is not None:
79 print(root.value[0], end='')
80 print("")
81
82 for child in root:
83 recursive_display_method(child, level + 1)
84
85
86def display_metadata(image:iolink.ImageView):
87 if image.metadata is None:
88 print("No metadata to dislay")
89 return
90
91 root = image.metadata
92 print("Metadata tree:")
93 recursive_display_method(root, 0)
94
95
96
97image = iolink.ImageViewFactory.allocate((100, 200), iolink.DataTypeId.UINT8)
98
99
100add_metadata(image)
101
102
103display_metadata(image)
104
105
106increment_version_metadata(image)
107
108
109display_metadata(image)
110
111print("SUCCESS")