speech2text 0.0.3 → 0.01

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,16 +2,9 @@
2
2
 
3
3
  Using the power of ffmpeg/flac/Google and ruby here is a simple interface to play with to convert speech to text.
4
4
 
5
- Using a new undocumentd speech API from Google with the help of this article: http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/
5
+ At this point the API from Google is not documented and seemly free.
6
+ The Google API will frequently return 500 errors without providing much reason as to why.
6
7
 
7
- We're able to provide a very simple API in Ruby to decode simple audio to text.
8
+ It's possible that Google will decide to not open this API up and this effort my completely be for not...
8
9
 
9
- The API from Google is not yet public and so may change. It also seems to be very fragile as more times than not it will return a 500, so the library has retry code built in - for larger audio files 10+ failures may return before a successful result is retrieved...
10
-
11
- It also appears that the API only likes smaller audio files so there is a built in chunker that allows us to split the audio up into smaller chunks.
12
-
13
- == Example
14
-
15
- audio = Speech::AudioToText.new("i-like-pickles.wav")
16
- puts audio.to_text.inspect
17
- => {"captured_json"=>[["I like pickles", 0.92731786]], "confidence"=>0.92731786}
10
+ This was all made possible in short order all thanks to Chrome 11 and http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/
data/bin/speech2text CHANGED
@@ -1,7 +1,2 @@
1
1
  #!/this/will/be/replaced/by/rubygems
2
2
  # -*- encoding: binary -*-
3
-
4
- require 'speech'
5
-
6
- captured_json = Speech::AudioToText.new(ARGV[0]).to_text
7
- puts captured_json.inspect
data/lib/speech.rb CHANGED
@@ -1,4 +1,3 @@
1
- # -*- encoding: binary -*-
2
1
  require 'curb'
3
2
  require 'json'
4
3
 
@@ -1,4 +1,3 @@
1
- # -*- encoding: binary -*-
2
1
  module Speech
3
2
 
4
3
  class AudioInspector
@@ -1,4 +1,3 @@
1
- # -*- encoding: binary -*-
2
1
  module Speech
3
2
 
4
3
  class AudioSplitter
@@ -9,7 +8,7 @@ module Speech
9
8
 
10
9
  def initialize(splitter, offset, duration)
11
10
  self.offset = offset
12
- self.chunk = File.join(File.dirname(splitter.original_file), "chunk-" + File.basename(splitter.original_file).gsub(/\.(.*)$/, "-#{offset}" + '.\1'))
11
+ self.chunk = "chunk-" + splitter.original_file.gsub(/\.(.*)$/, "-#{offset}" + '.\1')
13
12
  self.duration = duration
14
13
  self.splitter = splitter
15
14
  end
@@ -1,4 +1,3 @@
1
- # -*- encoding: binary -*-
2
1
  module Speech
3
2
 
4
3
  class AudioToText
@@ -22,10 +21,6 @@ module Speech
22
21
  JSON.parse(File.read(self.captured_file))
23
22
  end
24
23
 
25
- def clean
26
- File.unlink self.captured_file if self.captured_file && File.exist?(self.captured_file)
27
- end
28
-
29
24
  protected
30
25
 
31
26
  def convert_chunk(easy, chunk, options={})
@@ -34,7 +29,6 @@ module Speech
34
29
  while retrying
35
30
  #easy.verbose = true
36
31
  easy.headers['Content-Type'] = "audio/x-flac; rate=#{chunk.flac_rate}"
37
- easy.headers['User-Agent'] = "https://github.com/taf2/speech2text"
38
32
  easy.post_body = "Content=#{chunk.to_flac_bytes}"
39
33
  easy.on_progress {|dl_total, dl_now, ul_total, ul_now| printf("%.2f/%.2f\r", ul_now, ul_total); true }
40
34
  easy.on_complete {|easy| puts }
@@ -0,0 +1,11 @@
1
+ module Speech
2
+ class Text
3
+
4
+ def initialize(audio_file, options={})
5
+ end
6
+
7
+ def decode_audio(flac16k_audio)
8
+ end
9
+
10
+ end
11
+ end
@@ -1,6 +1,5 @@
1
- # -*- encoding: binary -*-
2
1
  module Speech
3
2
  class Info
4
- VERSION='0.0.3'
3
+ VERSION='0.01'
5
4
  end
6
5
  end
