fixed #5684: Automatically use OCR Engine 2

This commit is contained in:
Jaex 2022-01-11 18:05:06 +03:00
parent d5dc95e18b
commit bc24ec9e8f
2 changed files with 27 additions and 3 deletions

View file

@ -27,6 +27,7 @@ You should have received a copy of the GNU General Public License
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ShareX.HelpersLib
{
@ -285,6 +286,11 @@ public static string[] Lines(this string text)
return text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}
public static string ReplaceNewLines(this string text, string replacement = "\r\n")
{
return Regex.Replace(text, @"\r\n?|\n", replacement);
}
public static IEnumerable<Tuple<string, string>> ForEachBetween(this string text, string front, string back)
{
int f = 0;

View file

@ -97,19 +97,30 @@ public class OCRSpace : Uploader
public string APIKey { get; set; }
public OCRSpaceLanguages Language { get; set; } = OCRSpaceLanguages.eng;
public bool Overlay { get; set; }
public bool UseOCREngine2 { get; set; }
public OCRSpace(string apiKey, OCRSpaceLanguages language = OCRSpaceLanguages.eng, bool overlay = false)
public OCRSpace(string apiKey, OCRSpaceLanguages language = OCRSpaceLanguages.eng, bool overlay = false, bool useOCREngine2 = false)
{
APIKey = apiKey;
Language = language;
Overlay = overlay;
UseOCREngine2 = useOCREngine2;
}
public OCRSpaceResponse DoOCR(Stream stream, string fileName)
{
Dictionary<string, string> arguments = new Dictionary<string, string>();
arguments.Add("apikey", APIKey);
arguments.Add("language", Language.ToString());
if (UseOCREngine2)
{
arguments.Add("OCREngine", "2");
}
else
{
arguments.Add("language", Language.ToString());
}
arguments.Add("isOverlayRequired", Overlay.ToString());
UploadResult ur = SendRequestFile(APIURLUSA, stream, fileName, "file", arguments);
@ -133,12 +144,19 @@ public static string DoOCR(OCRSpaceLanguages language, Stream stream, string fil
try
{
OCRSpace ocr = new OCRSpace(APIKeys.OCRSpaceAPIKey, language);
bool useOCREngine2 = language.HasFlagAny(OCRSpaceLanguages.eng, OCRSpaceLanguages.ger, OCRSpaceLanguages.fre);
OCRSpace ocr = new OCRSpace(APIKeys.OCRSpaceAPIKey, language, false, useOCREngine2);
OCRSpaceResponse response = ocr.DoOCR(stream, fileName);
if (response != null && !response.IsErroredOnProcessing && response.ParsedResults.Count > 0)
{
result = response.ParsedResults[0].ParsedText;
if (!string.IsNullOrEmpty(result))
{
result = result.ReplaceNewLines();
}
}
}
catch (Exception e)