Поиск метаданных из изображений с использованием Datafari

Я ищу систему управления документами с открытым исходным кодом, чтобы проиндексировать все виды файлов (тексты: [pdf, doc...], изображения [jpg, png, bmp...], видео [mov, mp4...]) и я наткнулся на Datafari

Он использует поисковую систему Solr и ManifoldCF для управления подключением к репозиторию контента и имеет разъем Tika для поиска метаданных.

Я установил его, и я пытаюсь выполнить настройку, чтобы он находил изображения, найденные по критериям метаданных, но пока безуспешно.

Я добавил локальный репозиторий с изображением с некоторыми метаданными:

<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="Artist" content="tarzan"/>
<meta name="date" content="2015-03-28T09:47:45"/>
<meta name="Print flags information" content="0 1 0 0 0 0 0 0 0 2"/>
<meta name="Slices" content="zebre (0,0,500,500) 1 Slices"/>
<meta name="ICC Untagged Profile" content="1"/>
<meta name="Compression Type" content="Baseline"/>
<meta name="subject" content="legs"/>
<meta name="subject" content="mammal"/>
<meta name="Image Description" content="this kind of animal is hard to see behind bar"/>
<meta name="Thumbnail Compression" content="JPEG (old-style)"/>
<meta name="Print flags" content="0 0 0 0 0 0 0 0 1"/>
<meta name="By-line" content="tarzan"/>
<meta name="Number of Components" content="3"/>
<meta name="Component 2" content="Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert"/>
<meta name="Component 1" content="Y component: Quantization table 0, Sampling factors 1 horiz/1 vert"/>
<meta name="tiff:ResolutionUnit" content="Inch"/>
<meta name="Object Name" content="king of disguise"/>
<meta name="Seed number" content="1"/>
<meta name="X Resolution" content="72 dots per inch"/>
<meta name="IPTC-NAA record" content="160 bytes binary data"/>
<meta name="Unknown tag (0x043a)" content="[239 bytes]"/>
<meta name="Version Info" content="1 (Adobe Photoshop, Adobe Photoshop CS6) 1"/>
<meta name="Component 3" content="Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert"/>
<meta name="dc:title" content="king of disguise"/>
<meta name="modified" content="2015-03-28T09:47:45"/>
<meta name="Thumbnail Data" content="JpegRGB, 160x160, Decomp 76800 bytes, 1572865 bpp, 6513 bytes"/>
<meta name="tiff:BitsPerSample" content="8"/>
<meta name="Application Record Version" content="42432"/>
<meta name="Resolution Info" content="72.0x72.0 DPI"/>
<meta name="meta:author" content="tarzan"/>
<meta name="meta:creation-date" content="2015-03-28T09:47:45"/>
<meta name="Caption digest" content="[16 bytes]"/>
<meta name="Creation-Date" content="2015-03-28T09:47:45"/>
<meta name="resourceName" content="zebre.jpg"/>
<meta name="Orientation" content="Top, left side (Horizontal / normal)"/>
<meta name="tiff:Orientation" content="1"/>
<meta name="tiff:Software" content="Adobe Photoshop CS6 (Windows)"/>
<meta name="Thumbnail Offset" content="354 bytes"/>
<meta name="Color Transform" content="YCbCr"/>
<meta name="Global Angle" content="120"/>
<meta name="Author" content="tarzan"/>
<meta name="Exif Image Height" content="500 pixels"/>
<meta name="Software" content="Adobe Photoshop CS6 (Windows)"/>
<meta name="tiff:YResolution" content="72.0"/>
<meta name="Y Resolution" content="72 dots per inch"/>
<meta name="dc:description" content="this kind of animal is hard to see behind bars"/>
<meta name="Color transfer functions" content="[112 bytes]"/>
<meta name="Keywords" content="legs"/>
<meta name="Keywords" content="mammal"/>
<meta name="Data Precision" content="8 bits"/>
<meta name="Coded Character Set" content="%G"/>
<meta name="dc:creator" content="tarzan"/>
<meta name="tiff:ImageLength" content="500"/>
<meta name="description" content="this kind of animal is hard to see behind bars"/>
<meta name="JPEG quality" content="12 (Maximum), Standard format, 3 scans"/>
<meta name="dcterms:created" content="2015-03-28T09:47:45"/>
<meta name="dcterms:modified" content="2015-03-28T09:47:45"/>
<meta name="Last-Modified" content="2015-03-28T09:47:45"/>
<meta name="Last-Save-Date" content="2015-03-28T09:47:45"/>
<meta name="Thumbnail Length" content="6513 bytes"/>
<meta name="Color Space" content="Undefined"/>
<meta name="Credit" content="tarzan"/>
<meta name="Global Altitude" content="30"/>
<meta name="meta:save-date" content="2015-03-28T09:47:45"/>
<meta name="Country/Primary Location Name" content="kenya"/>
<meta name="Content-Length" content="93123"/>
<meta name="Content-Type" content="image/jpeg"/>
<meta name="X-Parsed-By" content="org.apache.tika.parser.DefaultParser"/>
<meta name="X-Parsed-By" content="org.apache.tika.parser.jpeg.JpegParser"/>
<meta name="creator" content="tarzan"/>
<meta name="Color halftoning information" content="[72 bytes]"/>
<meta name="dc:subject" content="legs"/>
<meta name="dc:subject" content="mammal"/>
<meta name="tiff:XResolution" content="72.0"/>
<meta name="Date/Time" content="2015:03:28 09:47:45"/>
<meta name="Grid and guides information" content="[16 bytes]"/>
<meta name="Caption/Abstract" content="this kind of animal is hard to see behind bars"/>
<meta name="DCT Encode Version" content="1"/>
<meta name="Exif Image Width" content="500 pixels"/>
<meta name="Image Height" content="500 pixels"/>
<meta name="Pixel Aspect Ratio" content="1.0"/>
<meta name="Supplemental Category(s)" content="earthly creature"/>
<meta name="Image Width" content="500 pixels"/>
<meta name="Flags 0" content="64"/>
<meta name="Resolution Unit" content="Inch"/>
<meta name="Unknown tag (0x043b)" content="[557 bytes]"/>
<meta name="URL List" content="0"/>
<meta name="meta:keyword" content="legs"/>
<meta name="meta:keyword" content="mammal"/>
<meta name="Print Scale" content="Centered, Scale 1.0"/>
<meta name="tiff:ImageWidth" content="500"/>
<meta name="Flags 1" content="0"/>
<title>king of disguise</title>
</head>
<body/></html>

В solr schema.xml я добавил нужные мне поля:

<fields>
...
 <field name="subject" type="string" indexed="true" stored="true" multiValued="true" />

Затем я перезапустил сервер

В администрировании ManifoldCF в списке заданий я добавил преобразование экстрактора Tika в задание: конвейер: мой репозиторий -> экстрактор Tika -> DatafariSolr

Я пробовал поиск в интерфейсе Solr: для q я пробовал "subject:legs" и там, я интерфейс Solr, я получил данные

Но в поисковой системе Datafari у меня нет результатов

Помощь для Datafari не очень полезна, и я изучил документацию по Manifoldcf, но безуспешно. Я хотел бы иметь реальный пример для такого поиска по метаданным. Что нужно изменить и / или проверить, чтобы увидеть изображение в результате?

Обновление после ответа Оливье Таварда:

Спасибо за помощь. Этот инструмент действительно многообещающий, хотя у меня все еще есть проблемы с его настройкой:

Я не могу найти datafari/WebContent/js/search.js. Вы имели в виду datafari/tomcat/webapps/Datafari/js/search.js?

Я добавил, что вы предложили.

Я также добавил поля "описание" и "создатель".

1 - В поиске SolR: - если я ищу в q " животное ", я могу получить свое изображение (не с "животным"), которое теперь лучше, чем "описание: животное ". - Но если я ищу "ноги", я ничего не получаю. Это потому, что есть несколько "субъектов", есть другой способ поиска? - если я ищу "тарзан" (из поля создателя), я тоже ничего не получаю.

2 - в поиске пользовательского интерфейса Datafari: - внесенные мной изменения, по-видимому, "прервали" поиск: когда я выполняю поиск, колесо постоянно вращается. В консоли у меня есть:

    GET "http://localhost:8080/Datafari/css/menu.css" 404
L'utilisation d'XMLHttpRequest de façon synchrone sur le fil d'exécution principal est obsolète à cause de son impact négatif sur la navigation de l'utilisateur final.

3 - я добавил еще одно изображение с другими метаданными для тех же полей, и в SolR Search, если я запрашиваю "jpg", они оба отображаются (ОК), но в ответе json дополнительные поля не отображаются для других изображение!

