ibm_watson 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +258 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/ibm_watson.rb +16 -0
- data/lib/ibm_watson/assistant_v1.rb +1997 -0
- data/lib/ibm_watson/detailed_response.rb +21 -0
- data/lib/ibm_watson/discovery_v1.rb +2039 -0
- data/lib/ibm_watson/iam_token_manager.rb +166 -0
- data/lib/ibm_watson/language_translator_v3.rb +411 -0
- data/lib/ibm_watson/natural_language_classifier_v1.rb +309 -0
- data/lib/ibm_watson/natural_language_understanding_v1.rb +297 -0
- data/lib/ibm_watson/personality_insights_v3.rb +260 -0
- data/lib/ibm_watson/speech_to_text_v1.rb +2153 -0
- data/lib/ibm_watson/text_to_speech_v1.rb +716 -0
- data/lib/ibm_watson/tone_analyzer_v3.rb +287 -0
- data/lib/ibm_watson/version.rb +3 -0
- data/lib/ibm_watson/visual_recognition_v3.rb +579 -0
- data/lib/ibm_watson/watson_api_exception.rb +41 -0
- data/lib/ibm_watson/watson_service.rb +180 -0
- data/lib/ibm_watson/websocket/recognize_callback.rb +32 -0
- data/lib/ibm_watson/websocket/speech_to_text_websocket_listener.rb +162 -0
- data/rakefile +45 -0
- data/test/integration/test_assistant_v1.rb +645 -0
- data/test/integration/test_discovery_v1.rb +200 -0
- data/test/integration/test_iam_assistant_v1.rb +707 -0
- data/test/integration/test_language_translator_v3.rb +81 -0
- data/test/integration/test_natural_language_classifier_v1.rb +69 -0
- data/test/integration/test_natural_language_understanding_v1.rb +98 -0
- data/test/integration/test_personality_insights_v3.rb +95 -0
- data/test/integration/test_speech_to_text_v1.rb +187 -0
- data/test/integration/test_text_to_speech_v1.rb +81 -0
- data/test/integration/test_tone_analyzer_v3.rb +72 -0
- data/test/integration/test_visual_recognition_v3.rb +64 -0
- data/test/test_helper.rb +22 -0
- data/test/unit/test_assistant_v1.rb +1598 -0
- data/test/unit/test_discovery_v1.rb +1144 -0
- data/test/unit/test_iam_token_manager.rb +165 -0
- data/test/unit/test_language_translator_v3.rb +461 -0
- data/test/unit/test_natural_language_classifier_v1.rb +187 -0
- data/test/unit/test_natural_language_understanding_v1.rb +132 -0
- data/test/unit/test_personality_insights_v3.rb +172 -0
- data/test/unit/test_speech_to_text_v1.rb +755 -0
- data/test/unit/test_text_to_speech_v1.rb +336 -0
- data/test/unit/test_tone_analyzer_v3.rb +200 -0
- data/test/unit/test_vcap_using_personality_insights.rb +150 -0
- data/test/unit/test_visual_recognition_v3.rb +345 -0
- metadata +302 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require("json")
|
4
|
+
require_relative("./../test_helper.rb")
|
5
|
+
require("minitest/hooks/test")
|
6
|
+
|
7
|
+
# Integration tests for the Language Translator V3 Service
|
8
|
+
class LanguageTranslatorV3Test < Minitest::Test
|
9
|
+
include Minitest::Hooks
|
10
|
+
attr_accessor :service
|
11
|
+
def before_all
|
12
|
+
@service = IBMWatson::LanguageTranslatorV3.new(
|
13
|
+
username: ENV["LANGUAGE_TRANSLATOR_V3_USERNAME"],
|
14
|
+
password: ENV["LANGUAGE_TRANSLATOR_V3_PASSWORD"],
|
15
|
+
version: "2018-05-01"
|
16
|
+
)
|
17
|
+
@service.add_default_headers(
|
18
|
+
headers: {
|
19
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
20
|
+
"X-Watson-Test" => "1"
|
21
|
+
}
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_get_model
|
26
|
+
service_response = service.get_model(
|
27
|
+
model_id: "en-it"
|
28
|
+
).result
|
29
|
+
refute(service_response.nil?)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_list_models
|
33
|
+
service_response = service.list_models.result
|
34
|
+
refute(service_response.nil?)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_translate_source_target
|
38
|
+
service_response = service.translate(
|
39
|
+
text: "Hola, cómo estás? €",
|
40
|
+
source: "es",
|
41
|
+
target: "en"
|
42
|
+
).result
|
43
|
+
refute(service_response.nil?)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_translate_model_id
|
47
|
+
service_response = service.translate(
|
48
|
+
text: "Messi is the best ever",
|
49
|
+
model_id: "en-es"
|
50
|
+
).result
|
51
|
+
refute(service_response.nil?)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_identify
|
55
|
+
service_response = service.identify(
|
56
|
+
text: "祝你有美好的一天"
|
57
|
+
).result
|
58
|
+
refute(service_response.nil?)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_list_identifiable_languages
|
62
|
+
service_response = service.list_identifiable_languages.result
|
63
|
+
refute(service_response.nil?)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_create_delete_model
|
67
|
+
skip "Methods not available in lite plans"
|
68
|
+
custom_model = File.open(Dir.getwd + "/resources/language_translator_model.tmx")
|
69
|
+
service_response = service.create_model(
|
70
|
+
base_model_id: "en-fr",
|
71
|
+
name: "test_glossary_ruby_integration",
|
72
|
+
forced_glossary: custom_model
|
73
|
+
).result
|
74
|
+
refute(service_response.nil?)
|
75
|
+
model_id = service_response["model_id"]
|
76
|
+
service_response = service.delete_model(
|
77
|
+
model_id: model_id
|
78
|
+
).result
|
79
|
+
assert_equal("OK", service_response["status"])
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require("json")
|
4
|
+
require_relative("./../test_helper.rb")
|
5
|
+
require("minitest/hooks/test")
|
6
|
+
|
7
|
+
# Integration tests for the Natural Language Classifier V1 Service
|
8
|
+
class NaturalLanguageClassifierV1Test < Minitest::Test
|
9
|
+
include Minitest::Hooks
|
10
|
+
attr_accessor :service
|
11
|
+
def before_all
|
12
|
+
@service = IBMWatson::NaturalLanguageClassifierV1.new(
|
13
|
+
username: ENV["NATURAL_LANGUAGE_CLASSIFIER_USERNAME"],
|
14
|
+
password: ENV["NATURAL_LANGUAGE_CLASSIFIER_PASSWORD"]
|
15
|
+
)
|
16
|
+
@service.add_default_headers(
|
17
|
+
headers: {
|
18
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
19
|
+
"X-Watson-Test" => "1"
|
20
|
+
}
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_list_classifier
|
25
|
+
list_classifiers = @service.list_classifiers.result
|
26
|
+
refute(list_classifiers.nil?)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_classify_text
|
30
|
+
skip "The classifier takes more than a minute"
|
31
|
+
training_data = File.open(Dir.getwd + "/resources/weather_data_train.csv")
|
32
|
+
metadata = { "name" => "my-classifier", "language" => "en" }
|
33
|
+
status = nil
|
34
|
+
classifier = @service.create_classifier(
|
35
|
+
metadata: metadata,
|
36
|
+
training_data: training_data
|
37
|
+
).result
|
38
|
+
classifier_id = classifier["classifier_id"]
|
39
|
+
iterations = 0
|
40
|
+
while iterations < 15
|
41
|
+
status = @service.get_classifier(classifier_id: classifier_id)
|
42
|
+
iterations += 1
|
43
|
+
sleep(5) unless status["status"] == "Available"
|
44
|
+
end
|
45
|
+
unless status["status"] == "Available"
|
46
|
+
@service.delete_classifier(
|
47
|
+
classifier_id: classifier_id
|
48
|
+
)
|
49
|
+
assert(false, msg: "Classifier is not available")
|
50
|
+
end
|
51
|
+
|
52
|
+
classes = @service.classify(
|
53
|
+
classifier_id: classifier_id,
|
54
|
+
text: "How hot will it be tomorrow?"
|
55
|
+
).result
|
56
|
+
refute(classes.nil?)
|
57
|
+
|
58
|
+
collection = [{ "text" => "How hot will it be today?" }, { "text" => "Is it hot outside?" }]
|
59
|
+
classes = @service.classify_collection(
|
60
|
+
classifier_id: classifier_id,
|
61
|
+
collection: collection
|
62
|
+
).result
|
63
|
+
refute(classes.nil?)
|
64
|
+
|
65
|
+
@service.delete_classifier(
|
66
|
+
classifier_id: classifier_id
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require("json")
|
4
|
+
require_relative("./../test_helper.rb")
|
5
|
+
|
6
|
+
# Integration tests for the Natural Language Understanding V1 Service
|
7
|
+
class NaturalLanguageUnderstandingV1Test < Minitest::Test
|
8
|
+
def test_text_analyze
|
9
|
+
service = IBMWatson::NaturalLanguageUnderstandingV1.new(
|
10
|
+
version: "2018-03-16",
|
11
|
+
username: ENV["NATURAL_LANGUAGE_UNDERSTANDING_USERNAME"],
|
12
|
+
password: ENV["NATURAL_LANGUAGE_UNDERSTANDING_PASSWORD"]
|
13
|
+
)
|
14
|
+
service.add_default_headers(
|
15
|
+
headers: {
|
16
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
17
|
+
"X-Watson-Test" => "1"
|
18
|
+
}
|
19
|
+
)
|
20
|
+
text = "IBM is an American multinational technology company "
|
21
|
+
text += "headquartered in Armonk, New York, United States, "
|
22
|
+
text += "with operations in over 170 countries."
|
23
|
+
service_response = service.analyze(
|
24
|
+
features: {
|
25
|
+
entities: {
|
26
|
+
emotion: true,
|
27
|
+
sentiment: true,
|
28
|
+
limit: 2
|
29
|
+
},
|
30
|
+
keywords: {
|
31
|
+
emotion: true,
|
32
|
+
sentiment: true,
|
33
|
+
limit: 2
|
34
|
+
}
|
35
|
+
},
|
36
|
+
text: text
|
37
|
+
)
|
38
|
+
assert((200..299).cover?(service_response.status))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_html_analyze
|
42
|
+
service = IBMWatson::NaturalLanguageUnderstandingV1.new(
|
43
|
+
version: "2018-03-16",
|
44
|
+
username: ENV["NATURAL_LANGUAGE_UNDERSTANDING_USERNAME"],
|
45
|
+
password: ENV["NATURAL_LANGUAGE_UNDERSTANDING_PASSWORD"]
|
46
|
+
)
|
47
|
+
service.add_default_headers(
|
48
|
+
headers: {
|
49
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
50
|
+
"X-Watson-Test" => "1"
|
51
|
+
}
|
52
|
+
)
|
53
|
+
service_response = service.analyze(
|
54
|
+
features: {
|
55
|
+
sentiment: {}
|
56
|
+
},
|
57
|
+
html: "<span>hello this is a test </span>"
|
58
|
+
)
|
59
|
+
assert((200..299).cover?(service_response.status))
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_url_analyze
|
63
|
+
service = IBMWatson::NaturalLanguageUnderstandingV1.new(
|
64
|
+
version: "2018-03-16",
|
65
|
+
username: ENV["NATURAL_LANGUAGE_UNDERSTANDING_USERNAME"],
|
66
|
+
password: ENV["NATURAL_LANGUAGE_UNDERSTANDING_PASSWORD"]
|
67
|
+
)
|
68
|
+
service.add_default_headers(
|
69
|
+
headers: {
|
70
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
71
|
+
"X-Watson-Test" => "1"
|
72
|
+
}
|
73
|
+
)
|
74
|
+
service_response = service.analyze(
|
75
|
+
features: {
|
76
|
+
categories: {}
|
77
|
+
},
|
78
|
+
url: "www.ibm.com"
|
79
|
+
)
|
80
|
+
assert((200..299).cover?(service_response.status))
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_list_models
|
84
|
+
service = IBMWatson::NaturalLanguageUnderstandingV1.new(
|
85
|
+
version: "2018-03-16",
|
86
|
+
username: ENV["NATURAL_LANGUAGE_UNDERSTANDING_USERNAME"],
|
87
|
+
password: ENV["NATURAL_LANGUAGE_UNDERSTANDING_PASSWORD"]
|
88
|
+
)
|
89
|
+
service.add_default_headers(
|
90
|
+
headers: {
|
91
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
92
|
+
"X-Watson-Test" => "1"
|
93
|
+
}
|
94
|
+
)
|
95
|
+
service_response = service.list_models
|
96
|
+
assert((200..299).cover?(service_response.status))
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require("json")
|
4
|
+
require_relative("./../test_helper.rb")
|
5
|
+
|
6
|
+
# Integration tests for the Personality Insights V3 Service
|
7
|
+
class PersonalityInsightsV3Test < Minitest::Test
|
8
|
+
def test_plain_to_json
|
9
|
+
personality_text = File.read(Dir.getwd + "/resources/personality-v3.txt")
|
10
|
+
service = IBMWatson::PersonalityInsightsV3.new(
|
11
|
+
version: "2017-10-13",
|
12
|
+
username: ENV["PERSONALITY_INSIGHTS_USERNAME"],
|
13
|
+
password: ENV["PERSONALITY_INSIGHTS_PASSWORD"]
|
14
|
+
)
|
15
|
+
service.add_default_headers(
|
16
|
+
headers: {
|
17
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
18
|
+
"X-Watson-Test" => "1"
|
19
|
+
}
|
20
|
+
)
|
21
|
+
service_response = service.profile(
|
22
|
+
content: personality_text,
|
23
|
+
content_type: "text/plain;charset=utf-8"
|
24
|
+
)
|
25
|
+
assert((200..299).cover?(service_response.status))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_json_to_json
|
29
|
+
personality_text = File.read(Dir.getwd + "/resources/personality-v3.json")
|
30
|
+
service = IBMWatson::PersonalityInsightsV3.new(
|
31
|
+
version: "2017-10-13",
|
32
|
+
username: ENV["PERSONALITY_INSIGHTS_USERNAME"],
|
33
|
+
password: ENV["PERSONALITY_INSIGHTS_PASSWORD"]
|
34
|
+
)
|
35
|
+
service.add_default_headers(
|
36
|
+
headers: {
|
37
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
38
|
+
"X-Watson-Test" => "1"
|
39
|
+
}
|
40
|
+
)
|
41
|
+
service_response = service.profile(
|
42
|
+
content: personality_text,
|
43
|
+
content_type: "application/json",
|
44
|
+
raw_scores: true,
|
45
|
+
consumption_preferences: true
|
46
|
+
)
|
47
|
+
assert((200..299).cover?(service_response.status))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_json_to_csv
|
51
|
+
personality_text = File.read(Dir.getwd + "/resources/personality-v3.json")
|
52
|
+
service = IBMWatson::PersonalityInsightsV3.new(
|
53
|
+
version: "2017-10-13",
|
54
|
+
username: ENV["PERSONALITY_INSIGHTS_USERNAME"],
|
55
|
+
password: ENV["PERSONALITY_INSIGHTS_PASSWORD"]
|
56
|
+
)
|
57
|
+
service.add_default_headers(
|
58
|
+
headers: {
|
59
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
60
|
+
"X-Watson-Test" => "1"
|
61
|
+
}
|
62
|
+
)
|
63
|
+
service_response = service.profile(
|
64
|
+
content: personality_text,
|
65
|
+
content_type: "application/json",
|
66
|
+
accept: "text/csv",
|
67
|
+
csv_headers: true,
|
68
|
+
raw_scores: true,
|
69
|
+
consumption_preferences: true
|
70
|
+
)
|
71
|
+
assert((200..299).cover?(service_response.status))
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_plain_to_json_es
|
75
|
+
personality_text = File.read(Dir.getwd + "/resources/personality-v3-es.txt")
|
76
|
+
service = IBMWatson::PersonalityInsightsV3.new(
|
77
|
+
version: "2017-10-13",
|
78
|
+
username: ENV["PERSONALITY_INSIGHTS_USERNAME"],
|
79
|
+
password: ENV["PERSONALITY_INSIGHTS_PASSWORD"]
|
80
|
+
)
|
81
|
+
service.add_default_headers(
|
82
|
+
headers: {
|
83
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
84
|
+
"X-Watson-Test" => "1"
|
85
|
+
}
|
86
|
+
)
|
87
|
+
service_response = service.profile(
|
88
|
+
content: personality_text,
|
89
|
+
content_type: "text/plain;charset=utf-8",
|
90
|
+
content_language: "es",
|
91
|
+
accept_language: "es"
|
92
|
+
)
|
93
|
+
assert((200..299).cover?(service_response.status))
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative("./../test_helper.rb")
|
4
|
+
require_relative("./../../lib/ibm_watson/websocket/recognize_callback.rb")
|
5
|
+
require_relative("./../../lib/ibm_watson/websocket/speech_to_text_websocket_listener.rb")
|
6
|
+
require("minitest/hooks/test")
|
7
|
+
require("concurrent")
|
8
|
+
|
9
|
+
# Recognize Callback class
|
10
|
+
class MyRecognizeCallback < IBMWatson::RecognizeCallback
|
11
|
+
def initialize(atomic_boolean: nil)
|
12
|
+
super
|
13
|
+
@atomic_boolean = atomic_boolean
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_error(error:)
|
17
|
+
puts "Error received: #{error}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_inactivity_timeout(*)
|
21
|
+
@atomic_boolean.make_true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Integration tests for the Speech to Text V1 Service
|
26
|
+
class SpeechToTextV1Test < Minitest::Test
|
27
|
+
include Minitest::Hooks
|
28
|
+
|
29
|
+
attr_accessor :service
|
30
|
+
def before_all
|
31
|
+
@service = IBMWatson::SpeechToTextV1.new(
|
32
|
+
username: ENV["SPEECH_TO_TEXT_USERNAME"],
|
33
|
+
password: ENV["SPEECH_TO_TEXT_PASSWORD"]
|
34
|
+
)
|
35
|
+
@service.add_default_headers(
|
36
|
+
headers: {
|
37
|
+
"X-Watson-Learning-Opt-Out" => "1",
|
38
|
+
"X-Watson-Test" => "1"
|
39
|
+
}
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_models
|
44
|
+
output = @service.list_models.result
|
45
|
+
refute_nil(output)
|
46
|
+
|
47
|
+
model = @service.get_model(
|
48
|
+
model_id: "ko-KR_BroadbandModel"
|
49
|
+
).result
|
50
|
+
model = model
|
51
|
+
refute_nil(model)
|
52
|
+
|
53
|
+
begin
|
54
|
+
@service.get_model(
|
55
|
+
model_id: "bogus"
|
56
|
+
)
|
57
|
+
rescue StandardError => e
|
58
|
+
refute_nil(e.global_transaction_id)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_recognize_await
|
63
|
+
audio_file = File.open(Dir.getwd + "/resources/speech.wav")
|
64
|
+
future = @service.await.recognize(
|
65
|
+
audio: audio_file,
|
66
|
+
content_type: "audio/l16; rate=44100"
|
67
|
+
)
|
68
|
+
output = future.value.result
|
69
|
+
refute_nil(output["results"][0]["alternatives"][0]["transcript"])
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_recognize_async
|
73
|
+
audio_file = File.open(Dir.getwd + "/resources/speech.wav")
|
74
|
+
future = @service.async.recognize(
|
75
|
+
audio: audio_file,
|
76
|
+
content_type: "audio/l16; rate=44100"
|
77
|
+
)
|
78
|
+
future.wait!
|
79
|
+
output = future.value.result
|
80
|
+
refute_nil(output["results"][0]["alternatives"][0]["transcript"])
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_recognitions
|
84
|
+
output = @service.check_jobs.result
|
85
|
+
refute_nil(output)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_custom_corpora
|
89
|
+
model = @service.create_language_model(
|
90
|
+
name: "integration_test_model",
|
91
|
+
base_model_name: "en-US_BroadbandModel"
|
92
|
+
).result
|
93
|
+
customization_id = model["customization_id"]
|
94
|
+
|
95
|
+
output = @service.list_corpora(
|
96
|
+
customization_id: customization_id
|
97
|
+
).result
|
98
|
+
refute_nil(output)
|
99
|
+
|
100
|
+
@service.delete_language_model(
|
101
|
+
customization_id: customization_id
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_acoustic_model
|
106
|
+
list_models = @service.list_acoustic_models.result
|
107
|
+
refute_nil(list_models)
|
108
|
+
|
109
|
+
create_acoustic_model = @service.create_acoustic_model(
|
110
|
+
name: "integration_test_model_ruby",
|
111
|
+
base_model_name: "en-US_BroadbandModel"
|
112
|
+
).result
|
113
|
+
refute_nil(create_acoustic_model)
|
114
|
+
|
115
|
+
get_acoustic_model = @service.get_acoustic_model(
|
116
|
+
customization_id: create_acoustic_model["customization_id"]
|
117
|
+
).result
|
118
|
+
refute_nil(get_acoustic_model)
|
119
|
+
|
120
|
+
@service.reset_acoustic_model(
|
121
|
+
customization_id: get_acoustic_model["customization_id"]
|
122
|
+
)
|
123
|
+
|
124
|
+
@service.delete_acoustic_model(
|
125
|
+
customization_id: get_acoustic_model["customization_id"]
|
126
|
+
)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_recognize_websocket_as_chunks
|
130
|
+
audio_file = File.open(Dir.getwd + "/resources/speech.wav")
|
131
|
+
mycallback = MyRecognizeCallback.new
|
132
|
+
speech = @service.recognize_with_websocket(
|
133
|
+
chunk_data: true,
|
134
|
+
recognize_callback: mycallback,
|
135
|
+
interim_results: true,
|
136
|
+
timestamps: true,
|
137
|
+
max_alternatives: 2,
|
138
|
+
word_alternatives_threshold: 0.5,
|
139
|
+
model: "en-US_BroadbandModel"
|
140
|
+
)
|
141
|
+
Thread.new do
|
142
|
+
until audio_file.eof?
|
143
|
+
chunk = audio_file.read(1024)
|
144
|
+
speech.add_audio_chunk(chunk: chunk)
|
145
|
+
end
|
146
|
+
sleep(1)
|
147
|
+
speech.stop_audio # Tell the websocket object that no more audio will be added
|
148
|
+
end
|
149
|
+
thr = Thread.new { speech.start }
|
150
|
+
thr.join
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_recognize_websocket
|
154
|
+
audio_file = File.open(Dir.getwd + "/resources/speech.wav")
|
155
|
+
mycallback = MyRecognizeCallback.new
|
156
|
+
speech = @service.recognize_with_websocket(
|
157
|
+
audio: audio_file,
|
158
|
+
recognize_callback: mycallback,
|
159
|
+
interim_results: true,
|
160
|
+
timestamps: true,
|
161
|
+
max_alternatives: 2,
|
162
|
+
word_alternatives_threshold: 0.5,
|
163
|
+
model: "en-US_BroadbandModel"
|
164
|
+
)
|
165
|
+
thr = Thread.new { speech.start }
|
166
|
+
thr.join
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_inactivity_timeout_with_websocket
|
170
|
+
audio_file = File.open(Dir.getwd + "/resources/sound-with-pause.wav")
|
171
|
+
atomic_boolean = Concurrent::AtomicBoolean.new
|
172
|
+
mycallback = MyRecognizeCallback.new(atomic_boolean: atomic_boolean)
|
173
|
+
speech = @service.recognize_with_websocket(
|
174
|
+
audio: audio_file,
|
175
|
+
recognize_callback: mycallback,
|
176
|
+
interim_results: true,
|
177
|
+
inactivity_timeout: 3,
|
178
|
+
timestamps: true,
|
179
|
+
max_alternatives: 2,
|
180
|
+
word_alternatives_threshold: 0.5,
|
181
|
+
model: "en-US_BroadbandModel"
|
182
|
+
)
|
183
|
+
thr = Thread.new { speech.start }
|
184
|
+
thr.join
|
185
|
+
assert(atomic_boolean.true?)
|
186
|
+
end
|
187
|
+
end
|