Этапы проектирования системы распознавания образов. Распознавание образов и особенности живого восприятия. Обзор существующих методов распознавания образов

Если вам необходимо проанализировать или перехватить сетевые пакеты в Linux, то лучше всего для этого использовать консольную утилиту tcpdump . Но проблема возникает в довольно сложном ее управлении. Рядовому пользователю покажется, что работать с утилитой неудобно, но это только на первый взгляд. В статье будет рассказано, как устроена tcpdump, какой синтаксис она имеет, как ей пользоваться, а также будут приведены многочисленные примеры ее использования.

Читайте также: Руководства по настройке интернет-соединения в Ubuntu , Debian , Ubuntu Server

Большинство разработчиков операционных систем на базе Linux включают утилиту tcpdump в список предустановленных, но если по какой-то причине она в вашем дистрибутиве отсутствует, ее можно всегда скачать и установить через «Терминал» . Если у вас ОС основана на Debian, а это Ubuntu, Linux Mint, Kali Linux и им подобные, нужно выполнить эту команду:

sudo apt install tcpdump

При установке вам нужно ввести пароль. Обратите внимание, что при наборе он не отображается, также для подтверждения установки нужно ввести символ «Д» и нажать Enter .

Если у вас Red Hat, Fedora или CentOS, то команда для установки будет иметь следующий вид:

sudo yam install tcpdump

После того как утилита будет установлена, ей сразу же можно пользоваться. Об этом и о многом другом будет рассказано дальше по тексту.

Синтаксис

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

tcpdump опции -i интерфейс фильтры

При использовании команды вам обязательно необходимо указывать интерфейс для отслеживания. Фильтры и опции - это не обязательные переменные, но они позволяют выполнить более гибкую настройку.

Опции

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

Опция Определение
-A Позволяет отсортировать пакеты с форматом ASCII
-l Добавляет функцию прокрутки
-i После ввода нужно указать сетевой интерфейс, который будет отслеживаться. Чтобы начать отслеживать все интерфейсы, впишите после опции слово «any»
-c Завершает процесс отслеживания после проверки указанного количества пакетов
-w Генерирует текстовый файл с отчетом проверки
-e Показывает уровень интернет-соединения пакета данных
-L Выводит только те протоколы, которые поддерживает указанный сетевой интерфейс
-C Создает другой файл во время записи пакета, если его размер больше заданного
-r Открывает файл для чтения, который был создан с помощью опции -w
-j Для записи пакетов будет использоваться формат TimeStamp
-J Позволяет просмотреть все доступные форматы TimeStamp
-G Служит для создания файла с логами. Опция требует также указания временного значения, по истечении которого будет создаваться новый лог
-v, -vv, -vvv В зависимости от количества символов в опции, вывод команды будет становиться подробнее (увеличение прямо пропорционально количеству символов)
-f В выводе показывает имя домена адресов IP
-F Позволяет считывать информацию не из сетевого интерфейса, а из указанного файла
-D Демонстрирует все сетевые интерфейсы, которые можно использовать
-n Деактивирует отображение доменных имен
-Z Задает пользователя, под учетной записью которого будут созданы все файлы
-K Пропуск анализа контрольных сумм
-q Демонстрация краткой информации
-H Позволяет обнаружить заголовки 802.11s
-I Используется при захвате пакетов в режиме монитора

Разобрав опции, чуть ниже мы перейдем непосредственно к их применениям. А пока что будут рассмотрены фильтры.

Фильтры

Как говорилось в самом начале статьи, вы можете добавлять в синтаксис tcpdump фильтры. Сейчас будут рассмотрены наиболее популярные из них:

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

Примеры использования

Сейчас будут приведены часто используемые варианты синтаксиса команды tcpdump. Все их перечислить не получится, так как их вариаций может быть бесконечное множество.

Просмотр списка интерфейсов

Рекомендуется каждому пользователю изначально проверить список всех его сетевых интерфейсов, которые можно отследить. Из вышеприведенной таблицы мы знаем, что для этого нужно использовать опцию -D , поэтому в терминале выполните следующую команду:

Как вы можете заметить, в примере есть восемь интерфейсов, которые можно просмотреть с помощью команды tcpdump. В статье будут приводиться примеры с ppp0 , вы же можете использовать любой другой.

Обычный захват трафика

Если нужно отследить один сетевой интерфейс, то сделать это вы можете с помощью опции -i . Не забудьте после ее ввода указать наименование интерфейса. Вот пример выполнения такой команды:

sudo tcpdump -i ppp0

Обратите внимание: перед самой командой нужно вписать «sudo», так как она требует права суперпользователя.

Примечание: после нажатия Enter в «Терминале» беспрерывно будут отображаться перехваченные пакеты. Чтобы остановить их поток, нужно нажать комбинацию клавиш Ctrl+C.

Если вы выполняете команду без дополнительных опций и фильтров, то увидите следующий формат отображения отслеженных пакетов:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags , seq 1:595, ack 1118, win 6494, options , length 594

Где цветом выделено:

  • синим - время получения пакета;
  • зеленым - адрес отправителя;
  • фиолетовым - адрес получателя;
  • серым - дополнительная информация о tcp;
  • красным - размер пакета (отображается в байтах).

Этот синтаксис имеет возможность вывода в окне «Терминала» без использования дополнительных опций.

Захват трафика с опцией -v

Как известно из таблицы, опция -v позволяет увеличить количество информации. Разберем на примере. Проверим тот же интерфейс:

sudo tcpdump -v -i ppp0

Здесь можно заметить, что появилась следующая строка в выводе:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags , proto TCP (6) , length 52

Где цветом выделено:

  • оранжевым - версия протокола;
  • синим - продолжительность жизни протокола;
  • зеленым - длина заголовка поля;
  • фиолетовым - версия пакета tcp;
  • красным - размер пакета.

Также в синтаксис команды вы можете прописать опцию -vv или -vvv , что позволит еще больше увеличить объем выводимой информации на экран.

Опция -w и -r

В таблице опций упоминалось о возможности сохранять все выводимые данные в отдельный файл, чтобы позже их можно было просмотреть. За это отвечает опция -w . Пользоваться ей довольно просто, всего-навсего укажите ее в команде, а затем впишите название будущего файла с расширением «.pcap» . Рассмотрим все на примере:

sudo tcpdump -i ppp0 -w file.pcap

Обратите внимание: во время записи логов в файл на экране «Терминала» не отображается никакой текст.

Когда вы захотите просмотреть записанный вывод, необходимо использовать опцию -r , после которой написать название ранее записанного файла. Применяется она без других опций и фильтров:

sudo tcpdump -r file.pcap

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

Фильтрация по IP

Из таблицы фильтров мы знаем, что dst позволяет вывести на экран консоли только те пакеты, которые были получены адресом, что указан в синтаксисе команды. Таким образом очень удобно просматривать пакеты, полученные вашим компьютером. Для этого в команде нужно всего лишь указать свой IP-адрес:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Как можно заметить, помимо dst , в команде мы прописали также фильтр ip . Другими словами, мы сказали компьютеру, чтобы при отборе пакетов он обращал внимание на их IP адрес, а не на другие параметры.

По IP можно отфильтровать и отправляемые пакеты. В примере приведем снова наш IP. То есть сейчас мы отследим, какие пакеты отправляются с нашего компьютера на другие адреса. Для этого нужно выполнить следующую команду:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Как можно заметить, в синтаксисе команды мы изменили фильтр dst на src , тем самым сказав машине, чтобы она искала отправителя по IP.

Фильтрация по HOST

По аналогии с IP в команде мы можем указать фильтр host , чтобы отсеять пакеты с интересующим хостом. То есть в синтаксисе вместо IP-адреса отправителя/получателя нужно будет указывать его хост. Выглядит это следующим образом:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

На изображении можно увидеть, что в «Терминале» отображаются только те пакеты, которые были отправлены с нашего IP на хост google.com. Как можно понять, вместо хоста google, можно вписать любой другой.

Как и в случае с фильтрацией по IP, в синтаксисе dst можно заменить на src , чтобы увидеть пакеты, которые отправляются на ваш компьютер:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Обратите внимание: фильтр host должен стоять после dst или src, иначе команда выдаст ошибку. В случае с фильтрацией по IP, наоборот, dst и src стоят перед фильтром ip.

Применение фильтра and и or

Если у вас появляется необходимость использовать сразу несколько фильтров в одной команде, то для этого нужно применять фильтр and или or (зависит от случая). Указывая фильтры в синтаксисе и разделяя их этими оператором, вы «заставите» работать их как один. На примере это выглядит следующим образом:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

Из синтаксиса команды видно, что мы хотим вывести на экран «Терминала» все пакеты, которые были отправлены на адрес 95.47.144.254 и пакеты, полученные этим же адресом. Также вы можете изменять некоторые переменные в этом выражении. Например, вместо IP указать HOST или заменить непосредственно сами адреса.

Фильтр port и portrange

Фильтр port отлично подойдет в тех случаях, когда нужно получить информацию о пакетах с определенным портом. Так, если вам нужно увидеть лишь ответы или запросы DNS, нужно указать порт 53:

sudo tcpdump -vv -i ppp0 port 53

Если вы хотите просмотреть пакеты http, нужно ввести порт 80:

sudo tcpdump -vv -i ppp0 port 80

Помимо прочего, есть возможность отследить сразу диапазон портов. Для этого применяется фильтр portrange :

sudo tcpdump portrange 50-80

Как можно заметить, в связке с фильтром portrange не обязательно указывать дополнительные опции. Достаточно всего лишь задать диапазон.

Фильтрация по протоколам

Вы также можете вывести на экран только тот трафик, который соответствует какому-либо протоколу. Для этого нужно использовать в качестве фильтра наименование этого самого протокола. Разберем на примере udp :

sudo tcpdump -vvv -i ppp0 udp

Как можно увидеть на изображении, после выполнения команды в «Терминале» отобразились лишь пакеты с протоколом udp . Соответственно, вы можете осуществить фильтрацию и по другим, например, arp :

sudo tcpdump -vvv -i ppp0 arp

или tcp :

sudo tcpdump -vvv -i ppp0 tcp

Фильтр net

Оператор net помогает отфильтровать пакеты, беря за основу обозначение их сети. Пользоваться им так же просто, как и остальными - нужно в синтаксисе указать атрибут net , после чего вписать адрес сети. Вот пример такой команды:

sudo tcpdump -i ppp0 net 192.168.1.1

Фильтрация по размеру пакета

Мы не рассмотрели еще два интересных фильтра: less и greater . Из таблицы с фильтрами мы знаем, что они служат для вывода пакетов данных больше (less ) или меньше (greater ) размера, указанного после ввода атрибута.

Допустим мы хотим следить лишь за пакетами, которые не превышают отметку в 50 бит, тогда команда будет иметь следующий вид:

sudo tcpdump -i ppp0 less 50

Теперь давайте отобразим в «Терминале» пакеты, размер которых больше 50 бит:

sudo tcpdump -i ppp0 greater 50

Как можно заметить, применяются они одинаково, разница лишь в названии фильтра.

Заключение

По окончании статьи можно сделать вывод, что команда tcpdump - это отличный инструмент, с помощью которого можно отследить любой передаваемый по интернету пакет данных. Но для этого недостаточно просто ввести саму команду в «Терминал» . Добиться желаемого результата получится только в случае, если использовать всевозможные опции и фильтры, а также их комбинации.

Dec 19, 2011 By Henry Van Styn
in HOW-TOs

Захват пакетов - один из наиболее мощных способов анализа сетевых процессов. Вы можете многое узнать о том, что происходит в сети с помощью перехвата и исследования сырых данных, проходящих по сетевым соединениям. Современные утилиты анализа трафика позволяют захватить, интерпретировать и описать потоки данных в человеко-читаемом стиле.

tcpdump - важнейший инструмент прослушивания трафика, или снифинга, он предоставляет множество возможностей анализа и даже может экспортировать интерпретированные поля пакетов в другие программы.

Если вы думаете, что утилиты, подобные tcpdump, утрачивают свое значение с появлением графических инструментов типа Wireshark, подумайте еще раз. Wireshark - отличное приложение, однако вовсе не универсальный инструмент абсолютно для всех ситуаций. В качестве универсального легковесного решения для различных применений (как например юниксовые инструменты cat, less и hexdump) tcpdump смотрится намного круче. И наиболее впечатляющая его особенность, это удобство использования. В качестве стиля поведения он следует приближению к концепции "команды в одну строку" для получения быстрых одноходовых ответов. Кроме того его можно применять в рамках ssh-сессии без нужды использования графики. Благодаря поддержке соглашений синтаксиса командной строки (например, выдача выходного потока данных на стандартный вывод, который можно перенаправить) tcpdump может быть использован во всех типах конвейеров для построения интересных и полезных утилит.

В настоящей статье я рассмотрю некоторые базовые принципы использования tcpdump и основы его синтаксиса.

Основы

Прежде, чем вы станете мастером использования tcpdump, следует понять некие фундаментальную идеи. Во-первых, захват пакетов есть процесс пассивный, он никак не изменяет трафик и ничего не транслирует в сеть от себя. Во-вторых, вы можете захватить только такие пакеты, которые получает ваша система. Если какие-то два хоста обмениваются пакетами напрямую и этот трафик минует ваш компьютер, вы ничего не увидите, независимо от инструмента наблюдения. В-третьих, вы можете захватывать только те пакеты, которые адресованы вашей системе, если сетевой интерфейс не переведен в беспорядочный режим.

Поскольку предполагается, что вы интересуетесь бОльшим, чем только пакеты для вашей системы, tcpdump переведет первый интерфейс в системе (если прямо не указан другой) в беспорядочный режим автоматически. Эта операция требует привилегий суперпользователя.

Анатомия команд tcpdump

Команда tcpdump состоит из двух частей: опций и выражения для фильтра (Figure 1).

Figure 1. Example tcpdump Command

Выражение для фильтра определяет, какие пакеты захватывать, а опции - какие из них показывать в выводе, также опции отвечают за поведение утилиты.

Опции

Опции tcpdump следуют стандартным соглашениям командной строки, поэтому формат опций - флаг-значение. Некоторые флаги не имеют значения параметра, потому что сами являются переключателями. Например, за -i следует имя интерфейса, а -n выключает разрешение имен через DNS.

Страница руководства man описывает множество опций, но есть некоторое множество их, без которых не обойтись:

I interface: интерфейс, на котором tcpdump будет прослушивать трафик;

V, -vv, -vvv: многословность вывода;

Q: тихий режим;

E: печатать заголовки кадров канального уровня (Ethernet);

N: разрешать доменные имена хостов;

T: не печатать временнЫе метки;

N: не разрешать доменные имена хостов;

S0 (or -s 0): максимальный захват, пакеты захватываются целиком; в последних версиях tcpdump это поведение по умолчанию.

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

Выражения для фильтра
Выражения для фильтра есть булевы критерии (да/нет) для оценки совпадения пакета с образцом. Все пакеты, не соответствующие заданным условиям, игнорируются.

Синтаксис пакетного фильтра мощный и прозрачный. В начале он содержит ключевые слова, называемые "примитивы", которые представляют собой различные классификаторы для пакетов, это могут быть протокол, адрес, порт или направление. Они могут быть соединены между собой в цепочки с помощью операторов и/или, сгруппированы и объединены правилами наследования, отсортированы с помощью отрицания.

Благодаря говорящим именам критериев, выражения для фильтров обычно выглядят как "самообъясняющие" свою суть конструкции, из-за этого их довольно легко конструировать и понимать. Полностью синтаксис описан в man-странице pcap-filter, здесь же представлены некоторые примеры:

ARP - простой протокол, он используется для разрешения IP-адресов в MAC-адреса сетевых карт. Как можно видеть выше, tcpdump описывает эти пакеты в довольно-таки примитивной манере. Пакеты DNS, с другой стороны, будут описаны несколько по-другому:

IP 10.0.0.2.50435 > 10.0.0.1.53: 19+ A? linuxjournal.com. (34) IP 10.0.0.1.53 > 10.0.0.2.50435: 19 1/0/0 A 76.74.252.198 (50)

Поначалу это может показаться недостаточно ясным, но по мере изучения того, как работают протоколы различных уровней, наполнится смыслом. DNS намного более сложный протокол, чем ARP, но кроме этого он работает на более высоком уровне. Это означает, что пакеты нижележащих протоколов также отображаются в выводе. В отличие от ARP, который не маршрутизируется между различными физическими сегментами сети, DNS это протокол для всего Интернета. Для маршрутизации этих пакетов используется уровень IP, для транспорта задействован UDP. Это делает DNS протоколом пятого уровня (IP - третий уровень, UDP - четвертый).

Информация уровней UDP/IP, содержащая адрес и порт источника, отображается в левой стороне строки, специфическая DNS-информация - в правой. Несмотря на то, что синтаксис довольно сжатый, он достаточен для определения базовых элементов DNS. Первый пакет есть запрос адреса для linuxjournal.com, второй пакет - это ответ, дающий адрес 76.74.252.198. Это типичная последовательность для простых DNS-запросов.

Просмотрите секцию "OUTPUT FORMAT" справки man для tcpdump для полного описания всех протокол-зависимых форматов вывода. Пакеты некоторых протоколов видны в выводе лучше, другие хуже, но важная информация обычно находится легко.

Захват вывода в файл
Помимо обычного режима с выводом информации на консоль (стандартный вывод), tcpdump также поддерживает режим записи вывода в файл. Режим активируется опцией -w, в которой задается путь к файлу.

При записи в файл tcpdump использует другой формат, чем при выводе на экран. Это так называемый сырой вывод, в нем не производится первичный анализ пакета. Эти файлы можно затем использовать в сторонних программах типа Wireshark, потому что формат записей в файл соответствует универсальному формату "pcap" (на ввод tcpdump такой файл можно подать с помощью опции -r). Эта возможность позволяет нам захватывать пакеты на одной машине, а анализировать на другой. Например, у вас на ноутбуке есть Wireshark. Вам не потребуется его подключать к анализируемой сети, чтобы просканировать захваченный ранее файл.

Анализ протоколов на основе TCP
tcpdump - это пакетный анализатор, поэтому он хорошо работает с протоколами, основанными на работе с отдельным пакетом, например, IP, UDP, DHCP, DNS и ICMP. Если же есть некий "поток", или последовательность пакетов для установления соединения, tcpdump не сможет напрямую анализировать эти потоки и сценарии соединений. Такие протоколы, как HTTP, SMTP и IMAP с точки зрения сетевого взаимодействия гораздо больше похожи на интерактивные приложения, чем "пакетные" протоколы.

TCP прозрачно для пользователя обрабатывает все низкоуровневые детали, необходимые для сеансов связи в рамках сессионных протоколов. Здесь происходит инкапсуляция данных, ориентированных на поток, в пакеты (сегменты), которые уже могут быть посланы по сети. Все такие подробности скрыты ниже уровня приложений. Поэтому для захвата пакетов протоколов, ориентированных на соединения, требуются дополнительные шаги. Поскольку каждый сегмент TCP есть кусочек данных уровня приложения, информация о нем не может быть использована напрямую. Чтобы это имело бы смысл, нужно полностью восстанавливать TCP-сессию (поток) из последовательности отдельных пакетов. Этой возможности tcpdump не имеет. Для анализа сессионных протоколов можно использовать то, что я назвал "трюк со строками".

Трюк со строками
Обычно при захвате трафика я имею в виду цель анализа причин каких-то ошибок. Данные вовсе не должны быть идеальными для просмотра, чтобы понять причины каких-либо инцидентов. В таких случаях скорость понимания важнее всего остального. Следующий трюк - это одна из самых любимых моих техник работы с tcpdump. Это работает потому что:

TCP сегмены обычно идут в хронологическом порядке;
- протоколы приложений, основанных на тексте, генерируют пакеты с текстовой нагрузкой;
- данные, окружающие текстовую нагрузку (например, хэдеры пакетов) - это не текст;
- UNIX-утилиты могут сохранять текст из бинарного вывода приложений;
- если запускать tcpdump с опцией -w -, он будет генерировать на стандартный вывод сырую информацию.

Соединив все вместе, получим инструмент для захвата данных HTTP-сессий.

Кроме того, вы должны понимать, что в выводе может содержаться некоторое количество мусора. Лишнее можно отрезать с помощью опции утилиты strings, которая ограничивает длину вывода строки (смотри man strings).

Этот трюк довольно хорошо работает для любых протоколов, основанных на тексте.

Анализ HTTP и SMTP
Трюк со строками из предыдущего раздела может помочь для захвата данных сессий HTTP, несмотря на отсутствие встроенного анализатора потоков. Полученные данные можно "проанализировать" и потом множеством различных способов.

Например, вам вздумалось проверить доступность всех сайтов, в имени которых есть "davepc", в реальном времени. Поможет такая команда, запущенная на файерволе (подразумевается, что внутренний интерфейс eth1):

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

Таким образом, настоящая мощь tcpdump проявляется в тех случаях, когда вы хотите быстро получить ответы на некоторые вопросы без особых усилий. Особенно это важно при отладке сетевых приложений.

Отладка маршрутизации и соединений VPN
tcpdump может здорово помочь при отладке таких вещей, как соединения VPN. Все, что нужно, это понять, на каких хостах какие пакеты появляются, на каких нет.

Возьмем стандартную схему соединения двух сетей через VPN-соединение. Сети 10.0.50.0/24 и 192.168.5.0/24 (Figure 2).

Figure 2. Example VPN Topology

Если это работает правильно, хосты из разных сетей должны пинговать друг друга. Если же ответы на пинги не приходят (в данном случае предположим, что они не приходят от D к хосту А), мы можем использовать tcpdump для обнаружения, где чего теряется.

Если пакеты запроса идут на хост С (удаленный шлюз), но не на D, это показывает, что само соединение VPN работает, но имеются проблемы маршрутизации. Если хост D получает запросы, но не оправляет ответы, это может означать, что протокол ICMP заблокирован. Если же ответы отправляются, но не доходят до С, возможно на D неправильно настроен шлюз по умолчанию.

Утилита tcpdump - это очень мощный и популярный инструмент для перехвата и анализа сетевых пакетов. Она позволяет просматривать все входящие и исходящие из определенного интерфейса пакеты и работает в командной строке. Конечно, вы могли бы пользоваться Wirshark для анализа сетевых пакетов, это графическая утилита, но иногда бывают ситуации когда нужно работать только в терминале.

Tcpdump ничем не хуже Wireshark, и имеет все необходимые возможности для анализа пакетов, к тому же вы можете сохранить все перехваченные пакеты в файл, чтобы анализировать их потом с помощью того же самого Wireshark. В этой статье мы рассмотрим как пользоваться tcpdump для перехвата сетевых пакетов.

Во многих дистрибутивах команда tcpdump поставляется по умолчанию, но если в вашем дистрибутиве ее нет, то вы можете очень просто ее установить из официальных репозиториев. Например, в Ubuntu/Debian:

sudo apt install tcpdum p

В Fedora/Red Hat/CentOS:

sudo yum install tcpdump

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

Команда tcpdump

Перед тем как перейти к примерам работы с утилитой, давайте рассмотрим ее синтаксис и основные опции. Команда имеет такой синтаксис:

$ tcpdump опции -i интерфейс фильтры

При вызове обязательно нужно передать интерфейс, который будете отслеживать. Если интерфейс не указать, то будет использован первый в списке. Опции настраивают отображение и основные возможности утилиты, а фильтры позволяют отсеять ненужные пакеты. А теперь рассмотрим основные опции:

  • -A - выводить все пакеты в формате ASCII;
  • -c - закрыть программу после перехвата n-ого количества пакетов;
  • -C - при записи пакетов в файл, проверять размер файла, и если он больше заданного - создать новый файл;
  • -D - вывести список доступных сетевых интерфейсов;
  • -e - выводить информацию уровня соединения для каждого пакета, это может быть полезно, например, для отображения MAC адреса;
  • -f - выводить доменное имя для ip адресов;
  • -F - читать пакеты из файла, а не интерфейса;
  • -G - создавать новый файл лога через указанный промежуток времени;
  • -H - обнаруживать заголовки 802.11s;
  • -i - имя интерфейса для перехвата пакетов. Вы можете захватывать пакеты со всех интерфейсов, для этого укажите any;
  • -I - переключить интерфейс в режим монитора для захвата всех проходящих пакетов;
  • -j - установить формат Timestamp для записи пакетов;
  • -J - посмотреть доступные Timestamp;
  • -K - не проверять контрольные суммы пакетов;
  • -l - добавить поддержку прокрутки к выводу;
  • -L - вывести поддерживаемые протоколы подключения для интерфейса;
  • -n - не отображать доменные имена;
  • -r - прочитать пакеты из файла, созданного с помощью -w;
  • -v, -vv, -vvv - более подробный вывод;
  • -q - выводить минимум информации;
  • -w - записать вывод в файл;
  • -Z - пользователь, от имени которого будут создаваться файлы.

