检测图像中的文字

时间:2019-12-04 01:26:58

标签: python python-3.x image-recognition

我正在研究Python项目。 我需要创建的功能之一是能够检测图像是否包含文本。我不需要任何类型的边界框,无论图像中包含多少文本,都只需要true或false即可。 我一直在遵循here的步骤,但是,由于我设法找到所有链接,所以最终会创建边界框。

我有两个问题:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

  

在没有边界框过程的所有开销的情况下,是否可以使用任何文本检测机制来检测文本?

边界框是进行所有检测处理的结果,因此表示该过程的本质部分。如果您不在乎文本的位置,则可以随意忽略自己代码中的边界框。但是为了检测图像中是否有文本,算法(无论哪种类型)都必须检测文本中的文本。

如果您不关心结果,则链接文章中使用的DNN方法可能会过大。您总是可以尝试其他一些text detection algorithms并尝试对其进行概要分析,从而为您的应用程序找到计算成本更低的解决方案。永远会有权衡。

  

OpenCV使用神经网络来检测文本,该文本是.PB文件。我需要加载它才能使用nn。有什么办法可以将此文件嵌入.py文件中?这样可以避免有两个文件。其背后的想法是能够导入.py文件并将其用作库,而无需考虑.pb文件(这是检测文本的模型)。

是的,您可以将模型redux文件的内容作为buffer object直接嵌入到Python代码中,然后使用alternate model loading mechanism从缓冲区读取模型:< / p>

.pb

您可以使用Unix retval = cv.dnn.readNetFromTensorflow(bufferModel[, bufferConfig]) 命令将二进制文件转换为十六进制序列:

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,

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

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