LoginSignup
1
1

More than 3 years have passed since last update.

【Rails】Active Storage環境下でGoogle Cloud Visionのセーフサーチを実装

Last updated at Posted at 2019-02-18

個人開発のWebアプリまちかどルートv5.42への実装メモです。
cloudvision (1).png

まえがき

Rails 5.2のファイルアップローダーであるActive Storage環境下だとGoogle Cloud Visionのセーフサーチがうまく動かなかったので下記のように工夫しました。

具体的には画像ファイルを /public にいったん配置して、そのパスを指定して画像分析にかけ、終わったら /public から削除するという流れです。

posts_controller.rb
# 画像の選択の有無を判断
if post_params[:image] != nil
 # 画像を uploaded_file に格納
 uploaded_file = post_params[:image]
 # /public へのパスを指定
 output_path = Rails.root.join('public', uploaded_file.original_filename)
 # ファイルを開いて image_file に格納
 image_file = File.open(output_path)

 # Google Cloud VisionのAPIを使う
 image_annotator = Google::Cloud::Vision::ImageAnnotator.new
 response = image_annotator.safe_search_detection image: image_file
 response.responses.each do |res|
  safe_search = res.safe_search_annotation
  # if文では公式ドキュメントと違って .to_s を付ける必要がありました
  if safe_search.adult.to_s == "VERY_LIKELY" || safe_search.adult.to_s == "LIKELY"
    flash[:error] = "不適切な画像と判断されました powered by Google Cloud Vision"
    redirect_to root_path
    return
  elsif safe_search.violence.to_s == 'VERY_LIKELY' || safe_search.violence.to_s == 'LIKELY'
    flash[:error] = "不適切な画像と判断されました powered by Google Cloud Vision"
    redirect_to root_path
    return
  elsif safe_search.medical.to_s == 'VERY_LIKELY' || safe_search.medical.to_s == 'LIKELY'
    flash[:error] = "不適切な画像と判断されました powered by Google Cloud Vision"
    redirect_to root_path
    return
  end
 end
# 最後に /public の画像ファイルを削除します
File.delete(output_path)
end

上記のコードを適所に書けばGoogle Cloud Visionのセーフサーチが機能します。そこでVERY_LIKELYまたはLIKELYと判断されればroot_pathにリダイレクトされるようになります。

あとがき

Active Storage環境下だと公式ドキュメントどおりにやってもうまくいきませんでした。また、事前にgem 'google-cloud-vision', '~> 0.32.2'bundle installしたあとに「protobufが見つかりません」という内容のエラーが出ました。そこでGemfilegem 'google-protobuf', '~> 3.7.0.rc.2'を追記のうえgem update google-protobufを実行することで回避できました。

こちらの記事も合わせてどうぞ。

【Rails】Active Storage + S3 + Active JobでGoogle Cloud Visionセーフサーチ

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1