Разработка автоматизированной системы классификации товаров по изображениям

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



сс Grabber служит для извлечения информации с веб-ресурса.

Приведём структуру класса:

class Grabber

{. DBEngine dbEngine; // движок БД categories; // категорииgetItemCounter; // счетчик получения товаровgetItemWorkAmount; // обьём работы получения товаровgetItemThreadCount; // количество потоков получения товаровint GetItemThreadCount

{{ return getItemThreadCount; }{ getItemThreadCount = value; }

}saveImageCounter; // счетчик сохранения изображенийsaveItemWorkAmount; // объём работы сохранения изображенийsaveItemThreadCount; // количество потоков сохранения изображенийint SaveItemThreadCount

{{ return saveItemThreadCount; }{ saveItemThreadCount = value; }

}

}

Класс NeuralNetwork управляет единичной нейронной сетью.

Приведём структуру класса:

partial class NeuralNetwork

{net; // нейронная сеть[] neuronsInLayers; // количество нейронов в слояхint id; // ИДCategory levelTwoParent; // категория родитель уровня 2Category category; // категорияstring Name // имя

{{ return category. name; }

}int Level // уровень

{{ return category. level; }

}

}

Класс NetworkPool используется для группировки сетей и определения результата классификации, не содержит полей.

Класс NetworkController управляет массивом нейронных сетей.

Приведём структуру класса:

class NetworkController

{dbEngine; // движок БД workResult; // результат работы сетейsmallNetworksInitialized; // флаг инициализации малых сетейbool SmallNetworksInitialized

{{ return smallNetworksInitialized; }

}bigNetworksInitialized; // флаг инициализации больших сетейbool BigNetworksInitialized

{{ return bigNetworksInitialized; }{ bigNetworksInitialized = value; }

}initialDirectory; // рабочая директорияstring InitialDirectory

{{ return initialDirectory; }

}[] smallNetworkLayers = { 3072, 512, 1 }; // слои малых сетей[] bigNetworkLayers = { 12000, 1000, 1 }; // слои больших сетейtrainDataCreationCounter; // счетчик создания данных для обученияtrainDataCreationWorkAmount; // объём работы данных обученияtrainDataCreationThreadCount; // количество потоков данных обученияint TrainDataCreationThreadCount

{{ return trainDataCreationThreadCount; }{ trainDataCreationThreadCount = value; }

}networkTrainCounter; // счетчик обучения сетейnetworkTrainWorkAmount; // объём работы обучения сетейnetworkTrainThreadCount; // количество потоков обучения сетейint NetworkTrainThreadCount

{{ return networkTrainThreadCount; }{ networkTrainThreadCount = value; }

}networkCreateCounter; // счетчик создания сетейnetworkCreateWorkAmount; // объём создания сетейnetworkCreateThreadCount; // потоки создания сетейint NetworkCreateThreadCount

{{ return networkCreateThreadCount; }{ networkCreateThreadCount = value; }

}

}

Описание интерфейса работы программы

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

Окно программы после запуска

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

Для начала работы с программой необходимо получить список категорий с сайта, либо загрузить ранее сохранённый список из базы данных.

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

Окно программы с загруженным списком категорий

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

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

Процесс парсинга указанных категорий

После окончания работы окно программы будет выглядеть следующим образом:

Работа окончена

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

Главное окно программы для классификации товаров

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

При нажатии кнопки подготовить данные для обучения программа начнет работу:

Создание файлов обучения

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

Для классификации товара, нужно нажать кнопку "Работать", затем выбрать изображение этого товара, и дождаться результата классификации.

Результат классификации

3.2 Апробация методики

Для тестирования методики классификации товаров была произведена случайная выборка 20 категорий, общее количество товаров составило 8442, образов - 19863. Классификация осуществлялась в восемь потоков. Для осуществления тестирования были отобраны 2000 случайных товаров, по 100 штук для каждой категории, успешным результат тестирования для одного товара считался, если сеть, к категории которой принадлежит данный товар, возвращала выходной сигнал на 90% и более соответствующий эталонному сигналу. Настройки нейронных сетей: число нейронов во входном слое - 3072, в скрытом - 512, в выходном - 1, шаг обучения 1*10-10, максимальное количество эпох при обучении - 1*109, максимально допустимая погрешность - 1*10-10.

Процент верно классифицированных товаров по категориям

Как видно из графика, представленного на рисунке выше, точнос