Обучение SVM в OpenCV с использованием SIFT BOW - PullRequest
0 голосов
/ 25 января 2019

Я пытался написать программу, которая классифицирует изображения лиц и самолетов следующим образом: Я читаю все изображения в оттенках серого и изменяю их размер, затем генерирую словарь, используя кластеризацию kmeans, для использования в BOW. Каждый тестовый ввод, который я даю svm для предсказания, в конечном итоге предсказывает, что это лицо (предикат = 0). Также пример, взятый из самих обучающих данных в коде, который должен быть довольно простым для классификации SVM. Должен ли я проходить тестирование или обучение по-другому? заранее спасибо

import glob
import cv2
import numpy as np
import glob
from sklearn.svm import SVC

def training_procedure_sift():
    images_faces = [cv2.resize(cv2.imread(file, 0),(240,159)) for file in glob.glob('training/faces/*.jpg')]
    images_airplanes = [cv2.resize(cv2.imread(file, 0),(240,159)) for file in glob.glob('training/airplanes/*.jpg')]
    sift = cv2.xfeatures2d.SIFT_create()
    flann_params = dict(algorithm = 1, trees = 5)
    matcher = cv2.FlannBasedMatcher(flann_params, {}) 
    bow_extract = cv2.BOWImgDescriptorExtractor(sift , matcher)
    bow_train = cv2.BOWKMeansTrainer(150)
    train_data, trainlabels = [], []
    for img in images_faces:
        bow_train.add(sift.compute(img, sift.detect(img))[1])
    for img in images_airplanes:
        bow_train.add(sift.compute(img, sift.detect(img))[1])
    voc = bow_train.cluster()
    bow_extract.setVocabulary(voc)
    for img in images_faces:
            train_data.extend(bow_extract.compute(img, sift.detect(img)))
            trainlabels.append(0)
    for img in images_airplanes:
            train_data.extend(bow_extract.compute(img, sift.detect(img)))
            trainlabels.append(1)

    clf = SVC(gamma='auto')
    clf.fit(np.array(train_data), np.array(trainlabels)) 

    for i in np.arange(12):
        siftkp = sift.detect(images_airplanes[i])
        bowsig = bow_extract.compute(img, siftkp)
        print(clf.predict(bowsig))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...