Beim maschinellen Lernen, insbesondere beim tiefen Lernen, wird häufig die Bildklassifizierung als Thema verwendet. Das dort verwendete Material scheint jedoch fixiert zu sein, daher habe ich ein Skript geschrieben, um automatisch eine große Anzahl von Bildern von Koala und Bär zu generieren, um neues Material bereitzustellen.
Unten ist der Code.
from PIL import Image, ImageDraw
from IPython.display import HTML
import random
def koala_or_bear(bear=False, rotate=False, resize=False, gray=True, black=True, others=False):
r = random.randint(100, 255)
g = random.randint(100, 255)
b = random.randint(100, 255)
if gray:
r = g = b
im = Image.new('RGB', (500, 500), (r, g, b))
draw = ImageDraw.Draw(im)
if others:
for i in range(100):
r = random.randint(100, 255)
g = random.randint(100, 255)
b = random.randint(100, 255)
if gray:
r = g = b
x1 = random.randint(0, 500)
y1 = random.randint(0, 500)
x2 = random.randint(0, 500)
y2 = random.randint(0, 500)
draw.ellipse((x1, x2, y1, y2), fill=(r, g, b))
r = random.randint(0, 200)
g = random.randint(0, 200)
b = random.randint(0, 200)
if black:
r = g = b = 1
dx1 = random.randint(-10, 0)
dx2 = random.randint(0, 10)
dy1 = random.randint(-10, 0)
dy2 = random.randint(0, 10)
if bear:
draw.ellipse((200 + dx1, 200 + dy1, 300 + dx2, 300 + dy2), fill=(r, g, b))
else:
draw.ellipse((210 + dx1, 210 + dy1, 290 + dx2, 290 + dy2), fill=(r, g, b))
dx1 = random.randint(-5, 10)
dx2 = random.randint(-10, 5)
dy1 = random.randint(-5, 10)
dy2 = random.randint(-10, 5)
cx1 = random.randint(160, 180)
cx2 = random.randint(230, 250)
if bear:
#draw.ellipse((160 + dx1, 160 + dy1, 230 + dx2, 230 + dy2), fill=(r, g, b))
draw.ellipse((160 + dx1, cx1 + dy1, 230 + dx2, cx2 + dy2), fill=(r, g, b))
else:
#draw.ellipse((160 + dx1, 190 + dy1, 230 + dx2, 260 + dy2), fill=(r, g, b))
draw.ellipse((160 + dx1, 210 + dy1, 230 + dx2, 280 + dy2), fill=(r, g, b))
dx1 = random.randint(-5, 10)
dx2 = random.randint(-10, 5)
dy1 = random.randint(-5, 10)
dy2 = random.randint(-10, 5)
if bear:
#draw.ellipse((270 + dx1, 160 + dy1, 340 + dx2, 230 + dy2), fill=(r, g, b))
draw.ellipse((270 + dx1, cx1 + dy1, 340 + dx2, cx2 + dy2), fill=(r, g, b))
else:
#draw.ellipse((270 + dx1, 190 + dy1, 340 + dx2, 260 + dy2), fill=(r, g, b))
draw.ellipse((270 + dx1, 210 + dy1, 340 + dx2, 280 + dy2), fill=(r, g, b))
if rotate:
angle = random.randint(0, 360)
im = im.rotate(angle)
if resize:
h = random.randint(100, 200)
center = random.randint(220, 280)
size = 384
if type(resize) == int:
size = resize
im = im.resize(size=(size, size), resample=Image.LANCZOS, box=(max(0, center - h), max(0, center - h),
min(500, center + h), min(500, center + h)))
return im
im = koala_or_bear()
im.save('image.jpg', quality=95)
HTML('<img src="image.jpg ">')
!mkdir koala_or_bear
num_data = 16
for i in range(num_data):
im = koala_or_bear(bear=False)
im.save("koala_or_bear/koala_{}.jpg ".format(i), quality=95)
for i in range(num_data):
im = koala_or_bear(bear=True)
im.save("koala_or_bear/bear_{}.jpg ".format(i), quality=95)
from PIL import Image
koalas = []
for i in range(num_data):
koala = Image.open("koala_or_bear/koala_{}.jpg ".format(i))
koalas.append(koala)
bears = []
for i in range(num_data):
bear = Image.open("koala_or_bear/bear_{}.jpg ".format(i))
bears.append(bear)
%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))
for i in range(num_data):
ax = fig.add_subplot(4, 4, i+1)
ax.axis('off')
ax.set_title('koala_{}'.format(i))
ax.imshow(koalas[i],cmap=plt.cm.gray, interpolation='none')
plt.show()
%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))
for i in range(num_data):
ax = fig.add_subplot(4, 4, i+1)
ax.axis('off')
ax.set_title('bear_{}'.format(i))
ax.imshow(bears[i],cmap=plt.cm.gray, interpolation='none')
plt.show()
for i in range(num_data):
im = koala_or_bear(bear=False, rotate=True, resize=True)
im.save("koala_or_bear/koala_{}.jpg ".format(i), quality=95)
bears = []
for i in range(num_data):
bear = Image.open("koala_or_bear/koala_{}.jpg ".format(i))
bears.append(bear)
fig = plt.figure(figsize=(10,10))
for i in range(num_data):
ax = fig.add_subplot(4, 4, i+1)
ax.axis('off')
ax.set_title('koala_{}'.format(i))
ax.imshow(bears[i],cmap=plt.cm.gray, interpolation='none')
plt.show()
for i in range(num_data):
im = koala_or_bear(bear=False, rotate=True, resize=True, gray=False, black=False)
im.save("koala_or_bear/koala_{}.jpg ".format(i), quality=95)
bears = []
for i in range(num_data):
bear = Image.open("koala_or_bear/koala_{}.jpg ".format(i))
bears.append(bear)
fig = plt.figure(figsize=(10,10))
for i in range(num_data):
ax = fig.add_subplot(4, 4, i+1)
ax.axis('off')
ax.set_title('koala_{}'.format(i))
ax.imshow(bears[i],cmap=plt.cm.gray, interpolation='none')
plt.show()
for i in range(num_data):
im = koala_or_bear(bear=True, rotate=True, resize=True, gray=False, black=False, others=True)
im.save("koala_or_bear/bear_{}.jpg ".format(i), quality=95)
bears = []
for i in range(num_data):
bear = Image.open("koala_or_bear/bear_{}.jpg ".format(i))
bears.append(bear)
fig = plt.figure(figsize=(10,10))
for i in range(num_data):
ax = fig.add_subplot(4, 4, i+1)
ax.axis('off')
ax.set_title('bear_{}'.format(i))
ax.imshow(bears[i],cmap=plt.cm.gray, interpolation='none')
plt.show()
Wir haben ein Tool entwickelt, das automatisch Koalabilder und Bärenbilder generiert, die als Bildklassifizierung durch maschinelles Lernen oder tiefes Lernen verwendet werden können. Ich denke, Sie können verschiedene Variationen vornehmen und den Schwierigkeitsgrad anpassen. Es kann auch gut für das Studium der semantischen Segmentierung sein.
Recommended Posts