mirror of
https://github.com/RPCS3/discord-bot.git
synced 2026-01-31 01:25:22 +01:00
Merge branch 'vnext'
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.2" />
|
||||
<PackageReference Include="Octokit" Version="14.0.0" />
|
||||
<PackageReference Include="SharpCompress" Version="0.44.1" />
|
||||
<PackageReference Include="SharpCompress" Version="0.44.4" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CompatApiClient\CompatApiClient.csproj" />
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="6.1.0" />
|
||||
<PackageReference Include="NReco.Text.AhoCorasickDoubleArrayTrie" Version="1.1.1" />
|
||||
<PackageReference Include="Result.Net" Version="1.7.0" />
|
||||
<PackageReference Include="SharpCompress" Version="0.44.1" />
|
||||
<PackageReference Include="SharpCompress" Version="0.44.4" />
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.7" />
|
||||
<PackageReference Include="TesseractCSharp" Version="1.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -9,6 +9,7 @@ namespace CompatBot.Ocr.Backend;
|
||||
internal class Tesseract: BackendBase
|
||||
{
|
||||
private TesseractEngine engine;
|
||||
private static readonly SemaphoreSlim limiter = new(1, 1);
|
||||
|
||||
public override string Name => "tesseract";
|
||||
|
||||
@@ -68,9 +69,37 @@ internal class Tesseract: BackendBase
|
||||
public override async Task<(string result, double confidence)> GetTextAsync(string imgUrl, CancellationToken cancellationToken)
|
||||
{
|
||||
var imgData = await HttpClient.GetByteArrayAsync(imgUrl, cancellationToken).ConfigureAwait(false);
|
||||
using var img = Pix.LoadFromMemory(imgData);
|
||||
using var page = engine.Process(img);
|
||||
return (page.GetText() ?? "", page.GetMeanConfidence());
|
||||
var img = Pix.LoadFromMemory(imgData);
|
||||
var result = new (string text, float confidence)[4];
|
||||
await limiter.WaitAsync(Config.Cts.Token).ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
var pass = 0;
|
||||
do
|
||||
{
|
||||
using (var page = engine.Process(img))
|
||||
result[pass] = (page.GetText() ?? "", page.GetMeanConfidence());
|
||||
if (pass < 3)
|
||||
{
|
||||
var img2 = img.Rotate90((int)RotationDirection.Clockwise);
|
||||
img.Dispose();
|
||||
img = img2;
|
||||
}
|
||||
pass++;
|
||||
} while (pass < 4);
|
||||
var longestText = result
|
||||
.Where(i => i.confidence > 0.5)
|
||||
.OrderByDescending(i => i.text.Length)
|
||||
.FirstOrDefault();
|
||||
if (longestText is { confidence: > 0.5f, text.Length: > 0 })
|
||||
return longestText;
|
||||
else
|
||||
return result.MaxBy(i => i.confidence);
|
||||
}
|
||||
finally
|
||||
{
|
||||
limiter.Release();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
@@ -78,4 +107,10 @@ internal class Tesseract: BackendBase
|
||||
base.Dispose();
|
||||
engine.Dispose();
|
||||
}
|
||||
|
||||
private enum RotationDirection
|
||||
{
|
||||
Clockwise = 1,
|
||||
CounterClockwise = -1,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user