【发布时间】:2017-12-15 19:14:35
【问题描述】:
google vision API 需要一个位图作为参数发送。我正在尝试将 png 从 URL 转换为位图以传递给 google api:
require "google/cloud/vision"
PROJECT_ID = Rails.application.secrets["project_id"]
KEY_FILE = "#{Rails.root}/#{Rails.application.secrets["key_file"]}"
google_vision = Google::Cloud::Vision.new project: PROJECT_ID, keyfile: KEY_FILE
img = open("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png").read
image = google_vision.image img
ArgumentError: string contains null byte
这是gem的源码处理:
def self.from_source source, vision = nil
if source.respond_to?(:read) && source.respond_to?(:rewind)
return from_io(source, vision)
end
# Convert Storage::File objects to the URL
source = source.to_gs_url if source.respond_to? :to_gs_url
# Everything should be a string from now on
source = String source
# Create an Image from a HTTP/HTTPS URL or Google Storage URL.
return from_url(source, vision) if url? source
# Create an image from a file on the filesystem
if File.file? source
unless File.readable? source
fail ArgumentError, "Cannot read #{source}"
end
return from_io(File.open(source, "rb"), vision)
end
fail ArgumentError, "Unable to convert #{source} to an Image"
end
https://github.com/GoogleCloudPlatform/google-cloud-ruby
为什么它告诉我字符串包含空字节?如何在 ruby 中获取位图?
【问题讨论】:
-
哪一行提高了
ArgumentError?image = google_vision.image img? -
@muistooshort 是的
-
@muistooshort 我复制了 gem 本身完成的处理以及 gem 的链接。
-
我只是想将其转换为 png 图像:google.com/images/branding/googlelogo/2x/…
标签: ruby-on-rails ruby bitmap google-cloud-vision