msdd’s blog

deep learning勉強中。プログラム関連のこと書きます。

Safebooruからアニメ画像ダウンロード

はじめに

GANでアニメ画像生成したい。そのためには、データとして大量のアニメ画像を集める必要がある。 スクレイピングするのと、動画のSSとる方法があるが、今回は、楽そうな方のスクレイピングで画像集めることにした。

前にアニメデータセット探した中で、sabebooruというサイトを知った。 https://msdd.hatenablog.com/entry/2019/11/21/235937msdd.hatenablog.com

sabebooruは、画像のアーカイブをタグ付きで保存してあるサイトで、検索もできる。

f:id:msdd:20191223023843p:plain
safebooru

画像が大量に欲しいので、このサイトからダウンロードすることにした。 

画像ダウンロード

apiがあったので、それを使った。

api アクセスのurl: https://safebooru.org/index.php?page=dapi&s=post&q=index

limit:どれだけの投稿を検索するか。max100。
pid : ページ数。
tags: 検索するタグ。

などを追加して検索できる。 とりあえず、https://safebooru.org/index.php?page=dapi&s=post&q=indexにアクセスしてみると、xmlが表示されたので、pythonでxmlを扱って、urlから画像ダウンロードするスクリプト作った。

f:id:msdd:20191223055405p:plain
xml

api_strはページ番号pidと検索するtagsを設定した文字列で、これを送りxmlを取得する。 今回は、一人の顔画像が欲しいので、タグはface 1girl soloのものをダウンロードすることにした。

api_str="https://safebooru.org/index.php?page=dapi&s=post&q=index&pid={pid}&tags={tags}".format(pid=page,tags=request_tags.replace(" ","+"))

with urllib.request.urlopen(api_str) as response:
      content=response.read()

pythonのxmlはElementTreeというもので扱うようだ。xmlをパースした後、それぞれ投稿の画像urlを取得した。一回のリクエストで、100件得られる。

xml=ET.fromstring(content)

for post in xml.iter("post"):
       file_url=post.get("file_url")

これを今回は50回ループさせて、5000枚集めた。サイズは3.3G。集めた画像のサンプルが下の画像。

f:id:msdd:20191225005237p:plain
サンプル

きちんと、一人のキャラの顔が写っている画像を集めることができた。

今後

このデータを使ってGANでアニメ画像生成していきたい。

コード置き場

github.com

参考サイト

safebooru.org qiita.com note.nkmk.me