【Rails】Cloud Vision API를 사용하여 이미지 분석하고 과격한 이미지를 감지하는 방법
목표
refile
에서 사용자의 프로필 이미지를 편집하면,
업로드 할 이미지를 Cloud Vision API
로 이미지 분석하고,
과격한 화상의 경우는 DB에 보존할 수 없게 한다.
개발 환경
· Ruby : 2.5.7
·Rails: 5.2.4
·Vagrant: 2.2.7
· VirtualBox : 6.1
· OS : macOS Catalina
전제
하기 실장 완료.
・ 로그인 기능 구현
・ 게시 기능 구현
Cloud Vision API 사용
1. 아래 기사의 'Geocoding API 사용'과 유사한 단계에서 Cloud Vision API를 사용 설정합니다.
Geolocation API를 사용하여 위도 경도를 계산하는 방법
2. 홈 화면으로 전환하고 IAM 및 관리를 클릭합니다.
3. 서비스 계정을 클릭합니다.
4. 서비스 계정 추가를 클릭합니다.
5. 서비스 계정 이름(적절하고 좋음)을 입력하고 만들기를 클릭합니다.
6. 계속을 클릭합니다.
7. 키 만들기를 클릭합니다.
8. 키 유형을 JSON으로 설정하고 만들기를 클릭합니다.
9. 키가 생성되었는지 확인하고 닫기를 클릭
10. 마침을 클릭
11. 키를 애플리케이션 바로 아래로 이동
Cloud Vision API 평가 정보
평가 카테고리
카테고리
내용
adult
성인 이미지인지 여부
spoof
인터넷 밈인지 여부
medical
인터넷 밈인지 여부
violence
폭력적인 이미지인지 여부
racy
끔찍한 이미지인지 여부
평가값
평가값
정도
UNKNOWN
분석 불가
VERY_UNLIKELY
매우 낮음
UNLIKELY
낮은
POSSIBLE
가능성 있음
LIKELY
높은
VERY_LIKELY
매우 높음
구현
1.Gem 도입
평가 카테고리에 관계없이 평가 값이 LIKELY
또는 VERY_LIKELY
포함하는 경우 DB에 저장하지 않도록 구현합니다.
Gemfilegem 'google-cloud-vision'
터미널$ bundle
2. Cloud Vision API 설정 파일을 만들고 편집
터미널$ touch lib/vision.rb
lib/vision.rbrequire 'base64'
require 'json'
require 'net/https'
module Vision
class << self
def image_analysis(profile_image)
image_annotator = Google::Cloud::Vision::ImageAnnotator.new(
version: :v1,
credentials: JSON.parse(File.open('キーのファイル名') do |f| f.read end)
)
# リクエストパラメータ作成
image = profile_image # 解析させたい画像(引数)
requests_content = { image: { content: image }, features: [{ type: :SAFE_SEARCH_DETECTION }] }
requests = [requests_content]
# Cloud Vision APIに画像を送信
response = image_annotator.batch_annotate_images(requests)
result = response.responses[0].safe_search_annotation.to_h
# 解析結果が「LIKELY」又は「VERY_LIKELY」を含む場合はfalse、それ以外はtrueを返す
if result.values.include?(:LIKELY) || result.values.include?(:VERY_LIKELY)
return false
else
return true
end
end
end
end
3. 컨트롤러 편집
users_controller.rbdef update
# 画像が編集された場合
if params[:user][:profile_image].present?
# パラメーター(画像)を「tempfile」として開いて変数に代入
profile_image = File.open(params[:user][:profile_image].tempfile)
# Cloud Vision APIで画像分析して、分析結果を変数に代入
result = Vision.image_analysis(profile_image)
else
# 画像が編集されてない場合は「true」を代入
result = true
end
# 解析結果によって条件分岐
if result == true
@user.update(user_params)
redirect_to user_user_path(@user)
elsif result == false
flash[:notice] = '画像が不適切です'
render 'edit'
end
end
Reference
이 문제에 관하여(【Rails】Cloud Vision API를 사용하여 이미지 분석하고 과격한 이미지를 감지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matsubishi5/items/d2d8f9913bcec97904a1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· Ruby : 2.5.7
·Rails: 5.2.4
·Vagrant: 2.2.7
· VirtualBox : 6.1
· OS : macOS Catalina
전제
하기 실장 완료.
・ 로그인 기능 구현
・ 게시 기능 구현
Cloud Vision API 사용
1. 아래 기사의 'Geocoding API 사용'과 유사한 단계에서 Cloud Vision API를 사용 설정합니다.
Geolocation API를 사용하여 위도 경도를 계산하는 방법
2. 홈 화면으로 전환하고 IAM 및 관리를 클릭합니다.
3. 서비스 계정을 클릭합니다.
4. 서비스 계정 추가를 클릭합니다.
5. 서비스 계정 이름(적절하고 좋음)을 입력하고 만들기를 클릭합니다.
6. 계속을 클릭합니다.
7. 키 만들기를 클릭합니다.
8. 키 유형을 JSON으로 설정하고 만들기를 클릭합니다.
9. 키가 생성되었는지 확인하고 닫기를 클릭
10. 마침을 클릭
11. 키를 애플리케이션 바로 아래로 이동
Cloud Vision API 평가 정보
평가 카테고리
카테고리
내용
adult
성인 이미지인지 여부
spoof
인터넷 밈인지 여부
medical
인터넷 밈인지 여부
violence
폭력적인 이미지인지 여부
racy
끔찍한 이미지인지 여부
평가값
평가값
정도
UNKNOWN
분석 불가
VERY_UNLIKELY
매우 낮음
UNLIKELY
낮은
POSSIBLE
가능성 있음
LIKELY
높은
VERY_LIKELY
매우 높음
구현
1.Gem 도입
평가 카테고리에 관계없이 평가 값이 LIKELY
또는 VERY_LIKELY
포함하는 경우 DB에 저장하지 않도록 구현합니다.
Gemfilegem 'google-cloud-vision'
터미널$ bundle
2. Cloud Vision API 설정 파일을 만들고 편집
터미널$ touch lib/vision.rb
lib/vision.rbrequire 'base64'
require 'json'
require 'net/https'
module Vision
class << self
def image_analysis(profile_image)
image_annotator = Google::Cloud::Vision::ImageAnnotator.new(
version: :v1,
credentials: JSON.parse(File.open('キーのファイル名') do |f| f.read end)
)
# リクエストパラメータ作成
image = profile_image # 解析させたい画像(引数)
requests_content = { image: { content: image }, features: [{ type: :SAFE_SEARCH_DETECTION }] }
requests = [requests_content]
# Cloud Vision APIに画像を送信
response = image_annotator.batch_annotate_images(requests)
result = response.responses[0].safe_search_annotation.to_h
# 解析結果が「LIKELY」又は「VERY_LIKELY」を含む場合はfalse、それ以外はtrueを返す
if result.values.include?(:LIKELY) || result.values.include?(:VERY_LIKELY)
return false
else
return true
end
end
end
end
3. 컨트롤러 편집
users_controller.rbdef update
# 画像が編集された場合
if params[:user][:profile_image].present?
# パラメーター(画像)を「tempfile」として開いて変数に代入
profile_image = File.open(params[:user][:profile_image].tempfile)
# Cloud Vision APIで画像分析して、分析結果を変数に代入
result = Vision.image_analysis(profile_image)
else
# 画像が編集されてない場合は「true」を代入
result = true
end
# 解析結果によって条件分岐
if result == true
@user.update(user_params)
redirect_to user_user_path(@user)
elsif result == false
flash[:notice] = '画像が不適切です'
render 'edit'
end
end
Reference
이 문제에 관하여(【Rails】Cloud Vision API를 사용하여 이미지 분석하고 과격한 이미지를 감지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matsubishi5/items/d2d8f9913bcec97904a1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. 아래 기사의 'Geocoding API 사용'과 유사한 단계에서 Cloud Vision API를 사용 설정합니다.
Geolocation API를 사용하여 위도 경도를 계산하는 방법
2. 홈 화면으로 전환하고 IAM 및 관리를 클릭합니다.
3. 서비스 계정을 클릭합니다.
4. 서비스 계정 추가를 클릭합니다.
5. 서비스 계정 이름(적절하고 좋음)을 입력하고 만들기를 클릭합니다.
6. 계속을 클릭합니다.
7. 키 만들기를 클릭합니다.
8. 키 유형을 JSON으로 설정하고 만들기를 클릭합니다.
9. 키가 생성되었는지 확인하고 닫기를 클릭
10. 마침을 클릭
11. 키를 애플리케이션 바로 아래로 이동
Cloud Vision API 평가 정보
평가 카테고리
카테고리
내용
adult
성인 이미지인지 여부
spoof
인터넷 밈인지 여부
medical
인터넷 밈인지 여부
violence
폭력적인 이미지인지 여부
racy
끔찍한 이미지인지 여부
평가값
평가값
정도
UNKNOWN
분석 불가
VERY_UNLIKELY
매우 낮음
UNLIKELY
낮은
POSSIBLE
가능성 있음
LIKELY
높은
VERY_LIKELY
매우 높음
구현
1.Gem 도입
평가 카테고리에 관계없이 평가 값이 LIKELY
또는 VERY_LIKELY
포함하는 경우 DB에 저장하지 않도록 구현합니다.
Gemfilegem 'google-cloud-vision'
터미널$ bundle
2. Cloud Vision API 설정 파일을 만들고 편집
터미널$ touch lib/vision.rb
lib/vision.rbrequire 'base64'
require 'json'
require 'net/https'
module Vision
class << self
def image_analysis(profile_image)
image_annotator = Google::Cloud::Vision::ImageAnnotator.new(
version: :v1,
credentials: JSON.parse(File.open('キーのファイル名') do |f| f.read end)
)
# リクエストパラメータ作成
image = profile_image # 解析させたい画像(引数)
requests_content = { image: { content: image }, features: [{ type: :SAFE_SEARCH_DETECTION }] }
requests = [requests_content]
# Cloud Vision APIに画像を送信
response = image_annotator.batch_annotate_images(requests)
result = response.responses[0].safe_search_annotation.to_h
# 解析結果が「LIKELY」又は「VERY_LIKELY」を含む場合はfalse、それ以外はtrueを返す
if result.values.include?(:LIKELY) || result.values.include?(:VERY_LIKELY)
return false
else
return true
end
end
end
end
3. 컨트롤러 편집
users_controller.rbdef update
# 画像が編集された場合
if params[:user][:profile_image].present?
# パラメーター(画像)を「tempfile」として開いて変数に代入
profile_image = File.open(params[:user][:profile_image].tempfile)
# Cloud Vision APIで画像分析して、分析結果を変数に代入
result = Vision.image_analysis(profile_image)
else
# 画像が編集されてない場合は「true」を代入
result = true
end
# 解析結果によって条件分岐
if result == true
@user.update(user_params)
redirect_to user_user_path(@user)
elsif result == false
flash[:notice] = '画像が不適切です'
render 'edit'
end
end
Reference
이 문제에 관하여(【Rails】Cloud Vision API를 사용하여 이미지 분석하고 과격한 이미지를 감지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matsubishi5/items/d2d8f9913bcec97904a1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1.Gem 도입
평가 카테고리에 관계없이 평가 값이
LIKELY
또는 VERY_LIKELY
포함하는 경우 DB에 저장하지 않도록 구현합니다.Gemfile
gem 'google-cloud-vision'
터미널
$ bundle
2. Cloud Vision API 설정 파일을 만들고 편집
터미널
$ touch lib/vision.rb
lib/vision.rb
require 'base64'
require 'json'
require 'net/https'
module Vision
class << self
def image_analysis(profile_image)
image_annotator = Google::Cloud::Vision::ImageAnnotator.new(
version: :v1,
credentials: JSON.parse(File.open('キーのファイル名') do |f| f.read end)
)
# リクエストパラメータ作成
image = profile_image # 解析させたい画像(引数)
requests_content = { image: { content: image }, features: [{ type: :SAFE_SEARCH_DETECTION }] }
requests = [requests_content]
# Cloud Vision APIに画像を送信
response = image_annotator.batch_annotate_images(requests)
result = response.responses[0].safe_search_annotation.to_h
# 解析結果が「LIKELY」又は「VERY_LIKELY」を含む場合はfalse、それ以外はtrueを返す
if result.values.include?(:LIKELY) || result.values.include?(:VERY_LIKELY)
return false
else
return true
end
end
end
end
3. 컨트롤러 편집
users_controller.rb
def update
# 画像が編集された場合
if params[:user][:profile_image].present?
# パラメーター(画像)を「tempfile」として開いて変数に代入
profile_image = File.open(params[:user][:profile_image].tempfile)
# Cloud Vision APIで画像分析して、分析結果を変数に代入
result = Vision.image_analysis(profile_image)
else
# 画像が編集されてない場合は「true」を代入
result = true
end
# 解析結果によって条件分岐
if result == true
@user.update(user_params)
redirect_to user_user_path(@user)
elsif result == false
flash[:notice] = '画像が不適切です'
render 'edit'
end
end
Reference
이 문제에 관하여(【Rails】Cloud Vision API를 사용하여 이미지 분석하고 과격한 이미지를 감지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsubishi5/items/d2d8f9913bcec97904a1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)