[PYTHON] Générer et publier des données d'image factice avec Django

introduction

J'étudie juste Django d'Udemy et je joue avec, donc j'améliore l'application TODO du cours Django d'Udemy et le SNS interne à ma manière, donc je pense que le niveau est le même. [Commentaire détaillé! ] Maîtrisez les bases de Django et créez 3 applications!

Par conséquent, je le fais avec l'idée de faire quelque chose qui bouge complètement hors de vue, comme l'aspect pratique. Je pense qu'il y a beaucoup de points difficiles à comprendre dans le premier article, mais j'apprécierais que vous puissiez veiller avec des yeux chaleureux.

Chose que tu veux faire

Lors de l'enregistrement des données d'image dans Django, il était très gênant de taper les données une par une, de sélectionner l'image, etc., donc je me demandais s'il y avait un bon moyen.

$ python manage.py runscript <nom de fichier>

J'ai appris que les fichiers python peuvent être exécutés avec et j'ai décidé de l'utiliser. Je n'entrerai pas dans les détails sur runscript, mais cela exécutera la méthode run de n'importe quel fichier du répertoire scripts dans le répertoire où manage.py se trouve. Puisque nous avons créé un fichier appelé add_dummies.py ici, add_dummies.py sera inclus dans .

Génération d'images

Comme il était difficile de sélectionner une image, j'ai décidé de générer une image en me référant à l'article suivant. Créez une image factice avec Python + PIL.

Le code que j'ai réellement utilisé pour le générer est ci-dessous. Le seul endroit que j'ai arrangé est que la couleur et la taille de l'image sont modifiées avec des nombres aléatoires afin que l'image puisse être facilement identifiée.

add_dummyies.py


from PIL import Image,ImageDraw, ImageFont
import random
colors = [(255,0,0), (0,255,0), (0,0,255),(0,0,0),(255,255,255)]#Liste des couleurs rouge, vert, bleu, noir et blanc

def make_image(N):
    """
Créer un fichier image
La valeur de retour est le nom du fichier
    """
    screen = (200+random.randint(0,100), 200+random.randint(0,100))
    pen_color=random.choice(colors)
    bg_color=random.choice(colors)
    img = Image.new('RGB', screen, bg_color)
    x, y = img.size
    u = x - 1
    v = y - 1
    draw = ImageDraw.Draw(img)
    draw.line((0, 0, u, 0), pen_color)
    draw.line((0, 0, u, v), pen_color)
    draw.line((0, 0, 0, v), pen_color)
    draw.line((u, 0, 0, v), pen_color)
    draw.line((u, 0, u, v), pen_color)
    draw.line((0, v, u, v), pen_color)
    filename="/sample_{}.jpg ".format(N)
    img.save("media"+filename)
    return filename

Cela générera n fichiers image et enregistrera les images à l'emplacement ./media/<image file> comme vu depuis le répertoire où se trouve manage.py.

De plus, le modèle de cette application est défini comme suit.

models.py


from django.db import models

class RecommendedBook(models.Model):
    author = models.CharField(max_length=100)
    bookTitle = models.CharField(max_length=50)
    content = models.TextField()
    bookImage=models.ImageField(upload_to="")
    genre = models.CharField(max_length=200, null=True, blank=True, default="")
    good = models.IntegerField(null=True, blank=True,default=0)
    goodtext = models.CharField(max_length=500,null=True,blank=True, default="")
    notGood = models.IntegerField(null=True, blank=True,default=0)
    notGoodtext = models.CharField(max_length=500,null=True,blank=True, default="")

J'ai utilisé la fonction Faker parce que je voulais aussi enregistrer d'autres éléments, mais je vais l'omettre car ce n'est pas le sujet de cette fois. Ajoutez la méthode d'exécution suivante à add_dummies.py pour l'exécuter. Maintenant que nous devons également ajouter d'autres éléments:

add_dummies.py



from book.models import RecommendedBook
import random,string
from faker import Faker
fakegen=Faker("ja_JP")

genres=["Livre technique","Anglais","Math","roman","Impressionné","agréable"]#Définissez le genre sur une liste appropriée et récupérez-le au hasard plus tard

fakegen = Faker()

