class GoogleSpeech::Transcriber
Constants
- DEFAULT_OPTIONS
Attributes
options[RW]
original_file[RW]
results[RW]
Public Class Methods
new(original_file, options=nil)
click to toggle source
# File lib/google_speech/transcriber.rb, line 27 def initialize(original_file, options=nil) @original_file = original_file @options = DEFAULT_OPTIONS.merge(options || {}) @results = [] @last_ua = 0 end
Public Instance Methods
extract_result(transcripts)
click to toggle source
# File lib/google_speech/transcriber.rb, line 70 def extract_result(transcripts) results = transcripts.map{|t| result_from_transcript(t)}.compact return {:text => '', :confidence => 0} if results.size == 0 t = results.collect {|t| t[:text] }.join(' ') c = results.inject(0.0) {|s, t| s.to_f + t[:confidence].to_f } / results.size.to_f c = 0 if c.nan? || c.infinite? { :text => t, :confidence => c } end
logger()
click to toggle source
# File lib/google_speech/transcriber.rb, line 164 def logger GoogleSpeech.logger end
open_working_file() { |f| ... }
click to toggle source
# File lib/google_speech/transcriber.rb, line 34 def open_working_file Utility.check_local_file(@original_file.path) wf_path = random_file_name(@original_file.path) FileUtils.mkdir_p(GoogleSpeech::TMP_FILE_DIR) unless File.exists?(GoogleSpeech::TMP_FILE_DIR) FileUtils.ln(@original_file.path, wf_path) File.open(wf_path, 'r') {|f| yield f } FileUtils.rm(wf_path, :force=>true) end
pfilter()
click to toggle source
# File lib/google_speech/transcriber.rb, line 87 def pfilter options[:profanity_filter] ? '1' : '0' end
random_file_name(path)
click to toggle source
# File lib/google_speech/transcriber.rb, line 45 def random_file_name(path) File.join(GoogleSpeech::TMP_FILE_DIR, File.basename(path) + '_' + UUID.generate + '.wav') end
result_from_transcript(transcript)
click to toggle source
# File lib/google_speech/transcriber.rb, line 82 def result_from_transcript(transcript) alt = transcript['result'].first['alternative'].first rescue nil alt ? { :text => alt['transcript'], :confidence => (alt['confidence'] || '0.9') } : nil end
transcribe()
click to toggle source
# File lib/google_speech/transcriber.rb, line 49 def transcribe open_working_file do |working_file| chunk_factory = ChunkFactory.new(working_file, options[:chunk_duration], options[:overlap], options[:rate]) chunk_factory.each{ |chunk| result = chunk.to_hash transcript = transcribe_data(chunk.data) next unless transcript result = result.merge(extract_result(transcript)) logger.debug "#{result[:start_time]}: #{(result[:confidence].to_f * 100).to_i}%: #{result[:text]}" @results << result sleep(options[:request_pause].to_i) } end @results end
transcribe_data(data)
click to toggle source
# File lib/google_speech/transcriber.rb, line 119 def transcribe_data(data) params = { :path => "/speech-api/v2/recognize", :query => "output=json&key=#{options[:key]}&client=#{options[:client]}&lang=#{options[:language]}", :body => data, :method => 'POST', :headers => { 'Content-Type' => "#{options[:audio_type]}; rate=#{options[:rate]}", 'Content-Length' => data.bytesize, 'User-Agent' => user_agent } } # puts "data size: #{data.bytesize}" retry_max = options[:retry_max] ? [options[:retry_max].to_i, 1].max : 3 retry_count = 0 result = nil url = "https://www.google.com#{params[:path]}" while(!result && retry_count < retry_max) retry_count += 1 begin connection = Excon.new(url) response = connection.request(params) # puts "response: #{response.inspect}\n\n" # puts "response.headers:\n#{response.headers}\n" # puts "response.body:'#{response.body}'\n" if response.status.to_s.start_with?('2') && response.body != "{\"result\":[]}\n" result = [] if (response.body && response.body.size > 0) result = response.body.split("\n").collect{|b| JSON.parse(b)} rescue [] end else logger.error " transcribe_data retrycount(#{retry_count}): status: #{response.status}, response: #{response.body.chomp}" sleep(options[:request_pause].to_i) end rescue StandardError => err #need to do something to retry this - use new a13g func for this. logger.error " transcribe_data retrycount(#{retry_count}): error: #{err.message}" sleep(options[:request_pause].to_i) end end result || [] end
user_agent()
click to toggle source
# File lib/google_speech/transcriber.rb, line 91 def user_agent ua_strings = [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10', 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36', 'Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36' ] ua = ua_strings[(@last_ua % ua_strings.length)] @last_ua += 1 ua end