mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Added single line option to OCR window
This commit is contained in:
parent
82ffe63f45
commit
69ad13f680
6 changed files with 87 additions and 24 deletions
10
ShareX/OCR/OCRForm.Designer.cs
generated
10
ShareX/OCR/OCRForm.Designer.cs
generated
|
@ -28,6 +28,7 @@ private void InitializeComponent()
|
|||
this.btnOpenOCRHelp = new System.Windows.Forms.Button();
|
||||
this.lblService = new System.Windows.Forms.Label();
|
||||
this.btnSelectRegion = new System.Windows.Forms.Button();
|
||||
this.cbSingleLine = new System.Windows.Forms.CheckBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudScaleFactor)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
|
@ -130,10 +131,18 @@ private void InitializeComponent()
|
|||
this.btnSelectRegion.UseVisualStyleBackColor = true;
|
||||
this.btnSelectRegion.Click += new System.EventHandler(this.btnSelectRegion_Click);
|
||||
//
|
||||
// cbSingleLine
|
||||
//
|
||||
resources.ApplyResources(this.cbSingleLine, "cbSingleLine");
|
||||
this.cbSingleLine.Name = "cbSingleLine";
|
||||
this.cbSingleLine.UseVisualStyleBackColor = true;
|
||||
this.cbSingleLine.CheckedChanged += new System.EventHandler(this.cbSingleLine_CheckedChanged);
|
||||
//
|
||||
// OCRForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.cbSingleLine);
|
||||
this.Controls.Add(this.lblService);
|
||||
this.Controls.Add(this.btnOpenOCRHelp);
|
||||
this.Controls.Add(this.btnSelectRegion);
|
||||
|
@ -169,5 +178,6 @@ private void InitializeComponent()
|
|||
private System.Windows.Forms.Button btnOpenOCRHelp;
|
||||
private System.Windows.Forms.Label lblService;
|
||||
private System.Windows.Forms.Button btnSelectRegion;
|
||||
private System.Windows.Forms.CheckBox cbSingleLine;
|
||||
}
|
||||
}
|
|
@ -82,6 +82,7 @@ public OCRForm(Bitmap bmp, OCROptions options)
|
|||
}
|
||||
|
||||
nudScaleFactor.SetValue((decimal)Options.ScaleFactor);
|
||||
cbSingleLine.Checked = Options.SingleLine;
|
||||
|
||||
if (Options.ServiceLinks == null || Options.IsDefaultServiceLinks())
|
||||
{
|
||||
|
@ -141,7 +142,7 @@ private async Task OCR(Bitmap bmp)
|
|||
|
||||
try
|
||||
{
|
||||
Result = await OCRHelper.OCR(bmp, Options.Language, Options.ScaleFactor);
|
||||
Result = await OCRHelper.OCR(bmp, Options.Language, Options.ScaleFactor, Options.SingleLine);
|
||||
|
||||
if (Options.AutoCopy && !string.IsNullOrEmpty(Result))
|
||||
{
|
||||
|
@ -211,6 +212,16 @@ private async void nudScaleFactor_ValueChanged(object sender, EventArgs e)
|
|||
}
|
||||
}
|
||||
|
||||
private async void cbSingleLine_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (loaded)
|
||||
{
|
||||
Options.SingleLine = cbSingleLine.Checked;
|
||||
|
||||
await OCR(bmpSource);
|
||||
}
|
||||
}
|
||||
|
||||
private void cbServices_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
Options.SelectedServiceLink = cbServices.SelectedIndex;
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>lblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="cbLanguages.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
|
@ -171,7 +171,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>cbLanguages.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="lblResult.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -201,7 +201,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>lblResult.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
<value>10</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtResult.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
|
@ -235,7 +235,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>txtResult.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="lblScaleFactor.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -265,7 +265,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>lblScaleFactor.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="nudScaleFactor.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
|
@ -292,13 +292,13 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>nudScaleFactor.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="cbServices.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
</data>
|
||||
<data name="cbServices.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 192</value>
|
||||
<value>16, 216</value>
|
||||
</data>
|
||||
<data name="cbServices.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>272, 24</value>
|
||||
|
@ -316,7 +316,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>cbServices.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="btnOpenServiceLink.Enabled" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
|
@ -325,7 +325,7 @@
|
|||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
</data>
|
||||
<data name="btnOpenServiceLink.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 224</value>
|
||||
<value>16, 248</value>
|
||||
</data>
|
||||
<data name="btnOpenServiceLink.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>272, 32</value>
|
||||
|
@ -346,10 +346,10 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>btnOpenServiceLink.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="cbEditServices.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>296, 190</value>
|
||||
<value>296, 214</value>
|
||||
</data>
|
||||
<data name="cbEditServices.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>28, 28</value>
|
||||
|
@ -367,7 +367,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>cbEditServices.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="btnOpenOCRHelp.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
|
@ -391,7 +391,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>btnOpenOCRHelp.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="lblService.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
|
@ -400,7 +400,7 @@
|
|||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
</data>
|
||||
<data name="lblService.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 168</value>
|
||||
<value>13, 192</value>
|
||||
</data>
|
||||
<data name="lblService.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>56, 16</value>
|
||||
|
@ -421,7 +421,7 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>lblService.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="btnSelectRegion.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
|
@ -451,7 +451,37 @@
|
|||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>btnSelectRegion.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="cbSingleLine.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="cbSingleLine.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft Sans Serif, 9.75pt</value>
|
||||
</data>
|
||||
<data name="cbSingleLine.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>16, 168</value>
|
||||
</data>
|
||||
<data name="cbSingleLine.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>88, 20</value>
|
||||
</data>
|
||||
<data name="cbSingleLine.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="cbSingleLine.Text" xml:space="preserve">
|
||||
<value>Single line</value>
|
||||
</data>
|
||||
<data name=">>cbSingleLine.Name" xml:space="preserve">
|
||||
<value>cbSingleLine</value>
|
||||
</data>
|
||||
<data name=">>cbSingleLine.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cbSingleLine.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>cbSingleLine.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
|
|
|
@ -69,7 +69,7 @@ public static void ThrowIfNotSupported()
|
|||
}
|
||||
}
|
||||
|
||||
public static async Task<string> OCR(Bitmap bmp, string languageTag = "en", float scaleFactor = 1f)
|
||||
public static async Task<string> OCR(Bitmap bmp, string languageTag = "en", float scaleFactor = 1f, bool singleLine = false)
|
||||
{
|
||||
ThrowIfNotSupported();
|
||||
|
||||
|
@ -80,12 +80,12 @@ public static async Task<string> OCR(Bitmap bmp, string languageTag = "en", floa
|
|||
using (Bitmap bmpClone = (Bitmap)bmp.Clone())
|
||||
using (Bitmap bmpScaled = ImageHelpers.ResizeImage(bmpClone, (int)(bmpClone.Width * scaleFactor), (int)(bmpClone.Height * scaleFactor)))
|
||||
{
|
||||
return await OCRInternal(bmpScaled, languageTag);
|
||||
return await OCRInternal(bmpScaled, languageTag, singleLine);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static async Task<string> OCRInternal(Bitmap bmp, string languageTag)
|
||||
private static async Task<string> OCRInternal(Bitmap bmp, string languageTag, bool singleLine = false)
|
||||
{
|
||||
Language language = new Language(languageTag);
|
||||
|
||||
|
@ -105,21 +105,32 @@ private static async Task<string> OCRInternal(Bitmap bmp, string languageTag)
|
|||
{
|
||||
OcrResult ocrResult = await engine.RecognizeAsync(softwareBitmap);
|
||||
|
||||
string separator;
|
||||
|
||||
if (singleLine)
|
||||
{
|
||||
separator = " ";
|
||||
}
|
||||
else
|
||||
{
|
||||
separator = Environment.NewLine;
|
||||
}
|
||||
|
||||
if (language.LanguageTag.StartsWith("zh", StringComparison.OrdinalIgnoreCase) || // Chinese
|
||||
language.LanguageTag.StartsWith("ja", StringComparison.OrdinalIgnoreCase) || // Japanese
|
||||
language.LanguageTag.StartsWith("ko", StringComparison.OrdinalIgnoreCase)) // Korean
|
||||
{
|
||||
// If CJK language then remove spaces between words.
|
||||
return string.Join("\r\n", ocrResult.Lines.Select(line => string.Concat(line.Words.Select(word => word.Text))));
|
||||
return string.Join(separator, ocrResult.Lines.Select(line => string.Concat(line.Words.Select(word => word.Text))));
|
||||
}
|
||||
else if (language.LayoutDirection == LanguageLayoutDirection.Rtl)
|
||||
{
|
||||
// If RTL language then reverse order of words.
|
||||
return string.Join("\r\n", ocrResult.Lines.Select(line => string.Join(" ", line.Words.Reverse().Select(word => word.Text))));
|
||||
return string.Join(separator, ocrResult.Lines.Select(line => string.Join(" ", line.Words.Reverse().Select(word => word.Text))));
|
||||
}
|
||||
else
|
||||
{
|
||||
return string.Join("\r\n", ocrResult.Lines.Select(line => line.Text));
|
||||
return string.Join(separator, ocrResult.Lines.Select(line => line.Text));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ public class OCROptions
|
|||
{
|
||||
public string Language { get; set; } = "en";
|
||||
public float ScaleFactor { get; set; } = 2f;
|
||||
public bool SingleLine { get; set; } = false;
|
||||
public bool Silent { get; set; } = false;
|
||||
public bool AutoCopy { get; set; } = false;
|
||||
public List<ServiceLink> ServiceLinks { get; set; } = DefaultServiceLinks;
|
||||
|
|
|
@ -1250,7 +1250,7 @@ private static async Task AsyncOCRImage(Bitmap bmp, OCROptions options, string f
|
|||
|
||||
if (bmp != null)
|
||||
{
|
||||
result = await OCRHelper.OCR(bmp, options.Language, options.ScaleFactor);
|
||||
result = await OCRHelper.OCR(bmp, options.Language, options.ScaleFactor, options.SingleLine);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(result))
|
||||
|
|
Loading…
Reference in a new issue