def run():
    N=5#Créer environ 5 données
    for entry in range(N):
        imgfile=make_image(entry)
        bookGenre=random.choice(genres)+" "+random.choice(genres)#Définissez deux genres
        dummy=RecommendedBook(author=fakegen.name(), bookTitle=fakegen.word(),
                              content=fakegen.text(), genre=bookGenre,
                              bookImage=imgfile
                              )
        dummy.save()

Lorsque vous l'exécutez et regardez dans l'écran de gestion

スクリーンショット 2020-05-02 17.38.52.png

Les nouvelles données ont été enregistrées avec succès!

la fin

C'est tout! ~~ Je l'ai cherché moi-même, mais je n'ai pas trouvé de bonne méthode, donc cela s'est avéré être une méthode tellement boueuse. ~~ Je voudrais vous présenter la compatibilité ascendante de cet article ci-dessous. Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image

De plus, comme il est relativement lent d'enregistrer les données car elles sont tournées dans une boucle for, peu importe si le nombre de boucles est petit, mais s'il augmente dans une certaine mesure, cela prendra un temps considérable. J'ai pensé que c'était un problème. Je vous serais reconnaissant si vous pouviez m'apprendre: "Il existe un moyen de rendre les choses plus faciles!" "Cela le rendra plus rapide!" Pour le moment, mettez la page github qui contient le code de cet article.

Merci d'avoir lu jusqu'au bout!

Recommended Posts

Générer et publier des données d'image factice avec Django
POSTER l'image avec json et la recevoir avec flask
Utilisez Django pour enregistrer les données de tweet
HTTPS avec Django et Let's Encrypt
Générer automatiquement un diagramme de relation de modèle avec Django
Générer de fausses données de table avec GAN
Construction de pipeline de données avec Python et Luigi
Créez une image factice avec Python + PIL.
Générer des données de test japonais avec Python Faker
Mettez vos propres données d'image dans Deep Learning et jouez avec
POSTER diversement avec Python et recevoir avec Flask
CRUD POST avec Nuxt & Django REST Framework
Créons un modèle de reconnaissance d'image avec vos propres données et jouons!
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Divisez les données en unités de type projet avec Django (2)
Envoyer et recevoir des données d'image au format JSON en Python sur le réseau
Essayez de générer une image avec aliénation
Création de carte Ramen avec Scrapy et Django
Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image
Créer un environnement d'analyse de données qui relie l'authentification GitHub et Django avec JupyterHub
Comment générer automatiquement un document API avec le framework Django REST et POST à partir de l'écran de document
Texte de l'image et publication sur slack (python slackbot)
Divisez les données en unités de type projet avec Django (3)
Django: enregistrez l'agent utilisateur et gérez-le avec l'administrateur
Implémentez "Data Visualization Design # 3" avec pandas et matplotlib
Visualisez de manière interactive les données avec Treasure Data, Pandas et Jupyter.
Divisez les données en unités de type projet avec Django
Nettoyage des données 3 Utilisation d'OpenCV et prétraitement des données d'image
Afficher l'image après l'augmentation des données avec Pytorch
Développer une API Web qui renvoie les données stockées dans DB avec Django et SQLite
Internationalisation avec Django
CRUD avec Django
Je voulais juste extraire les données de la date et de l'heure souhaitées avec Django
Remarques sur le traitement d'images HDR et RAW avec Python
Apprentissage des données relationnelles avec numpy et NetworkX (clustering spectral)
Créez des données factices à l'aide des packages NumPy et Faker de Python
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
Générer une image verticale d'un roman à partir de données textuelles
Capture d'image / comparaison de la vitesse OpenCV avec et sans GPU
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
Histoire de l'analyse d'image du fichier PDF et de l'extraction de données
[Tutoriel PyTorch ⑦] Visualisation des modèles, des données et de la formation avec Tensorboard
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Challenge classification des images par TensorFlow2 + Keras 3 ~ Visualiser les données MNIST ~
Créez dynamiquement des tables dans un schéma avec Django, générez dynamiquement des modèles
Étudiez l'échange de données Java et Python avec Apache Arrow
Générez des nombres de Fibonacci avec des fermetures, des itérateurs et des générateurs Python
Trier les données de publication dans l'ordre inverse avec ListView de Django
POSTEZ l'image sélectionnée sur le site Web avec multipart / form-data et enregistrez-la sur Amazon S3! !!
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
J'ai automatiquement collecté mes données de publication Qiita avec Raspberry Pi et je les ai régulièrement notifiées avec Slack