services/hog&svm.py

121 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
"""HOG&SVM.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/128Eq-6Qnnv2Q7qW3cs8YlUe_f2EdGps5
"""
from __future__ import print_function, division
import os
import torch
import pandas as pd
from skimage import io, transform
import numpy as np
import matplotlib.pyplot as plt
from torch.utils.data import Dataset, DataLoader
import torchvision.transforms as transforms
import torchvision
import cv2
from sklearn.model_selection import train_test_split
import numpy as np # linear algebra
import json
from matplotlib import pyplot as plt
from skimage import color
from skimage.feature import hog
from sklearn import svm
from sklearn.metrics import classification_report,accuracy_score
# Ignore warnings
import warnings
warnings.filterwarnings("ignore")
plt.ion() # interactive mode
from google.colab import drive
drive.mount('/content/drive')
from numpy import genfromtxt
labels = genfromtxt('/content/drive/MyDrive/insa 5/Datasets/celebA/labels.csv', delimiter=',')
labels=np.where(labels==-1, 0, labels)
print(labels)
labels=np.delete(labels,0,0)
labels=np.delete(labels,0,1)
print(labels)
labels_smil=[]
for i in range(5002):
labels_smil.append(labels[i,31])
print(labels_smil)
import os
#1)recuperation du contenu du dossier c:\dossier\
contenu=os.listdir('/content/drive/MyDrive/insa 5/Datasets/celebA/images/')
#ça te donnera une liste du chemin complet de chaques fichiers du dossier, par exemple pour le fichier 001.jpg, ça ressemblerait à ça : 'c:/dossier/001.jpg'
#2)recuperation des noms de fichiers (sans le chemin) qui sont des .jpg:
contenu=[x.split('/')[-1] for x in contenu if '.jpg' in x.split('/')[-1]]
#3)Maintenant on trie la liste
contenu.sort()
print(contenu)
images=[]
for i in range(len(contenu)):
#print('/content/drive/MyDrive/insa 5/Datasets/celebA/images/'+str(contenu[i]))
image=cv2.imread('/content/drive/MyDrive/insa 5/Datasets/celebA/images/'+str(contenu[i]))
#print(image)
images.append(image)
hog_images=[]
hog_features=[]
for i in range(len(contenu)):
fd, hog_img = hog(images[i], orientations=8, pixels_per_cell=(16, 16),
cells_per_block=(4, 4), visualize=True)
hog_images.append(hog_img)
hog_features.append(fd)
print(hog_features)
print(hog_images)
print(str(len(hog_features)))
print(hog_images[0])
import matplotlib.pyplot as plt
from skimage.feature import hog
from skimage import data, exposure
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4), sharex=True, sharey=True)
ax1.axis('off')
ax1.imshow(images[53], cmap=plt.cm.gray)
ax1.set_title('Input image')
# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_images[53], in_range=(0, 10))
ax2.axis('off')
ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray)
ax2.set_title('Histogram of Oriented Gradients')
plt.show()
clf = svm.SVC()
x_train, x_test = hog_features[:4000], hog_features[4000:]
y_train, y_test = labels_smil[:4000] , labels_smil[4000:]
print(x_train)
print(y_train)
clf.fit(x_train,y_train)
y_pred = clf.predict(x_test)
print("Accuracy: "+str(accuracy_score(y_test, y_pred)))
print('\n')
print(classification_report(y_test, y_pred))