Spaces:
Runtime error
Runtime error
from torch import randperm, utils | |
from torch._utils import _accumulate | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from matplotlib import offsetbox | |
from PIL import Image | |
class Subset(utils.data.Dataset): | |
""" | |
Subset of a dataset at specified indices. | |
Arguments: | |
dataset (Dataset): The whole Dataset | |
indices (sequence): Indices in the whole set selected for subset | |
""" | |
def __init__(self, dataset, indices): | |
self.dataset = dataset | |
self.indices = indices | |
def __getitem__(self, idx): | |
return self.dataset[self.indices[idx]] | |
def __len__(self): | |
return len(self.indices) | |
def random_split(dataset, lengths): | |
""" | |
Randomly split a dataset into non-overlapping new datasets of given lengths. | |
Arguments: | |
dataset (Dataset): Dataset to be split | |
lengths (sequence): lengths of splits to be produced | |
""" | |
if sum(lengths) != len(dataset): | |
raise ValueError("Sum of input lengths does not equal the length of the input dataset!") | |
indices = randperm(sum(lengths)) | |
return [Subset(dataset, indices[offset - length:offset]) for offset, length in zip(_accumulate(lengths), lengths)] | |
# Quizas deberia eliminar 3d o limpiar | |
def plot_embedding(X, merged, title = None, classes=11., showimage=True, distPl=0.006, onlyRoman=False): | |
x_min, x_max = np.min(X, 0), np.max(X, 0) | |
X = (X - x_min) / (x_max - x_min) | |
plt.figure() | |
ax = plt.subplot(111) | |
ax.set_facecolor('xkcd:white') | |
""" | |
for i in range(X.shape[0]): | |
plt.text(X[i, 0], X[i, 1], str(merged.iloc[i][1]), | |
color=plt.cm.Set1(int(merged.iloc[i][1]) / float(classes)), | |
fontdict={'weight': 'bold', 'size': 9}) | |
""" | |
""" | |
for i in range(X.shape[0]): | |
if int(merged.iloc[i][1]) == 22: | |
plt.plot([X[i, 0]], [X[i, 1]], 'X', c="black", markersize=10) | |
plt.plot([X[i, 0]], [X[i, 1]], 'X', c='black', markersize=8) | |
else: | |
plt.plot([X[i, 0]], [X[i, 1]], 'o', c="black", markersize=6) | |
plt.plot([X[i, 0]], [X[i, 1]], 'o',c=plt.cm.Set3(int(merged.iloc[i][1])), markersize=4) | |
""" | |
if showimage and hasattr(offsetbox, 'AnnotationBbox'): | |
shown_images = np.array([[1., 1.]]) | |
for i in range(merged.shape[0]): | |
dist = np.sum((X[i] - shown_images) ** 2, 1) | |
if np.min(dist) < distPl: #6e-4: | |
# don't show points that are too close | |
continue | |
shown_images = np.r_[shown_images, [X[i]]] | |
image = Image.open(merged.iloc[i][0]) | |
inverted_image = image #PIL.ImageOps.invert(image) | |
inverted_image.thumbnail((40, 40), Image.ANTIALIAS) | |
props = dict(facecolor=plt.cm.Set3(int(merged.iloc[i][1])), alpha=1, lw=1) | |
imagebox = offsetbox.AnnotationBbox( | |
offsetbox.OffsetImage(inverted_image, cmap=plt.cm.gray), | |
X[i]+0.030, bboxprops=props) | |
ax.add_artist(imagebox) | |
plt.xticks([]), plt.yticks([]) | |
#cbar = plt.colorbar() | |
if title is not None: | |
plt.title(title) | |
import numpy as np | |
import cv2 | |
from skimage import measure | |
def landmarks(img_grey, N = 50): | |
thresh = 200 | |
ret,img = cv2.threshold(img_grey, thresh, 255, cv2.THRESH_BINARY) | |
if img.ndim == 2: | |
img_s = np.ones((img.shape[0] + 100, img.shape[0] + 100)) * 255 | |
img_s[50:-50, 50:-50] = img | |
img = img_s | |
contours = measure.find_contours(img, 0.5) | |
#fig = plt.figure(figsize=(7, 7)) | |
#ax = fig.add_subplot(111) | |
#ax.imshow(img, interpolation='nearest', cmap=plt.cm.gray) | |
# for n, contour in enumerate(contours): | |
#print(contours[0].shape) | |
contour = contours[0] | |
#ax.plot(contour[:, 1], contour[:, 0], linewidth=5) | |
# resample_contour = contour[np.random.choice(contour.shape[0], 150, replace=False), :] | |
resample_contour = interpcurve(N, contour[:, 0], contour[:, 1]) | |
# print(resample_contour[:4, 0], resample_contour[:4, 1], resample_contour[:4].ravel()) | |
#df_semilandmarks.loc[index] = [id_name, classe_name] + list(resample_contour.ravel()) | |
#ax.plot(resample_contour[:, 1], resample_contour[:, 0], 'om', linewidth=5) | |
#plt.savefig('output/landmarked_'+id_name) | |
#plt.show() | |
return resample_contour | |
def interpcurve(N, pX, pY): | |
#equally spaced in arclength | |
N = np.transpose(np.linspace(0, 1, N)) | |
#how many points will be uniformly interpolated? | |
nt = N.size | |
#number of points on the curve | |
n = pX.size | |
pxy = np.array((pX, pY)).T | |
p1 = pxy[0,:] | |
pend = pxy[-1,:] | |
last_segment = np.linalg.norm(np.subtract(p1, pend)) | |
epsilon= 10 * np.finfo(float).eps | |
#IF the two end points are not close enough lets close the curve | |
if last_segment > epsilon * np.linalg.norm(np.amax(abs(pxy), axis=0)): | |
pxy = np.vstack((pxy, p1)) | |
nt = nt + 1 | |
pt = np.zeros((nt, 2)) | |
#Compute the chordal arclength of each segment. | |
chordlen = (np.sum(np.diff(pxy, axis=0) ** 2, axis=1)) ** (1 / 2) | |
#Normalize the arclengths to a unit total | |
chordlen = chordlen / np.sum(chordlen) | |
#cumulative arclength | |
cumarc = np.append(0, np.cumsum(chordlen)) | |
tbins= np.digitize(N, cumarc) # bin index in which each N is in | |
#catch any problems at the ends | |
tbins[np.where(tbins<=0 | (N<=0))]=1 | |
tbins[np.where(tbins >= n | (N >= 1))] = n - 1 | |
s = np.divide((N - cumarc[tbins]), chordlen[tbins-1]) | |
pt = pxy[tbins,:] + np.multiply((pxy[tbins,:] - pxy[tbins-1,:]), (np.vstack([s]*2)).T) | |
return pt | |
def segmentation(img, vertical): | |
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
#plt.imshow(img, cmap=plt.cm.gray) | |
if vertical: | |
background_0 = np.ones((img.shape)) + 254 | |
background_0[img.shape[0]//2:, :] = img[img.shape[0]//2:,:] | |
#plt.imshow(background_0, cmap=plt.cm.gray) | |
#fig = plt.figure() | |
background_1 = np.ones((img.shape)) + 254 | |
background_1[:img.shape[0]//2, :] = img[:img.shape[0]//2,:] | |
#plt.imshow(background_1, cmap=plt.cm.gray) | |
#fig = plt.figure() | |
else: | |
background_1 = np.ones((img.shape)) + 254 | |
background_1[:, :img.shape[0]//2] = img[:,:img.shape[0]//2] | |
#plt.imshow(background_0, cmap=plt.cm.gray) | |
#fig = plt.figure() | |
background_0 = np.ones((img.shape)) + 254 | |
background_0[:, img.shape[0]//2:] = img[:,img.shape[0]//2:] | |
#plt.imshow(background_1, cmap=plt.cm.gray) | |
#fig = plt.figure() | |
return background_0, background_1 | |
def plotTwoImages(img_1, img_2, title): | |
plt.figure(figsize=(12,5)) | |
plt.subplot(1, 2, 1) | |
plt.imshow(img_1) | |
plt.title(title[0]) | |
plt.xticks([]) | |
plt.yticks([]) | |
plt.subplot(1, 2, 2) | |
plt.imshow(img_2) | |
plt.xticks([]) | |
plt.yticks([]) | |
plt.title(title[1]) | |
def plotLandmarks(landmarks_img_1_part_2, landmarks_img_2_part_2, title, comparateShow=True): | |
plt.figure(figsize=(12,5)) | |
size = (1, 2) | |
if comparateShow: | |
size = (1, 3) | |
plt.subplot( size[0], size[1], 1) | |
plt.plot(landmarks_img_1_part_2[:,0], landmarks_img_1_part_2[:,1], '-o') | |
plt.fill(landmarks_img_1_part_2[:, 0] , landmarks_img_1_part_2[:, 1], 'k') | |
plt.title(title[0]) | |
plt.xticks([]) | |
plt.yticks([]) | |
plt.subplot(size[0], size[1], 2) | |
plt.plot(landmarks_img_2_part_2[:,0], landmarks_img_2_part_2[:,1], '-o') | |
plt.fill(landmarks_img_2_part_2[:, 0] , landmarks_img_2_part_2[:, 1], 'k') | |
plt.title(title[1]) | |
plt.xticks([]) | |
plt.yticks([]) | |
if comparateShow: | |
plt.subplot(size[0], size[1], 3) | |
plt.plot(landmarks_img_1_part_2[:,0], landmarks_img_1_part_2[:,1], '-o') | |
plt.plot(landmarks_img_2_part_2[:,0], landmarks_img_2_part_2[:,1], '-o') | |
plt.title(title[2]) | |
plt.xticks([]) | |
plt.yticks([]) | |
def plotLandmarks2(landmarks_img_1_part_2, landmarks_img_2_part_2, title, comparateShow=True): | |
plt.figure(figsize=(12,5)) | |
fig, (ax1) = plt.subplots(1, 1, figsize=(12,5)) | |
ax1.axis("off") | |
landmarks_img_1_part_2 = landmarks_img_1_part_2 * -1 | |
landmarks_img_2_part_2 = landmarks_img_2_part_2 * -1 | |
ax1.plot(landmarks_img_1_part_2[:,1], landmarks_img_1_part_2[:,0], '-o') | |
ax1.plot(landmarks_img_2_part_2[:,1], landmarks_img_2_part_2[:,0], '-o') | |
plt.title(title[2]) | |
ax1.set_aspect(2) | |
plt.xticks([]) | |
plt.yticks([]) | |
def plotLandmarksItem(fig, ax1, landmarks_img_1_part_2, landmarks_img_2_part_2, title, comparateShow=True): | |
ax1.axis("off") | |
landmarks_img_1_part_2 = landmarks_img_1_part_2 * -1 | |
landmarks_img_2_part_2 = landmarks_img_2_part_2 * -1 | |
ax1.plot(landmarks_img_1_part_2[:,1], landmarks_img_1_part_2[:,0], '-o') | |
ax1.plot(landmarks_img_2_part_2[:,1], landmarks_img_2_part_2[:,0], '-o') | |
ax1.set_title(title) | |
ax1.set_aspect(1) | |
def plotLandmarksALL(img_0, img_1, landmarks_img_1_part_1, landmarks_img_2_part_1, landmarks_img_1_part_2, landmarks_img_2_part_2, title): | |
plt.figure(figsize=(12,5)) | |
fig, (ax0, ax1, ax2, ax3) = plt.subplots(1, 4, figsize=(12,5)) | |
ax0.axis("off") | |
ax0.set_title('INPUT') | |
ax3.axis("off") | |
ax3.set_title('OUTPUT') | |
plt.xticks([]) | |
plt.yticks([]) | |
ax0.imshow(img_0) | |
plotLandmarksItem(fig, ax1, landmarks_img_1_part_1, landmarks_img_2_part_1, title[0]) | |
plotLandmarksItem(fig, ax2, landmarks_img_1_part_2, landmarks_img_2_part_2, title[1]) | |
ax3.imshow(img_1) | |
plt.xticks([]) | |
plt.yticks([]) | |
if __name__ == "__main__": | |
pass |