Это не все опции, но их вам будет вполне достаточно для решения большинства задач. Чаще мы будем применять фильтры. С помощью фильтров вы можете отсеивать только те типы пакетов, которые хотите видеть. Вы можете фильтровать по ip адресу, протоколу, сети, интерфейсу и многим другим параметрам. Но фильтры tcpdump мы будем рассматривать уже на примерах.

Как пользоваться tcpdump

Перед тем как перейти к использованию tcpdump нужно посмотреть какие сетевые интерфейсы вы можете использовать. Для этого запустите команду с опцией -D:

Начнем рассматривать примеры tcpdump с захвата трафика на интерфейсе eth0, у меня это основной интерфейс, который подключен к интернету. Для работы программе необходимы права суперпользователя, поэтому не забудьте указать sudo:

sudo tcpdump -i eth0

Чтобы остановить работу команды нажмите Ctrl+C. В выводе вы сразу же увидите все перехваченные пакеты. Формат записи для каждого пакета будет выглядеть следующим образом:

13:03:41.795599 IP udp032919uds.hawaiiantel.net.6881 > 192.168.1.2.52055 : Flags [.], seq 640160396:640161844, ack 436677393, win 2050, options , length 1448

Такой формат характерен для пакетов данных, в зависимости от протокола выделенный черным текст будет отличаться. Сначала идет временная метка, затем протокол, далее зеленым отмечен ip адрес отправителя, а синим адрес адресата, в данном случае, нашего компьютера. Дальше идут дополнительные параметры tcp и в конце размер пакета в байтах. Подробность вывода информации можно контролировать с помощью опций -v, Например:

sudo tcpdump -v -i eth0

Здесь уже появляется информация о протоколе IP:

IP (tos 0x0, ttl 64 , id 50309, offset 0, flags , proto TCP (6) , length 64)

Мы можем узнать информацию о времени жизни пакета ttl, версию протокола TCP и длину поля заголовка. Опция -vv будет выводить проверку контрольных сумм пакета и содержимое в некоторых случаях.

После опций вы можете указывать фильтры для пакетов. Вот основные параметры, по которым можно отсеивать пакеты:

  • host - имя хоста;
  • ip - ip адрес;
  • proto - протокол;
  • net - адрес сети или подсети;
  • port - адрес порта;
  • src - параметр, касающийся отправителя;
  • dst - параметр, касающейся получателя;
  • Доступны такие протоколы: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp и udp .

Вы можете все это комбинировать между собой, чтобы получить желаемый результат. Рассмотрим более детально на примерах. Отсеем только пакеты, адресованные нашему компьютеру:

sudo tcpdump -i eth0 ip dst 192.168.1.2

Также мы можем отобрать пакеты, отправляемые на определенный узел:

sudo tcpdump -i eth0 dst host google-public-dns-a.google.com

Как видите, это DNS пакеты и здесь вместо флагов TCP содержится полезная информация, запрос ip адреса хоста. Также вы можете выбрать ответные пакеты от определенного хоста:

sudo tcpdump -i eth0 src host google-public-dns-a.google.com

Здесь нет полного содержимого пакета, если вы хотите его получить нужно использовать опцию -v или -vv:

sudo tcpdump -vv -i eth0 host dst google-public-dns-a.google.com

С помощью оператора and вы можете объединить несколько фильтров в один:

sudo tcpdump -i eth0 dst host google-public-dns-a.google.com and src host google-public-dns-a.google.com

Из операций объедения доступны and и or, также можно применять скобки для обозначения приоритета. Вам необязательно указывать host, во многих случаях достаточно src или dst, утилита сама поймет что имелось в виду. Точно такую же конструкцию можно использовать для портов. Например, мы можем отсеять все запросы или ответы к DNS (на порт 53):

sudo tcpdump -vv -i eth0 port 53

Точно такое же можно провернуть для http (порт 80):

sudo tcpdump -vv -i eth0 port 80

Естественно, тут тоже можно применять dst и src для более конкретных результатов. Вы можете фильтровать не один порт, а целый диапазон портов:

sudo tcpdump portrange 21-23

Если указать один из протоколов, вы отфильтруете только пакеты этого протокола, например tcp, udp или arp:

sudo tcpdump -vv arp

Точно также можно выбрать все udp пакеты:

sudo tcpdump -vv udp

Также доступен фильтр по обозначению сети:

sudo tcpdump net 129.168.1.1/24

Кроме того, вы можете фильтровать пакеты по их размеру, например, меньше 32 байт:

sudo tcpdump less 32

Или больше 128:

tcpdump greater 128

sudo tcpdump -i eth0 -w file.pcap

Этот файл можно открыть с помощью любой программы для чтения таких файлов, например, Wireshark. Чтобы открыть сохраненные в файл пакеты используйте опцию -r:

sudo tcpdump -r file.pcap

Остался еще один момент, на который стоит обратить внимание. Это формат отображения содержимого пакетов. Вы можете вывести содержимое пакета в формате ASCII используйте опцию -A:

sudo tcpdump -A -i eth0

Также вы можете отобразить содержимое в формате HEX и ASCII для этого используйте -XX:

sudo tcpdump -XX -i eth0

Выводы

В этой статье мы рассмотрели как пользоваться tcpdump. Это очень мощный сетевой анализатор, который работает только через командную строку. Надеюсь, эта информация была полезной для вас и теперь использование tcpdump будет намного проще, если у вас остались вопросы, спрашивайте в комментариях!

На завершение видео с лекцией о tcpdump:

Методы автоматического распознавания образов и их реализация в системах оптического распознавания текстов (Optical Character Recognition - OCR-системы) - одна из самых прогрессивных технологий искусственного интеллекта. В развитии этой технологии российские ученые занимают ведущие позиции в мире.

OCR-система понимается как система автоматического распознавания образов с помощью специальных программ изображений символов печатного или рукописного текста (например, введенного в компьютер посредством сканера) и преобразование его в формат, пригодный для обработки текстовыми процессорами, редакторами текстов и т. д.

Аббревиатура OCR иногда расшифровывается как Optical Character Reader - устройство оптического распознавания символов или автоматического чтения текста. В настоящее время такие устройства в промышленном использовании обрабатывают до 100 тыс. документов в сутки.

