[PYTHON] Générez automatiquement des images de koala et d'ours

L'apprentissage automatique, en particulier l'apprentissage profond, utilise souvent la classification d'images comme sujet. Cependant, le matériel utilisé semble corrigé, j'ai donc écrit un script pour générer automatiquement un grand nombre d'images de koala et d'ours afin de fournir du nouveau matériel.

Ci-dessous le 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

Exemple d'utilisation

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

image.jpg

Générez un grand nombre d'images de Koala et d'images d'ours

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

Chargez les images Koala et Bear générées

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)

Vérifiez l'image

%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

Plus de variation d'images

Faire pivoter / agrandir

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

Riche en couleur

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

Dessine automatiquement des objets mystérieux autres que les koalas

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

Résumé

Nous avons créé un outil qui génère automatiquement des images de koalas et d'ours qui peuvent être utilisées comme classification d'images par apprentissage automatique ou apprentissage en profondeur. Je pense que vous pouvez faire diverses variations et ajuster le niveau de difficulté. Cela peut également être utile pour étudier la segmentation sémantique.

Recommended Posts

Générez automatiquement des images de koala et d'ours
[Python] Combinez automatiquement et de manière transparente les images recadrées
Approximation de bas rang des images par HOSVD et HOOI
Publier et utiliser un programme qui collecte automatiquement les images du visage de personnes spécifiées
Suppression du bruit et transparence de l'arrière-plan des images binarisées
Conversion en ondelettes d'images avec PyWavelets et OpenCV
Afficher des images intégrées de mp3 et flac avec mutagène
Déterminer et traiter automatiquement l'encodage du fichier texte
Créez un lot d'images et gonflez avec ImageDataGenerator
Recherchez et enregistrez l'image de Tomono Kafu depuis Twitter
Collecte et automatisation d'images érotiques à l'aide du deep learning
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques