Поиск метаданных из изображений с использованием 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). Например:
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 должен быть таким с полевым автором в конце каждого документа:
Скажите, если у вас все еще есть проблемы.
С наилучшими пожеланиями
Редактировать после 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">
И добавьте поле субъекта в qf (и pf, если хотите) в список:
<str name="qf">subject title_en^50 title_fr^50 content_fr^10 content_en^10 source^20 extension^20
</str>
Мы начинаем размещать некоторую документацию здесь, если вы заинтересованы.