структуры и моделирование 2013. № 2(28). С. 60-67
УДК 004.624:57.087.1
ФОРМАТ ДАННЫХ НА ОСНОВЕ XML-РАЗМЕТКИ ДЛЯ ОБМЕНА БИОМЕТРИЧЕСКИМИ ОБРАЗЦАМИ
А.В. Альтергот, О.А. Вишнякова, Д.Н. Лавров
В работе представлено описание формата XML-документа, содержащего биометрические образцы и выборки. При проектировании формата была заложена платформонезависимость, расширяемость формата. Формат используется для обмена данными между модулями разрабатываемой в настоящее время системы сбора биометрических данных.
Введение
Разбор формата данных можно проигнорировать при сборе данных, но рано или поздно встанет вопрос об интерпретации собранных данных. Командой разработчиков рассматривались два подхода: хранить данные в отдельных файлах в известных форматах или в уже разобранном виде, например, в виде строк вида [[2.0 3.0] [4.0 6.0]] [1]. Первый вариант был отвергнут из-за невозможности контролировать изменения форматов и их огромного разнообразия. Второй вариант был отвергнут из-за сильной избыточности и необходимости разбора строки, представляющей многомерный массив, а также «угрозы» реальной или мнимой потери точности при округлении.
Предложено компромиссное решение. Хранить бинарные данные в виде байтового потока (в XML в кодировке Base64, в базе данных в BLOB-полях можно хранить как набор байт) с указанием спецификатора байтового потока. В спецификаторе указывается тип ячейки и максимальное значение параметра, которое не должно превышать максимального числа ячейки.
1. XML-схема
При передаче биометрического образца нам требуется снабдить его множеством метаданных. В свою очередь метаданные могут в совокупности формировать некоторую сущность.
К примеру, сенсор, которым образец был снят, являясь частью описания образца, может быть представлен как самостоятельная сущность, а список сенсоров, используемых в конкретной системе хранения и обработки биометриче-
Copyright © 2013 А.В. Альтергот, О.А. Вишнякова, Д.Н. Лавров
ООО «Люксофт»; Омский государственный университет им. Ф.М. Достоевского E-mail: avaltergot@gmail.com, olga@infotekorg.ru, lavrov@omsu.ru
ских образцов, может быть передан самостоятельно как справочник. Структура элемента <sensor/> в стандарте XML Schema имеет следующий вид:
<xs:complexType name="Sensor"> <xs:sequence>
<xs:element name="name" type="String"
minOccurs="0" maxOccurs="1"/> <xs:element name="description" type="String" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="Long" use="required"/> </xs:complexType>
Сенсоры могут быть различных типов. В частности:
<xs:complexType name="Microphone"> <xs:complexContent>
<xs:extension base="Sensor">
<xs:sequence minOccurs="0"/> </xs:extension> </xs:complexContent> </xs:complexType>
В данном случае тип сенсора «микрофон» не имеет каких-либо дополнительных характеристик, но в будущем они могут появиться, при этом базовый тип Sensor меняться не будет.
Следовательно, элемент <sensor/> в XML файле имеет вид (в данном случае микрофон):
<sensor xsi:type="bio:Microphone" id="1"> <name>Genius</name>
<description>10Hz-22kHz</description> </sensor>
Для элемента <sensor/> обязательным является лишь атрибут @id, которого достаточно для определения сенсора, при условии, что он известен системе. Мы предполагаем, что все известные системе сенсоры будут вноситься в неё заранее, с присвоением соответствующего id. Элемент <sensor/> может быть частью описания образца и элементом списка справочника сенсоров в случае его выгрузки в XML.
Аналогично, данные о субъекте выделяются в элемент <subject/>. Описание типа:
<xs:complexType name="Subject">
<xs:sequence>
<xs:element name="hash" type="String"
minOccurs="1" maxOccurs="1"/> <xs:element name="gender" type="Gender"
minOccurs="0" maxOccurs="1"/> <xs:element name="birthdate" type="Date"
minOccurs="0" maxOccurs="1"/> <xs:element name="document" type="String" minOccurs="0" maxOccurs="1"/> <xs:element name="comment" type="String" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="Long" use="optional"/> </xs:complexType>
Обязательным у <subject/> является наличие hash^. Мы накладываем уникальность на hash в рамках системы, поскольку биометрические образцы хранятся и передаются обезличенными, в то время как hash вычисляется по персональным данным испытуемого. Таким образом, мы всегда знаем, что образцы, будучи сняты в разное время разными способами, принадлежат одному и тому же человеку, но неизвестно кому именно. Пример <subject/> в XML:
<subject>
<hash>87cc535ab17...ea286</hash> <gender>MALE</gender>
<birthdate>2013-01-01T00:00:00.000Z</birthdate> <comment>Comment</comment> </subject>
Отметим, что типы String, Long, Date, Gender и другие простые типы описаны в схеме, их вид интуитивно понятен, не требует отдельных пояснений.
Как уже было сказано, передаётся и хранится биометрический образец + метаданные. Описав отдельные сущности, мы можем перейти к «центральному» элементу биометрической схемы на основе XML. Структура его следующая:
<xs:complexType name="Sample"> <xs:sequence>
<xs:element name="timeStamp" type="Date" minOccurs="1"
maxOccurs="1"/> <xs:element name="binaryData" type="BinaryData"
minOccurs="1" maxOccurs="1"/> <xs:element name="format" type="String" minOccurs="1"
maxOccurs="1"/> <xs:element name="hash" type="String" minOccurs="1"
maxOccurs="1"/> <xs:element name="subject" type="Subject" minOccurs="1"
maxOccurs="1"/> <xs:element name="sensor" type="Sensor" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="Long" use="optional"/> </xs:complexType>
Элемент <binaryData/> типа BinaryData содержит снятый биометрический образец. На данном этапе развития системы под этим типом подразумевается обыкновенный массив байт в формате Base64. В будущем, он может содержать ссылку на файл в файловой системе или выполнен в виде attachment. В любом случае, снятый образец представляет собой набор байт, а информацию о том, как интерпретировать этот набор, содержит элемент <format/>. Атрибут @id не является обязательным для элемента <sample/>, присутствует в служебных целях. Для hash требование аналогичное таковому для элемента <subject/> (см. выше).
Аналогично сенсорам образцы имеют различные типы. В частности, описание образца типа «речевой образец»:
<xs:complexType name="VoiceSample"> <xs:complexContent>
<xs:extension base="Sample"> <xs:sequence>
<xs:element name="text" type="Text" minOccurs="1"
maxOccurs="1"/> <xs:element name="handMarking" type="String" minOccurs="0" maxOccurs="1"/>
</xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
Заметим, что речевой образец содержит дополнительные характерные свойства, как то: прочитанный текст (элемент <text/>), ручная разметка фонем (<handMarking/>). Другие типы образцов могут иметь индивидуальные характерные свойства.
Исходя из вышесказанного, XML-документ, содержащий речевой биометрический образец, снятый микрофоном, будет иметь следующий вид:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <bio:samples xmlns:bio="http://omsu.ru/fkn/ctn/bio/sample/schema"> <sample xsi:type="bio:VoiceSample"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <timeStamp>2013-08-30T00:44:30.143Z</timeStamp> <binaryData> <data>
EuwVAhKgFC8TZx ...<omitted output>...
A3ADMAGAAXAAH/0/+3/4X/Vv9e/3n/jf+d/3j/XP9K/yb/Qv9v </data> </binaryData>
<format>84000:s:48000</format>
<hash>1b7 0407 0894 647 8db8d834f ... eff61</hash>
<subject>
<hash>c65cdec4aa512f67fd7 5 ... 3701a</hash>
<gender>MALE</gender>
<birthdate>2013-08-30T00:00:00.000Z</birthdate> <comment>comment</comment> </subject>
<sensor xsi:type="bio:Microphone" id="1"> <name>Genius</name>
<description>10Hz-22kHz</description> </sensor> <text>
<hash>3b44a0714 0e7 6ddb2 6ae8 ... c7d82</hash> <text>абвгд</text> </text> </sample>
Достоинства
• Описанный подход делает возможным взаимодействие с биометрическим образцом, как с объектом в рамках привычной объектно-ориентированной модели. Одновременно формат XML является текстовым, что позволяет человеку читать и редактировать метаданные без использования специальных средств.
• Технология XML Schema позволяет валидировать XML-документ по описанным правилам.
Технология XML Schema позволяет применять инструменты кодогенера-ции для объектно-ориентированных языков программирования, что ускоряет процесс разработки приложений. В комплексе с каркасами XML-парсинга подход позволяет быстро и удобно инстанциировать в памяти объекты биометрических образцов.
Недостаки
• Формат XML, в силу своих особенностей, вносит приличную долю служебных тегов в передаваемые данные.
• Используемый на данном этапе подход передачи бинарной информации — формат Base64 — является избыточным, добавляет 1/3 от объёма данных.
В текущей редакции схема данных подразумевает дублирование некоторых элементов. Например, конструкция <subject><hash>ABC<hash/><subject/>
будет обязательно присутствовать в каждом образце, снятого с человека с hash=ABC.
2. Формат спецификатора
Формат бинарных данных описывается тэгом <format> содержащим спецификатор формата. Его структура описывается следующим образом:
Ni х ... х N х ... х Nr : TiMi... TLML : Fs,
4-V-'
размерность где R — размерность данных;
Ni — количество точек на соответствующей i-й оси; L — число полей в ячейке;
TjMj — тип ячейки (Tj) и максимальное значение (Mj), которое может быть опущено, что будет означать, что оно совпадает с максимальным, определяемым типом; Tj = {b, s,i,l, B, S, I, L, F, D};
B — байт без знака (8 бит),
S — слово без знака (16 бит),
I — двойное слово без знака (32 бита),
L — четверное слово без знака (64 бита), в нижнем регистре те же размерности со знаком (соответствуют в точности типам java:
b — byte, s — short, i — int, l — long,
F — соответствует java float (32 бита), D — соответствует java double (64 бита).
Fs — частота дискретизации в герцах (для звука, сигналов акселерометров и графического планшета), разрешение при печати в точках на дюйм (для изображений), в кадрах в секунду для видеопотока;
: — разделитель между группами однотипных полей (:: — отсутствующее поле, значение по умолчанию в соответствии с типом);
х — разделитель внутри группы размерность (хх — значение по умолчанию в соответствии с типом); в реальном XML-файле вместо х используется x).
2.1. Примеры спецификаций формата
Изображение размером 320 х 200 в формате RGB с разрешением 300 dpi:
320x200:BBB:300 — сокращённая форма; 320x200:B255B255B255:300 — полная форма.
Изображение размером 320x200 в формате CMYK с разрешением 600 dpi:
320x200:BBBB:600
Монозвуковая дорожка с частотой дискретизации 48 кГц и 32-битной оцифровкой (4 байта), 1000 отсчётов:
1000:I:48000 — нецентрированные или
1000:i:48000 — центрированные относительно нуля отсчёты.
Стереозвуковая дорожка с частотой дискретизации 22 кГц и 16-битной оцифровкой, 32000 отсчётов:
32000:II:22000
Данные графического планшета A6 (4,13x5,83 дюйма) с частотой дискретизации по времени 50 Гц и разрешением по горизонтали и вертикали 2540 dpi (lpi) и 512 уровнями давления, 2000 отсчётов:
2000:FFS512:xxx:50, если разрешение сразу переводится во float
или, если не переводится, — используем формат без сокращений
(4,13*2540=10490,2 точек; 5,83*2540= 14808,2 ):
2000:S10491S14809S512:50.
Пример формат-строки видеопотока в 1000 кадров размером 320x200 в формате RGB и частотой 30 кад. / сек.
320x200x1000:BBI:30.
2.2. Порядок байт
Порядок байт для записи чисел будем использовать от старших байт к младшим. Этот порядок не совпадает с принятыми соглашениями для архитектуры процессоров Intel, но является более естественным и, кроме того, BIG_ENDIAN используется по умолчанию в Java. Преобразования из BIG_ENDIAN в LITTLE_ENDIAN в языке Java не представляет сложности1.
2.3. Регулярное выражение для проверки формат-строки
Только для удобства представления регулярное выражение разбито ниже на три строки с отступами:
((?:[1-9][0-9]*)(?:x[1-9][0-9]*)*):
((?:[B,b,I,i,L,l,S,s,F,D](?:[1-9][0-9]*)?(?:\\{\\w+?\\})?)+):
([1-9][0-9]*(?:\\{\\w+\\})?)
Регулярное выражение представляет собой единую строку без каких-либо пробелов.
Регулярное выражение сформировано так, чтобы стандартные группы group(1), group(2), group(3) содержали поля, разделённые двоеточиями, которые в последующем можно будет разбирать отдельно.
Для проверки работы регулярного выражения созданы JUnit-тесты.
'Примеры смены порядка байт можно найти в статье http://javainception. ru/index.php/sistemavvodavivodajava/sistemavvodavivodajava/ o-poryadke-baytov.html
2.4. Критика
Присутствует изменчивость единиц измерения Fs: то это может быть dpi, а может быть Hz или fps (кадров в секунду). Для улучшения читаемости и лучшего понимания контекста решено ввести комментарии в формат-строку (?:\{\w+\})?). Таким образом, формат-строки с комментариями теперь выглядят так:
1000:B:100{Hz}
123:L{x}L{y}L{p}L{t}:60{Hz}
1000:L{x}L{y}L{p}L{t}:60{Hz}
320x200:B255{Red}B255{Green}B255{Blue}B255{null}:300{dpi} 3. Заключение
В результате длительных дискуссий в коллективе разработчиков выработан формат, который удовлетворяет большинство разработчиков проекта. Спецификация формат-строки представлена в данной статье. Разработано регулярное выражение для быстрой проверки корректности формат-строки и её последующего анализа. Созданы JUnit-тесты для модульного тестирования использования этого регулярного выражения.
В проектах, в которых используется текстовое представление собираемых данных, формат и подход, описанные в [1], могут быть удобнее в использовании и в действительности активно продолжают использоваться [3]. Тем не менее, представленный в данной работе формат более универсален. В настоящее время разрабатывается вторая версия JSON-формата, которая будет использовать идеи и подходы, описанные здесь для XML.
Описанная в данной статье схема XML-документа в настоящее время используется в разрабатываемой системе сбора биометрических данных, код которой размещается на сервере bitbucket по адресу: https://bitbucket.org/ dlavrov/biometricsmodelling. Результаты работы докладывались на научной конференции [2].
Литература
1. Вишнякова О.А., Лавров Д.Н. Формат обмена данными в системе сбора и обработки биометрических образцов // Международная научно-практическая конференция «Информационные ресурсы в образовании». Нижневартовск : НГГУ, 17-19 апреля 2013. С. 146-148.
2. Лавров Д.Н., Альтергот А.В., Вишнякова О.А., Долгополов В.П. Спецификатор бинарных данных для XML-формата обмена биометрическими данными // Математическое и компьютерное моделирование : сборник материалов научной конференции (Омск, 18 октября 2013 г.). Омск : Изд-во Ом. гос. ун-та, 2013. С. 49-52.
3. Казанцева А.Г. Архитектура для сбора биометрических образцов походки человека // Математическое и компьютерное моделирование : сборник материалов научной конференции (Омск, 18 октября 2013 г.). Омск : Изд-во Ом. гос. ун-та, 2013. С. 58-64.