sdcb / PaddleSharp

.NET/C# binding for Baidu paddle inference library and PaddleOCR
Apache License 2.0
1.05k stars 197 forks source link

异步识别异常 #101

Open yuyaolongwyyx opened 3 months ago

yuyaolongwyyx commented 3 months ago

Describe the bug

PaddleOCRAll.Run()对一批图片进行异步提取会报外部组件异常,它并不是一开始就报错的,可能是处理前面几张图片后开始报错,但是如果同步一张一张处理就不会报错,如何解决这个问题?

Steps to reproduce the bug

.

Expected behavior

No response

Screenshots

No response

Release version

No response

IDE

No response

OS version

No response

Additional context

No response

sdcb commented 3 months ago

你好,如果换成传统的单实例的QueuedPadddleOcrAll,会不会报错呢?

shark-mk commented 3 months ago

我也曾遇到过没仔细去研究,如果需要配合复现此问题请联系我。 (不知我的用法是否正确,我在Parallel.ForEach中调用的Run) 当时的环境如下: image

CUDA: nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Fri_Dec_17_18:28:54_Pacific_Standard_Time_2021 Cuda compilation tools, release 11.6, V11.6.55 Build cuda_11.6.r11.6/compiler.30794723_0

CUDNN: cudnn-windows-x86_64-8.9.7.29_cuda11

错误堆栈如下:

CoreCLR Version: 8.0.624.26715 .NET Version: 8.0.6 Description: The process was terminated due to an unhandled exception. Exception Info: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. Stack: at Sdcb.PaddleInference.Native.PaddleNative.PD_TensorCopyFromCpuFloat(IntPtr, IntPtr) at Sdcb.PaddleInference.Native.PaddleNative.PD_TensorCopyFromCpuFloat(IntPtr, IntPtr) at Sdcb.PaddleInference.PaddleTensor.SetData(Single[]) at Sdcb.PaddleOCR.PaddleOcrRecognizer.RunMulti(OpenCvSharp.Mat[]) at System.Linq.Enumerable+SelectManySingleSelectorIterator2[[System.ValueTuple2[[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.ValueTuple2[[Sdcb.PaddleOCR.PaddleOcrRecognizerResult, Sdcb.PaddleOCR, Version=2.7.0.3, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].ToArray() at System.Linq.Enumerable+SelectIPartitionIterator2[[System.ValueTuple2[[Sdcb.PaddleOCR.PaddleOcrRecognizerResult, Sdcb.PaddleOCR, Version=2.7.0.3, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Sdcb.PaddleOCR.PaddleOcrRecognizerResult, Sdcb.PaddleOCR, Version=2.7.0.3, Culture=neutral, PublicKeyToken=null]].LazyToArray() at System.Linq.Enumerable+SelectIPartitionIterator2[[System.ValueTuple2[[Sdcb.PaddleOCR.PaddleOcrRecognizerResult, Sdcb.PaddleOCR, Version=2.7.0.3, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Sdcb.PaddleOCR.PaddleOcrRecognizerResult, Sdcb.PaddleOCR, Version=2.7.0.3, Culture=neutral, PublicKeyToken=null]].ToArray() at Sdcb.PaddleOCR.PaddleOcrRecognizer.Run(OpenCvSharp.Mat[], Int32) at Sdcb.PaddleOCR.PaddleOcrAll.Run(OpenCvSharp.Mat, Int32) at Program+<>c__DisplayClass0_1.<Main>b__0(System.String) at System.Threading.Tasks.Parallel+<>c__DisplayClass19_02[[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].b1(System.Threading.Tasks.RangeWorker ByRef, Int64, Boolean ByRef) at System.Threading.Tasks.TaskReplicator+Replica.Execute() at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef, System.Threading.Thread) at System.Threading.Tasks.ThreadPoolTaskScheduler.TryExecuteTaskInline(System.Threading.Tasks.Task, Boolean) at System.Threading.Tasks.TaskScheduler.TryRunInline(System.Threading.Tasks.Task, Boolean) at System.Threading.Tasks.Task.InternalRunSynchronously(System.Threading.Tasks.TaskScheduler, Boolean) at System.Threading.Tasks.TaskReplicator.Run[[System.Threading.Tasks.RangeWorker, System.Threading.Tasks.Parallel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]](ReplicatableUserAction1<System.Threading.Tasks.RangeWorker>, System.Threading.Tasks.ParallelOptions, Boolean) at System.Threading.Tasks.Parallel.ForWorker[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](Int32, Int32, System.Threading.Tasks.ParallelOptions, System.Action1, System.Action2<Int32,System.Threading.Tasks.ParallelLoopState>, System.Func4<Int32,System.Threading.Tasks.ParallelLoopState,System.Canon,System.Canon>, System.Func1<System.__Canon>, System.Action1) at System.Threading.Tasks.Parallel.ForEachWorker[[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable1<System.__Canon>, System.Threading.Tasks.ParallelOptions, System.Action1, System.Action2<System.__Canon,System.Threading.Tasks.ParallelLoopState>, System.Action3<System.Canon,System.Threading.Tasks.ParallelLoopState,Int64>, System.Func`4<System.Canon,System.Threading.Tasks.ParallelLoopState,System.Canon,System.Canon>, System.Func5<System.__Canon,System.Threading.Tasks.ParallelLoopState,Int64,System.__Canon,System.__Canon>, System.Func1, System.Action1<System.__Canon>) at System.Threading.Tasks.Parallel.ForEach[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable1, System.Threading.Tasks.ParallelOptions, System.Action`1) at Program.Main(System.String[])