Промышленное использование предполагает ввод документов хорошего и среднего качества - это обработка бланков переписи населения, налоговых деклараций и т. д.

Перечислим особенности предметной области, существенные с точки зрения OCR-систем:

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

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

Выделяются три принципа, на которых основаны все OCR-системы.

  • 1. Принцип целостности образа. В исследуемом объекте всегда есть значимые части, между которыми существуют отношения. Результаты локальных операций с частями образа интерпретируются только совместно в процессе интерпретации целостных фрагментов и всего образа в целом.
  • 2. Принцип целенаправленности. Распознавание является целенаправленным процессом выдвижения и проверки гипотез (поиска того, что ожидается от объекта).
  • 3. Принцип адаптивности. Распознающая система должна быть способна к самообучению.

Ведущие российские OCR-системы: FineReader; FineReader Рукопись; FormReader; CunieForm (Cognitive Technologies), Cognitive Forms (Cognitive Technologies) .

Система FineReader выпускается компанией ABBYY, которая была основана в 1989 г. Разработки компании ABBYY ведутся в двух направлениях: машинное зрение и прикладная лингвистика. Стратегическим направлением научных исследований и разработок является естественно-языковой аспект технологий в области машинного зрения, искусственного интеллекта и прикладной лингвистики.

CuneiForm GOLD for Windows является первой в мире само-обучаемой интеллектуальной OCR-системой, использующей новейшую технологию адаптивного распознавания текстов, поддерживает много языков. Для каждого языка поставляется словарь контекстной проверки и повышения качества результатов распознавания. Распознает любые полиграфические, машинописные гарнитуры и шрифты, получаемые с принтеров, за исключением декоративных и рукописных, а также очень низкокачественных текстов.

Характеристики систем распознавания образов. Среди ОСЯ-технологий большое значение имеют специальные технологии решения отдельных классов задач автоматического распознавания образов:

  • поиск людей по фотографиям;
  • поиск месторождений полезных ископаемых и прогнозирование погоды по данным аэрофотосъемки и снимкам со спутников в различных диапазонах светового излучения;
  • составление географических карт по исходной информации, используемой в предыдущей задаче;
  • анализ отпечатков пальцев и рисунков радужной оболочки глаза в криминалистике, охранных и медицинских системах.

На стадии подготовки и обработки информации, особенно при компьютеризации предприятия, автоматизации бухгалтерского учета, возникает задача ввода большого объема текстовой и графической информации в ПК. Основными устройствами для ввода графической информации являются: сканер, факс-модем и реже - цифровая фотокамера. Кроме того, используя программы оптического распознавания текстов, можно вводить в компьютер (оцифровывать) также и текстовую информацию. Современные программно-аппаратные системы позволяют автоматизировать ввод больших объемов информации в компьютер, применяя, например, сетевой сканер и параллельное распознавание текстов на нескольких компьютерах одновременно.

Большинство программ оптического распознавания текста работают с растровым изображением, которое получено через факс-модем, сканер, цифровую фотокамеру или другое устройство. На первом этапе ОСЯ-система должна разбить страницу на блоки текста, основываясь на особенностях правого и левого выравнивания и наличии нескольких колонок. Затем распознанный блок разбивается на строки. Несмотря на кажущуюся простоту, это не такая очевидная задача, так как на практике неизбежен перекос изображения страницы или ее фрагментов при сгибах. Даже небольшой наклон приводит к тому, что левый край одной строки становится ниже правого края следующей, особенно при маленьком межстрочном интервале. В результате возникает проблема определения строки, к которой относится тот или иной фрагмент изображения. Например, для букв

Потом строки разбиваются на непрерывные области изображения, которые соответствуют отдельным буквам; алгоритм распознавания выдвигает предположения относительно соответствия этих областей символам, а затем осуществляется выбор каждого символа, в результате чего страница восстанавливается в символах текста, причем, как правило, в заданном формате. ОСЯ-системы могут достигать наилучшей точности распознавания - свыше 99,9 % для чистых изображений, составленных из обычных шрифтов. На первый взгляд такая точность распознавания кажется идеальной, но уровень ошибок все же удручает, потому что, если имеется приблизительно 1500 символов на странице, то даже при коэффициенте успешного распознавания 99,9 % получается одна или две ошибки на страницу. В таких случаях следует воспользоваться методом проверки по словарю, т. е. если какого-то слова нет в словаре системы, то она по специальным правилам попытается найти похожее. Но это все равно не позволяет исправлять 100 % ошибок и требует контроля результатов человеком.

Встречающиеся в реальной жизни тексты обычно далеки от совершенства, и процент ошибок распознавания для «нечистых» текстов часто недопустимо велик. Грязные изображения - это наиболее очевидная проблема, потому что даже небольшие пятна могут затенять определяющие части символа или преобразовывать один в другой. Проблемой является и неаккуратное сканирование, связанное с «человеческим фактором», так как оператор, сидящий за сканером, просто не в состоянии разглаживать каждую сканируемую страницу и точно выравнивать ее по краям сканера. Если документ был ксерокопирован, нередко возникают разрывы и слияния символов. Любой из этих эффектов может заставлять систему ошибаться, потому что некоторые из ОСЯ-сис-тем предполагают, что непрерывная область изображения должна быть одиночным символом. Страница, расположенная с нарушением границ или перекосом, создает немного искаженные символьные изображения, которые могут быть перепутаны ОСЯ-сис-темой.

Программное обеспечение ОСЯ-системы обычно работает с большим растровым изображением страницы, полученной из сканера. Изображения со стандартной степенью разрешения достигаются сканированием с точностью 9600 п/д. Изображение листа формата A4 при этом разрешении занимает около 1 Мб памяти.

Основное назначение OCR-систем состоит в анализе растровой информации (отсканированного символа) и присвоении фрагменту изображения соответствующего символа. После завершения процесса распознавания OCR-системы должны уметь сохранять форматирование исходных документов, присваивать в нужном месте атрибут абзаца, сохранять таблицы, графику и т. д. Современные программы распознавания поддерживают все известные текстовые и графические форматы и форматы электронных таблиц, а также форматы HTML и PDF.

Работа с OCR-системами, как правило, не должна вызывать особых затруднений. Большинство таких систем имеют простейший автоматический режим «сканируй и распознавай» (Scan & Read), а также они поддерживают и режим распознавания изображений из файлов. Однако для того чтобы достигнуть лучших из возможных для данной системы результатов, желательно (а нередко и обязательно) предварительно вручную настроить ее на конкретный вид текста, макет бланка и качество бумаги. Страница, расположенная с нарушением границ или перекосом, создает немного искаженные символьные изображения, которые могут быть перепутаны OCR-системой.

