0

我在 Flutter 应用程序中不断遇到 Firebase Ml-Vision 的问题,结果不准确。现在我明白总会有一些平衡的准确性会丢失,但我正在尝试找出一种方法,我至少可以尝试规避一些更明显的问题。

由于我需要搜索标牌文本以查看它是否与特定的预定义字符串列表匹配,因此我试图找出一种方法,我可以采用特定单词(例如下面提到的单词)并创建所有排列的列表,其中以下字母和数字被考虑在内:-

  • 0=O 和 O=0
  • 1=l 和 l=1
  • 2=z 和 z=2
  • 5=s 和 s=5
  • 6=b 和 b=6
  • 7=T 和 T=7

问题是一些字母或数字被它们看起来相反的字母或数字所取代。例如:单词“slob”可以被 OCR 读取为“5lob”、“s1ob”、“sl0b”、“slo6”甚至“5106”。

我不确定颤振/飞镖中是否有一些烘焙函数可以帮助解决这个问题。我唯一拥有的是一堆非常讨厌的嵌套 for 循环。我觉得必须有一些优雅的方式来实现这一点。这种算法甚至有一个术语吗?

4

1 回答 1

1

到过那里。

不幸的是,Flutter 中没有“内置功能”,因为正如您猜想的那样,Flutter 是一个移动应用程序框架。而这些东西(OCR/ML-Vision)属于其他领域。

您可以做的是通过一个简单的 REST API。您将从 Firebase ML-Vision 收到的文本发送到 API,然后获取响应文本。您可以使用您选择的编程语言。以下是您可以在 API 中执行的操作。

使用Levenshtein 距离。这给出了两个词之间的“距离”。例如 :

  1. 单词“slob”和“slob”之间的距离为0。
  2. 单词“slob”和“5lob”之间的距离是 1。
  3. “slob”和“Flutter”这两个词之间的距离是 6。
  4. “slob”和“market”这两个词之间的距离是 6。

您可以在这里尝试单词对。你可能会用你选择的编程语言搜索 Levenshtein distance 的代码。

另一种可能是在 Python 中使用 FuzzyWuzzy。Fuzzywuzzy 是一个 Python 库,使用 Levenshtein Distance 来计算序列之间的差异,使用简单的包。在此处查找有关 FuzzyWuzzy 的更多详细信息。

于 2020-05-13T11:45:32.560 回答