mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 22:42:38 +01:00
Add Whisper CPP cuBLAS
This commit is contained in:
parent
a207d516e7
commit
92d3edc3de
@ -4,6 +4,7 @@
|
|||||||
{
|
{
|
||||||
public const string OpenAi = "OpenAI";
|
public const string OpenAi = "OpenAI";
|
||||||
public const string Cpp = "CPP";
|
public const string Cpp = "CPP";
|
||||||
|
public const string CppCuBlas = "CPP cuBLAS";
|
||||||
public const string WhisperX = "WhisperX";
|
public const string WhisperX = "WhisperX";
|
||||||
public const string ConstMe = "Const-me";
|
public const string ConstMe = "Const-me";
|
||||||
public const string CTranslate2 = "CTranslate2";
|
public const string CTranslate2 = "CTranslate2";
|
||||||
|
@ -8,7 +8,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
{
|
{
|
||||||
public static IWhisperModel GetWhisperModel()
|
public static IWhisperModel GetWhisperModel()
|
||||||
{
|
{
|
||||||
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp)
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
return new WhisperCppModel();
|
return new WhisperCppModel();
|
||||||
}
|
}
|
||||||
@ -33,7 +33,8 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
|
|
||||||
public static string ModelExtension()
|
public static string ModelExtension()
|
||||||
{
|
{
|
||||||
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
|
||||||
|
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas ||
|
||||||
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe)
|
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
return ".bin";
|
return ".bin";
|
||||||
@ -50,7 +51,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
|
|
||||||
public static string GetWebSiteUrl()
|
public static string GetWebSiteUrl()
|
||||||
{
|
{
|
||||||
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp)
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
return "https://github.com/ggerganov/whisper.cpp";
|
return "https://github.com/ggerganov/whisper.cpp";
|
||||||
}
|
}
|
||||||
@ -106,6 +107,12 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
return Directory.Exists(path) ? path : null;
|
return Directory.Exists(path) ? path : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Configuration.DataDirectory, "Whisper", WhisperChoice.CppCuBlas);
|
||||||
|
return Directory.Exists(path) ? path : null;
|
||||||
|
}
|
||||||
|
|
||||||
if (!Configuration.IsRunningOnWindows)
|
if (!Configuration.IsRunningOnWindows)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
@ -173,6 +180,12 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
return Directory.Exists(path) ? path : null;
|
return Directory.Exists(path) ? path : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
var path = Path.Combine(Configuration.DataDirectory, "Whisper", WhisperChoice.CppCuBlas);
|
||||||
|
return Directory.Exists(path) ? path : null;
|
||||||
|
}
|
||||||
|
|
||||||
if (whisperChoice == WhisperChoice.WhisperX && !string.IsNullOrEmpty(Configuration.Settings.Tools.WhisperXLocation))
|
if (whisperChoice == WhisperChoice.WhisperX && !string.IsNullOrEmpty(Configuration.Settings.Tools.WhisperXLocation))
|
||||||
{
|
{
|
||||||
if (Configuration.Settings.Tools.WhisperXLocation.EndsWith("whisperx.exe", StringComparison.InvariantCultureIgnoreCase) && File.Exists(Configuration.Settings.Tools.WhisperXLocation))
|
if (Configuration.Settings.Tools.WhisperXLocation.EndsWith("whisperx.exe", StringComparison.InvariantCultureIgnoreCase) && File.Exists(Configuration.Settings.Tools.WhisperXLocation))
|
||||||
@ -288,7 +301,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
var whisperFolder = GetWhisperFolder(whisperChoice);
|
var whisperFolder = GetWhisperFolder(whisperChoice);
|
||||||
if (string.IsNullOrEmpty(whisperFolder))
|
if (string.IsNullOrEmpty(whisperFolder))
|
||||||
{
|
{
|
||||||
if (whisperChoice == WhisperChoice.Cpp)
|
if (whisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
return "main";
|
return "main";
|
||||||
}
|
}
|
||||||
@ -323,7 +336,12 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
|
|
||||||
if (Configuration.IsRunningOnWindows)
|
if (Configuration.IsRunningOnWindows)
|
||||||
{
|
{
|
||||||
if (whisperChoice == WhisperChoice.Cpp)
|
if (whisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
return "main.exe";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (whisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
return "main.exe";
|
return "main.exe";
|
||||||
}
|
}
|
||||||
@ -356,7 +374,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
return "whisper.exe";
|
return "whisper.exe";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Configuration.IsRunningOnLinux && whisperChoice == WhisperChoice.Cpp)
|
if (Configuration.IsRunningOnLinux && whisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
return "main";
|
return "main";
|
||||||
}
|
}
|
||||||
@ -398,7 +416,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
|
|
||||||
if (Configuration.IsRunningOnWindows)
|
if (Configuration.IsRunningOnWindows)
|
||||||
{
|
{
|
||||||
if (whisperChoice == WhisperChoice.Cpp)
|
if (whisperChoice == WhisperChoice.Cpp || whisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
var f = Path.Combine(whisperFolder, fileNameOnly);
|
var f = Path.Combine(whisperFolder, fileNameOnly);
|
||||||
if (File.Exists(f))
|
if (File.Exists(f))
|
||||||
@ -469,7 +487,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
|
|
||||||
public static string GetWhisperModelForCmdLine(string model)
|
public static string GetWhisperModelForCmdLine(string model)
|
||||||
{
|
{
|
||||||
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp)
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
return Path.Combine(GetWhisperModel().ModelFolder, model + ModelExtension());
|
return Path.Combine(GetWhisperModel().ModelFolder, model + ModelExtension());
|
||||||
}
|
}
|
||||||
@ -485,6 +503,7 @@ namespace Nikse.SubtitleEdit.Core.AudioToText
|
|||||||
public static string GetWhisperTranslateParameter()
|
public static string GetWhisperTranslateParameter()
|
||||||
{
|
{
|
||||||
return Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
|
return Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
|
||||||
|
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas ||
|
||||||
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe
|
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe
|
||||||
? "--translate "
|
? "--translate "
|
||||||
: "--task translate ";
|
: "--task translate ";
|
||||||
|
@ -146,9 +146,14 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
if (Configuration.IsRunningOnWindows)
|
if (Configuration.IsRunningOnWindows)
|
||||||
{
|
{
|
||||||
engines.Add(WhisperChoice.PurfviewFasterWhisper);
|
engines.Add(WhisperChoice.PurfviewFasterWhisper);
|
||||||
|
engines.Add(WhisperChoice.Cpp);
|
||||||
|
engines.Add(WhisperChoice.CppCuBlas);
|
||||||
engines.Add(WhisperChoice.ConstMe);
|
engines.Add(WhisperChoice.ConstMe);
|
||||||
}
|
}
|
||||||
engines.Add(WhisperChoice.Cpp);
|
else
|
||||||
|
{
|
||||||
|
engines.Add(WhisperChoice.Cpp);
|
||||||
|
}
|
||||||
engines.Add(WhisperChoice.CTranslate2);
|
engines.Add(WhisperChoice.CTranslate2);
|
||||||
engines.Add(WhisperChoice.StableTs);
|
engines.Add(WhisperChoice.StableTs);
|
||||||
engines.Add(WhisperChoice.WhisperX);
|
engines.Add(WhisperChoice.WhisperX);
|
||||||
@ -285,6 +290,28 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (comboBoxWhisperEngine.Text == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
var fileName = WhisperHelper.GetWhisperPathAndFileName(WhisperChoice.CppCuBlas);
|
||||||
|
if (!File.Exists(fileName))
|
||||||
|
{
|
||||||
|
if (MessageBox.Show(string.Format(LanguageSettings.Current.Settings.DownloadX, "Whisper " + WhisperChoice.CppCuBlas), "Subtitle Edit", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
using (var downloadForm = new WhisperDownload(WhisperChoice.CppCuBlas))
|
||||||
|
{
|
||||||
|
if (downloadForm.ShowDialog(this) != DialogResult.OK)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (comboBoxWhisperEngine.Text == WhisperChoice.PurfviewFasterWhisper)
|
if (comboBoxWhisperEngine.Text == WhisperChoice.PurfviewFasterWhisper)
|
||||||
{
|
{
|
||||||
var fileName = WhisperHelper.GetWhisperPathAndFileName(WhisperChoice.PurfviewFasterWhisper);
|
var fileName = WhisperHelper.GetWhisperPathAndFileName(WhisperChoice.PurfviewFasterWhisper);
|
||||||
@ -1055,7 +1082,7 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
translateToEnglish = string.Empty;
|
translateToEnglish = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp)
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp || Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas)
|
||||||
{
|
{
|
||||||
if (!Configuration.Settings.Tools.WhisperExtraSettings.Contains("--print-progress"))
|
if (!Configuration.Settings.Tools.WhisperExtraSettings.Contains("--print-progress"))
|
||||||
{
|
{
|
||||||
@ -1065,7 +1092,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
|
|
||||||
var outputSrt = string.Empty;
|
var outputSrt = string.Empty;
|
||||||
var postParams = string.Empty;
|
var postParams = string.Empty;
|
||||||
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
|
if (Configuration.Settings.Tools.WhisperChoice == WhisperChoice.Cpp ||
|
||||||
|
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.CppCuBlas ||
|
||||||
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe)
|
Configuration.Settings.Tools.WhisperChoice == WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
outputSrt = "--output-srt ";
|
outputSrt = "--output-srt ";
|
||||||
@ -1106,7 +1134,8 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Configuration.Settings.Tools.WhisperChoice != WhisperChoice.Cpp &&
|
if (Configuration.Settings.Tools.WhisperChoice != WhisperChoice.Cpp &&
|
||||||
Configuration.Settings.Tools.WhisperChoice != WhisperChoice.ConstMe)
|
Configuration.Settings.Tools.WhisperChoice != WhisperChoice.CppCuBlas &&
|
||||||
|
Configuration.Settings.Tools.WhisperChoice != WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
process.StartInfo.EnvironmentVariables["PYTHONIOENCODING"] = "utf-8";
|
process.StartInfo.EnvironmentVariables["PYTHONIOENCODING"] = "utf-8";
|
||||||
process.StartInfo.EnvironmentVariables["PYTHONUTF8"] = "1";
|
process.StartInfo.EnvironmentVariables["PYTHONUTF8"] = "1";
|
||||||
@ -1834,6 +1863,26 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
|
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
else if (comboBoxWhisperEngine.Text == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
Configuration.Settings.Tools.WhisperChoice = WhisperChoice.CppCuBlas;
|
||||||
|
var fileName = WhisperHelper.GetWhisperPathAndFileName();
|
||||||
|
if (!File.Exists(fileName) || WhisperDownload.IsOld(fileName, WhisperChoice.CppCuBlas))
|
||||||
|
{
|
||||||
|
if (MessageBox.Show(string.Format(LanguageSettings.Current.Settings.DownloadX, "Whisper " + WhisperChoice.CppCuBlas), "Subtitle Edit", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
using (var downloadForm = new WhisperDownload(WhisperChoice.CppCuBlas))
|
||||||
|
{
|
||||||
|
if (downloadForm.ShowDialog(this) != DialogResult.OK)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Init();
|
||||||
|
}
|
||||||
else if (comboBoxWhisperEngine.Text == WhisperChoice.ConstMe)
|
else if (comboBoxWhisperEngine.Text == WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
whisperConstMeToolStripMenuItem_Click(null, null);
|
whisperConstMeToolStripMenuItem_Click(null, null);
|
||||||
|
@ -46,6 +46,14 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
"2a9e10f746a1ebe05dffa86e9f66cd20848faa6e849f3300c2281051c1a17b0fc35c60dc435f07f5974aa1191000aaf2866a4f03a5fe35ecffd4ae0919778e63", // SSE2 32-bit
|
"2a9e10f746a1ebe05dffa86e9f66cd20848faa6e849f3300c2281051c1a17b0fc35c60dc435f07f5974aa1191000aaf2866a4f03a5fe35ecffd4ae0919778e63", // SSE2 32-bit
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private const string DownloadUrl64CppCuBlas = "https://github.com/ggerganov/whisper.cpp/releases/download/v1.5.0/whisper-cublas-bin-x64.zip";
|
||||||
|
|
||||||
|
private static readonly string[] Sha512HashesCppCuBlas =
|
||||||
|
{
|
||||||
|
"de5b6fe7487f4cdc5e883ef6825dd0ecfe3ce4f9c914b0e02ba19b89c138e47e76584ae221a75eb7aed1a96893d4764401e065e196e0455a2e72050209252780", // 1.5.0
|
||||||
|
};
|
||||||
|
|
||||||
private const string DownloadUrlConstMe = "https://github.com/Const-me/Whisper/releases/download/1.12.0/cli.zip";
|
private const string DownloadUrlConstMe = "https://github.com/Const-me/Whisper/releases/download/1.12.0/cli.zip";
|
||||||
|
|
||||||
private static readonly string[] Sha512HashesConstMe =
|
private static readonly string[] Sha512HashesConstMe =
|
||||||
@ -113,7 +121,11 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
private void WhisperDownload_Shown(object sender, EventArgs e)
|
private void WhisperDownload_Shown(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var downloadUrl = IntPtr.Size * 8 == 32 ? DownloadUrl32Cpp : DownloadUrl64Cpp;
|
var downloadUrl = IntPtr.Size * 8 == 32 ? DownloadUrl32Cpp : DownloadUrl64Cpp;
|
||||||
if (_whisperChoice == WhisperChoice.ConstMe)
|
if (_whisperChoice == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
downloadUrl = DownloadUrl64CppCuBlas;
|
||||||
|
}
|
||||||
|
else if (_whisperChoice == WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
downloadUrl = DownloadUrlConstMe;
|
downloadUrl = DownloadUrlConstMe;
|
||||||
}
|
}
|
||||||
@ -173,7 +185,11 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
downloadStream.Position = 0;
|
downloadStream.Position = 0;
|
||||||
var hash = Utilities.GetSha512Hash(downloadStream.ToArray());
|
var hash = Utilities.GetSha512Hash(downloadStream.ToArray());
|
||||||
string[] hashes;
|
string[] hashes;
|
||||||
if (_whisperChoice == WhisperChoice.ConstMe)
|
if (_whisperChoice == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
hashes = Sha512HashesCppCuBlas;
|
||||||
|
}
|
||||||
|
else if (_whisperChoice == WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
hashes = Sha512HashesConstMe;
|
hashes = Sha512HashesConstMe;
|
||||||
}
|
}
|
||||||
@ -214,6 +230,16 @@ namespace Nikse.SubtitleEdit.Forms.AudioToText
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_whisperChoice == WhisperChoice.CppCuBlas)
|
||||||
|
{
|
||||||
|
folder = Path.Combine(folder, WhisperChoice.CppCuBlas);
|
||||||
|
|
||||||
|
if (!Directory.Exists(folder))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(folder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_whisperChoice == WhisperChoice.ConstMe)
|
if (_whisperChoice == WhisperChoice.ConstMe)
|
||||||
{
|
{
|
||||||
folder = Path.Combine(folder, "Const-me");
|
folder = Path.Combine(folder, "Const-me");
|
||||||
|
Loading…
Reference in New Issue
Block a user