Anchor-annotator 0.7.1__py3-none-any.whl → 0.8.1__py3-none-any.whl
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.
- {Anchor_annotator-0.7.1.dist-info → Anchor_annotator-0.8.1.dist-info}/METADATA +1 -1
- Anchor_annotator-0.8.1.dist-info/RECORD +22 -0
- {Anchor_annotator-0.7.1.dist-info → Anchor_annotator-0.8.1.dist-info}/WHEEL +1 -1
- anchor/_version.py +2 -2
- anchor/main.py +151 -16
- anchor/models.py +76 -45
- anchor/plot.py +152 -64
- anchor/resources_rc.py +32928 -121948
- anchor/settings.py +31 -3
- anchor/ui_main_window.py +80 -17
- anchor/ui_preferences.py +27 -14
- anchor/undo.py +15 -9
- anchor/widgets.py +17 -16
- anchor/workers.py +218 -8
- Anchor_annotator-0.7.1.dist-info/RECORD +0 -22
- {Anchor_annotator-0.7.1.dist-info → Anchor_annotator-0.8.1.dist-info}/LICENSE +0 -0
- {Anchor_annotator-0.7.1.dist-info → Anchor_annotator-0.8.1.dist-info}/top_level.txt +0 -0
anchor/settings.py
CHANGED
@@ -46,6 +46,9 @@ class AnchorSettings(QtCore.QSettings):
|
|
46
46
|
IE_MODEL_PATH = "ie_model_path"
|
47
47
|
PHONE_MAPPING_PATH = "phone_mapping_path"
|
48
48
|
REFERENCE_ALIGNMENT_PATH = "reference_alignment_path"
|
49
|
+
LANGUAGE = "language"
|
50
|
+
VAD_MODEL = "kaldi"
|
51
|
+
SPECTRAL_FEATURES = "spectrogram"
|
49
52
|
|
50
53
|
AUTOSAVE = "anchor/autosave"
|
51
54
|
AUTOLOAD = "anchor/autoload"
|
@@ -99,6 +102,7 @@ class AnchorSettings(QtCore.QSettings):
|
|
99
102
|
LOCKED = "anchor/locked"
|
100
103
|
CUDA = "anchor/cuda"
|
101
104
|
GITHUB_TOKEN = "anchor/github_token"
|
105
|
+
HF_TOKEN = "anchor/hf_token"
|
102
106
|
TIME_DIRECTION = "anchor/time_direction"
|
103
107
|
RTL = "Right-to-left"
|
104
108
|
LTR = "Left-to-right"
|
@@ -177,8 +181,8 @@ class AnchorSettings(QtCore.QSettings):
|
|
177
181
|
AnchorSettings.ZOOM_IN_KEYBIND: "Ctrl+I",
|
178
182
|
AnchorSettings.ZOOM_OUT_KEYBIND: "Ctrl+O",
|
179
183
|
AnchorSettings.ZOOM_TO_SELECTION_KEYBIND: "Ctrl+N",
|
180
|
-
AnchorSettings.PAN_LEFT_KEYBIND: "
|
181
|
-
AnchorSettings.PAN_RIGHT_KEYBIND: "
|
184
|
+
AnchorSettings.PAN_LEFT_KEYBIND: "Left",
|
185
|
+
AnchorSettings.PAN_RIGHT_KEYBIND: "Right",
|
182
186
|
AnchorSettings.UNDO_KEYBIND: "Ctrl+Z",
|
183
187
|
AnchorSettings.REDO_KEYBIND: "Ctrl+Shift+Z",
|
184
188
|
AnchorSettings.RESULTS_PER_PAGE: 100,
|
@@ -220,6 +224,9 @@ class AnchorSettings(QtCore.QSettings):
|
|
220
224
|
AnchorSettings.TIER_TRANSCRIBED_WORDS_VISIBLE: True,
|
221
225
|
AnchorSettings.TIER_TRANSCRIBED_PHONES_VISIBLE: True,
|
222
226
|
AnchorSettings.THEME_PRESET: "MFA",
|
227
|
+
AnchorSettings.LANGUAGE: "unknown",
|
228
|
+
AnchorSettings.VAD_MODEL: "kaldi",
|
229
|
+
AnchorSettings.SPECTRAL_FEATURES: "spectrogram",
|
223
230
|
AnchorSettings.PLOT_THREAD_COUNT: 10,
|
224
231
|
}
|
225
232
|
self.default_values.update(self.mfa_theme)
|
@@ -244,6 +251,27 @@ class AnchorSettings(QtCore.QSettings):
|
|
244
251
|
"Transcribed phones": AnchorSettings.TIER_TRANSCRIBED_PHONES_VISIBLE,
|
245
252
|
}
|
246
253
|
|
254
|
+
@property
|
255
|
+
def all_keybinds(self):
|
256
|
+
return {
|
257
|
+
QtGui.QKeySequence(self.value(x))
|
258
|
+
for x in [
|
259
|
+
self.DELETE_KEYBIND,
|
260
|
+
self.MERGE_KEYBIND,
|
261
|
+
self.PAN_LEFT_KEYBIND,
|
262
|
+
self.PAN_RIGHT_KEYBIND,
|
263
|
+
self.PLAY_KEYBIND,
|
264
|
+
self.REDO_KEYBIND,
|
265
|
+
self.UNDO_KEYBIND,
|
266
|
+
self.SAVE_KEYBIND,
|
267
|
+
self.SEARCH_KEYBIND,
|
268
|
+
self.SPLIT_KEYBIND,
|
269
|
+
self.ZOOM_IN_KEYBIND,
|
270
|
+
self.ZOOM_OUT_KEYBIND,
|
271
|
+
self.ZOOM_TO_SELECTION_KEYBIND,
|
272
|
+
]
|
273
|
+
}
|
274
|
+
|
247
275
|
@property
|
248
276
|
def right_to_left(self) -> bool:
|
249
277
|
return self.value(AnchorSettings.TIME_DIRECTION) == AnchorSettings.RTL
|
@@ -778,7 +806,7 @@ class AnchorSettings(QtCore.QSettings):
|
|
778
806
|
border: {self.border_width}px solid {enabled_border_color};
|
779
807
|
}}
|
780
808
|
QCheckBox::indicator:checked {{
|
781
|
-
image: url(:/icons/
|
809
|
+
image: url(:/icons/anchor_light/actions/check.svg);
|
782
810
|
}}
|
783
811
|
QTextEdit{{
|
784
812
|
color: {text_edit_color};
|
anchor/ui_main_window.py
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
################################################################################
|
4
4
|
## Form generated from reading UI file 'main_window.ui'
|
5
5
|
##
|
6
|
-
## Created by: Qt User Interface Compiler version 6.
|
6
|
+
## Created by: Qt User Interface Compiler version 6.7.2
|
7
7
|
##
|
8
8
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
9
9
|
################################################################################
|
@@ -77,7 +77,7 @@ class Ui_MainWindow(object):
|
|
77
77
|
MainWindow.setObjectName("MainWindow")
|
78
78
|
MainWindow.resize(1448, 974)
|
79
79
|
icon = QIcon()
|
80
|
-
icon.addFile(":/anchor-yellow.svg", QSize(), QIcon.Normal, QIcon.Off)
|
80
|
+
icon.addFile(":/anchor-yellow.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
81
81
|
MainWindow.setWindowIcon(icon)
|
82
82
|
MainWindow.setStyleSheet("")
|
83
83
|
MainWindow.setAnimated(True)
|
@@ -237,18 +237,23 @@ class Ui_MainWindow(object):
|
|
237
237
|
self.alignUtteranceAct.setEnabled(False)
|
238
238
|
icon19 = QIcon(QIcon.fromTheme("edit-magic"))
|
239
239
|
self.alignUtteranceAct.setIcon(icon19)
|
240
|
+
self.trimUtteranceAct = QAction(MainWindow)
|
241
|
+
self.trimUtteranceAct.setObjectName("trimUtteranceAct")
|
242
|
+
self.trimUtteranceAct.setEnabled(False)
|
243
|
+
icon20 = QIcon(QIcon.fromTheme("edit-scissors"))
|
244
|
+
self.trimUtteranceAct.setIcon(icon20)
|
240
245
|
self.reloadCorpusAct = QAction(MainWindow)
|
241
246
|
self.reloadCorpusAct.setObjectName("reloadCorpusAct")
|
242
247
|
self.zoomToSelectionAct = QAction(MainWindow)
|
243
248
|
self.zoomToSelectionAct.setObjectName("zoomToSelectionAct")
|
244
249
|
self.zoomToSelectionAct.setEnabled(False)
|
245
|
-
|
246
|
-
self.zoomToSelectionAct.setIcon(
|
250
|
+
icon21 = QIcon(QIcon.fromTheme("zoom-fit-best"))
|
251
|
+
self.zoomToSelectionAct.setIcon(icon21)
|
247
252
|
self.oovsOnlyAct = QAction(MainWindow)
|
248
253
|
self.oovsOnlyAct.setObjectName("oovsOnlyAct")
|
249
254
|
self.oovsOnlyAct.setCheckable(True)
|
250
|
-
|
251
|
-
self.oovsOnlyAct.setIcon(
|
255
|
+
icon22 = QIcon(QIcon.fromTheme("tools-check-spelling"))
|
256
|
+
self.oovsOnlyAct.setIcon(icon22)
|
252
257
|
self.diarizeSpeakersAct = QAction(MainWindow)
|
253
258
|
self.diarizeSpeakersAct.setObjectName("diarizeSpeakersAct")
|
254
259
|
self.find_duplicates_action = QAction(MainWindow)
|
@@ -264,6 +269,20 @@ class Ui_MainWindow(object):
|
|
264
269
|
self.openCorpusManagerAct.setObjectName("openCorpusManagerAct")
|
265
270
|
self.verifyTranscriptsAct = QAction(MainWindow)
|
266
271
|
self.verifyTranscriptsAct.setObjectName("verifyTranscriptsAct")
|
272
|
+
self.transcribeUtteranceAct = QAction(MainWindow)
|
273
|
+
self.transcribeUtteranceAct.setObjectName("transcribeUtteranceAct")
|
274
|
+
self.transcribeUtteranceAct.setEnabled(False)
|
275
|
+
icon23 = QIcon(QIcon.fromTheme("edit-pen"))
|
276
|
+
self.transcribeUtteranceAct.setIcon(icon23)
|
277
|
+
self.actionLoad_VAD_model = QAction(MainWindow)
|
278
|
+
self.actionLoad_VAD_model.setObjectName("actionLoad_VAD_model")
|
279
|
+
self.speechbrainVadAct = QAction(MainWindow)
|
280
|
+
self.speechbrainVadAct.setObjectName("speechbrainVadAct")
|
281
|
+
self.speechbrainVadAct.setCheckable(True)
|
282
|
+
self.speechbrainVadAct.setEnabled(False)
|
283
|
+
self.kaldiVadAct = QAction(MainWindow)
|
284
|
+
self.kaldiVadAct.setObjectName("kaldiVadAct")
|
285
|
+
self.kaldiVadAct.setCheckable(True)
|
267
286
|
self.centralwidget = QWidget(MainWindow)
|
268
287
|
self.centralwidget.setObjectName("centralwidget")
|
269
288
|
self.verticalLayout_4 = QVBoxLayout(self.centralwidget)
|
@@ -327,12 +346,16 @@ class Ui_MainWindow(object):
|
|
327
346
|
self.menuDownload_G2P_model = QMenu(self.menuModels)
|
328
347
|
self.menuDownload_G2P_model.setObjectName("menuDownload_G2P_model")
|
329
348
|
self.menuDownload_G2P_model.setMaximumSize(QSize(200, 400))
|
349
|
+
self.vadModelMenu = QMenu(self.menuModels)
|
350
|
+
self.vadModelMenu.setObjectName("vadModelMenu")
|
330
351
|
self.menuAlignment = QMenu(self.menubar)
|
331
352
|
self.menuAlignment.setObjectName("menuAlignment")
|
332
353
|
self.menuTranscription = QMenu(self.menubar)
|
333
354
|
self.menuTranscription.setObjectName("menuTranscription")
|
334
355
|
self.menuExperimental = QMenu(self.menubar)
|
335
356
|
self.menuExperimental.setObjectName("menuExperimental")
|
357
|
+
self.menuLanguage = QMenu(self.menubar)
|
358
|
+
self.menuLanguage.setObjectName("menuLanguage")
|
336
359
|
MainWindow.setMenuBar(self.menubar)
|
337
360
|
self.statusbar = QStatusBar(MainWindow)
|
338
361
|
self.statusbar.setObjectName("statusbar")
|
@@ -347,23 +370,23 @@ class Ui_MainWindow(object):
|
|
347
370
|
self.utteranceListWidget = UtteranceListWidget()
|
348
371
|
self.utteranceListWidget.setObjectName("utteranceListWidget")
|
349
372
|
self.utteranceDockWidget.setWidget(self.utteranceListWidget)
|
350
|
-
MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.utteranceDockWidget)
|
373
|
+
MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.utteranceDockWidget)
|
351
374
|
self.dictionaryDockWidget = QDockWidget(MainWindow)
|
352
375
|
self.dictionaryDockWidget.setObjectName("dictionaryDockWidget")
|
353
376
|
self.dictionaryWidget = DictionaryWidget()
|
354
377
|
self.dictionaryWidget.setObjectName("dictionaryWidget")
|
355
378
|
self.dictionaryDockWidget.setWidget(self.dictionaryWidget)
|
356
|
-
MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.dictionaryDockWidget)
|
379
|
+
MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.dictionaryDockWidget)
|
357
380
|
self.speakerDockWidget = QDockWidget(MainWindow)
|
358
381
|
self.speakerDockWidget.setObjectName("speakerDockWidget")
|
359
382
|
self.speakerWidget = SpeakerWidget()
|
360
383
|
self.speakerWidget.setObjectName("speakerWidget")
|
361
384
|
self.speakerDockWidget.setWidget(self.speakerWidget)
|
362
|
-
MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.speakerDockWidget)
|
385
|
+
MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.speakerDockWidget)
|
363
386
|
self.toolBar = QToolBar(MainWindow)
|
364
387
|
self.toolBar.setObjectName("toolBar")
|
365
388
|
self.toolBar.setEnabled(True)
|
366
|
-
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
|
389
|
+
sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
|
367
390
|
sizePolicy.setHorizontalStretch(1)
|
368
391
|
sizePolicy.setVerticalStretch(0)
|
369
392
|
sizePolicy.setHeightForWidth(self.toolBar.sizePolicy().hasHeightForWidth())
|
@@ -373,25 +396,31 @@ class Ui_MainWindow(object):
|
|
373
396
|
self.toolBar.setAllowedAreas(Qt.BottomToolBarArea)
|
374
397
|
self.toolBar.setIconSize(QSize(25, 25))
|
375
398
|
self.toolBar.setFloatable(False)
|
376
|
-
MainWindow.addToolBar(Qt.BottomToolBarArea, self.toolBar)
|
399
|
+
MainWindow.addToolBar(Qt.ToolBarArea.BottomToolBarArea, self.toolBar)
|
377
400
|
self.acousticModelDockWidget = QDockWidget(MainWindow)
|
378
401
|
self.acousticModelDockWidget.setObjectName("acousticModelDockWidget")
|
379
402
|
self.acousticModelWidget = AcousticModelWidget()
|
380
403
|
self.acousticModelWidget.setObjectName("acousticModelWidget")
|
381
404
|
self.acousticModelDockWidget.setWidget(self.acousticModelWidget)
|
382
|
-
MainWindow.addDockWidget(
|
405
|
+
MainWindow.addDockWidget(
|
406
|
+
Qt.DockWidgetArea.LeftDockWidgetArea, self.acousticModelDockWidget
|
407
|
+
)
|
383
408
|
self.languageModelDockWidget = QDockWidget(MainWindow)
|
384
409
|
self.languageModelDockWidget.setObjectName("languageModelDockWidget")
|
385
410
|
self.languageModelWidget = LanguageModelWidget()
|
386
411
|
self.languageModelWidget.setObjectName("languageModelWidget")
|
387
412
|
self.languageModelDockWidget.setWidget(self.languageModelWidget)
|
388
|
-
MainWindow.addDockWidget(
|
413
|
+
MainWindow.addDockWidget(
|
414
|
+
Qt.DockWidgetArea.LeftDockWidgetArea, self.languageModelDockWidget
|
415
|
+
)
|
389
416
|
self.transcriptionDockWidget = QDockWidget(MainWindow)
|
390
417
|
self.transcriptionDockWidget.setObjectName("transcriptionDockWidget")
|
391
418
|
self.transcriptionWidget = TranscriberWidget()
|
392
419
|
self.transcriptionWidget.setObjectName("transcriptionWidget")
|
393
420
|
self.transcriptionDockWidget.setWidget(self.transcriptionWidget)
|
394
|
-
MainWindow.addDockWidget(
|
421
|
+
MainWindow.addDockWidget(
|
422
|
+
Qt.DockWidgetArea.LeftDockWidgetArea, self.transcriptionDockWidget
|
423
|
+
)
|
395
424
|
self.alignmentDockWidget = QDockWidget(MainWindow)
|
396
425
|
self.alignmentDockWidget.setObjectName("alignmentDockWidget")
|
397
426
|
self.alignmentDockWidget.setEnabled(True)
|
@@ -399,19 +428,19 @@ class Ui_MainWindow(object):
|
|
399
428
|
self.alignmentWidget = AlignmentWidget()
|
400
429
|
self.alignmentWidget.setObjectName("alignmentWidget")
|
401
430
|
self.alignmentDockWidget.setWidget(self.alignmentWidget)
|
402
|
-
MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.alignmentDockWidget)
|
431
|
+
MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.alignmentDockWidget)
|
403
432
|
self.oovDockWidget = QDockWidget(MainWindow)
|
404
433
|
self.oovDockWidget.setObjectName("oovDockWidget")
|
405
434
|
self.oovWidget = OovWidget()
|
406
435
|
self.oovWidget.setObjectName("oovWidget")
|
407
436
|
self.oovDockWidget.setWidget(self.oovWidget)
|
408
|
-
MainWindow.addDockWidget(Qt.RightDockWidgetArea, self.oovDockWidget)
|
437
|
+
MainWindow.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.oovDockWidget)
|
409
438
|
self.diarizationDockWidget = QDockWidget(MainWindow)
|
410
439
|
self.diarizationDockWidget.setObjectName("diarizationDockWidget")
|
411
440
|
self.diarizationWidget = DiarizationWidget()
|
412
441
|
self.diarizationWidget.setObjectName("diarizationWidget")
|
413
442
|
self.diarizationDockWidget.setWidget(self.diarizationWidget)
|
414
|
-
MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.diarizationDockWidget)
|
443
|
+
MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.diarizationDockWidget)
|
415
444
|
|
416
445
|
self.menubar.addAction(self.menuCorpus.menuAction())
|
417
446
|
self.menubar.addAction(self.menuEdit.menuAction())
|
@@ -421,6 +450,7 @@ class Ui_MainWindow(object):
|
|
421
450
|
self.menubar.addAction(self.menuTranscription.menuAction())
|
422
451
|
self.menubar.addAction(self.menuExperimental.menuAction())
|
423
452
|
self.menubar.addAction(self.menuWindow.menuAction())
|
453
|
+
self.menubar.addAction(self.menuLanguage.menuAction())
|
424
454
|
self.menuCorpus.addAction(self.loadCorpusAct)
|
425
455
|
self.menuCorpus.addAction(self.loadRecentCorpusMenu.menuAction())
|
426
456
|
self.menuCorpus.addAction(self.openCorpusManagerAct)
|
@@ -462,6 +492,8 @@ class Ui_MainWindow(object):
|
|
462
492
|
self.menuModels.addAction(self.ivectorExtractorMenu.menuAction())
|
463
493
|
self.menuModels.addAction(self.menuDownload_ivector_extractor.menuAction())
|
464
494
|
self.menuModels.addAction(self.closeIvectorExtractorAct)
|
495
|
+
self.menuModels.addSeparator()
|
496
|
+
self.menuModels.addAction(self.vadModelMenu.menuAction())
|
465
497
|
self.acousticModelMenu.addAction(self.loadAcousticModelAct)
|
466
498
|
self.acousticModelMenu.addSeparator()
|
467
499
|
self.g2pMenu.addAction(self.loadG2PModelAct)
|
@@ -474,6 +506,8 @@ class Ui_MainWindow(object):
|
|
474
506
|
self.menuDownload_ivector_extractor.addSeparator()
|
475
507
|
self.menuDownload_language_model.addSeparator()
|
476
508
|
self.menuDownload_G2P_model.addSeparator()
|
509
|
+
self.vadModelMenu.addAction(self.speechbrainVadAct)
|
510
|
+
self.vadModelMenu.addAction(self.kaldiVadAct)
|
477
511
|
self.menuAlignment.addAction(self.loadReferenceAlignmentsAct)
|
478
512
|
self.menuAlignment.addAction(self.selectMappingFileAct)
|
479
513
|
self.menuAlignment.addAction(self.evaluateAlignmentsAct)
|
@@ -492,6 +526,8 @@ class Ui_MainWindow(object):
|
|
492
526
|
self.toolBar.addAction(self.deleteUtterancesAct)
|
493
527
|
self.toolBar.addSeparator()
|
494
528
|
self.toolBar.addAction(self.alignUtteranceAct)
|
529
|
+
self.toolBar.addAction(self.transcribeUtteranceAct)
|
530
|
+
self.toolBar.addAction(self.trimUtteranceAct)
|
495
531
|
self.toolBar.addAction(self.segmentUtteranceAct)
|
496
532
|
self.toolBar.addAction(self.lockEditAct)
|
497
533
|
self.toolBar.addAction(self.exportFilesAct)
|
@@ -628,6 +664,14 @@ class Ui_MainWindow(object):
|
|
628
664
|
QCoreApplication.translate("MainWindow", "Align the current utterance", None)
|
629
665
|
)
|
630
666
|
# endif // QT_CONFIG(tooltip)
|
667
|
+
self.trimUtteranceAct.setText(
|
668
|
+
QCoreApplication.translate("MainWindow", "Trim utterance", None)
|
669
|
+
)
|
670
|
+
# if QT_CONFIG(tooltip)
|
671
|
+
self.trimUtteranceAct.setToolTip(
|
672
|
+
QCoreApplication.translate("MainWindow", "Trim the current utterance", None)
|
673
|
+
)
|
674
|
+
# endif // QT_CONFIG(tooltip)
|
631
675
|
self.reloadCorpusAct.setText(
|
632
676
|
QCoreApplication.translate("MainWindow", "Reload corpus text from disk", None)
|
633
677
|
)
|
@@ -673,6 +717,21 @@ class Ui_MainWindow(object):
|
|
673
717
|
QCoreApplication.translate("MainWindow", "Verify transcripts", None)
|
674
718
|
)
|
675
719
|
# endif // QT_CONFIG(tooltip)
|
720
|
+
self.transcribeUtteranceAct.setText(
|
721
|
+
QCoreApplication.translate("MainWindow", "Transcribe utterance", None)
|
722
|
+
)
|
723
|
+
# if QT_CONFIG(tooltip)
|
724
|
+
self.transcribeUtteranceAct.setToolTip(
|
725
|
+
QCoreApplication.translate("MainWindow", "Transcribe the current utterance", None)
|
726
|
+
)
|
727
|
+
# endif // QT_CONFIG(tooltip)
|
728
|
+
self.actionLoad_VAD_model.setText(
|
729
|
+
QCoreApplication.translate("MainWindow", "Load VAD model", None)
|
730
|
+
)
|
731
|
+
self.speechbrainVadAct.setText(
|
732
|
+
QCoreApplication.translate("MainWindow", "speechbrain", None)
|
733
|
+
)
|
734
|
+
self.kaldiVadAct.setText(QCoreApplication.translate("MainWindow", "kaldi", None))
|
676
735
|
self.menuCorpus.setTitle(QCoreApplication.translate("MainWindow", "Corpus", None))
|
677
736
|
self.loadRecentCorpusMenu.setTitle(
|
678
737
|
QCoreApplication.translate("MainWindow", "Load a recent corpus", None)
|
@@ -709,6 +768,9 @@ class Ui_MainWindow(object):
|
|
709
768
|
self.menuDownload_G2P_model.setTitle(
|
710
769
|
QCoreApplication.translate("MainWindow", "Download G2P model", None)
|
711
770
|
)
|
771
|
+
self.vadModelMenu.setTitle(
|
772
|
+
QCoreApplication.translate("MainWindow", "Load VAD model", None)
|
773
|
+
)
|
712
774
|
self.menuAlignment.setTitle(QCoreApplication.translate("MainWindow", "Alignment", None))
|
713
775
|
self.menuTranscription.setTitle(
|
714
776
|
QCoreApplication.translate("MainWindow", "Transcription", None)
|
@@ -716,6 +778,7 @@ class Ui_MainWindow(object):
|
|
716
778
|
self.menuExperimental.setTitle(
|
717
779
|
QCoreApplication.translate("MainWindow", "Experimental", None)
|
718
780
|
)
|
781
|
+
self.menuLanguage.setTitle(QCoreApplication.translate("MainWindow", "Language", None))
|
719
782
|
self.utteranceDockWidget.setWindowTitle(
|
720
783
|
QCoreApplication.translate("MainWindow", "Utterances", None)
|
721
784
|
)
|
anchor/ui_preferences.py
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
################################################################################
|
4
4
|
## Form generated from reading UI file 'preferences.ui'
|
5
5
|
##
|
6
|
-
## Created by: Qt User Interface Compiler version 6.
|
6
|
+
## Created by: Qt User Interface Compiler version 6.7.2
|
7
7
|
##
|
8
8
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
9
9
|
################################################################################
|
@@ -82,7 +82,7 @@ class Ui_PreferencesDialog(object):
|
|
82
82
|
self.scrollArea_3.setWidgetResizable(True)
|
83
83
|
self.scrollAreaWidgetContents_3 = QWidget()
|
84
84
|
self.scrollAreaWidgetContents_3.setObjectName("scrollAreaWidgetContents_3")
|
85
|
-
self.scrollAreaWidgetContents_3.setGeometry(QRect(0, 0,
|
85
|
+
self.scrollAreaWidgetContents_3.setGeometry(QRect(0, 0, 682, 353))
|
86
86
|
self.formLayout = QFormLayout(self.scrollAreaWidgetContents_3)
|
87
87
|
self.formLayout.setObjectName("formLayout")
|
88
88
|
self.autosaveLabel = QLabel(self.scrollAreaWidgetContents_3)
|
@@ -143,40 +143,40 @@ class Ui_PreferencesDialog(object):
|
|
143
143
|
self.githubTokenLabel = QLabel(self.scrollAreaWidgetContents_3)
|
144
144
|
self.githubTokenLabel.setObjectName("githubTokenLabel")
|
145
145
|
|
146
|
-
self.formLayout.setWidget(
|
146
|
+
self.formLayout.setWidget(9, QFormLayout.LabelRole, self.githubTokenLabel)
|
147
147
|
|
148
148
|
self.githubTokenEdit = QLineEdit(self.scrollAreaWidgetContents_3)
|
149
149
|
self.githubTokenEdit.setObjectName("githubTokenEdit")
|
150
150
|
|
151
|
-
self.formLayout.setWidget(
|
151
|
+
self.formLayout.setWidget(9, QFormLayout.FieldRole, self.githubTokenEdit)
|
152
152
|
|
153
153
|
self.resultsPerPageLabel = QLabel(self.scrollAreaWidgetContents_3)
|
154
154
|
self.resultsPerPageLabel.setObjectName("resultsPerPageLabel")
|
155
155
|
|
156
|
-
self.formLayout.setWidget(
|
156
|
+
self.formLayout.setWidget(11, QFormLayout.LabelRole, self.resultsPerPageLabel)
|
157
157
|
|
158
158
|
self.resultsPerPageEdit = QSpinBox(self.scrollAreaWidgetContents_3)
|
159
159
|
self.resultsPerPageEdit.setObjectName("resultsPerPageEdit")
|
160
160
|
self.resultsPerPageEdit.setMaximum(1000)
|
161
161
|
|
162
|
-
self.formLayout.setWidget(
|
162
|
+
self.formLayout.setWidget(11, QFormLayout.FieldRole, self.resultsPerPageEdit)
|
163
163
|
|
164
164
|
self.timeDirectionLabel = QLabel(self.scrollAreaWidgetContents_3)
|
165
165
|
self.timeDirectionLabel.setObjectName("timeDirectionLabel")
|
166
166
|
|
167
|
-
self.formLayout.setWidget(
|
167
|
+
self.formLayout.setWidget(13, QFormLayout.LabelRole, self.timeDirectionLabel)
|
168
168
|
|
169
169
|
self.timeDirectionComboBox = QComboBox(self.scrollAreaWidgetContents_3)
|
170
170
|
self.timeDirectionComboBox.addItem("")
|
171
171
|
self.timeDirectionComboBox.addItem("")
|
172
172
|
self.timeDirectionComboBox.setObjectName("timeDirectionComboBox")
|
173
173
|
|
174
|
-
self.formLayout.setWidget(
|
174
|
+
self.formLayout.setWidget(13, QFormLayout.FieldRole, self.timeDirectionComboBox)
|
175
175
|
|
176
176
|
self.visibleSpeakerLabel = QLabel(self.scrollAreaWidgetContents_3)
|
177
177
|
self.visibleSpeakerLabel.setObjectName("visibleSpeakerLabel")
|
178
178
|
|
179
|
-
self.formLayout.setWidget(
|
179
|
+
self.formLayout.setWidget(14, QFormLayout.LabelRole, self.visibleSpeakerLabel)
|
180
180
|
|
181
181
|
self.visibleSpeakerComboBox = QComboBox(self.scrollAreaWidgetContents_3)
|
182
182
|
self.visibleSpeakerComboBox.addItem("")
|
@@ -186,7 +186,7 @@ class Ui_PreferencesDialog(object):
|
|
186
186
|
self.visibleSpeakerComboBox.addItem("")
|
187
187
|
self.visibleSpeakerComboBox.setObjectName("visibleSpeakerComboBox")
|
188
188
|
|
189
|
-
self.formLayout.setWidget(
|
189
|
+
self.formLayout.setWidget(14, QFormLayout.FieldRole, self.visibleSpeakerComboBox)
|
190
190
|
|
191
191
|
self.cudaCheckBox = QCheckBox(self.scrollAreaWidgetContents_3)
|
192
192
|
self.cudaCheckBox.setObjectName("cudaCheckBox")
|
@@ -203,6 +203,16 @@ class Ui_PreferencesDialog(object):
|
|
203
203
|
|
204
204
|
self.formLayout.setWidget(6, QFormLayout.LabelRole, self.useMpLabel)
|
205
205
|
|
206
|
+
self.hfTokenEdit = QLineEdit(self.scrollAreaWidgetContents_3)
|
207
|
+
self.hfTokenEdit.setObjectName("hfTokenEdit")
|
208
|
+
|
209
|
+
self.formLayout.setWidget(10, QFormLayout.FieldRole, self.hfTokenEdit)
|
210
|
+
|
211
|
+
self.hfTokenLabel = QLabel(self.scrollAreaWidgetContents_3)
|
212
|
+
self.hfTokenLabel.setObjectName("hfTokenLabel")
|
213
|
+
|
214
|
+
self.formLayout.setWidget(10, QFormLayout.LabelRole, self.hfTokenLabel)
|
215
|
+
|
206
216
|
self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_3)
|
207
217
|
|
208
218
|
self.verticalLayout_8.addWidget(self.scrollArea_3)
|
@@ -436,7 +446,7 @@ class Ui_PreferencesDialog(object):
|
|
436
446
|
self.scrollArea_2.setWidgetResizable(True)
|
437
447
|
self.scrollAreaWidgetContents_2 = QWidget()
|
438
448
|
self.scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2")
|
439
|
-
self.scrollAreaWidgetContents_2.setGeometry(QRect(0, 0,
|
449
|
+
self.scrollAreaWidgetContents_2.setGeometry(QRect(0, 0, 668, 410))
|
440
450
|
self.verticalLayout_7 = QVBoxLayout(self.scrollAreaWidgetContents_2)
|
441
451
|
self.verticalLayout_7.setObjectName("verticalLayout_7")
|
442
452
|
self.formLayout_2 = QFormLayout()
|
@@ -587,7 +597,7 @@ class Ui_PreferencesDialog(object):
|
|
587
597
|
self.scrollArea_4.setWidgetResizable(True)
|
588
598
|
self.scrollAreaWidgetContents_4 = QWidget()
|
589
599
|
self.scrollAreaWidgetContents_4.setObjectName("scrollAreaWidgetContents_4")
|
590
|
-
self.scrollAreaWidgetContents_4.setGeometry(QRect(0, 0,
|
600
|
+
self.scrollAreaWidgetContents_4.setGeometry(QRect(0, 0, 682, 353))
|
591
601
|
self.verticalLayout_11 = QVBoxLayout(self.scrollAreaWidgetContents_4)
|
592
602
|
self.verticalLayout_11.setObjectName("verticalLayout_11")
|
593
603
|
self.formLayout_6 = QFormLayout()
|
@@ -684,7 +694,7 @@ class Ui_PreferencesDialog(object):
|
|
684
694
|
self.scrollArea_5.setWidgetResizable(True)
|
685
695
|
self.scrollAreaWidgetContents_5 = QWidget()
|
686
696
|
self.scrollAreaWidgetContents_5.setObjectName("scrollAreaWidgetContents_5")
|
687
|
-
self.scrollAreaWidgetContents_5.setGeometry(QRect(0, 0,
|
697
|
+
self.scrollAreaWidgetContents_5.setGeometry(QRect(0, 0, 682, 353))
|
688
698
|
self.verticalLayout_13 = QVBoxLayout(self.scrollAreaWidgetContents_5)
|
689
699
|
self.verticalLayout_13.setObjectName("verticalLayout_13")
|
690
700
|
self.formLayout_7 = QFormLayout()
|
@@ -796,7 +806,7 @@ class Ui_PreferencesDialog(object):
|
|
796
806
|
self.buttonBox.accepted.connect(PreferencesDialog.accept)
|
797
807
|
self.buttonBox.rejected.connect(PreferencesDialog.reject)
|
798
808
|
|
799
|
-
self.tabWidget.setCurrentIndex(
|
809
|
+
self.tabWidget.setCurrentIndex(3)
|
800
810
|
self.visibleSpeakerComboBox.setCurrentIndex(1)
|
801
811
|
|
802
812
|
QMetaObject.connectSlotsByName(PreferencesDialog)
|
@@ -866,6 +876,9 @@ class Ui_PreferencesDialog(object):
|
|
866
876
|
self.useMpLabel.setText(
|
867
877
|
QCoreApplication.translate("PreferencesDialog", "Use multiprocessing?", None)
|
868
878
|
)
|
879
|
+
self.hfTokenLabel.setText(
|
880
|
+
QCoreApplication.translate("PreferencesDialog", "HuggingFace request token", None)
|
881
|
+
)
|
869
882
|
self.tabWidget.setTabText(
|
870
883
|
self.tabWidget.indexOf(self.generalTab),
|
871
884
|
QCoreApplication.translate("PreferencesDialog", "General", None),
|
anchor/undo.py
CHANGED
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import collections
|
4
4
|
import typing
|
5
|
+
import unicodedata
|
5
6
|
|
6
7
|
import pynini.lib
|
7
8
|
import sqlalchemy
|
@@ -427,18 +428,23 @@ class UpdateUtteranceTextCommand(FileCommand):
|
|
427
428
|
"UpdateUtteranceTextCommand", "Update utterance text"
|
428
429
|
)
|
429
430
|
)
|
430
|
-
|
431
|
-
self.corpus_model.corpus.
|
432
|
-
self.corpus_model.
|
431
|
+
try:
|
432
|
+
self.tokenizer = self.corpus_model.corpus.get_tokenizer(
|
433
|
+
self.corpus_model.corpus.get_dict_id_for_speaker(
|
434
|
+
self.corpus_model.get_speaker_name(self.speaker_id)
|
435
|
+
)
|
433
436
|
)
|
434
|
-
)
|
437
|
+
except (AttributeError, KeyError):
|
438
|
+
self.tokenizer = None
|
435
439
|
|
436
440
|
def _process_text(self, session, text: str):
|
437
441
|
self.utterance.text = text
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
+
if self.tokenizer is not None:
|
443
|
+
text = unicodedata.normalize("NFKC", text)
|
444
|
+
normalized_text, normalized_character_text, oovs = self.tokenizer(text)
|
445
|
+
self.utterance.normalized_text = normalized_text
|
446
|
+
self.utterance.normalized_character_text = normalized_character_text
|
447
|
+
self.utterance.oovs = " ".join(oovs)
|
442
448
|
self.utterance.ignored = not text
|
443
449
|
session.merge(self.utterance)
|
444
450
|
|
@@ -751,7 +757,7 @@ class AddPronunciationCommand(DictionaryCommand):
|
|
751
757
|
if not self.pronunciation:
|
752
758
|
if dictionary_model.g2p_generator is not None:
|
753
759
|
try:
|
754
|
-
self.pronunciation = dictionary_model.g2p_generator.rewriter(word)[0]
|
760
|
+
self.pronunciation = dictionary_model.g2p_generator.rewriter(word)[0][0]
|
755
761
|
except (pynini.lib.rewrite.Error, IndexError):
|
756
762
|
self.pronunciation = self.oov_phone
|
757
763
|
else:
|
anchor/widgets.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import logging
|
3
4
|
import os
|
4
5
|
import re
|
5
6
|
import time
|
@@ -19,6 +20,7 @@ from montreal_forced_aligner.data import ( # noqa
|
|
19
20
|
WordType,
|
20
21
|
)
|
21
22
|
from montreal_forced_aligner.db import Corpus, Phone, Speaker, Utterance # noqa
|
23
|
+
from montreal_forced_aligner.models import AcousticModel, Archive
|
22
24
|
from montreal_forced_aligner.utils import DatasetType, inspect_database, mfa_open # noqa
|
23
25
|
from PySide6 import QtCore, QtGui, QtMultimedia, QtSvgWidgets, QtWidgets
|
24
26
|
|
@@ -52,6 +54,8 @@ if TYPE_CHECKING:
|
|
52
54
|
outside_column_ratio = 0.2
|
53
55
|
outside_column_minimum = 250
|
54
56
|
|
57
|
+
logger = logging.getLogger("anchor")
|
58
|
+
|
55
59
|
|
56
60
|
class ErrorButtonBox(QtWidgets.QDialogButtonBox):
|
57
61
|
def __init__(self, *args, **kwargs):
|
@@ -101,8 +105,8 @@ class MediaPlayer(QtMultimedia.QMediaPlayer): # pragma: no cover
|
|
101
105
|
self.audioOutput().setMuted(muted)
|
102
106
|
|
103
107
|
def handle_error(self, *args):
|
104
|
-
|
105
|
-
|
108
|
+
logger.info("ERROR")
|
109
|
+
logger.info(args)
|
106
110
|
|
107
111
|
def play(self) -> None:
|
108
112
|
if self.startTime() is None:
|
@@ -373,6 +377,8 @@ class BaseTableView(QtWidgets.QTableView):
|
|
373
377
|
current = self.selectionModel().currentIndex()
|
374
378
|
text = self.selectionModel().model().data(current, QtCore.Qt.ItemDataRole.DisplayRole)
|
375
379
|
clipboard.setText(str(text))
|
380
|
+
elif QtGui.QKeySequence(event.keyCombination()) not in self.settings.all_keybinds:
|
381
|
+
super().keyPressEvent(event)
|
376
382
|
|
377
383
|
def setModel(self, model: QtCore.QAbstractItemModel) -> None:
|
378
384
|
super().setModel(model)
|
@@ -729,25 +735,20 @@ class UtteranceListWidget(QtWidgets.QWidget): # pragma: no cover
|
|
729
735
|
|
730
736
|
def search(self):
|
731
737
|
self.selection_model.clearSelection()
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
self.oov_button.isChecked(),
|
737
|
-
)
|
738
|
-
if new_query != self.cached_query:
|
739
|
-
self.pagination_toolbar.reset()
|
740
|
-
self.corpus_model.current_offset = 0
|
738
|
+
query = self.search_box.query()
|
739
|
+
query.graphemes = self.corpus_model.dictionary_model.graphemes
|
740
|
+
self.pagination_toolbar.reset()
|
741
|
+
self.corpus_model.current_offset = 0
|
741
742
|
self.corpus_model.search(
|
742
|
-
|
743
|
+
query,
|
743
744
|
self.file_dropdown.current_text(),
|
744
745
|
self.speaker_dropdown.current_text(),
|
745
746
|
oovs=self.oov_button.isChecked(),
|
746
747
|
)
|
747
|
-
self.corpus_model.set_text_filter(self.search_box.query())
|
748
748
|
|
749
749
|
def replace(self):
|
750
750
|
search_query = self.search_box.query()
|
751
|
+
search_query.graphemes = self.corpus_model.dictionary_model.graphemes
|
751
752
|
if not search_query.text:
|
752
753
|
return
|
753
754
|
replacement = self.replace_box.text()
|
@@ -2360,7 +2361,7 @@ class ModelInfoWidget(QtWidgets.QWidget):
|
|
2360
2361
|
|
2361
2362
|
def refresh(self):
|
2362
2363
|
self.tree.clear()
|
2363
|
-
if self.model is not None:
|
2364
|
+
if self.model is not None and isinstance(self.model, Archive):
|
2364
2365
|
self.label.setText(self.model.name)
|
2365
2366
|
self.path_label.setText(str(self.model.source))
|
2366
2367
|
meta = self.model.meta
|
@@ -2474,7 +2475,7 @@ class TranscriberWidget(QtWidgets.QWidget):
|
|
2474
2475
|
else:
|
2475
2476
|
validate_enabled = False
|
2476
2477
|
self.dictionary_label.setText("Not loaded")
|
2477
|
-
if self.corpus_model.acoustic_model
|
2478
|
+
if isinstance(self.corpus_model.acoustic_model, AcousticModel):
|
2478
2479
|
self.acoustic_model_label.setText(self.corpus_model.acoustic_model.name)
|
2479
2480
|
else:
|
2480
2481
|
validate_enabled = False
|
@@ -2998,7 +2999,7 @@ class AlignmentWidget(QtWidgets.QWidget):
|
|
2998
2999
|
else:
|
2999
3000
|
validate_enabled = False
|
3000
3001
|
self.dictionary_label.setText("Not loaded")
|
3001
|
-
if self.corpus_model.acoustic_model
|
3002
|
+
if isinstance(self.corpus_model.acoustic_model, AcousticModel):
|
3002
3003
|
self.acoustic_model_label.setText(self.corpus_model.acoustic_model.name)
|
3003
3004
|
else:
|
3004
3005
|
validate_enabled = False
|