Title: [271958] trunk/Source/WebCore
Revision
271958
Author
[email protected]
Date
2021-01-27 09:39:23 -0800 (Wed, 27 Jan 2021)

Log Message

Use SFTranscription instead of SFTranscriptionSegment for SpeechRecognitionAlternative
https://bugs.webkit.org/show_bug.cgi?id=221026

Patch by Sihui Liu <[email protected]> on 2021-01-27
Reviewed by Youenn Fablet.

So SpeechRecognitionAlternative contains a sentence instead of a word, which matches Blink's behavior.

Manually tested in MiniBrowser.

* Modules/speech/cocoa/WebSpeechRecognizerTask.mm:
(-[WebSpeechRecognizerTaskImpl callbackWithTranscriptions:isFinal:]):
(-[WebSpeechRecognizerTaskImpl speechRecognitionTask:didHypothesizeTranscription:]):
(-[WebSpeechRecognizerTaskImpl speechRecognitionTask:didFinishRecognition:]):
(-[WebSpeechRecognizerTaskImpl callbackWithResult:isFinal:]): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (271957 => 271958)


--- trunk/Source/WebCore/ChangeLog	2021-01-27 17:37:36 UTC (rev 271957)
+++ trunk/Source/WebCore/ChangeLog	2021-01-27 17:39:23 UTC (rev 271958)
@@ -1,3 +1,20 @@
+2021-01-27  Sihui Liu  <[email protected]>
+
+        Use SFTranscription instead of SFTranscriptionSegment for SpeechRecognitionAlternative
+        https://bugs.webkit.org/show_bug.cgi?id=221026
+
+        Reviewed by Youenn Fablet.
+
+        So SpeechRecognitionAlternative contains a sentence instead of a word, which matches Blink's behavior.
+
+        Manually tested in MiniBrowser.
+
+        * Modules/speech/cocoa/WebSpeechRecognizerTask.mm:
+        (-[WebSpeechRecognizerTaskImpl callbackWithTranscriptions:isFinal:]):
+        (-[WebSpeechRecognizerTaskImpl speechRecognitionTask:didHypothesizeTranscription:]):
+        (-[WebSpeechRecognizerTaskImpl speechRecognitionTask:didFinishRecognition:]):
+        (-[WebSpeechRecognizerTaskImpl callbackWithResult:isFinal:]): Deleted.
+
 2021-01-27  Zalan Bujtas  <[email protected]>
 
         [LFC][IFC] Expand "empty line" fast path support for multiline inline boxes

Modified: trunk/Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTask.mm (271957 => 271958)


--- trunk/Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTask.mm	2021-01-27 17:37:36 UTC (rev 271957)
+++ trunk/Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTask.mm	2021-01-27 17:39:23 UTC (rev 271958)
@@ -56,7 +56,7 @@
 }
 
 - (instancetype)initWithIdentifier:(SpeechRecognitionConnectionClientIdentifier)identifier locale:(NSString*)localeIdentifier doMultipleRecognitions:(BOOL)continuous reportInterimResults:(BOOL)interimResults maxAlternatives:(unsigned long)alternatives delegateCallback:(void(^)(const SpeechRecognitionUpdate&))callback;
-- (void)callbackWithResult:(SFTranscription *)transcription isFinal:(BOOL)isFinal;
+- (void)callbackWithTranscriptions:(NSArray<SFTranscription *> *)transcriptions isFinal:(BOOL)isFinal;
 - (void)audioSamplesAvailable:(CMSampleBufferRef)sampleBuffer;
 - (void)abort;
 - (void)stop;
@@ -113,24 +113,23 @@
     return self;
 }
 
-- (void)callbackWithResult:(SFTranscription *)transcription isFinal:(BOOL)isFinal
+- (void)callbackWithTranscriptions:(NSArray<SFTranscription *> *)transcriptions isFinal:(BOOL)isFinal
 {
-    auto segments = [transcription segments];
-    Vector<SpeechRecognitionResultData> datas;
-    datas.reserveInitialCapacity(segments.count);
-    for (SFTranscriptionSegment* segment in segments) {
-        // Note segment confidence is reported 0 when result is not final.
-        Vector<SpeechRecognitionAlternativeData> alternatives;
-        alternatives.reserveInitialCapacity(_maxAlternatives);
-        alternatives.uncheckedAppend(SpeechRecognitionAlternativeData { [segment substring], [segment confidence] });
-        for (NSString* segmentAlternative : [segment alternativeSubstrings]) {
-            if (alternatives.size() == _maxAlternatives)
-                break;
-            // FIXME: calculate or get alternative confidence if possible.
-            alternatives.uncheckedAppend(SpeechRecognitionAlternativeData { segmentAlternative, 0.0 });
+    Vector<SpeechRecognitionAlternativeData> alternatives;
+    alternatives.reserveInitialCapacity(_maxAlternatives);
+    for (SFTranscription* transcription in transcriptions) {
+        // FIXME: <rdar://73629573> get confidence of SFTranscription when possible.
+        double maxConfidence = 0.0;
+        for (SFTranscriptionSegment* segment in [transcription segments]) {
+            double confidence = [segment confidence];
+            maxConfidence = maxConfidence < confidence ? confidence : maxConfidence;
         }
-        datas.uncheckedAppend(SpeechRecognitionResultData { WTFMove(alternatives), bool(isFinal) });
+        alternatives.uncheckedAppend(SpeechRecognitionAlternativeData { [transcription formattedString], maxConfidence });
+        if (alternatives.size() == _maxAlternatives)
+            break;
     }
+    Vector<SpeechRecognitionResultData> datas;
+    datas.append(SpeechRecognitionResultData { WTFMove(alternatives), bool(isFinal) });
     _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, WTFMove(datas)));
 }
 
@@ -219,15 +218,14 @@
     ASSERT(isMainThread());
 
     [self sendSpeechStartIfNeeded];
-    [self callbackWithResult:transcription isFinal:NO];
+    [self callbackWithTranscriptions:[NSArray arrayWithObjects:transcription, nil] isFinal:NO];
 }
 
 - (void)speechRecognitionTask:(SFSpeechRecognitionTask *)task didFinishRecognition:(SFSpeechRecognitionResult *)recognitionResult
 {
     ASSERT(isMainThread());
+    [self callbackWithTranscriptions:recognitionResult.transcriptions isFinal:YES];
 
-    [self callbackWithResult:recognitionResult.bestTranscription isFinal:YES];
-
     if (!_doMultipleRecognitions) {
         [self sendSpeechEndIfNeeded];
         [self sendEndIfNeeded];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to