経緯
今回、これを企画した理由はVtuberのさくらみこさんの夏休み自由工作に投稿するためです。
【🌻みこちと夏休み企画🌻】
— さくらみこ🌸7/29~えりぃとかふぇ開催🎉 (@sakuramiko35) July 21, 2021
🌴「夏の自由工作大賞」🏆
企画会議の配信で発表した夏企画!✨
みんなから「自由工作作品」を募集にぇ🐱
みこがみんなの作品から賞を決めるYO🐱✨
みこに関するものなら何でもOK!!#エリート自由工作 #MikoFreeCraft
こちらを付けて、≪画像or動画》で投稿してね! pic.twitter.com/sIcR3XTZ1C
概要
YouTube Data APIを用いて、YouTubeから特定のチャンネルのサムネイルを集める。
それを材料にGAN(Generative Adversarial Network)(敵対的生成ネットワーク)で画像を生成する。
YouTube Data APIで動画のサムネイルを取得
GANで画像を生成
以上の3つの記事を大変参考にさせて頂きました。
ありがとうございました。
私のソースコードはgithubにあるのでご覧ください。
手順
YouTube Data APIを使えるようにする
Google Cloud Platformにプロジェクトを立ち上げ、APIのキーを発行する。
YouTube Data APIを有効にすることで、使用することができる。
詳しくは以下をご覧ください。
特定のチャンネルのIDを調べる
searchメソッドを用いて、得られる情報の中にchannelIdがある。
これを用いることで、特定のチャンネルの情報だけを集めることができる。
以下にsearchメソッドの使用例を記載する。
search_response = youtube.search().list(
# 動画を検索
part='snippet',
# 検索したい文字列を指定
q='ホロライブ',
# 視聴回数が多い順に取得
order='viewCount',
type='video',
).execute()
IDのチャンネルのサムネイルを取得
searchメソッドを繰り返して、大量のサムネイルを取得する。
一回のsearchメソッドで得られる情報は50件まである。
しかし、2回繰り返しても同じ情報が返ってくるだけなので、50件目から99件までの50件を得たい。
そのために、1回行うために出力される「nextPageToken」をsearchメソッドに与えることで解決できる。
def youtube_search_video():
youtube = build(YOUTUBE_API_SERVICE_NAME,YOUTUBE_API_VERSION,developerKey=DEVELOPER_KEY)
videos_response = youtube.search().list(
part='snippet',
channelId=channel_id,
maxResults=50,
order='date',
pageToken=next_page_token
).execute()
#ここの「nextPageToken」を表示
print(videos_response['nextPageToken'])
thumbnail_list=[]
for result in videos_response.get('items',[]):
thumbnail_url = result['snippet']['thumbnails']['default']['url']
try:
video_id = result['id']['videoId']
except:
print('エラー発見:' + thumbnail_url)
pass
else:
req.urlretrieve(thumbnail_url,'./image/' + youtuber_name + '/' + result['id']['videoId'] + '.jpg')
print('Saved:' + thumbnail_url)
サムネイルを元にGANで画像を生成
ここの部分に関しては詳しい事は理解できていないので、詳しい事は参考にさせて頂いた記事をご覧ください。
しかし、そのままでは自分の環境では利用できなかったためその点を記述する。
プログラムの随所に「cuda」と記述されていた。
どうやろこれはGPUに関連することだそうだ。
しかし、私はラップトップPCだからかそこでエラーがでた。
「cuda」の部分を全て「cpu」に変更することで実行できた。
結果
自分のPCのCPUはIntel(R) Core(TM) i7-8565U CPU @ 1.80GHz 1.99 GHzでしたが、合計46時間かかった。
出力結果は以下のようになった。
特にepoch=7750のあたりが良く感じたのでそこで画像を生成させた。
この中でも特に8番が気にいっている。
ピンクの髪で緑色の瞳とう点ではさくらみこの特徴をとらえている。
しかし、epoch=7900あたりから真っ黒になったのでこれ以上の精度は期待できない。
感想
企画に投稿するために思い立ったわけですが、最初は「絶対にじゃんけんに負けるエリートみこち」みたいなちょっとしたプログラムを書こうかと考えていました。
夏休みに入り時間に余裕ができたため、せっかくなら少し手の込んだことをしようと思い取り組みました。
機械学習の概要ぐらいしか知らなかったため、実際のプログラムと成果物を見てとても興味を惹かれました。
YouTube Data APIの使い方など今後、他の事にも応用ができそうな事を覚えたので実生活でも生かしたい。
またこういった企画があった際に新しいことをしたいです。
また、さくらみこ、ホロライブとても面白いのでぜひご覧ください。
参考