最近上課的作業開開腦洞, 原來 linqpad 也可以跑 asp.net core XD, 不過我是覺得不太習慣
操作步驟如下
確認 linqpad
暫時路徑, 大概長這樣 C:\Users\YOURNAME\AppData\Local\Temp\LINQPad8\_zagynzui\shadow-3
建立 tessdata
及 wwwroot
資料夾
切換到 tessdata
下載語言檔放進去
隨便找張有中文的 jpg
圖片丟到 wwwroot
底下
找到以下兩個資料看是 x86 or x64
夾複製到你這個 linqpad
暫時路徑 C:\Users\YOURNAME\.nuget\packages\tesseract\5.2.0\x64
最後執行 Query
即可 http://localhost:5000/testimg.png
他的 header
會加上 OCR
辨識文字的結果
1
| X-OCR-Result: %E4%BD%A0+%E5%A5%BD+%E9%98%BF%0A%E6%B8%AC+%E8%A9%A6+%E7%9C%8B+%E7%9C%8B%0A
|
可以呼叫 decode
取得中文
http://localhost:5000/decode?str=%25E4%25BD%25A0%2B%25E5%25A5%25BD%2B%25E9%2598%25BF%250A%25E6%25B8%25AC%2B%25E8%25A9%25A6%2B%25E7%259C%258B%2B%25E7%259C%258B%250A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <Query Kind="Program"> <NuGetReference>Tesseract</NuGetReference> <Namespace>Tesseract</Namespace> <Namespace>System.Net</Namespace> <Namespace>Microsoft.AspNetCore.Builder</Namespace> <Namespace>Microsoft.AspNetCore.Http</Namespace> <Namespace>Microsoft.AspNetCore.HttpOverrides</Namespace> <Namespace>Microsoft.Extensions.Configuration</Namespace> <Namespace>Microsoft.Extensions.DependencyInjection</Namespace> <Namespace>Microsoft.Extensions.Hosting</Namespace> <Namespace>System.Net.Http</Namespace> <Namespace>System.Threading.Tasks</Namespace> <IncludeAspNet>true</IncludeAspNet> </Query>
void Main() { Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); var builder = WebApplication.CreateBuilder();
var app = builder.Build();
app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { string extension = System.IO.Path.GetExtension(ctx.File.Name).TrimStart('.'); if (extension == "jpg") { string tessPath = Path.Combine("tessdata", ""); string text = "";
using (var engine = new TesseractEngine(tessPath, "chi_tra")) { using (var img = Pix.LoadFromFile(ctx.File.PhysicalPath)) { var page = engine.Process(img); text = page.GetText(); var textEncode = WebUtility.UrlEncode(text); ctx.Context.Response.Headers.Add("X-OCR-Result", textEncode); } } } } });
app.MapGet("decode", (string str) => { var result = WebUtility.UrlDecode(str); return result; });
app.Run(); }
|