Anchor-annotator 0.7.0__py3-none-any.whl → 0.8.0__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.0.dist-info → Anchor_annotator-0.8.0.dist-info}/METADATA +1 -1
- Anchor_annotator-0.8.0.dist-info/RECORD +22 -0
- {Anchor_annotator-0.7.0.dist-info → Anchor_annotator-0.8.0.dist-info}/WHEEL +1 -1
- anchor/_version.py +2 -2
- anchor/main.py +151 -16
- anchor/models.py +76 -45
- anchor/plot.py +155 -66
- anchor/resources_rc.py +32928 -121948
- anchor/settings.py +8 -1
- anchor/ui_main_window.py +81 -18
- anchor/ui_preferences.py +27 -14
- anchor/undo.py +15 -9
- anchor/widgets.py +16 -17
- anchor/workers.py +218 -8
- Anchor_annotator-0.7.0.dist-info/RECORD +0 -22
- {Anchor_annotator-0.7.0.dist-info → Anchor_annotator-0.8.0.dist-info}/LICENSE +0 -0
- {Anchor_annotator-0.7.0.dist-info → Anchor_annotator-0.8.0.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"
|
@@ -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)
|
@@ -778,7 +785,7 @@ class AnchorSettings(QtCore.QSettings):
|
|
778
785
|
border: {self.border_width}px solid {enabled_border_color};
|
779
786
|
}}
|
780
787
|
QCheckBox::indicator:checked {{
|
781
|
-
image: url(:/icons/
|
788
|
+
image: url(:/icons/anchor_light/actions/check.svg);
|
782
789
|
}}
|
783
790
|
QTextEdit{{
|
784
791
|
color: {text_edit_color};
|
anchor/ui_main_window.py
CHANGED
@@ -3,11 +3,12 @@
|
|
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
|
################################################################################
|
10
10
|
|
11
|
+
import resources_rc
|
11
12
|
from PySide6.QtCore import (
|
12
13
|
QCoreApplication,
|
13
14
|
QDate,
|
@@ -54,7 +55,6 @@ from PySide6.QtWidgets import (
|
|
54
55
|
QWidget,
|
55
56
|
)
|
56
57
|
|
57
|
-
import anchor.resources_rc
|
58
58
|
from anchor.widgets import (
|
59
59
|
AcousticModelWidget,
|
60
60
|
AlignmentWidget,
|
@@ -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:
|
@@ -387,7 +391,7 @@ class BaseTableView(QtWidgets.QTableView):
|
|
387
391
|
class AnchorTableView(BaseTableView):
|
388
392
|
def setModel(self, model: QtCore.QAbstractItemModel) -> None:
|
389
393
|
super().setModel(model)
|
390
|
-
self.model().newResults.connect(self.scrollToTop)
|
394
|
+
# self.model().newResults.connect(self.scrollToTop)
|
391
395
|
self.selectionModel().clear()
|
392
396
|
self.horizontalHeader().sortIndicatorChanged.connect(self.model().update_sort)
|
393
397
|
|
@@ -729,25 +733,20 @@ class UtteranceListWidget(QtWidgets.QWidget): # pragma: no cover
|
|
729
733
|
|
730
734
|
def search(self):
|
731
735
|
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
|
736
|
+
query = self.search_box.query()
|
737
|
+
query.graphemes = self.corpus_model.dictionary_model.graphemes
|
738
|
+
self.pagination_toolbar.reset()
|
739
|
+
self.corpus_model.current_offset = 0
|
741
740
|
self.corpus_model.search(
|
742
|
-
|
741
|
+
query,
|
743
742
|
self.file_dropdown.current_text(),
|
744
743
|
self.speaker_dropdown.current_text(),
|
745
744
|
oovs=self.oov_button.isChecked(),
|
746
745
|
)
|
747
|
-
self.corpus_model.set_text_filter(self.search_box.query())
|
748
746
|
|
749
747
|
def replace(self):
|
750
748
|
search_query = self.search_box.query()
|
749
|
+
search_query.graphemes = self.corpus_model.dictionary_model.graphemes
|
751
750
|
if not search_query.text:
|
752
751
|
return
|
753
752
|
replacement = self.replace_box.text()
|
@@ -2360,7 +2359,7 @@ class ModelInfoWidget(QtWidgets.QWidget):
|
|
2360
2359
|
|
2361
2360
|
def refresh(self):
|
2362
2361
|
self.tree.clear()
|
2363
|
-
if self.model is not None:
|
2362
|
+
if self.model is not None and isinstance(self.model, Archive):
|
2364
2363
|
self.label.setText(self.model.name)
|
2365
2364
|
self.path_label.setText(str(self.model.source))
|
2366
2365
|
meta = self.model.meta
|
@@ -2474,7 +2473,7 @@ class TranscriberWidget(QtWidgets.QWidget):
|
|
2474
2473
|
else:
|
2475
2474
|
validate_enabled = False
|
2476
2475
|
self.dictionary_label.setText("Not loaded")
|
2477
|
-
if self.corpus_model.acoustic_model
|
2476
|
+
if isinstance(self.corpus_model.acoustic_model, AcousticModel):
|
2478
2477
|
self.acoustic_model_label.setText(self.corpus_model.acoustic_model.name)
|
2479
2478
|
else:
|
2480
2479
|
validate_enabled = False
|
@@ -2998,7 +2997,7 @@ class AlignmentWidget(QtWidgets.QWidget):
|
|
2998
2997
|
else:
|
2999
2998
|
validate_enabled = False
|
3000
2999
|
self.dictionary_label.setText("Not loaded")
|
3001
|
-
if self.corpus_model.acoustic_model
|
3000
|
+
if isinstance(self.corpus_model.acoustic_model, AcousticModel):
|
3002
3001
|
self.acoustic_model_label.setText(self.corpus_model.acoustic_model.name)
|
3003
3002
|
else:
|
3004
3003
|
validate_enabled = False
|