Очень важным при работе с OCR-системой является выбор языка распознавания и типа распознаваемого материала (пишущая машинка, факс, матричный принтер, газета и т. д.), а также интуитивная понятность пользовательского интерфейса. При распознавании текстов, в которых использовано несколько языков, эффективность распознавания зависит от умения OCR-системы формировать группы языков. В то же время в некоторых системах уже имеются комбинации для наиболее часто применяемых языков, например русского и английского.

На данный момент существует огромное количество программ, поддерживающих распознавание текста как одну из возможностей. Лидером в этой области является система FineReader. Последняя версия программы (6.0) теперь имеет средства для разработки новых систем на базе технологии FineReader 6.0. В состав семейства FineReader 6.0 входят: система FineReader 6.0 Professional, FineReader 6.0 Corporate Edition, FineReader Scripting Edition 6.0 и FineReader Engine 6.0. Система FineReader 6.0, кроме того, что знает огромное количество форматов для сохранения, включая PDF, имеет возможность прямого распознавания из PDF-файлов. Новая технология Intelligent Background Filtering (интеллектуальная фильтрация фона) позволяет отсеять информацию о текстуре документа и фоновом шуме изображения: иногда для выделения текста в документе используется серый или цветной фон. Человеку это не мешает читать, но обычные алгоритмы распознавания текста испытывают серьезные затруднения при работе с буквами, расположенными поверх такого фона. Программа FineReader умеет определять зоны, содержащие подобный текст, отделяя текст от фона документа, находя точки, размер которых меньше определенной величины, и удаляя их. При этом контуры букв сохраняются, так что точки фона, близко расположенные к данным контурам, не вносят помех, способных ухудшить качество распознавания текста.

Используя возможности современных программ верстки, дизайнеры часто создают объекты сложной формы, такие как обтекание непрямоугольной картинки многоколоночным текстом. В системе FineReader 6.0 реализована поддержка распознавания таких объектов и их сохранение в файлах формата MS Word. Теперь документы сложной верстки будут точно воспроизведены в данном текстовом редакторе. Даже таблицы распознаются с максимальной точностью, сохраняя при этом все возможности для редактирования.

Система ABBYY FormReader - одна из программ распознавания от фирмы ABBYY, основанная на системе ABBYY FineReader Engine. Эта программа предназначена для распознавания и обработки форм, которые могут быть заполнены вручную. Программа ABBYY FormReader может обрабатывать формы с фиксированной схемой так же хорошо, как и формы, чья структура может меняться. Для распознавания была применена новая технология ABBYY FlexiForm technology.

Ведущие производители программного обеспечения лицензировали российскую информационную технологию для применения со своими продуктами. В популярные программные пакеты Corel Draw (Corel Corporation), FaxLine/OCR & Business Card Wizard (Inzer Corporation) и многие другие встроена OCR-библиотека CuneiForm. Эта программа стала первой в России OCR-системой, получившей MS Windows Compatible Logo.

Система Readiris Pro 7 - профессиональная программа распознавания текста. По словам производителей, данная OCR-система отличается от аналогов высочайшей точностью преобразования обычных (каждодневных) печатных документов, таких как письма, факсы, журнальные статьи, газетные вырезки, в объекты, доступные для редактирования (включая файлы формата PDF). Основными достоинствами программы являются: возможность более или менее точного распознавания картинок, сжатых «по максимуму» (с максимальной потерей качества) методом формата JPEG, поддержка цифровых камер и автоопределения ориентации страницы, поддержка до 92 языков (включая русский).

Система OmniPage 11 - продукт компании ScanSoft. Ограниченная версия этой программы (OmniPage 11 Limited Edition, OmniPage Lite) обычно поставляется в комплекте с новыми сканерами (на территории Европы и США). Разработчики утверждают, что их программа практически со 100%-ной точностью распознает печатные документы, восстанавливая их форматирование, включая столбцы, таблицы, переносы (в том числе переносы частей слов), заголовки, названия глав, подписи, номера страниц, сноски, параграфы, нумерованные списки, красные строки, графики и картинки. Есть возможность сохранения в форматы Microsoft Office, PDF и в 20 других форматов, распознавания из файлов формата PDF и редактирования в этом формате. Система искусственного интеллекта позволяет автоматически обнаруживать и исправлять ошибки после первого исправления вручную. Новый специально разработанный программный модуль «Dcspeckle» позволяет распознавать документы с ухудшенным качеством (факсы, копии, копии копий и т. д.). Преимуществом программы является возможность распознавания цветного текста и корректировки голосом. Версия OmniPage существует и для компьютеров фирмы Macintosh.

  • См.: Башмаков А. И., Башмаков И. А. Интеллектуальные информационные технологии.

Sun, Mar 29, 2015

В настоящее время существует множество задач, в которых требуется принять некоторое решение в зависимости от присутствия на изображении объекта или классифицировать его. Способность «распознавать» считается основным свойством биологических существ, в то время как компьютерные системы этим свойством в полной мере не обладают.

Рассмотрим общие элементы модели классификации.

Класс - множество объектом имеющие общие свойства. Для объектов одного класса предполагается наличие «схожести». Для задачи распознавания может быть определено произвольное количество классов, больше 1. Количество классов обозначается числом S. Каждый класс имеет свою идентифицирующую метку класса.

Классификация - процесс назначения меток класса объектам, согласно некоторому описанию свойств этих объектов. Классификатор - устройство, которое в качестве входных данных получает набор признаков объекта, а в качестве результата выдающий метку класса.

Верификация - процесс сопоставления экземпляра объекта с одной моделью объекта или описанием класса.

Под образом будем понимать наименование области в пространстве признаков, в которой отображается множество объектов или явлений материального мира. Признак - количественное описание того или иного свойства исследуемого предмета или явления.

Пространство признаков это N-мерное пространство, определенное для данной задачи распознавания, где N - фиксированное число измеряемых признаков для любых объектов. Вектор из пространства признаков x, соответствующий объекту задачи распознавания это N-мерный вектор с компонентами (x_1,x_2,…,x_N), которые являются значениями признаков для данного объекта.

