こんな方におすすめ
- 鬼滅の刃のぬりえを写真から作りたい
- ウェブページの画像を一括でダウンロードしたい
- Pythonのseleniumを使った自動化にチャレンジしたい
今回は、Pythonを使って、人気アニメ鬼滅の刃のキャラクターのぬりえを自動で作成する方法を紹介します。ぬりえの自動化をやろうと思ったのは、うちの子供がぬりえ好きで、毎回ぬりえの作成をせがまれるので自動化してみました。
自動化と言っても、Pythonが自動でキャラクターのぬりえを作ることは当然できないので、以下のような手順でぬりえを作成します。
- キャラクターの掲載されているホームページから、写真をダウンロード
- PILOTさんのウェブアプリ、”写真でぬりえを作ろう”を自動でコントロール
当然、著作権等がございますので、ダウンロードした画像や、作成したぬりえは個人で楽しむだけに使用する必要があります。販売したら違法行為になりますので注意してください!
プログラムの流れ
早速プログラムの流れについてです。
ぬりえの画像をホームページからダウンロードする
まずは、鬼滅の刃のキャラクターをダウンロードします。一括ダウンロードには、pythonのrequestsモジュールを使用します。
鬼滅の刃のキャラクターは、以下の公式ホームページに掲載されている写真を使わせていただきました。
ホームページからキャラクター画像を一括でダウンロードして、保存します。
画像をぬりえに変換する
画像をぬりえに変換するために、以下のPILOTさんのWEBアプリ写真でぬりえを作ろうを使わせていただきます。
このWEBアプリは、手順にしたがって写真をアップロードしクリックしていくだけで、写真からぬりえを作成することができます。
WEBアプリを動かす部分をPythonのseleniumを使用して自動化します。ブラウザはsafariを用いてます。
自動制御を可能にするために、safariのツールバーの開発から”リモートオートメーションを許可”を有効にしてください。
プログラムの内容
まずは、必要なモジュールをインストールします。
1 2 3 4 5 |
import requests import urllib import os import re import time |
画像の保存先のURLのリストを作成します。ここでは、img_chara_01.jpgからimg_chara_10.jpgの10個の画像を保存しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
chara_urls=[] #ここのホームページはimg_chara_xx.jpgでイメージ画像が管理されているので、イメージ画像のURLでリストを作成する for i in range(1,11): i=str(i).zfill(2) print(i) chara_urls.append("https://kimetsu.com/anime/risshihen/assets/img/character/img_chara_"+i+".jpg") count=1 #URLのリストの画像を1枚ずつダウンロードし、imgフォルダの下に保存します。 for url in chara_urls: #ダウンロード先のパスの指定 png_name = str(count)+".jpg" #imgというディレクトリの下に保存する。imgは予め作っておく png_name = os.path.join("./img",png_name) #ファイルが存在しない場合のみダウンロードする if os.path.exists(png_name): print("File",png_name,"already exists") count+=1 continue urllib.request.urlretrieve(url,png_name) print("File",png_name,"downloaded") #負荷を与えないため待機 time.sleep(1) count+=1 |
ダウンロードした画像を"写真でぬりえを作ろう"のウェブアプリに一枚ずつアップロードして、ぬりえを作成し保存します。この作業をseleniumモジュールで自動化するプログラムを書きます。
WEBアプリ実行時の、"ぬりえの加工"や”保存”などの各ボタンの制御方法については、以下のサイトを参考にしてください。
https://qiita.com/VA_nakatsu/items/0095755dc48ad7e86e2f
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
from selenium import webdriver from selenium.webdriver.common.keys import Keys #10枚のぬりえを1枚ずつアップロードしぬりえを作成保存します。 for i in range(1,11): #ブラウザを開く driver = webdriver.Safari() driver.get("https://pilot-nurie.jp/create/input.html?output_type=a4") # 3秒待機 time.sleep(3) #ぬりえにする画像をアップロードします。写真の保存先を指定します。 fid=driver.find_element_by_id("fileupload") file="/Users/mayr/coloring/img/"+str(i)+".jpg" fid.send_keys(file) time.sleep(10) #"ぬりえに加工”のボタンをクリックします btn1 = driver.find_element_by_xpath('//*[@id="main-content"]/article/div/div[1]/form/input[4]').click() time.sleep(10) #ぬりえのタイプを選択します。ここでは一番右のぬりえタイプを指定しています。 btn2=driver.find_element_by_xpath('//*[@id="img-out6"]').click() time.sleep(10) #"ぬりえの決定"のボタンをクリックします btn3=driver.find_element_by_xpath('//*[@id="main-content"]/article/div[1]/div[1]/form/input[2]').click() time.sleep(10) #"保存"のボタンをクリックします。 btn4=driver.find_element_by_xpath('//*[@id="submit_form"]/div[1]/div[2]/a').click() time.sleep(5) # ブラウザを終了する。 driver.close() time.sleep(5) |
まとめ
今回、Pythonのプログラムで画像の一括ダウンロードからWEBアプリの動作までを行い、ぬりえを作成しました。
ぜひ、お子さんとぬりえを楽しんでください!