检测图像中的文本

Detect text in an image

我正在做一个 Python 项目。 我需要创建的功能之一是能够检测图像是否有文本。我不需要任何类型的边界框,我只需要 true 或 false,而不管图像中的文本数量。 我一直在按照步骤 here 但是,正如我设法找到的所有链接一样,它最终创建了边界框。

我有两个问题:

  1. 是否可以使用任何文本检测机制来检测文本,而无需边界框过程的所有开销?
  2. OpenCV使用神经网络检测外部.PB文件的文本;我需要加载它才能使用 nn。有没有办法将这个文件嵌入到 .py 文件中?这将避免有两个文件。这背后的想法是能够导入 .py 文件并将其用作库,而忽略 .pb 文件(这是检测文本的模型)。

谢谢!

Is there any text detection mecanism that i can use to detect text without all the overhead of the bounding box process?

边界框是所有检测处理的结果,因此代表了过程的固有部分。如果您不关心文本在哪里,您可以在自己的代码中忽略生成的边界框。但是为了检测是否图像中有文本,算法(无论何种类型)必须检测文本在何处

如果您不关心结果,链接文章中使用的 DNN 方法可能有点矫枉过正。您总是可以尝试其他一些 text detection algorithms 并尝试对它们进行分析,以便为您的应用程序找到一个计算成本较低的方法。总会有取舍。

OpenCV uses a neural net to detect text which is an exteneral .PB file; i need to load it to use the nn. Is there any way to embed this file within the .py file? This would avoid having two files. The idea behind this is to be able to import the .py file and use it as a library, disregarding the .pb file (which is the model that detects text).

是的,您可以将模型 .pb 文件的内容直接嵌入到您的 Python 代码中作为 buffer object, and then use the alternate model loading mechanism 从缓冲区读取模型:

retval = cv.dnn.readNetFromTensorflow(bufferModel[, bufferConfig])

您可以使用 Unix hexdump 命令将二进制文件转换为十六进制序列:

hexdump -e '"    " 8/1 "0x%02x, " "\n"' your_training.pb

产生如下输出:

0x0a, 0x35, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63,
0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x0b,

然后将其粘贴到您的源文件中,用以下内容包裹起来:

bufferModel = bytearray([
    0x0a, 0x35, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63,
    0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x0b,
    # ...
])

然后您可以将其传递给 OpenCV:

retval = cv.dnn.readNetFromTensorflow(bufferModel)