{
  "responseHeader": {
    "status": 0,
    "QTime": 6,
    "params": {
      "indent": "true",
      "q": "jpg\n",
      "_": "1427968093838",
      "wt": "json"
    }
  },
  "response": {
    "numFound": 2,
    "start": 0,
    "docs": [
      {
        "last_modified": "2015-03-28T09:47:45Z",
        "id": "file:/home/olivier/Bureau/datafari/images/zebre.jpg",
        "url": "file:/home/olivier/Bureau/datafari/images/zebre.jpg",
        "source": "file",
        "extension": "jpg",
        "language": "en",
        "content_en": [
          ""
        ],
        "title_en": [
          "zebre.jpg"
        ],
        "title": [
          "zebre.jpg"
        ],
        "_version_": 1496971642075611100,
        "allow_token_share": [
          "__nosecurity__"
        ],
        "deny_token_document": [
          "__nosecurity__"
        ],
        "deny_token_share": [
          "__nosecurity__"
        ],
        "allow_token_document": [
          "__nosecurity__"
        ]
      },
      {
        "last_modified": "2015-03-29T15:45:23Z",
        "subject": [
          "Description Mots clé"
        ],
        "id": "file:/home/olivier/Bureau/datafari/metadata/image1toto.jpg",
        "creator": [
          "Description, IPTC - Auteur: beta"
        ],
        "description": [
          "Description Description : gamma"
        ],
        "url": "file:/home/olivier/Bureau/datafari/metadata/image1toto.jpg",
        "source": "file",
        "extension": "jpg",
        "language": "en",
        "content_en": [
          ""
        ],
        "title_en": [
          "image1toto.jpg"
        ],
        "title": [
          "image1toto.jpg"
        ],
        "_version_": 1497001790322770000,
        "allow_token_share": [
          "__nosecurity__"
        ],
        "deny_token_document": [
          "__nosecurity__"
        ],
        "deny_token_share": [
          "__nosecurity__"
        ],
        "allow_token_document": [
          "__nosecurity__"
        ]
      }
    ]
  },
  "highlighting": {
    "file:/home/olivier/Bureau/datafari/images/imagejpg.jpg": {
      "content_fr": [
        ""
      ],
      "content_en": [
        ""
      ]
    },
    "file:/home/olivier/Bureau/datafari/images/zebre.jpg": {
      "content_fr": [
        ""
      ],
      "content_en": [
        ""
      ]
    },
    "file:/home/olivier/Bureau/datafari/metadata/image1toto.jpg": {
      "content_fr": [
        ""
      ],
      "content_en": [
        ""
      ]
    }
  },
  "spellcheck": {
    "suggestions": []
  },
  "capsuleSearchComponent": {}
}

Я очень смущен.

Редактировать после ответа Оливье Тавар

Извините за поздний ответ, я работаю над чем-то срочным, и не могу проверить / ответить так, как мне бы хотелось.

Я следовал вашим шагам (очень дидактично, спасибо), и несколько сумел получить результат в поиске клиента:)

Но:

1- Я должен был использовать подстановочные знаки, чтобы найти его в графическом интерфейсе datafari: "замаскированная лошадь" => я должен был поставить "**horse*", а не "horse"

2 - Как получить данные для нескольких полей (например, мета: ключевое слово...)

<meta name="meta:keyword" content="legs"/>
<meta name="meta:keyword" content="mammal"/>

3 - У меня была "стандартная" установка, но у меня есть 404 для http://localhost:8080/Datafari/css/menu.css, возможно, именно поэтому я получаю колесо поиска, пока не обновлю страницу

2 ответа

Решение

ОК, я постараюсь завершить ответ.
Я начинаю с простой установки Datafari, которую я скачал на datafari.com, чтобы воспроизвести шаги.

Допустим, мы хотим добавить новое поле метаданных в Solr с именем meta:author в источнике и с именем authorname в Datafari.
Давайте посмотрим каждый шаг, чтобы отобразить поле в пользовательском интерфейсе Datafari и разрешить поиск в поле с помощью Solr.
1) Редактировать solrconfig.xml
Мы хотим отобразить метаданные originam исходного файла: meta:author в новое поле Solr с именем authorname. Поэтому мы должны отредактировать обработчик запроса ячейки Solr:

<requestHandler name="/update/extract" 
              startup="lazy"
              class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
        <str name="scan">false</str>
        <str name="captureAttr">true</str>
        <str name="lowernames">true</str>
        <str name="fmap.language">ignored_</str>
        <str name="fmap.meta_author">authorname</str>
        <str name="fmap.source">ignored_</str>
        <str name="uprefix">ignored_</str>
        <str name="update.chain">datafari</str>
        <bool name="ignoreTikaException">true</bool>

