制作日記: 動画でRiggingのお勉強

f:id:cignoir:20171201011020p:plain:w300

ちょっと前から上のジーナさんモデルを作っていて、ACSでリギングを行っていたのですが、独自のボーンを追加したいときはどうすれば……フェイシャルリグってどう組めばいいんだ……と、標準機能の知識が不足しすぎてて迷走していました。

そんな中、コメントで Character Rigging Course というチュートリアル動画(有料・35時間)が勉強になると教えていただきました。英語の文章は少しわかるのですが、動画となると自信ないなぁと思いつつ思い切って購入してみました。現在、35時間中の6時間分ほど見終わったのですがもう本当に目から鱗がぽろぽろ落ちる感じです。ヒアリングはあまり出来ないので操作を真似して盗むスタイルの勉強になるのですが、それでも十分といっていいほど勉強になってます。

ただ、やっぱり解説とかが聞き取れないのはもったいないなぁと思い始め、 GoogleCloudPlatform(GCP) の Speech API を利用しての自動テキスト起こしを試してみました。

twitterでのしげぽんさんとの会話で思いつきました💡

下準備

動画から音声ファイル抽出

GCP 関連

GCP のことはよくわかっていないので他のサイト様の解説におまかせします。本当は今日発表された AWS の Transcribe を試したかったんですが申請が必要だったので……

音声認識スクリプト実行

必要な情報

  • プロジェクトID
  • 認証情報(json)のファイルパス
    • サービスアカウント作成時にダウンロードしたファイル
  • 音声ファイルのCloudStorage上のパス(gs://~)

gem インストール

$ gem install google-cloud-speech

スクリプト

require "google/cloud/speech"
require 'csv'

# 音声認識結果の整形用(適当
class Google::Cloud::Speech::Result
  def start_time
    Time.at(@words.first.start_time).utc.strftime('%X')
  end

  def end_time
    Time.at(@words.last.end_time).utc.strftime('%X')
  end

  def simplify
    [start_time, end_time, @transcript]
  end
end

project_id = "***" # プロジェクトID
credentials = "/path/to/credentials.json" # 認証情報のファイルパス
src_audio_file = "gs://~" # CloudStorage上の音声ファイルパス
dst_csv_file = "result.csv" # CSV出力ファイルパス
encoding = :flac # 音声ファイルの形式
language = "en-US" # 音声の言語

speech = Google::Cloud::Speech.new(project_id: project_id, credentials: credentials)
audio = speech.audio(src_audio_file, encoding: encoding, language: language)

response = audio.process(words: true)
response.wait_until_done!

result = response.results.map(&:simplify)

CSV.open dst_csv_file, "w" do |csv|
  result.each{ |row| csv << row }
end

結果

こんな感じで概ねうまく認識出来ていました。非同期の音声認識をやってる人やRubyの例が少なかったので参考になれば幸いです。料金は見積もりが間違っていなければ35時間分の動画で$50ぐらいみたいです。メリットを考えたら全然安いですね。

師走

年内は動画のお勉強で終わりそうです。ジーナさんの続きの制作は年明けになると思いますが成果を発揮できるように勉強を頑張ります。