OCR fixes

This commit is contained in:
Jaex 2018-11-28 16:14:19 +03:00
parent 23c4affb6d
commit 029997a698
6 changed files with 80 additions and 43 deletions

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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)

View file

@ -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()
{

View file

@ -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()

View file

@ -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();
}
}