[PYTHON] Generiere automatisch Bilder von Koala und Bär

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

Anwendungsbeispiel

im = koala_or_bear()
im.save('image.jpg', quality=95)
HTML('<img src="image.jpg ">')

image.jpg

Generieren Sie eine große Anzahl von Koalabildern und Bärenbildern

!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)

Laden Sie die generierten Koala- und Bärenbilder

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)

Überprüfen Sie das Bild

%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()

output_4_0.png

%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()

output_5_0.png

Mehr Variation der Bilder

Drehen / vergrößern

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()

output_6_0.png

Reich an Farbe

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()

output_7_0.png

Zeichnet automatisch andere mysteriöse Objekte als Koalabären

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()

output_8_0.png

Zusammenfassung

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

Generiere automatisch Bilder von Koala und Bär
[Python] Kombiniert zugeschnittene Bilder automatisch und nahtlos
Niedrigrangige Approximation von Bildern durch HOSVD und HOOI
Veröffentlichen und Verwenden eines Programms, das automatisch Gesichtsbilder bestimmter Personen sammelt
Rauschunterdrückung und Hintergrundtransparenz von binärisierten Bildern
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Zeigen Sie eingebettete Bilder von MP3 und Flac mit Mutagen an
Ermitteln und verarbeiten Sie die Codierung der Textdatei automatisch
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Suchen und speichern Sie das Bild von Tomono Kafu von Twitter
Sammlung und Automatisierung erotischer Bilder durch Deep Learning
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme