CSharp在Linux上使用Tesseract-OCR
碰到的问题:
在Windows上测试识别都可以,编译发布到Linux系统上就会提示如下信息:
主要提示信息为:Failed to find library "libleptonica-1.82.0.so" for platform x64.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.DllNotFoundException: Failed to find library "libleptonica-1.82.0.so" for platform x64. at InteropDotNet.LibraryLoader.LoadLibrary(String fileName, String platformName) at InteropRuntimeImplementer.LeptonicaApiSignaturesInstance.LeptonicaApiSignaturesImplementation..ctor(LibraryLoader loader) at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr) --- End of inner exception stack trace --- at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr) at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture) at InteropDotNet.InteropRuntimeImplementer.CreateInstance[T]() at Tesseract.Interop.LeptonicaApi.Initialize() at Tesseract.Interop.TessApi.Initialize() at Tesseract.Interop.TessApi.get_Native() at Tesseract.TesseractEngine..ctor(String datapath, String language, EngineMode engineMode, IEnumerable`1 configFiles, IDictionary`2 initialOptions, Boolean setOnlyNonDebugVariables) at Tesseract.TesseractEngine..ctor(String datapath, String language, EngineMode engineMode) at OcrTesseractApp.Program.TestChineseOcr(String testImagePath, String ocrPath) in D:\.Net\CSharp_Practice\OcrTesseractDemo\OcrTesseractApp\Program.cs:line 152
解决方法是
项目部署到linux上后,还需要在 x64 目录中增加两个文件:
libleptonica-1.82.0.so 和 libtesseract50.so
以上两个文件时是 ibleptonica.so 和 libtesseract.so这两个文件改名后得到的。需要从linux服务器上找到
其中:ibleptonica.so文件在 leptonica的安装目录下lib文件夹里,也可以通过搜索得到

libtesseract.so 文件在 tesseract 的安装目录下lib文件夹,也可以通过搜索找到

复制过来,然后改名:
ibleptonica.so 改为:libleptonica-1.82.0.so
libtesseract.so 改为:libtesseract50.so
改名后将两个文件拷贝到发布的程序目录中 x64文件夹下

再次执行程序就可以解决这个问题了。
Linux环境具体安装步骤
1、下载tesseract-ocr和leptonica
我的版本是 5.4.1 和 1.82.0

2、假设你的安装目录在 /custorm_app (注意压缩源文件路径)
cd /custorm_app tar -xvf leptonica-1.82.0.tar.gz cd leptonica-1.82.0 ./configure make make install apt install automake apt install libtool tar -xvf tesseract-5.4.1.tar.gz cd tesseract-5.4.1 ./autogen.sh ./configure make make install sudo ldconfig
3、配置环境变量(这步忘了是否执行过了)
/*打开文件*/ vim /etc/profile /*在文件末尾添加*/ export LD_LIBRARY_PATH=/usr/local/lib export LIBLEPT_HEADERSDIR=/usr/local/include export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export TESSDATA_PREFIX=/usr/local/share/tessdata /*立即生效*/ source /etc/profile
4、下载语言包
//中文简体 https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata //英文 https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/eng.traineddata
语言包的目录要在tessdata目录下

5、测试是否安装成功
执行命令:tesseract --version

6、测试命令识别效果
tesseract /custorm_app/1.png output -l chi_sim
参数说明:
/custorm_app/1.png : 是要识别的图片文件
output : 是识别后的文本(/custorm_app/output.txt)
chi_sim : 用到的语言包
.net 项目配置说明
1、创建一个控制台程序
2、安装在nuget 里面 查找 tesseract ,添加到项目中,版本是5.2.0
3、调用读取图片(为了配置灵活在appsettings.json增加了ocr的配置路径【下载的中文和英文语言包所在的tessdata路径】和图片输入,图片输出路径)
public static void Main(string[] args) { //加载appsettings.json配置文件 var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); // 绑定整个配置到对象 var config = configuration.Get<RootConfig>(); var testImagePath = Path.Combine(config.AppConfig.OcrInfo.TextImageInPath, "testImg.png"); var testOutPath = Path.Combine(config.AppConfig.OcrInfo.TextImageInPath, "testImg2.png"); var ocrPath = config.AppConfig.OcrInfo.OcrPath ; //英文识别 //TestEnglishOcr(); //中文识别 TestChineseOcr(testImagePath,ocrPath); } static void TestChineseOcr(string testImagePath,string ocrPath) { //var testImagePath = "Img/testImg.png"; try { using (var engine = new TesseractEngine(ocrPath, "chi_sim", EngineMode.Default)) { using (var img = Pix.LoadFromFile(testImagePath)) { using (var page = engine.Process(img)) { var text = page.GetText(); Console.WriteLine("识别结果:" + text); } } } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
4、目录结构展示
x64目录实际有上面的两个文件,只是没加载出来。发布后如果x64没有,可以手动拷贝进去

识别中文的效果


浙公网安备 33010602011771号