data/speech2text.gemspec CHANGED
@@ -2,15 +2,14 @@ $:.unshift File.expand_path(File.dirname(__FILE__) + "/lib")
2
2
  require "speech/version"
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = "speech2text"
6
- s.authors = ["Todd A. Fisher"]
7
- s.email = "todd.fisher@gmail.com"
8
- s.version = Speech::Info::VERSION
9
- s.homepage = "https://github.com/taf2/speech2text"
10
- s.summary = "Speech to Text Library"
11
- s.description = "Super powers of Google wrapped in a nice Ruby interface"
12
- s.files = Dir["{lib,bin,test}/**/*", "Rakefile", "README.rdoc", "*.gemspec"]
13
- s.executables = %w(speech2text)
5
+ s.name = "speech2text"
6
+ s.authors = ["Todd A. Fisher"]
7
+ s.email = "todd.fisher@gmail.com"
8
+ s.version = Speech::Info::VERSION
9
+ s.homepage = "https://github.com/taf2/speech2text"
10
+ s.summary = "Speech to Text Library"
11
+ s.description = "Super powers of Google wrapped in a nice Ruby interface"
12
+ s.files = Dir["{lib,bin,test}/**/*", "Rakefile", "README.rdoc", "*.gemspec"]
14
13
 
15
14
  s.add_dependency "curb"
16
15
  s.add_dependency "json"
@@ -1,4 +1,3 @@
1
- # -*- encoding: binary -*-
2
1
  require 'test/unit'
3
2
  $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
4
3
  require 'speech'
@@ -1,4 +1,3 @@
1
- # -*- encoding: binary -*-
2
1
  require 'test/unit'
3
2
  $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
4
3
  require 'speech'
@@ -6,7 +5,7 @@ require 'speech'
6
5
  class SpeechAudioSplitterTest < Test::Unit::TestCase
7
6
 
8
7
  def test_audio_splitter
9
- splitter = Speech::AudioSplitter.new("samples/i-like-pickles.wav", 1)
8
+ splitter = Speech::AudioSplitter.new("i-like-pickles.wav", 1)
10
9
 
11
10
  assert_equal '00:00:03:52', splitter.duration.to_s
12
11
  assert_equal 3.52, splitter.duration.to_f
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speech2text
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: '0.01'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-03-25 00:00:00.000000000 -04:00
12
+ date: 2011-03-24 00:00:00.000000000 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: curb
17
- requirement: &2157005180 !ruby/object:Gem::Requirement
17
+ requirement: &2157005460 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2157005180
25
+ version_requirements: *2157005460
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: json
28
- requirement: &2157004740 !ruby/object:Gem::Requirement
28
+ requirement: &2157005040 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,25 +33,24 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2157004740
36
+ version_requirements: *2157005040
37
37
  description: Super powers of Google wrapped in a nice Ruby interface
38
38
  email: todd.fisher@gmail.com
39
- executables:
40
- - speech2text
39
+ executables: []
41
40
  extensions: []
42
41
  extra_rdoc_files: []
43
42
  files:
44
43
  - lib/speech/audio_inspector.rb
45
44
  - lib/speech/audio_splitter.rb
46
45
  - lib/speech/audio_to_text.rb
46
+ - lib/speech/text.rb
47
47
  - lib/speech/version.rb
48
48
  - lib/speech.rb
49
49
  - bin/speech2text
50
50
  - test/audio_inspector_test.rb
51
51
  - test/audio_splitter_test.rb
52
- - test/audio_to_text_test.rb
52
+ - test/i-like-pickles.wav
53
53
  - test/SampleAudio.wav
54
- - test/samples/i-like-pickles.json
55
54
  - test/samples/i-like-pickles.wav
56
55
  - Rakefile
57
56
  - README.rdoc
@@ -1,21 +0,0 @@
1
- # -*- encoding: binary -*-
2
- require 'test/unit'
3
- $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
4
- require 'speech'
5
-
6
- class SpeechAudioToTextTest < Test::Unit::TestCase
7
- def test_audio_to_text
8
- audio = Speech::AudioToText.new("samples/i-like-pickles.wav")
9
- captured_json = audio.to_text
10
- assert captured_json
11
- assert captured_json.key?("captured_json")
12
- assert !captured_json['captured_json'].empty?
13
- assert_equal ['captured_json', 'confidence'], captured_json.keys.sort
14
- assert_equal "I like pickles", captured_json['captured_json'].flatten.first
15
- assert captured_json['confidence'] > 0.9
16
- # {"captured_json"=>[["I like pickles", 0.92731786]], "confidence"=>0.92731786}
17
- # puts captured_json.inspect
18
- ensure
19
- audio.clean
20
- end
21
- end
@@ -1 +0,0 @@
1
- {"captured_json":[["I like pickles",0.92731786]],"confidence":0.92731786}