如何检测6米外的彩色文本?

时间:2018-09-08 08:25:07

标签: python opencv ocr text-recognition color-detection

我正在使用python,PIL,opencv和numpy来检测单色文本(即一个是红色,一个是绿色)。我想在直播期间在6米外的地方检测到这些彩色文本。我使用了颜色检测方法,但在30至50厘米后它们不起作用。相机应接近颜色。作为检测这些文本的第二种方法,我使用了ctpn方法。尽管它检测文本,但是它不提供这些文本的坐标,因为我也需要文本的坐标点。我还尝试了Matlab中的OCR方法来自动检测自然图像中的文本,但是由于它发现了另一个小的对象作为文本,因此失败了。我对如何做感到很困惑。

例如,假设在6米外捕获的图像中有两个不同的文本。一个文本为绿色,另一文本为红色。这些文字的宽度约为40-50厘米。另外,它们只是两个不同的词,不是长文本。如何检测它们并将它们的位置指定为(x1,y1)和(x2,y2)?那可能吗 ?需要任何成功的提示吗?

A sampe image captured from nearly 2-2.5 meters and width of texts are nearly 20 cm.

Output of detected green pixels.

import numpy as np
from PIL import Image

# Open image and make RGB and HSV versions
RGBim = Image.open("AdjustedNewMaze3.jpg").convert('RGB')
HSVim = RGBim.convert('HSV')

# Make numpy versions
RGBna = np.array(RGBim)
HSVna = np.array(HSVim)

# Extract Hue
H = HSVna[:,:,0]

# Find all green pixels, i.e. where 100 < Hue < 140
lo,hi = 100,140
# Rescale to 0-255, rather than 0-360 because we are using uint8
lo = int((lo * 255) / 360)
hi = int((hi * 255) / 360)
green = np.where((H>lo) & (H<hi))

# Make all green pixels black in original image
RGBna[green] = [0,0,0]

def find_nearest(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return array[idx]

value = 120 & 125

green = find_nearest(RGBna, value)
print(green)

count = green[0].size
print("Pixels matched: {}".format(count))
Image.fromarray(green).save('resultgreen.png')

0 个答案:

没有答案