Правильный синтаксис - meta_author (а не meta:author) из-за строки
<str name="lowernames">true</str>
Документация гласит: "lowernames=true|false - отобразить все имена полей в нижний регистр с подчеркиванием"

Вы также можете увидеть в конфигурации, что мы храним все игнорируемые метаданные в динамическом поле игнорируемого. Я приглашаю вас изменить конфигурацию поля в schema.xml и изменить сохраненный = ложный на сохраненный = истинный, чтобы увидеть все метаданные, найденные Тикой (и увидеть правильный синтаксис для сопоставления полей в Solr). Например:

Пример полей, полученных Solr


2) Редактировать schema.xml
Теперь мы хотим добавить новое поле в схему Solr. Поэтому добавьте следующую строку:

<field name="authorname" type="text_en" indexed="true" stored="true" multiValued="true"/>

Итак, пока мы можем запустить индексацию с ManifoldCF, и новое поле хорошо присутствует в Solr.

3) Добавьте новое поле к поиску Edit solrconfig.xml, в обработчике запроса select добавьте поле:

<str name="qf">author title_en^50 title_fr^50 content_fr^10 content_en^10 source^20 extension^20
        </str>

После перезагрузки ядра теперь мы можем искать и находить данные нового поля.

4) Настройте пользовательский интерфейс Datafari в datafari/tomcat/webapps/Datafari/js/main.js (исходный код) или Datafari/tomcat/webapps/Datafari/js/main.js (установленная версия). Измените строку:

Manager.store.addByValue("fl", 'title,url,id,extension'); 

И добавьте поле, которое вы хотите добавить, здесь Autorname

Manager.store.addByValue("fl", 'title,url,id,extension, authorname');

Последним шагом является изменение файла Javascript search.js: datafari/WebContent/js/search.js (исходный код) или Datafari/tomcat/webapps/Datafari\js/search.js (установленная версия). Добавьте отображение своего поля. добавив код: doc.subject, где вы хотите добавить его. Например, если вы хотите добавить его после URL-адреса документа: (Я допустил ошибку в своем предыдущем ответе, теперь это правильно)

elm.find('.doc:last .address').append('<span>' + AjaxFranceLabs.tinyUrl(decodeURIComponent(url)) + '</span>')
elm.find('.doc:last .address').append('<div id="author">' + doc.author );

И, наконец, ваш Datafari Ui должен быть таким с полевым автором в конце каждого документа:

Пользовательский интерфейс Datafari

Скажите, если у вас все еще есть проблемы.
С наилучшими пожеланиями

Редактировать после user29296 другие вопросы

  • Относительно подстановочных знаков Это зависит от того, какой тип поля вы используете и какой тип поиска вам нужен. Обычно вам не нужно ставить дополнительный подстановочный знак перед словом. Вам понадобится ReversedWildcardFilterFactory, если вы хотите искать любой префикс с предоставленным суффиксом.

  • Получить данные для нескольких полей Я не понимаю, в чем ваша проблема в этом случае. Не могли бы вы привести пример? Если вы измените обработчик поиска Выберите конфигурацию, вы можете добавить в раздел qf поля, в которых вы хотите искать. Так что просто добавьте поле meta_keyword здесь. Таким образом, клиент также будет искать в этом поле при выполнении поиска.

  • Ошибка Menu.css 404 Эта ошибка не влияет на работу приложения. Исправление для

Спасибо за использование Datafari. Чтобы добавить отображение вашего поля в пользовательский интерфейс, вы должны изменить 2 файла:

  • datafari / кот / WebApps/Datafari/ JS /main.js

    Измените строку:

    Manager.store.addByValue("fl", 'title,url,id,extension');
    

    И добавьте поле, которое вы хотите добавить, в тему вашего примера:

    Manager.store.addByValue("fl", 'title,url,id,extension, subject');
    
  • datafari / WebContent / JS /search.js

    Добавьте отображение вашего поля, добавив код: doc.subject где вы хотите добавить его. Например, если вы хотите добавить его после URL документа:

    elm.find('.doc:last .address').append(doc.subject);
    

Если ваша проблема связана с поиском: этапы поиска не получают никаких результатов, вам нужно изменить конфигурацию Solr в datafari/solr/solr_home/FileShare/conf/solrconfig.xml:

<requestHandler name="/select" class="solr.SearchHandler">

И добавьте поле субъекта в qfpf, если хотите) в список:

<str name="qf">subject title_en^50 title_fr^50 content_fr^10 content_en^10 source^20 extension^20 
        </str>

Мы начинаем размещать некоторую документацию здесь, если вы заинтересованы.

Другие вопросы по тегам