Другими словами, распознавание образов можно определить, как отнесение исходных данных к определенному классу с помощью выделение существенных признаков или свойств, характеризующих эти данные, из общей массы несущественных деталей.

Примерами задач классификации являются:

  • распознавание символов;
  • распознавание речи;
  • установление медицинского диагноза;
  • прогноз погоды;
  • распознавание лиц
  • классификация документов и др.

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

Если рассмотреть 2 класса объектов: взрослые и дети. В качестве признаков можно выбрать рост и вес. Как следует из рисунка эти два класса образуют два непересекающихся множества, что можно объяснить выбранными признаками. Однако не всегда удается выбрать правильные измеряемые параметры в качестве признаков классов. Например выбранные параметры не подойдут для создания непересекающихся классов футболистов и баскетболистов.

Второй задачей распознавания является выделение характерных признаков или свойств из исходных изображений. Эту задачу можно отнести к предварительной обработке. Если рассмотреть задачу распознавания речи, можно выделить такие признаки как гласные и согласные звуки. Признак должен представлять из себя характерное свойство конкретного класса, при этом общие для этого класса. Признаки, характеризующие отличия между - межклассовые признаки. Признаки общие для всех классов не несут полезной информации и не рассматриваются как признаки в задаче распознавания. Выбор признаков является одной из важных задач, связанных с построением системы распознавания.

После того, как определены признаки необходимо определить оптимальную решающую процедуру для классификации. Рассмотрим систему распознавания образов, предназначенную для распознавания различных M классов, обозначенных как m_1,m_2,…,m3. Тогда можно считать, что пространство образов состоит из M областей, каждая содержит точки, соответствующие образом из одного класса. Тогда задача распознавания может рассматриваться как построение границ, разделяющих M классов, исходя из принятых векторов измерений.

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

Сравнение объектов можно производить на основе их представления в виде векторов измерений. Данные измерений удобно представлять в виде вещественных чисел. Тогда сходство векторов признаков двух объектов может быть описано с помощью евклидова расстояния.

где d - размерность вектора признака.

Разделяют 3 группы методов распознавания образов:

  • Сравнение с образцом . В эту группу входит классификация по ближайшему среднему, классификация по расстоянию до ближайшего соседа. Также в группу сравнения с образцом можно отнести структурные методы распознавания.
  • Статистические методы . Как видно из названия, статистические методы используют некоторую статистическую информацию при решении задачи распознавания. Метод определяет принадлежность объекта к конкретному классу на основе вероятности В ряде случаев это сводится к определению апостериорной вероятности принадлежности объекта к определенному классу, при условии, что признаки этого объекта приняли соответствующие значения. Примером служит метод на основе байесовского решающего правила.
  • Нейронные сети . Отдельный класс методов распознавания. Отличительной особенностью от других является способность обучаться.

Классификация по ближайшему среднему значению

В классическом подходе распознавания образов, в котором неизвестный объект для классификации представляется в виде вектора элементарных признаков. Система распознавания на основе признаков может быть разработана различными способами. Эти векторы могут быть известны системе заранее в результате обучения или предсказаны в режиме реального времени на основе каких-либо моделей.

Простой алгоритм классификации заключается в группировке эталонных данных класса с использованием вектора математического ожидания класса (среднего значения).

где x(i,j)- j-й эталонный признак класса i, n_j- количество эталонных векторов класса i.

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

Трудности возникнут, если классы будут иметь несколько более сложную структуру, например, как на рисунке. В данном случае класс 2 разделен на два непересекающихся участка, которые плохо описываются одним средним значением. Также класс 3 слишком вытянут, образцы 3-го класса с большими значениями координат x_2 ближе к среднему значению 1-го класса, нежели 3-го.

Описанная проблема в некоторых случаях может быть решена изменением расчета расстояния.

Будем учитывать характеристику «разброса» значений класса - σ_i, вдоль каждого координатного направления i. Среднеквадратичное отклонение равно квадратному корню из дисперсии. Шкалированное евклидово расстояние между вектором x и вектором математического ожидания x_c равно

Эта формула расстояния уменьшит количество ошибок классификации, но на деле большинство задач не удается представить таким простым классом.

Классификация по расстоянию до ближайшего соседа

Другой подход при классификации заключается в отнесении неизвестного вектора признаков x к тому классу, к отдельному образцу которого этот вектор наиболее близок. Это правило называется правилом ближайшего соседа. Классификация по ближайшему соседу может быть более эффективна, даже если классы имеют сложную структуру или когда классы пересекаются.

При таком подходе не требуется предположений о моделях распределения векторов признаков в пространстве. Алгоритм использует только информацию об известных эталонных образцах. Метод решения основан на вычислении расстояния x до каждого образца в базе данных и нахождения минимального расстояния. Преимущества такого подхода очевидны:

  • в любой момент можно добавить новые образцы в базу данных;
  • древовидные и сеточные структуры данных позволяют сократить количество вычисляемых расстояний.

Кроме того, решение будет лучше, если искать в базе не одного ближайшего соседа, а k. Тогда при k > 1 обеспечивает наилучшую выборку распределения векторов в d-мерном пространстве. Однако эффективное использование значений k зависит от того, имеется ли достаточное количество в каждой области пространства. Если имеется больше двух классов то принять верное решение оказывается сложнее.

Литература

  • M. Castrillón, . O. Déniz, . D. Hernández и J. Lorenzo, «A comparison of face and facial feature detectors based on the Viola-Jones general object detection framework,» International Journal of Computer Vision, № 22, pp. 481-494, 2011.
  • Y.-Q. Wang, «An Analysis of Viola-Jones Face Detection Algorithm,» IPOL Journal, 2013.
  • Л. Шапиро и Д. Стокман, Компьютерное зрение, Бином. Лаборатория знаний, 2006.
  • З. Н. Г., Методы распознавания и их применение, Советское радио, 1972.
  • Дж. Ту, Р. Гонсалес, Математические принципы распознавания образов, Москва: “Мир” Москва, 1974.
  • Khan, H. Abdullah и M. Shamian Bin Zainal, «Efficient eyes and mouth detection algorithm using combination of viola jones and skin color pixel detection» International Journal of Engineering and Applied Sciences, № Vol. 3 № 4, 2013.
  • V. Gaede и O. Gunther, «Multidimensional Access Methods,» ACM Computing Surveys, pp. 170-231, 1998.