[PYTHON] Télécharger des images à partir d'un fichier texte contenant l'URL

introduction

――En fait, il télécharge les images les unes après les autres comme $ wget -i urls.txt.

Installation de la bibliothèque

--Télécharger les images à partir des requêtes d'URL --Vérifiez et convertissez les données d'image oreiller

$ pip install pillow requests

Fichier de configuration config.py

$ cat config.py


CLASSES = [
    'Abe Otsu',
    'Satomi Ishihara',
    'Yuno Ohara',
    'Koshiba Fuka',
    'Haruna Kawaguchi',
    'Nana Mori',
    'Minami Hamabe',
    'Kaya Kiyohara',
    'Haruka Fukuhara',
    'Kuroshima Yuina'
]


BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATA_PATH = os.path.join(BASE_PATH, 'data')
LINK_PATH = os.path.join(DATA_PATH, 'link')
DOWNLOAD_PATH = os.path.join(DATA_PATH, 'download')

Fichier texte avec URL

$tête Kuroshima Yuina.txt
http://cm-watch.net/wp-content/uploads/2018/03/b22dc3193fd35ebb1bf7aa4e74c8cffb.jpg
https://www.crank-in.net/img/db/1165407_650.jpg
https://media.image.infoseek.co.jp/isnews/photos/hwchannel/hwchannel_20191107_7062003_0-small.jpg
https://i.pinimg.com/originals/3e/3c/61/3e3c61df2f426a8e4623b58d84d94b40.jpg
http://yukutaku.net/blog/wp-content/uploads/wordpress-popular-posts/253-100x100.jpg
http://gratitude8888.biz/wp-content/uploads/2017/03/cb1175590da467bef3600df48eabf770.jpg
https://www.cinemacafe.net/imgs/p/ATDRThl-6oWF9fpps9341csCOg8ODQwLCgkI/416673.jpg
https://s3-ap-northeast-1.amazonaws.com/moviche-uploads/wp-content/uploads/2019/10/IMG_2547.jpg
https://scontent-frx5-1.cdninstagram.com/vp/05d6926fed565f82247879638771ee46/5E259FCC/t51.2885-15/e35/67735702_2288175727962135_1310736136046930744_n.jpg?_nc_ht=scontent-frx5-1.cdninstagram.com&_nc_cat=103&se=7&ig_cache_key=MjEyMzM1MTc4NDkyMzQ4NzgxMg%3D%3D.2
http://moco-garden.com/wp-content/uploads/2016/05/kurosimayuina.jpg

Téléchargez, vérifiez et enregistrez des images

Lire un fichier texte contenant l'URL

def download(query):
    """Télécharger des données, vérifier les données, enregistrer des images."""

    linkfile = os.path.join(LINK_PATH, '{}.txt'.format(query))
    if not os.path.isfile(linkfile):
        print('no linkfile: {}'.format(linkfile))
        return

    with open(linkfile, 'r') as fin:
        link_list = fin.read().split('\n')[:-1]

Téléchargez l'image et vérifiez Content-Type

    for num, link in enumerate(link_list, start=1):

        try:
            result = requests.get(link)
            content = result.content
            content_type = result.headers['Content-Type']
        except Exception as err:
            print('err: {}, link: {}'.format(err, link))
            continue

        if not content_type.startswith('image/'):
            print('err: {}, link: {}'.format(content_type, link))
            continue

Paramètres de chargement d'image avec oreiller

――Si vous définissez les paramètres suivants, même les grandes images seront lues.

ImageFile.LOAD_TRUNCATED_IMAGES = True

Vérifier les données d'image

        try:
            image = Image.open(io.BytesIO(content))
        except Exception as err:
            print('err: {}, link: {}'.format(err, link))
            continue

Convertir les données d'image en .jpeg

HenLorsque vous pensez au post-processus, je pense que c'est difficile à traiter en considérant le cas de .png et .bmp un par un.

        if image.mode != 'RGB':
            image = image.convert('RGB')
        data = io.BytesIO()
        image.save(data, 'jpeg', optimize=True, quality=95)
        content = data.getvalue()

Enregistrer l'image

--Selon le DOWNLOAD_PATH décrit dans le fichier de configuration, enregistrez-le avec un nom de fichier tel que 0001.jpeg`` 0002.jpeg

        filename = os.path.join(DOWNLOAD_PATH, query, '{:04d}.jpeg'.format(num))
        with open(filename, 'wb') as fout:
            fout.write(content)
        print('query: {}, filename: {}, link: {}'.format(query, os.path.basename(filename), link))

Exemples d'erreurs lors du téléchargement et du traitement des fichiers

$ awk '{print $2}' err.txt | sort | uniq -c | sort -nr
  47 text/html;
  31 text/plain,
  30 ('Connection
  27 text/html,
  18 'content-type',
  10 cannot
   5 application/octet-stream,
   2 application/xml,
   1 images
   1 binary/octet-stream,
   1 UserWarning:
   1 HTTPSConnectionPool(host='jpnews24h.com',
   1 HTTPSConnectionPool(host='host-your-site.net',
   1 HTTPSConnectionPool(host='gamers.co.jp',
   1 HTTPConnectionPool(host='youtube.dojin.com',
   1 HTTPConnectionPool(host='nosh.media',
   1 HTTPConnectionPool(host='arukunews.jp',
   1 Exceeded

en conclusion

-- $ wget -i urls.txt aborde la partie irritante qui est un peu hors de portée. ――La prochaine fois, nous prévoyons d'effectuer une reconnaissance faciale à partir d'images.

Recommended Posts

Télécharger des images à partir d'un fichier texte contenant l'URL
Utilisez boto pour télécharger le fichier depuis S3.
Sortie de la ligne contenant la chaîne de caractères spécifiée à partir du fichier texte
Texte extrait de l'image
Supprimer le cadre de l'image
Téléchargez le fichier déployé avec appcfg.py
Coupons le visage de l'image
Jugez l'extension et téléchargez l'image
[Python scraping] Affiche l'URL et le titre du site contenant un mot-clé spécifique dans un fichier texte
Téléchargez les n principales recherches d'images Google
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
Télécharger des images à partir de la liste d'URL en Python
Télécharger le fichier XBRL depuis EDINET (mémo personnel)
Ajouter des lignes et du texte sur l'image
Téléchargez le fichier avec PHP [En construction]
Récupérez uniquement le texte du formulaire Django.
[Python] Téléchargez l'image d'origine à partir de la recherche d'images Google
Téléchargez le fichier csv créé par Google Colaboratory
[Petite histoire] Téléchargez l'image de Ghibli immédiatement
Télécharger les données directement depuis l'URL de Drive (Google Colaboratory)
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
Je veux voir le nom de fichier de DataLoader
Téléchargez des fichiers tout en affichant la progression dans Python 3.x
J'ai essayé de détecter l'iris à partir de l'image de la caméra
[Python] Extrayez l'ID vidéo de l'URL de la vidéo YouTube [Remarque]
Déterminer et traiter automatiquement l'encodage du fichier texte
[Python] Spécifiez la plage de l'image en faisant glisser la souris
Générer une image verticale d'un roman à partir de données textuelles
Identifiez le nom de l'image de la fleur avec des keras (flux tenseur)
[Version 2020] Grattage et traitement du texte d'Aozora Bunko
Lire le code QR à partir du fichier image avec Python (Mac)
[Blender] Utilisez le module de dessin de texte à partir du script
[Python] Changer l'entrée standard du clavier en fichier texte
Python Open CV a essayé d'afficher l'image sous forme de texte.