From 82c4ef035af556ce9589bec3a7f86773774aa0f4 Mon Sep 17 00:00:00 2001 From: Loris Sauter Date: Fri, 5 Jul 2024 14:54:43 +0200 Subject: [PATCH] README-ified the README --- README.md | 1037 +++------------------------------------- images/vengine-256.png | Bin 0 -> 12934 bytes images/vengine-512.png | Bin 0 -> 27718 bytes images/vitrivr_256.png | Bin 0 -> 9551 bytes images/vitrivr_512.png | Bin 0 -> 76376 bytes 5 files changed, 55 insertions(+), 982 deletions(-) create mode 100755 images/vengine-256.png create mode 100755 images/vengine-512.png create mode 100755 images/vitrivr_256.png create mode 100755 images/vitrivr_512.png diff --git a/README.md b/README.md index d87b42e8..4f4a8303 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,52 @@ -# vitrivr engine + + + + +
+
+ + vitrivr log


+ vitrivr-engine logo +
+
+
+ +[![GitHub Release](https://img.shields.io/github/release/vitrivr/vitrivr-engine?include_prereleases=&sort=semver&color=blue&style=for-the-badge&label=Release)](https://github.com/vitrivr/vitrivr-engine/releases) +[![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](#license) +[![issues - vitrivr-engine](https://img.shields.io/github/issues/vitrivr/vitrivr-engine?style=for-the-badge)](https://github.com/vitrivr/vitrivr-engine/issues) [vitrivr](https://vitrivr.org)'s next-generation retrieval engine. + +[Read The Docs](https://github.com/vitrivr/vitrivr-engine/wiki) + +
+ +## vitrivr-engine + +vitrivr-engine is [vitrivr](https://vitrivr.org)'s next generation retrieval engine with a flexible, modular architecture. Based on the experiences with its predecessor, [Cineast](https://github.com/vitrivr/cineast), -vitrivr engine's data model, ingestion pipeline and retrieval logic have been reworked. +vitrivr engine's data model, ingestion pipeline and retrieval logic have been reworked from the ground. +Essentially, vitrivr-engine enables the analysis (i.e. ingestion) and querying (i.e. retrieval ) of +multimedia data. + +## Built With + +* [Kotlin](https://kotlinlang.org) for the JVM, e.g. [OpenJDK](https://openjdk.org/) +* [OpenApi](https://www.openapis.org/) +* [CottontailDB](https://github.com/vitrivr/CottontailDB) +* ... and more ... + +## Getting Started + +See [Getting Started](https://github.com/vitrivr/vitrivr-engine/wiki/Getting-Started) + +## Usage + +See [Example](https://github.com/vitrivr/vitrivr-engine/wiki/Example) ## Project Structure -The project is set up as a multimodule Kotlin project: +The project is set up as a multi-module Kotlin project: | Module | Description | Maven Dependency | |-----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| @@ -19,987 +59,20 @@ The project is set up as a multimodule Kotlin project: | [`vitrivr-engine-module-fes`](https://github.com/vitrivr/vitrivr-engine//vitrivr-engine-module-fes) | Extension that can be used to harnes feature extraction provided by an external ML model server. **Requires local generation of bindings:** `./gradlew :vitrivr-engine-module-fes:generateFESClient` | Yes | | [`vitrivr-engine-server`](https://github.com/vitrivr/vitrivr-engine//vitrivr-engine-server) | A [Javalin](https://javalin.io) powered server providing an [OpenApi](https://openapis.org) [documented REST API](vitrivr-engine-server/doc/oas.json) for both, ingestion and querying and a CLI, essentially the runtime of the project | No | -## Getting Started: Usage - -vitrivr engine is a Kotlin project and hence requires a JDK (e.g. [OpenJDK](https://openjdk.org/)) to properly run. -Furthermore, we use [Gradle](https://gradle.org) in order to facilitate the building and deployment -through the Gradle wrapper. - -In the context of retrieval, often times a distinction of _indexing_ / _ingestion_ (also known as _offline phase_) -and _querying_ / _retrieval_ (also known as _online phase_) is made. -While the former addresses (multimedia) content to be analysed and indexed, i.e. made ready for search, is the latter's purpose to -search within the previously built index. - -### Indexing / Ingestion - -The most essential prerequisite for the ingestion is the existence of multimedia content. -For the sake of this example, let's assume the existence of such multimedia content in the form of image and video files. - -Also, since vitrivr engine is highly configurable, the first few steps involve the creation of a suitable -configuration. - -#### Schema - -vitrivr-engine operates on the notion of _schema_, similarly to a database or a collection, -essentially providing, among other things, a namespace. -For this guide, we will have a single schema `sandbox`. - -Create a config file `sandbox-config.json` with one named schema in it: - -```json -{ - "schemas": [{ - "name": "sandbox" - }] -} -``` - -#### Database Connection - -The database is an important component of the system, since it allows for the persistence and lookup of descriptors. -The default database used by `vitrivr-engine` is [CottontailDB](https://github.com/vitrivr/cottontaildb) This guide assumes a running [CottontailDB](https://github.com/vitrivr/cottontaildb) -instance on the same machine on the default port `1865`. - ---- -**NOTE this requires [Cottontail 0.16.5](https://github.com/vitrivr/cottontaildb/releases/tag/0.16.5) or newer** ---- - -We address the database with the [`ConnectionConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ConnectionConfig.kt): - -```json -{ - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } -} -``` - -We add the cottontail connection to the schema's connection property: - -```json -{ - "schemas": [{ - "name": "sandbox", - "connection": { - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } - } - }] -} -``` - -#### Schema Analyser - -The [`Analyser`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/model/metamodel/Analyser.kt) -performs analysis to derive a [`Descriptor`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/model/descriptor/Descriptor.kt). -In other words, the _analyser_ produces a _descriptor_ which represents the media content analysed. -However, this is only for _indexing_ / _ingestion_. During _querying_ / _retrieval_ time, -the _analyser_ queries the underlying storage layer to perform a query on said _descriptors_. - -#### Schema Field Configuration - -A schema consists of unique-named _fields_, that have to be backed by an [`Analyser`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/model/metamodel/Analyser.kt), -essentially representing a specific [`Descriptor`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/model/descriptor/Descriptor.kt). -This is configured using the [`FieldConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/FieldConfig.kt): - -```json -{ - "name": "uniqueName", - "factory": "FactoryClass", - "parameters":{ - "key": "value" - } -} -``` - -For images (and video frames), it might be worthwhile to use the average colour for representation purposes. -The built-in [`AverageColor`](/vitrivr-engine-plugin-features/src/main/kotlin/org/vitrivr/engine/base/features/averagecolor/AverageColor.kt) -analyser can be facilitated for this endeavour. -To use it, we specifically craft a corresponding _field config_: - -```json -{ - "name": "averagecolor", - "factory": "AverageColor" -} -``` - -There are no additional parameters, unlike, for instance, an [`ExternalAnalyser`](/vitrivr-engine-plugin-features/src/main/kotlin/org/vitrivr/engine/base/features/external/ExternalAnalyser.kt), -which requires the parameter `host` with an endpoint as value. - -For analysers that require a running [Feature Extraction Server](https://github.com/faberf/feature-extraction-server) (FES), the `host` parameter is required. Additionally, the `model` parameter may be used to specify a non-default model which should execute the task. Of course, this requires that the FES has the necessary plugins installed. See the [FES documentation](https://github.com/faberf/feature-extraction-server) for more information. - -- For [`ASR`](/vitrivr-engine-module-fes/src/main/kotlin/org/vitrivr/engine/base/features/external/implementations/ASR.kt) the analyser will perform automatic speech recognition on the audio content. -- For [`OCR`](/vitrivr-engine-module-fes/src/main/kotlin/org/vitrivr/engine/base/features/external/implementations/OCR.kt) the analyser will perform optical character recognition on the image content. -- For [`DenseEmbedding`](/vitrivr-engine-module-fes/src/main/kotlin/org/vitrivr/engine/base/features/external/implementations/DenseEmbedding.kt) the analyser will embed text / images as float vectors. Additionally, the `length` parameter is required to specify the length of the embedding. -- For [`ImageCaption`](/vitrivr-engine-module-fes/src/main/kotlin/org/vitrivr/engine/base/features/external/implementations/ImageCaption.kt) the analyser will generate a caption for the image content. Optionally, a `prompt` parameter can be used to specify a prompt for the caption generation. For example, the prompt could have the form `"Question: What is in the image? Answer:"`. -- For [`ImageClassification`](/vitrivr-engine-module-fes/src/main/kotlin/org/vitrivr/engine/base/features/external/implementations/ImageClassification.kt) the analyser will classify the image content. Additionally, the `classes` parameter is required, which should contain the classes to classify the image into, separated by commas. Optionally, the `top_k` and `threshold` parameters can be used to specify the number of top classes to return and the threshold for the classification. - - -Other fields are for (technical) metadata such as the [`FileSourceMetadata`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/features/metadata/source/file/FileSourceMetadata.kt), -which additionally stores the file's path and size. - -For exif metadata, the [`ExifMetadata`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/features/metadata/source/exif/ExifMetadata.kt) Analyser can be used. For each exif tag that should be included, a parameter with the name "{EXIF_DIRECTORY_NAME}_{TAG_NAME}" must be set to a type. Keys that do not match an exif tag via the aforementioned pattern are interpreted to be custom metadata tags that are stored in the exif UserComment tag in JSON format. Each parameter corresponds to a sub-field. Here is an example with custom "time_zone" metadata: -```json - { - "name": "exif", - "factory": "ExifMetadata", - "parameters": { - "ExifSubIFD_FocalLength": "INT", - "ExifSubIFD_ApertureValue": "FLOAT", - "ExifSubIFD_DateTimeOriginal": "DATETIME", - "ExifSubIFD_MeteringMode": "STRING", - "time_zone": "STRING" - } - } -``` -For extraction, the exif UserComment of images might look like this: -```json -{"time_zone": "Europe/Berlin", "hours_awake": 12} -``` - -Currently, there is no list of available fields and analysers, therefore a quick look into the code -reveals those existent. For basic (metadata), see in [the core module](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/features/), -for content-based features, see in [the features' module](/vitrivr-engine-plugin-features/src/main/kotlin/org/vitrivr/engine/base/features/). - -In this guide, we use the _average colour_ and _file source_ fields, which results in the (currently) following -configuration file: - -```json -{ - "schemas": [{ - "name": "sandbox", - "connection": { - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } - }, - "fields": [ - { - "name": "averagecolor", - "factory": "AverageColor" - }, - { - "name": "file", - "factory": "FileSourceMetadata" - } - ] - }] -} -``` - -#### Schema Resolver Configuration - -Some data is stored e.g. on disk during extraction, which later will also be required during query time, -therefore the [`Resolver`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/resolver/Resolver.kt) -is configured as the [`ResolverConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/schema/ResolverConfig.kt) -on the schema with a unique name. - -The [`ResolverConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/schema/ResolverConfig.kt) describes such a configuration: - -```json -{ - "factory": "FactoryClass", - "parameters": { - "key": "value" - } -} -``` - -Specifically, the [`DiskResolver`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/resolver/impl/DiskResolver.kt) is implemented and configured as such: - -```json -{ - "factory": "DiskResolver", - "parameters": { - "location": "./thumbnails/vitrivr" - } -} -``` - -Therefore, the _schema_ config is expanded with the _disk resolver_, named `disk`: - -```json -{ - "schemas": [{ - "name": "sandbox", - "connection": { - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } - }, - "fields": [ - { - "name": "averagecolor", - "factory": "AverageColor" - }, - { - "name": "file", - "factory": "FileSourceMetadata" - } - ] - }], - "resolvers": { - "disk": { - "factory": "DiskResolver", - "parameters": { - "location": "./thumbnails/vitrivr" - } - } - } -} -``` - -#### Schema Exporter Configuration - -In the context of images and videos, having thumbnails is desirable, which can be generated -during ingestion with the configuration of an _exporter_. -Generally speaking, an _exporter_ exports an artifact based on the media content. - -The [`ExporterConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ExporterConfig.kt) -describes such a configuration: - -```json -{ - "name": "uniqueName", - "factory": "FactoryClass", - "resolverName": "disk", - "parameters": { - "key": "value" - } -} -``` - -Specifically, the [`ThumbnailExporter`](/vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/exporters/ThumbnailExporter.kt), -can be configured as follows, which references a [`DiskResolver`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/resolver/impl/DiskResolver.kt) named `disk`, see the previous section. - -```json -{ - "name": "thumbnail", - "factory": "ThumbnailExporter", - "resolverName": "disk", - "parameters": { - "maxSideResolution": "400", - "mimeType": "JPG" - } -} -``` - -Resulting in the following schema config: - -```json -{ - "schemas": [{ - "name": "sandbox", - "connection": { - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } - }, - "fields": [ - { - "name": "averagecolor", - "factory": "AverageColor" - }, - { - "name": "file", - "factory": "FileSourceMetadata" - } - ], - "resolvers": { - "disk": { - "factory": "DiskResolver", - "parameters": { - "location": "./thumbnails/vitrivr" - } - } - }, - "exporters": [ - { - "name": "thumbnail", - "factory": "ThumbnailExporter", - "resolverName": "disk", - "parameters": { - "maxSideResolution": "400", - "mimeType": "JPG" - } - } - ] - }] -} -``` - -#### Extraction Pipeline Configuration - -In order to effectively support a specific _ingestion_ / _indexing_, we have to provide -a reference to the [`IndexConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/IndexConfig.kt), -which is configured as a [`PipelineConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/PipelineConfig.kt) within the schema config: - -```json -{ - "name": "pipelineName", - "path": "path/to/vbs-config-pipeline.json" -} -``` - -We will create said _index config_ later as `sandbox-pipeline.json`, hence, our schema config -is as follows: - -```json -{ - "schemas": [{ - "name": "sandbox", - "connection": { - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } - }, - "fields": [ - { - "name": "averagecolor", - "factory": "AverageColor" - }, - { - "name": "file", - "factory": "FileSourceMetadata" - } - ], - "exporters": [ - { - "name": "thumbnail", - "factory": "ThumbnailExporter", - "resolver": { - "factory": "DiskResolver", - "parameters": { - "location": "./thumbnails/sandbox" - } - }, - "parameters": { - "maxSideResolution": "400", - "mimeType": "JPG" - } - } - ], - "extractionPipelines": [ - { - "name": "sandboxpipeline", - "path": "./sandbox-pipeline.json" - } - ] - }] -} -``` - -#### Index Pipeline Configuration - -Let's create a new file `sandbox-pipeline.json` right next to the `sandbox-config.json` in the root of the project. -This file will contain the [`IngestionConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/IngestionConfig.kt). - -In order to address (reference) our schema, we reference it in our index config and provide a _context_ as well as an _enumerator_: - -```json -{ - "schema": "sandbox", - "context": { - - }, - "enumerator": { - - } -} -``` - -#### Index Context Configuration - -An [`IngestionContextConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/context/IngestionContextConfig.kt) -is used to specify the _context_, additional information to the media data. -Specifically, a [`Resolver`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/resolver/Resolver.kt), `disk`, is referenced by its name from the _schema_ configuration. - -```json -{ - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk", - "global": { - "key": "global-value" - }, - "local": { - "operator-name": { - "key": "local-value" - } - } -} -``` - -The [`Context`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/context/Context.kt) has two properties: `global` and `local`, which -enable local and global configuration in the form of key-value pairs. -However, `local`ly defined key-value pairs override their `global`ly defined counterpart. -In the above example, for the _operator_ (see further below), the key-value pair with the key `key` is also locally defined, -resulting in the value `local-value` to be used. However, a separate operator named other than `operator-name`, would get the value `global-value` -for the key `key`, as no local value is defined. -We refer to this part of the context, to the _context-parameters_. - -The example index pipeline configuration then, the current context looks as follow: - -```json -{ - "schema": "sandbox", - "context": { - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk" - }, - "enumerator": { - - } -} -``` - -There are these special sections for the context-parameters: - -* `content` - For the local context-parameters for the _content factory_. - -#### Index Operators Configuration - -Next up, we declare a list of [operators](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/Operator.kt) in the form -of [`OperatorConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt)s. -These _operators_ must have a unique name in the `operators` property of the [`IngestionConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/IngestionConfig.kt): -These names are used in the local context-parameters to configure them. - -```json -{ - "schema": "sandbox", - "context": { - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk", - "local": { - "enumerator": { - "path": "./sandbox/imgs", - "mediaTypes": "IMAGE;VIDEO", - "depth": "1" - }, - "myoperator1": { - "key1": "a-value", - "key2": "1234" - } - } - }, - "operators": { - "myoperator1": {}, - "myoperator2": {} - } -} -``` - -There are different _types_ of operators: - -* [`Enumerator`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Enumerator.kt) enumerate and emit `Source`s to ingest from some data source (e.g., the file system). -* [`Decoder`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Decoder.kt) decode a `Source`s such that the `Content` becomes is available for ingestion (e.g., a video or image decoder). Create and emit `Retrievable`s. -* [`Transformer`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Segmenter.kt) transform incoming `Retrievable`s and emit 1 to n output `Retrievable`s (e.g., a video segmenter). Result in a 1:1 or 1:n mapping, depending - on the implementation. -* [`Extractor`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Extractor.kt) extract information from the `Retrievable` and their `Content` and typically append a `Descriptor` before emitting it. -* [`Exporter`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Exporter.kt) process `Retrievable`s and store external representation thereof (e.g., a preview image). -* [`Aggregator`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Aggregator.kt) aggregate incoming `Retrievable`s and emit - one [`Retrievable`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/model/retrievable/Retrievable.kt)s, resulting in an n:1 mapping. - -A minimal extraction pipeline requires at least an `Enumerator` and a `Decoder`. - -Notably, `Extractor`s are mostly backed by a schema's field, indicating that the `Descriptor` is being persisted. One can also instantiate `Extractor`s through their -factory, in which case the associated `Descriptor` is transient. `Exporter`s are also referenced by name from the _schema_. - -In the following, we briefly introduce these configurations: - -##### Index Operator Configuration: Enumerator - -The _enumerator_ enumerates the content to index and provides it to the indexing pipeline. -It is described with a [`EnumeratorConfig](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt). - -Requires the property `mediaTypes`, a list of [`MediaType`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/source/MediaType.kt)s. - -```json -{ - "type": "ENUMERATOR", - "factory": "FactoryClass", - "mediaTypes": ["IMAGE","VIDEO"] -} -``` - -Currently implemented enumerators are found [in the index module](/vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/enumerate), -of which we will use the [`FileSystemEnumerator`](/vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/enumerate/FileSystemEnumerator.kt). - -The configuration **requires** the context-parameter `path`, the path to the folder containing multimedia content. -Essentially, for still images, use `IMAGE` and for videos `VIDEO`. -Additional context-parameters are `skip` (how many files should be skipped), `limit` (how many files should at max be enumerated over) -and `depth` (the depth to traverse the file system, `1` stands for current folder only, `2` for sub-folders, `3` for sub-sub-folders, ...). -Let's assume we do have in the root project a folder `sandbox`, with two sub-folders `imgs` and `vids`: - -``` -/sandbox - | - - /imgs - | - - img1.png - | - - img2.png - | - - /vids - | - - vid1.mp4 -``` - -For an image only ingestion, we could set up the configuration as follows (`skip` and `limit` have sensible default values of `0` and `Integer.MAX_VALUE`, respectively): - -**Context**: -```json -{ - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk", - "local": { - "enumerator": { - "path": "./your/media/path", - "depth": "1" - } - } -} -``` - -**Enumerator**: -```json -{ - "type": "ENUMERATOR", - "factory": "FileSystemEnumerator", - "mediaTypes": [ - "IMAGE", "VIDEO" - ] -} -``` - -##### Index Operator Configuration: Decoder - -The [`DecoderConfig`](/vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt) -describes how the media content is decoded. - -```json -{ - "type": "", - "factory": "DecoderClass" -} -``` - -Available decodes can be found [in the index module](/vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/decode). -Since we work with images in this tutorial, we require the [`ImageDecoder`](/vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/decode/ImageDecoder.kt): - -```json -{ - "name": "ImageDecoder" -} -``` - -##### Index Operators Configuration: Segmenter - -A [`Segmenter`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Segmenter.kt) is a 1:n operator, -its [`OperatorConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt) looks as follows: - -```json -{ - "type": "SEGMENTER", - "factory": "FactoryClass" -} -``` - -The `type` property is mandatory, equally so the `factory`, which has to point to a [`SegmenterFactory`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/SegmenterFactory.kt) implementation. -The context-parameters are optional and implementation dependent. - -See [implementations](vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/segment/) - -##### Index Operators Configuration: Transformer - -A [`Transformer`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Transformer.kt) is a 1:1 operator, -its [`OperatorConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt) looks as follows: - -```json -{ - "type": "TRANSFORMER", - "factory": "FactoryClass" -} -``` - -The `type` property is mandatory, equally so the `factory`, which has to point to a [`TransformerFactory`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/TransformerFactory.kt) implementation. -The context-parameters are optional and implementation dependent. - -See [implementations](vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/transform) - -##### Index Operators Configuration: Exporter - -A [`Exporter`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Exporter.kt) is a 1:1 operator, -its [`OperatorConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt) looks as follows: - -```json -{ - "type": "EXPORTER", - "exporterName": "name-from-schema" -} -``` - -The `type` property is mandatory, equally so the `exporterName`, which has to point to an `Exporter` defined on the _schema_. -The context-parameters are optional and implementation dependent and override those present in the _schema_ configuration. - -See [implementations](vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/exporters) - -##### Index Operators Configuration: Extractor - -A [`Extractor`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Extractor.kt) is a 1:1 operator, -its [`OperatorConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt) looks as follows: - -```json -{ - "type": "EXTRACTOR", - "fieldName": "name-from-schema" -} -``` - -The `type` property is mandatory, equally so the `fieldName`, which has to point to a _field_ as defined on the _schema_. - -See [implementations](vitrivr-engine-module-features/src/main/kotlin/org/vitrivr/engine/base/features/) - -##### Index Operators Configuration: Aggregator - -A [`Aggregator`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/Aggregator.kt) is a 1:n operator, -its [`OperatorConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operator/OperatorConfig.kt) looks as follows: - -```json -{ - "type": "AGGREGATOR", - "factory": "FactoryClass" -} -``` - -The `type` property is mandatory, equally so the `factory`, which has to point to a [`AggregatorFactory`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/operators/ingest/AggregatorFactory.kt) implementation. -The context-parameters are optional and implementation dependent. - -See [implementations](vitrivr-engine-index/src/main/kotlin/org/vitrivr/engine/index/aggregators) - -#### Index Operations Configuration: The Pipeline - -So far, we only have _declared_ the operators, with the `operations` property, we define the ingestion pipeline as a tree in the form of -[`OperationsConfig`](vitrivr-engine-core/src/main/kotlin/org/vitrivr/engine/core/config/ingest/operation/OperationsConfig.kt): - -```json -{ - "schema": "sandbox", - "context": { - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk", - "local": { - "enumerator": { - "path": "./sandbox/imgs", - "depth": "1" - }, - "myoperator": { - "key1": "a-avlue", - "key2": "1234" - } - } - }, - "operators": { - "myoperator": {}, - "myoperator1": {}, - "myoperator2": {} - }, - "operations": { - "myOperation": { - "operator": "myoperator" - }, - "myOperation1": { - "operator": "myoperator1", "inputs": ["myOperation"] - }, - "myOperation2": { - "operator": "myoperator2", "inputs": ["myOperation"] - } - }, - "output": ["myOperation2"] -} -``` - -Specifically, the `operator` property must point to a previously declared _operator_ and -the entries in the `inputs` property must point to an _operation_ with that name. -The `output` property of the ingest config then specifies the _operation_ whose results are persisted. - -Currently, there are the following rules to build such a pipeline: - -**Pipeline Rules:** - -1. The first _operation_ **must** be a `ENUMERATOR` -2. Following an `ENUMERATOR`, there **must** come a `DECODER` -3. Following a `DECODER`, there **must** either be a `TRANSFORMER` or `SEGMENTER` -4. `TRANSFORMER`s and `SEGMENTER`s can be daisy-chained -5. A `SEGMENTER` must be followed by one or more `AGGREGATOR`s, multiple `AGGREGATORS` results in branching. -6. An `AGGREGATOR` must be followed by either a `EXTRACTOR` or `EXPORTER` -7. `EXPORTER`s and `EXTRACTOR`s can be daisy-chained -8. The end or the ends, in case of branching, must be of type `EXPORTER` or `EXTRACTOR`. - -Notably, currently multiple `ENUMERATORS` are treated as separate trees, since merging is not yet supported. - -One example, based on the _schema_ further above (without branching), might look as follows: - -```json -{ - "schema": "sandbox", - "context": { - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk", - "local": { - "enumerator": { - "path": "./sandbox/imgs", - "depth": "1" - }, - "thumbs": { - "maxSideResolution": "350", - "mimeType": "JPG" - } - } - }, - "operators": { - "fsenumerator": { - "type": "ENUMERATOR", - "factory": "FileSystemEnumerator", - "mediaTypes": ["IMAGE"] - }, - "decoder": { - "type": "DECODER", - "factory": "ImageDecoder" - }, - "pass": { - "type": "SEGMENTER", - "factory": "PassThroughSegmenter" - }, - "allContent": { - "type": "AGGREGATOR", - "factory": "AllContentAggregator" - }, - "avgColor": { - "type": "EXTRACTOR", - "fieldName": "averagecolor" - }, - "thumbs": { - "type": "EXPORTER", - "exporterName": "thumbnail" - }, - "fileMeta": { - "type": "EXTRACTOR", - "fieldName": "file" - } - }, - "operations": { - "stage2": {"operator": "pass", "inputs": ["stage1"]}, - "stage0": {"operator": "fsenumerator"}, - "stage1": {"operator": "decoder", "inputs": ["stage0"]}, - "stage3": {"operator": "allContent", "inputs": ["stage2"]}, - "stage4": {"operator": "avgColor", "inputs": ["stage3"]}, - "stage5": {"operator": "thumbs", "inputs": ["stage4"]}, - "stage6": {"operator": "fileMeta", "inputs": ["stage5"]} - }, - "output": ["stage6"] -} -``` - -Here, the linear order of the pipeline's operator is: `fsenumerator` -> `decoder` -> `pass` -> `allContent` -> `avgColor` -> `thumbs` -> `fileMeta`. -Note that there are context-parameters defined for the `thumbs` exporter. -Also, note that the `output` property is set up, such that the `stage6` operation is persisted. - -#### Branching and Merging - -By defining the operations accordingly, there are two thing that can happen implicitly. - -**Branching**: If an `operations` is used as input for multiple other `operations`, this results in a branching. This is handled automatically by wrapping the associated `Operator` in a `BroadcastOperator`. - -**Merging**: If an `operation` has multiple inputs, this results in a merging, which combines multiple flows of `Retrievable`s into a single flow. The merging strategy (`MergeType`) must be specified explicitly in the `operation`. - -Currently, `vitrivr-engine` supports three type of merging strategies: - -| MergeType | Description | -|-----------|----------------------------------------------------------------------------------------------------------------------| -| `MERGE` | Merges the `Retrievable`s from the input operations in order the arrive. No deduplication and ordering is performed. | -| `COMBINE` | Merges `Retrievable`s from the input operations and emits a `Retrievable`, once it was received on every input. | -| `CONCAT` | Collects `Retrievable`s from the incoming flows in order of occurence, i.e., operation 1, then operation 2 etc. | - -#### Complete Sandbox Configuration - -After following above's guide on how to build your _schema_ config and your _index pipeline_ config, -the files should be similar as follows. - -The **schema** config: - -```json -{ - "schemas": [{ - "name": "sandbox", - "connection": { - "database": "CottontailConnectionProvider", - "parameters": { - "Host": "127.0.0.1", - "port": "1865" - } - }, - "fields": [ - { - "name": "averagecolor", - "factory": "AverageColor" - }, - { - "name": "file", - "factory": "FileSourceMetadata" - } - ], - "exporters": [ - { - "name": "thumbnail", - "factory": "ThumbnailExporter", - "resolver": { - "factory": "DiskResolver", - "parameters": { - "location": "./thumbnails/sandbox" - } - }, - "parameters": { - "maxSideResolution": "400", - "mimeType": "JPG" - } - } - ], - "extractionPipelines": [ - { - "name": "sandboxpipeline", - "path": "./sandbox-pipeline.json" - } - ] - }] -} -``` - -The **pipeline** config: - -```json -{ - "schema": "sandbox", - "context": { - "contentFactory": "InMemoryContentFactory", - "resolverName": "disk", - "local": { - "fsenumerator": { - "path": "./sandbox/imgs", - "depth": "1" - }, - "thumbs": { - "path": "./sandbox/thumbnails", - "maxSideResolution": "350", - "mimeType": "JPG" - } - } - }, - "operators": { - "fsenumerator": { - "type": "ENUMERATOR", - "factory": "FileSystemEnumerator", - "mediaTypes": ["IMAGE","VIDEO"] - }, - "decoder": { - "type": "DECODER", - "factory": "ImageDecoder" - }, - "pass": { - "type": "SEGMENTER", - "factory": "PassThroughSegmenter" - }, - "allContent": { - "type": "AGGREGATOR", - "factory": "AllContentAggregator" - }, - "avgColor": { - "type": "EXTRACTOR", - "fieldName": "averagecolor" - }, - "thumbs": { - "type": "EXPORTER", - "exporterName": "thumbnail" - }, - "fileMeta": { - "type": "EXTRACTOR", - "fieldName": "file" - } - }, - "operations": { - "stage2": {"operator": "pass", "inputs": ["stage1"]}, - "stage0": {"operator": "fsenumerator"}, - "stage1": {"operator": "decoder", "inputs": ["stage0"]}, - "stage3": {"operator": "allContent", "inputs": ["stage2"]}, - "stage4": {"operator": "avgColor", "inputs": ["stage3"]}, - "stage5": {"operator": "thumbs", "inputs": ["stage4"]}, - "stage6": {"operator": "fileMeta", "inputs": ["stage5"]} - }, - "output" : ["stage6"] -} -``` - ---- - -#### Starting the indexing pipeline - -To start the actual pipeline, we start [the server module](/vitrivr-engine-server)'s [`Main`](vitrivr-engine-server/src/main/kotlin/org/vitrivr/engine/server/Main.kt) -with the path to the schema configuration as argument. - -For this to work you either build the stack or you use an IDE. - -1. Then, when the server is running, we have to first initialise the database (since our schema is named `sandbox`): - -``` -sandbox init -``` - -2. The extraction is started via the CLI by calling: -``` -sandbox extract -c sandbox-pipeline.json -``` - -Which should result in logging messages that confirm the usage of our ThumbnailExporter (including its parameters) and the message: -``` -Started extraction job with UUID -``` - -3. The server (by default) provides an [OpenAPI swagger ui](http://localhost:7070/swagger-ui) with which the job status can be queried. -The same can be achieved by this cURL command, where `` is the UUID printed above (and again, we have named our schema `sandbox`, hence the sandbox path: - -```bash -curl -X 'GET' \ - 'http://localhost:7070/api/sandbox/index/' \ - -H 'accept: application/json' -``` - -### Querying / Retrieval - -## Getting Started: Development - -This is a Gradle-powered Kotlin project, we assume prerequisites are handled accordingly. +## Contributing -1. Generate the OpenApi client code by executing the (top-level) `generateOpenApi` gradle task -2. Start developing +We welcome contributors. Please fork the repo and open a pull-request with your work. +A good starting point are the 'good first issue' issues. -If you develop another module (plugin), please keep in mind that the providers and factories are -exposed in `/resources/META-INF/services/` +## Contributors -``` -./gradlew openApiGenerate -``` +* @ppanopticon +* @lucaro +* @sauterl +* @net-csscience-raphel +* @rahelarnold98 +* @faberf +## Citation +See [Citation](https://github.com/vitrivr/vitrivr-engine/wiki/Home#Citation) diff --git a/images/vengine-256.png b/images/vengine-256.png new file mode 100755 index 0000000000000000000000000000000000000000..a59b8cdd5b04c6227736ba126611da1c404d090f GIT binary patch literal 12934 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 literal 0 HcmV?d00001 diff --git a/images/vengine-512.png b/images/vengine-512.png new file mode 100755 index 0000000000000000000000000000000000000000..5ef04d62b9489b9d0aa1b32bf29a41c630114bfa GIT binary patch literal 27718 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 literal 0 HcmV?d00001 diff --git a/images/vitrivr_512.png b/images/vitrivr_512.png new file mode 100755 index 0000000000000000000000000000000000000000..f3fb5c9c2046cd71cc88e2327f95a94e9064c1e1 GIT binary patch literal 76376 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