Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
45d32b6f
Commit
45d32b6f
authored
May 20, 2022
by
helinlin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调整语音转文字关键字摘取逻辑
parent
bec09bc8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
75 deletions
+34
-75
RealTimeSpeechTranscriberListener.java
...cs/biz/audioToText/RealTimeSpeechTranscriberListener.java
+31
-72
AppSpeechTranscriber.java
...in/java/com/yeejoin/amos/speech/AppSpeechTranscriber.java
+3
-3
No files found.
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/audioToText/RealTimeSpeechTranscriberListener.java
View file @
45d32b6f
...
...
@@ -26,13 +26,9 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
private
final
EmqKeeper
emqKeeper
;
private
final
List
<
AudioRecord
>
audioRecords
;
private
final
AudioKeyWord
audioKeyWords
;
private
final
ObjectMapper
objectMapper
=
new
ObjectMapper
();
public
RealTimeSpeechTranscriberListener
(
String
myNumber
,
String
typeNumber
,
EmqKeeper
emqKeeper
,
List
<
AudioRecord
>
audioRecords
,
AudioKeyWord
audioKeyWords
)
{
public
RealTimeSpeechTranscriberListener
(
String
myNumber
,
String
typeNumber
,
EmqKeeper
emqKeeper
,
List
<
AudioRecord
>
audioRecords
,
AudioKeyWord
audioKeyWords
)
{
this
.
myNumber
=
myNumber
;
this
.
typeNumber
=
typeNumber
;
this
.
emqKeeper
=
emqKeeper
;
...
...
@@ -46,8 +42,7 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
@Override
public
void
onTranscriptionResultChange
(
SpeechTranscriberResponse
response
)
{
logger
.
warn
(
"语音识别过程中返回的结果"
);
logger
.
warn
(
"task_id: "
+
response
.
getTaskId
()
+
", name: "
+
response
.
getName
()
+
logger
.
warn
(
"task_id: "
+
response
.
getTaskId
()
+
", name: "
+
response
.
getName
()
+
//状态码“20000000”表示正常识别。
", status: "
+
response
.
getStatus
()
+
//句子编号,从1开始递增。
...
...
@@ -83,8 +78,7 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
@Override
public
void
onSentenceEnd
(
SpeechTranscriberResponse
response
)
{
logger
.
warn
(
"服务端检测到了一句话的结束"
);
logger
.
warn
(
"task_id: "
+
response
.
getTaskId
()
+
", name: "
+
response
.
getName
()
+
logger
.
warn
(
"task_id: "
+
response
.
getTaskId
()
+
", name: "
+
response
.
getName
()
+
//状态码“20000000”表示正常识别。
", status: "
+
response
.
getStatus
()
+
//句子编号,从1开始递增。
...
...
@@ -106,10 +100,7 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
@Override
public
void
onTranscriptionComplete
(
SpeechTranscriberResponse
response
)
{
logger
.
warn
(
"识别结束后返回的最终结果"
);
logger
.
warn
(
"task_id: "
+
response
.
getTaskId
()
+
", name: "
+
response
.
getName
()
+
", status: "
+
response
.
getStatus
()
+
",result:"
+
response
.
getTransSentenceText
());
logger
.
warn
(
"task_id: "
+
response
.
getTaskId
()
+
", name: "
+
response
.
getName
()
+
", status: "
+
response
.
getStatus
()
+
",result:"
+
response
.
getTransSentenceText
());
try
{
emqKeeper
.
getMqttClient
().
publish
(
AudioTopic
.
RECORD
.
getName
()
+
"/"
+
myNumber
,
""
.
getBytes
(),
2
,
true
);
emqKeeper
.
getMqttClient
().
publish
(
AudioTopic
.
KEYWORD
.
getName
()
+
"/"
+
myNumber
,
""
.
getBytes
(),
2
,
true
);
...
...
@@ -124,23 +115,12 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
@Override
public
void
onFail
(
SpeechTranscriberResponse
response
)
{
logger
.
error
(
"失败处理"
);
logger
.
error
(
"task_id: "
+
response
.
getTaskId
()
+
", status: "
+
response
.
getStatus
()
+
", status_text: "
+
response
.
getStatusText
());
logger
.
error
(
"task_id: "
+
response
.
getTaskId
()
+
", status: "
+
response
.
getStatus
()
+
", status_text: "
+
response
.
getStatusText
());
}
private
void
responseHandler
(
SpeechTranscriberResponse
response
)
{
if
(
response
.
getStatus
()
==
RESULT_SUCCESS_CODE
)
{
AudioRecord
audioRecord
=
new
AudioRecord
.
AudioRecordBuilder
()
.
type
(
typeNumber
)
.
taskId
(
response
.
getTaskId
())
.
name
(
response
.
getName
())
.
status
(
response
.
getStatus
())
.
index
(
response
.
getTransSentenceIndex
())
.
message
(
response
.
getTransSentenceText
())
.
confidence
(
response
.
getConfidence
())
.
time
(
response
.
getTransSentenceTime
())
.
build
();
AudioRecord
audioRecord
=
new
AudioRecord
.
AudioRecordBuilder
().
type
(
typeNumber
).
taskId
(
response
.
getTaskId
()).
name
(
response
.
getName
()).
status
(
response
.
getStatus
()).
index
(
response
.
getTransSentenceIndex
()).
message
(
response
.
getTransSentenceText
()).
confidence
(
response
.
getConfidence
()).
time
(
response
.
getTransSentenceTime
()).
build
();
int
index
=
audioRecord
.
getIndex
()
-
1
;
if
(
index
>=
audioRecords
.
size
())
{
audioRecords
.
add
(
audioRecord
);
...
...
@@ -178,15 +158,11 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
public
void
sendKeyword
()
{
audioKeyWords
.
getValues
().
values
().
forEach
(
Set:
:
clear
);
try
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
audioRecords
.
forEach
(
audioRecord
->
{
stringBuilder
.
append
(
","
).
append
(
audioRecord
.
getMessage
());
});
stringBuilder
.
append
(
","
);
String
result
=
stringBuilder
.
toString
();
//寻找电话号码
StringBuilder
stringBuilder
=
new
StringBuilder
();
audioRecords
.
forEach
(
audioRecord
->
stringBuilder
.
append
(
","
).
append
(
audioRecord
.
getMessage
()));
Pattern
pattern
=
Pattern
.
compile
(
"\\d{5,}"
);
Matcher
matcher
=
pattern
.
matcher
(
result
);
Matcher
matcher
=
pattern
.
matcher
(
stringBuilder
.
toString
()
);
while
(
matcher
.
find
())
{
audioKeyWords
.
getValues
().
get
(
AudioKeywordType
.
CONTACT_NUMBER
.
getType
()).
add
(
matcher
.
group
());
}
...
...
@@ -194,30 +170,31 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
for
(
AudioKeywordType
messageKeyword
:
AudioKeywordType
.
values
())
{
if
(
messageKeyword
==
AudioKeywordType
.
CONTACT_NUMBER
)
continue
;
for
(
String
keyword
:
messageKeyword
.
getKeyword
())
{
int
keywordIndex
=
result
.
indexOf
(
keyword
);
// 第一种(获取keyword紧跟的内容到下一个[,/。]号的内容作为关键字)
if
(
keywordIndex
!=
-
1
)
{
int
keyWordValueEndIndex
=
getKeyWordValueIndex
(
result
,
keywordIndex
);
if
(
keyWordValueEndIndex
==
-
1
)
continue
;
String
keywordValue
=
result
.
substring
(
keywordIndex
+
keyword
.
length
(),
keyWordValueEndIndex
);
if
(!
StringUtils
.
isEmpty
(
keywordValue
)
&&
keywordValue
.
length
()
>=
4
)
{
audioKeyWords
.
getValues
().
get
(
messageKeyword
.
getType
()).
add
(
keywordValue
);
continue
;
for
(
int
i
=
0
;
i
<
audioRecords
.
size
();
i
++)
{
String
message
=
audioRecords
.
get
(
i
).
getMessage
();
String
nextMessage
=
""
;
if
(
i
+
1
<
audioRecords
.
size
())
{
nextMessage
=
audioRecords
.
get
(
i
+
1
).
getMessage
();
}
int
keywordIndex
=
message
.
indexOf
(
keyword
);
if
(
keywordIndex
!=
-
1
)
{
try
{
// 第一种(获取keyword紧跟的内容直至结束)
String
keywordValue
=
message
.
substring
(
keywordIndex
+
keyword
.
length
());
if
(!
StringUtils
.
isEmpty
(
keywordValue
)
&&
keywordValue
.
length
()
>
2
)
{
audioKeyWords
.
getValues
().
get
(
messageKeyword
.
getType
()).
add
(
keywordValue
);
}
// 第二种(获取keyword的下一句话直至结束)
if
(!
StringUtils
.
isEmpty
(
nextMessage
))
{
audioKeyWords
.
getValues
().
get
(
messageKeyword
.
getType
()).
add
(
nextMessage
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
());
}
}
}
// 第二种(获取keyword的下一个[,/。]号和下下一个[,/。]号的内容作为关键字)
if
(
keywordIndex
!=
-
1
)
{
int
keyWordValueStartIndex
=
getKeyWordValueIndex
(
result
,
keywordIndex
);
if
(
keyWordValueStartIndex
==
-
1
)
continue
;
int
keyWordValueEndIndex
=
getKeyWordValueIndex
(
result
,
keyWordValueStartIndex
);
if
(
keyWordValueEndIndex
==
-
1
)
continue
;
String
keywordValue
=
result
.
substring
(
keyWordValueStartIndex
+
1
<
result
.
length
()
?
keyWordValueStartIndex
+
1
:
keyWordValueStartIndex
,
keyWordValueEndIndex
);
if
(
StringUtils
.
isEmpty
(
keywordValue
))
continue
;
audioKeyWords
.
getValues
().
get
(
messageKeyword
.
getType
()).
add
(
keywordValue
);
}
}
}
ObjectMapper
objectMapper
=
new
ObjectMapper
();
byte
[]
bytes
=
objectMapper
.
writeValueAsString
(
audioKeyWords
.
getValues
()).
getBytes
();
emqKeeper
.
getMqttClient
().
publish
(
AudioTopic
.
KEYWORD
.
getName
()
+
"/"
+
myNumber
,
bytes
,
2
,
false
);
}
catch
(
Exception
e
)
{
...
...
@@ -225,24 +202,6 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
logger
.
error
(
"发送音频关键字消息异常,原因:"
+
e
.
getMessage
());
}
}
private
int
getKeyWordValueIndex
(
String
text
,
int
keywordIndex
)
{
int
keywordIndexNextFlag
=
-
1
;
int
keywordIndexNextFlag1
=
text
.
indexOf
(
","
,
keywordIndex
+
1
);
int
keywordIndexNextFlag2
=
text
.
indexOf
(
"。"
,
keywordIndex
+
1
);
if
(
keywordIndexNextFlag1
!=
-
1
)
{
if
(
keywordIndexNextFlag2
!=
-
1
)
{
keywordIndexNextFlag
=
Math
.
min
(
keywordIndexNextFlag1
,
keywordIndexNextFlag2
);
}
else
{
keywordIndexNextFlag
=
keywordIndexNextFlag1
;
}
}
else
{
if
(
keywordIndexNextFlag2
!=
-
1
)
{
keywordIndexNextFlag
=
keywordIndexNextFlag2
;
}
}
return
keywordIndexNextFlag
;
}
}
...
...
amos-boot-utils/amos-boot-utils-speech/src/main/java/com/yeejoin/amos/speech/AppSpeechTranscriber.java
View file @
45d32b6f
...
...
@@ -107,13 +107,13 @@ public class AppSpeechTranscriber {
//输入音频采样率。
transcriber
.
setSampleRate
(
SampleRateEnum
.
SAMPLE_RATE_16K
);
//是否返回中间识别结果。
transcriber
.
setEnableIntermediateResult
(
tru
e
);
transcriber
.
setEnableIntermediateResult
(
fals
e
);
//是否生成并返回标点符号。
transcriber
.
setEnablePunctuation
(
tru
e
);
transcriber
.
setEnablePunctuation
(
fals
e
);
//是否将返回结果规整化,比如将一百返回为100。
transcriber
.
setEnableITN
(
true
);
//设置vad断句参数。默认值:800ms,有效值:200ms~2000ms。
transcriber
.
addCustomedParam
(
"max_sentence_silence"
,
5
00
);
transcriber
.
addCustomedParam
(
"max_sentence_silence"
,
8
00
);
//设置是否语义断句。
//transcriber.addCustomedParam("enable_semantic_sentence_detection",false);
//设置是否开启顺滑。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment