RickBlog

恩返し

streamio-ffmpegを使ったRailsAPIをGAEでデプロイ(2)[Ruby][GCP][Docker]

以下の記事で書いたDockefileを使っていたのだが、エラーが出るようになった。
streamio-ffmpegを使ったRailsAPIをGAEでデプロイ[Ruby][GCP][Docker] - RickBlog

エラー内容

E: Package 'libav-tools' has no installation candidate

解決法

libav-toolsをffmpegに変更

何のゲームか認識したい[Google Cloud AutoML Vision]

やりたいこと

ゲーム動画のサムネから何のゲームなのかを認識したい

使った技術

cloud.google.com

用意した画像

・学習用の画像 150枚(apex:58,cod:49,fortnite:21,pubg:22)
・予測用の画像 4枚

f:id:rickbox:20190608122612p:plain

結果

apexの画像なので正解
f:id:rickbox:20190608122441p:plain

apexの画像なので正解 f:id:rickbox:20190608122343p:plain fortniteの画像なので正解 f:id:rickbox:20190608122507p:plain fortniteの画像なので不正解 f:id:rickbox:20190608122556p:plain

まとめ

学習用の画像も予測用の画像も少なすぎるのでこのような結果になったと思う、、
とてつもなく簡単な操作でこのようなことができるのすごすぎ😐

streamio-ffmpegを使ったRailsAPIをGAEでデプロイ[Ruby][GCP][Docker]

streamio-ffmpeg(gem)を使ったRailsAPIを、Google App Engineでデプロイしようとしたら以下のエラーが発生した。

Errno::ENOENT (No such file or directory - the ffprobe binary could not be found in /app/vendor/bundle/ruby/2.6.0/bin:/opt/rbenv/versions/2.6.3/bin:/opt/rbenv/libexec:/opt/rbenv/plugins/ruby-build/bin:/opt/nodejs/bin:/opt/rbenv/shims:/opt/rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin):

Dockerを使ってffmpegをインストールする必要があるらしい。 qiita.com

いろいろと試行錯誤してうまくいったDockerfileがこちら。

FROM ruby:2.6.3

WORKDIR /app
COPY . /app

ENV RACK_ENV=production \
  RAILS_ENV=production

EXPOSE 8080
ENV PORT=8080

RUN apt-get update && \
  DEBIAN_FRONTEND=noninteractive \
  apt-get install -y \
  libav-tools gpac \
  && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/

RUN bundle install

CMD bundle exec rackup --port $PORT

mp4をFFmpegでHLS(m3u8,ts)に変換[Ruby]

mp4をffmpegを使ってm3u8とtsファイルに変換する方法はこちらの記事を参考にした。

qiita.com

Rubyを使って変換したい場合はstreamio-ffmpegというgemを使う。 https://github.com/streamio/streamio-ffmpeg

optionsを以下のようにするとmp4をm3u8とtsファイルに変換できる。

options = { custom: ["-codec", "copy", "-map", "0", "-f", "segment", "-vbsf", "h264_mp4toannexb", "-segment_format", "mpegts", "-segment_time", "4", "-segment_list", "[output file path]", " [output file name] -%03d.ts" ]}

基本情報技術者試験 合格した

受かった!

勉強は過去問を解きまくった。 このサイトを使って。 www.fe-siken.com

来年からは午後問題の形式が変わるっぽい。

次は応用か情報セキュリティかなー。

バケットのフォルダを指定してファイルをアップロード[GCS][Ruby]

google cloud storageにバケットのフォルダを指定してファイルをアップロードする方法。

cloud.google.com


例えば、

bucket_name = "sample"
local_file_path = "/Users/Username/Desktop/test.png"
storage_file_path = "test1/a1/aaa.png"

と書けば、sample(バケット)のtest1(フォルダ)のa1(フォルダ)に、aaa.pngというファイル名でtest.pngを保存できる。もしフォルダが無かったら、自動でフォルダが作成される。

エンドユーザー認証[Firebase][Ruby]

FirestoreをRubyで扱っていたら認証のエラーが出てハマってしまったので、解決方法をメモしておく。

RubyでFirestoreを扱う方法。
https://cloud.google.com/firestore/docs/quickstart-servers?hl=ja

エラー内容

googleアカウントを切り替えて、新しいプロジェクトに対して処理を実行したら、以下のエラーが発生した。

GaxError Exception occurred in retry method that was not classified as transient, caused by 7:Missing or insufficient permissions. (Google::Gax::RetryError)
7:Missing or insufficient permissions. (Google::Cloud::PermissionDeniedError)

原因調査

アカウントを切り替える前のに戻して実行すると、以下の警告が出ていた。

Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/.

エンドユーザー認証を使っているので、アカウントを切り替えるとエラーが出るのでは?と考えた。

解決方法

以下のコマンドでアカウントを設定する。

$ gcloud init

以下のコマンドでアカウントを認証したら解決した。

$ gcloud auth application-default login