IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Как кошка с собакой

Юрий Давидюк

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

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

На первый взгляд, отличить кошку от собаки проще простого: вот кот, а вот собака. Но что конкретно стоит за этими "вот"? По четыре лапы, по одному хвосту, по два уха, глаза, ноздри и т.д. Вот если бы в одном случае был слон или морж!.. А так: длина и цвет шерсти у обоих животных могут быть самыми разнообразными. Рост и вес не могут быть однозначным критерием идентификации. Коты не могут быть ростом с дога или весить как сенбернар, но зато сколько угодно собак, габаритами не отличающихся от котов. Собаки, правда, лают, а коты мяукают, но если компьютеру попадутся "молчаливые" экземпляры? На основании вышеперечисленных данных нет возможности поставить однозначное условие "если-то", выполнение которого позволит отличить кошку от собаки. Можно, конечно, обратиться к биологам, у них выяснить точный отличительный признак псовых от кошачьих. Но, во-первых, у биологов у самих со времен Карла Линнея проблемы с классификацией (тех же кроликов относят то к грызунам, то выделяют в отдельное семейство); во-вторых, 99% людей, совершенно не зная точного научного обоснования отличия кошки от собаки, безошибочно их различают. Очевидно, проблема состоит не в том, чтобы "загнать" в компьютер научный классификатор живой природы, а в чем-то ином. Кстати, в Интернете можно найти сколько угодно таких компьютерных справочников-классификаторов. Таким образом, возникает задача смоделировать алгоритм распознавания образов, идентичный, аналогичный или хотя бы выдающий близкие результаты в соревновании с двухлетним ребенком: " А покажи-ка, где котик, а где соба-а-а-ачка..."

С точки зрения техники, "железа", ввести образы в память компьютера трудности не составляет. Можно насканировать кучу фотографий или наснимать на видео множество сюжетов с кошками и собаками, можно воспользоваться уже готовыми фотоальбомами. Проблема "наблюдения" компьютером за животными в реальном времени всегда может быть сведена к частному случаю статических изображений. Итак, пусть мы имеем пару кошка-собака с явно выраженными видовыми признаками. Каким образом, разместив в памяти компьютера это изображение, мы сможем заставить его произвести корректное сравнение? Речь в данном случае для упрощения идет только об одной части тела - голове, ведь мы-то, глядя на эту фотографию, безошибочно отличаем кошку от собаки. Очевидно, мы должны описать отличительные признаки, как то: пропорции, расположение и форма глаз, ушей, наличие и длина усов, форма носа, пасть и т.д. Анализ только одного -двух признаков может привести к ошибочным результатам. Например, исходя из того, что у кошек голова "круглая" и морда "плоская", а у собак голова "не круглая" и морда "удлиненная", вряд ли возможно дать правильный ответ. У этой пары даже добавление еще двух признаков - формы и расположения ушей - не может дать стопроцентной идентификации. Значит, необходимо выбрать такой минимальный набор признаков, который позволит распознавать образы этих двух животных с необходимой достоверностью. Кроме того, необходимо решить вопрос, каким образом будет происходить распознавание, будет ли это сравнение числовых параметров, как то: отношение длины к ширине ушей или расстояние между ушами, их расположение по отношению к черепу или относительная длина носа и т.д. Альтернативой числовому сравнению может быть графическое (в памяти компьютера, естественно, в конечном счете, происходит числовое сравнение, но здесь идет речь о методике, без излишней конкретизации). При графическом сравнении формы частей тела животных сравниваются с ранее заданными образцами, например, с формой зрачка. Кстати, по моему мнению, это и является главным отличием между кошкой или собакой, но как быть в том случае, когда мы безошибочно определяем их с двухсот метров? Да и глупо было бы, чтобы различать животных, приглядываться к зрачкам.

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

1. Ввести изображение.

2. Позиционировать изображение. Т.е. проанализировать его расположение относительно точки начала просмотра и анализа. Если вверху не оказалось ушей, значит, изображение введено вверх ногами. (Шутка).

3. Пусть начинается анализ с глаз. Сравниваем глаза: кошачьи или собачьи. Стоп!!! Первое серьезное затруднение - как объяснить компьютеру, что есть глаза?

Второе серьезное затруднение: достаточен ли объем базы глаз для правильного сравнения?

Третье серьезное затруднение: а что если глаза прищурены?

4. Последовательно сравниваем уши, усы, клыки и пр. Что ни часть тела, то затруднения, аналогичные п. 3.

5. Анализируем результат: глаза кошачьи, уши собачьи, нос кошачий, пасть собачья - кто это?

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

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

Если отвлечься от досужих размышлений и поискать нечто похожее, уже реально созданное, то оказывается, что наиболее близкой по функциям программой является давно применяемый криминалистами всего мира фоторобот. Только при составлении фоторобота основную интеллектуальную работу выполняет все-таки человек. Однако, в отличие от программ опознавания кошек и собак, в программу опознавания людей государства с охотой вкладывают деньги, и рано или поздно фоторобот, полностью составляемый компьютером, станет реальностью. А значит, методология алгоритмы и программные наработки будут готовы к применению для других аналогичных целей. Поэтому, когда у меня не хватает аргументов в дискуссии, я заявляю оппоненту: "Дай достаточно денег, и я тебе создам что угодно". А что делать? Такова жизнь, все упирается в деньги.

Источник: "Терабайт", http://www.comprice.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com