mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
OCR fixes
This commit is contained in:
parent
23c4affb6d
commit
029997a698
6 changed files with 80 additions and 43 deletions
|
@ -124,6 +124,7 @@ public string GetRequestURL(CustomUploaderInput input)
|
|||
|
||||
CustomUploaderParser parser = new CustomUploaderParser(input);
|
||||
parser.URLEncode = true;
|
||||
|
||||
string url = parser.Parse(RequestURL);
|
||||
return URLHelpers.FixPrefix(url);
|
||||
}
|
||||
|
@ -196,6 +197,7 @@ public NameValueCollection GetHeaders(CustomUploaderInput input)
|
|||
if (Headers != null && Headers.Count > 0)
|
||||
{
|
||||
NameValueCollection collection = new NameValueCollection();
|
||||
|
||||
CustomUploaderParser parser = new CustomUploaderParser(input);
|
||||
parser.UseNameParser = true;
|
||||
|
||||
|
@ -214,11 +216,9 @@ public void ParseResponse(UploadResult result, CustomUploaderInput input, bool i
|
|||
{
|
||||
if (result != null && !string.IsNullOrEmpty(result.Response))
|
||||
{
|
||||
CustomUploaderParser parser = new CustomUploaderParser(result.Response, RegexList)
|
||||
{
|
||||
Filename = input.Filename,
|
||||
URLEncode = true
|
||||
};
|
||||
CustomUploaderParser parser = new CustomUploaderParser(result.Response, RegexList);
|
||||
parser.Filename = input.Filename;
|
||||
parser.URLEncode = true;
|
||||
|
||||
string url;
|
||||
|
||||
|
|
|
@ -46,6 +46,8 @@ public OCRSpaceForm(OCROptions ocrOptions)
|
|||
{
|
||||
InitializeComponent();
|
||||
Icon = ShareXResources.Icon;
|
||||
|
||||
this.ocrOptions = ocrOptions;
|
||||
cbLanguages.Items.AddRange(Helpers.GetEnumDescriptions<OCRSpaceLanguages>());
|
||||
cbLanguages.SelectedIndex = (int)ocrOptions.DefaultLanguage;
|
||||
Language = ocrOptions.DefaultLanguage;
|
||||
|
@ -56,14 +58,13 @@ public OCRSpaceForm(Stream data, string filename, OCROptions ocrOptions) : this(
|
|||
{
|
||||
this.data = data;
|
||||
this.filename = filename;
|
||||
this.ocrOptions = ocrOptions;
|
||||
}
|
||||
|
||||
private async void OCRSpaceResultForm_Shown(object sender, EventArgs e)
|
||||
{
|
||||
UpdateControls();
|
||||
|
||||
if (string.IsNullOrEmpty(Result))
|
||||
if (ocrOptions.ProcessOnLoad && string.IsNullOrEmpty(Result))
|
||||
{
|
||||
await StartOCR(data, filename);
|
||||
}
|
||||
|
@ -141,8 +142,8 @@ private void llGoogleTranslate_LinkClicked(object sender, LinkLabelLinkClickedEv
|
|||
|
||||
public class OCROptions
|
||||
{
|
||||
public OCRSpaceLanguages DefaultLanguage = OCRSpaceLanguages.eng;
|
||||
public bool Silent = false;
|
||||
public bool ProcessOnLoad = true;
|
||||
public OCRSpaceLanguages DefaultLanguage { get; set; } = OCRSpaceLanguages.eng;
|
||||
public bool Silent { get; set; } = false;
|
||||
public bool ProcessOnLoad { get; set; } = true;
|
||||
}
|
||||
}
|
|
@ -1470,7 +1470,7 @@ private void tsmiTextCapture_Click(object sender, EventArgs e)
|
|||
|
||||
try
|
||||
{
|
||||
TaskHelpers.OCRImage();
|
||||
TaskHelpers.OCRImage().RunSynchronously();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -1844,7 +1844,7 @@ private void tsmiTrayLastRegion_Click(object sender, EventArgs e)
|
|||
|
||||
private void tsmiTrayTextCapture_Click(object sender, EventArgs e)
|
||||
{
|
||||
TaskHelpers.OCRImage();
|
||||
TaskHelpers.OCRImage().RunSynchronously();
|
||||
}
|
||||
|
||||
private void tsmiTrayToggleHotkeys_Click(object sender, EventArgs e)
|
||||
|
|
|
@ -134,7 +134,7 @@ public static void ExecuteJob(TaskSettings taskSettings, HotkeyType job, CLIComm
|
|||
OpenWebpageCapture(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.TextCapture:
|
||||
OCRImage(safeTaskSettings);
|
||||
OCRImage(safeTaskSettings).RunSynchronously();
|
||||
break;
|
||||
case HotkeyType.AutoCapture:
|
||||
OpenAutoCapture(safeTaskSettings);
|
||||
|
@ -1112,65 +1112,55 @@ public static void SearchImage(string url)
|
|||
new GoogleImageSearchSharingService().CreateSharer(null, null).ShareURL(url);
|
||||
}
|
||||
|
||||
public static void OCRImage(TaskSettings taskSettings = null)
|
||||
public static async Task OCRImage(TaskSettings taskSettings = null)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
using (Image img = RegionCaptureTasks.GetRegionImage(taskSettings.CaptureSettings.SurfaceOptions))
|
||||
{
|
||||
OCRImage(img, taskSettings);
|
||||
await OCRImage(img, taskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
public static void OCRImage(Image img, TaskSettings taskSettings = null)
|
||||
public static async Task OCRImage(Image img, TaskSettings taskSettings = null)
|
||||
{
|
||||
if (img != null)
|
||||
{
|
||||
using (Stream stream = SaveImageAsStream(img, EImageFormat.PNG))
|
||||
{
|
||||
OCRImage(stream, "ShareX.png", taskSettings);
|
||||
await OCRImage(stream, "ShareX.png", null, taskSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void OCRImage(string filePath, TaskSettings taskSettings = null)
|
||||
public static async Task OCRImage(string filePath, TaskSettings taskSettings = null)
|
||||
{
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||||
{
|
||||
OCRImage(fs, Path.GetFileName(filePath), taskSettings, filePath);
|
||||
await OCRImage(fs, Path.GetFileName(filePath), filePath, taskSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void OCRImage(Stream stream, string fileName, TaskSettings taskSettings = null, string filePath = null)
|
||||
public static async Task OCRImage(Stream stream, string fileName, string filePath = null, TaskSettings taskSettings = null)
|
||||
{
|
||||
if (stream != null)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
OCROptions ocrOptions = taskSettings.CaptureSettings.OCROptions;
|
||||
using (OCRSpaceForm form = new OCRSpaceForm(stream, fileName, ocrOptions))
|
||||
{
|
||||
|
||||
if (ocrOptions.Silent)
|
||||
{
|
||||
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", Resources.OCRForm_AutoProcessing, ToolTipIcon.Info);
|
||||
Task.Run(() => form.StartOCR(stream, fileName)).Wait();
|
||||
|
||||
if (!string.IsNullOrEmpty(form.Result)) {
|
||||
ClipboardHelpers.CopyText(form.Result);
|
||||
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", Resources.OCRForm_AutoComplete, ToolTipIcon.Info);
|
||||
await AsyncOCRImage(stream, fileName, filePath, ocrOptions);
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", Resources.OCRForm_AutoCompleteFail, ToolTipIcon.Warning);
|
||||
}
|
||||
}
|
||||
else
|
||||
using (OCRSpaceForm form = new OCRSpaceForm(stream, fileName, ocrOptions))
|
||||
{
|
||||
form.ShowDialog();
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(form.Result) && !string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
|
@ -1180,6 +1170,52 @@ public static void OCRImage(Stream stream, string fileName, TaskSettings taskSet
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task AsyncOCRImage(Stream stream, string fileName, string filePath, OCROptions ocrOptions)
|
||||
{
|
||||
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", Resources.OCRForm_AutoProcessing, ToolTipIcon.None);
|
||||
|
||||
string result = null;
|
||||
|
||||
if (stream != null && stream.Length > 0 && !string.IsNullOrEmpty(fileName))
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
OCRSpace ocr = new OCRSpace(ocrOptions.DefaultLanguage, false);
|
||||
OCRSpaceResponse response = ocr.DoOCR(stream, fileName);
|
||||
|
||||
if (response != null && !response.IsErroredOnProcessing && response.ParsedResults.Count > 0)
|
||||
{
|
||||
result = response.ParsedResults[0].ParsedText;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
DebugHelper.WriteException(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(result))
|
||||
{
|
||||
ClipboardHelpers.CopyText(result);
|
||||
|
||||
if (!string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
string textPath = Path.ChangeExtension(filePath, "txt");
|
||||
File.WriteAllText(textPath, result, Encoding.UTF8);
|
||||
}
|
||||
|
||||
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", Resources.OCRForm_AutoComplete, ToolTipIcon.None);
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.MainForm.niTray.ShowBalloonTip(3000, "ShareX", Resources.OCRForm_AutoCompleteFail, ToolTipIcon.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
public static void OpenFTPClient()
|
||||
{
|
||||
|
|
|
@ -364,7 +364,7 @@ public void ShowQRCode()
|
|||
|
||||
public void OCRImage()
|
||||
{
|
||||
if (IsItemSelected && SelectedItem.IsImageFile) TaskHelpers.OCRImage(SelectedItem.Info.FilePath, Program.DefaultTaskSettings);
|
||||
if (IsItemSelected && SelectedItem.IsImageFile) TaskHelpers.OCRImage(SelectedItem.Info.FilePath).RunSynchronously();
|
||||
}
|
||||
|
||||
public void CombineImages()
|
||||
|
|
|
@ -1009,7 +1009,7 @@ private void DoOCR()
|
|||
{
|
||||
if (Data != null && Info.DataType == EDataType.Image)
|
||||
{
|
||||
TaskHelpers.OCRImage(Data, Info.FileName, Info.TaskSettings, Info.FilePath);
|
||||
TaskHelpers.OCRImage(Data, Info.FileName, Info.FilePath, Info.TaskSettings).RunSynchronously();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue