华为 HMS MLLocalTextAnalyzer with Transactor returns 相机流 (Xamarin) 没有结果

Huawei HMS MLLocalTextAnalyzer with Transactor returns no results from camera stream (Xamarin)

我已将 HMS MLkit 集成到我的 Xamarin.Android 移动应用程序项目中,遵循 https://forums.developer.huawei.com/forumPortal/en/topic/0201466917572130070 中的步骤(“Xamarin ML Kit 设置过程”和“Xamarin 应用程序开发”部分)。然后我开始制作一个 Activity class,它使用 LensEngine 和 MLAnalyzer API 来检测相机流中的文本。这看起来或多或少是这样的:

MLLocalTextSetting textSetting = new MLLocalTextSetting.Factory().SetLanguage("en").SetOCRMode(MLLocalTextSetting.OcrTrackingMode).Create();
             
var analyzer = MLAnalyzerFactory.Instance.GetLocalTextAnalyzer(textSetting);
 
analyzer.SetTransactor(new OcrDetector());
 
_cameraEngine = new LensEngine.Creator(ApplicationContext, analyzer)
           .SetLensType(LensEngine.BackLens)
           .ApplyDisplayDimension(1280, 720)
           .ApplyFps(6.0f)
           .EnableAutomaticFocus(true)
           .Create();

OcrDetector class 现在看起来像这样:

public class OcrDetector : Java.Lang.Object, MLAnalyzer.IMLTransactor
{
        public OcrDetector()
        {
        }
 
        public void Destroy()
        {
        }
         
        public void TransactResult(MLAnalyzer.Result results)
        {
            SparseArray objectSparseArray = results.AnalyseList;
            AnalyzeDetections(objectSparseArray);
        }
         
        public void AnalyzeDetections(SparseArray detectedItems)
        {
            // TODO:
        }
}

相机似乎 运行 很流畅,但是,我没有从文本分析器中得到任何结果(永远不会调用 TransactResult)。在流式传输期间,控制台重复抛出如下所示的异常:

02-23 12:02:57.154 E/LensAnalyzerRunable(15027): Exception thrown from receiver.
02-23 12:02:57.154 E/LensAnalyzerRunable(15027): java.lang.NullPointerException: *t*e*p* *o*i*v*k* *i*t*a* *e*h*d*'*n*r*i*.*t*l*S*a*s*A*r*y*c*m*h*a*e*.*m*.*l*d*.*e*t*i*t*r*a*.*l*e*t*N*t*v*T*x*A*a*y*e*.*n*l*s*(*o*.*u*w*i*h*s*m*s*k*c*m*o*.*L*r*m*)* *n*a*n*l* *b*e*t*r*f*r*n*e
02-23 12:02:57.154 E/LensAnalyzerRunable(15027):     at com.huawei.hms.mlsdk.text.MLTextAnalyzer.analyseFrame(MLTextAnalyzer.java:3)
02-23 12:02:57.154 E/LensAnalyzerRunable(15027):     at com.huawei.hms.mlsdk.common.MLAnalyzer.obtainPicture(MLAnalyzer.java:124)
02-23 12:02:57.154 E/LensAnalyzerRunable(15027):     at com.huawei.hms.mlsdk.common.LensEngine$LensAnalyzerRunable.run(LensEngine.java:39)
02-23 12:02:57.154 E/LensAnalyzerRunable(15027):     at java.lang.Thread.run(Thread.java:929)
02-23 12:02:57.157 E/HaLogProvider(15027): forbiddenHiLog openHa = false
02-23 12:02:57.158 E/HaLogProvider(15027): forbiddenHiLog.getVenderCountry=UNKNOWN
02-23 12:02:57.158 E/HaLogProvider(15027): forbiddenHiLog openHa = false

我不知道这个 NullPointerException 是什么意思。 当我使用不同类型的分析仪时,像这样:

MLObjectAnalyzerSetting setting = new MLObjectAnalyzerSetting.Factory().SetAnalyzerType(MLObjectAnalyzerSetting.TypeVideo)
            .AllowMultiResults()
            .AllowClassification()
            .Create();
             
var objanalyzer = MLAnalyzerFactory.Instance.GetLocalObjectAnalyzer(setting);

一切正常(也就是说,TransactResult 被调用并且我在控制台中没有发现异常,尽管这种分析器对我的情况没有用)。

如有任何建议,我将不胜感激。

MLLocalTextSetting.Factory().SetLanguage("en").SetOCRMode(MLLocalTextSetting.OcrTrackingMode).Create();
              var analyzer = MLAnalyzerFactory.Instance.GetLocalTextAnalyzer(textSetting); ```

尝试将您的代码更改为以下内容

 var  analyzer = new MLTextAnalyzer.Factory(this)
                .SetLanguage("en")
                .SetLocalOCRMode(MLLocalTextSetting.OCR_TRACKING_MODE)
                .Create();

希望对您有所帮助。 :)

以下是一些尝试解决问题的建议:

  1. 在代码中,将错误堆栈跟踪中显示的同步调用 MLTextAnalyzer.analyseFrame() 更改为异步调用,请参阅以下文档代码部分中的示例代码 ML Kit-Text Recognition (huawei.com).

Task task = this.analyzer.AnalyseFrameAsync(frame);

await task;

if (task.IsCompleted && task.Result != null)

{

    // Analyze success.
    var result = task.Result;
}
else
{
    // Analyze failure.
}
  1. 确保使用最新的 Xamarin ML 插件 2.0.5.300 (2020-12-31)。本次升级对减少识别英文和其他语言的延迟有一定的增强。
  2. HMS ML Kit集成参考以下Xamarin示例代码ML Kit-Xamarin Sample Code (huawei.com).