Обнаружение текста ВОСТОК -215: утверждение не выполнено (OpenCV Python) - PullRequest
1 голос
/ 07 мая 2019

При попытке использовать Детектор текста EAST на некоторых изображениях, с OpenCV в Python на Windows 10, я получаю следующую ошибку:

cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\dnn\src\dnn.cpp:835: error: (-215:Assertion failed) ld.inputBlobs[0]->total() == total(shapes[index]) in function 'cv::dnn::dnn4_v20180917::BlobManager::allocateBlobsForLayer'

(странно, этот путь не существует в моей файловой системе)

Я начал с превосходного урока от Адриана Роузброка . Вот фрагмент кода (в последней строке он не работает):

# sFileName is the path to the image, previously set
oInputImage = cv.imread(sFileName)
aiShape = oInputImage.shape
(iH, iW) = aiShape[:2]
iRequiredUnit = 32

# check if the image height is enough
iHr = iH % iRequiredUnit
iBottom = 0
iHr = iH % iRequiredUnit
if 0 < iHr:
    # calculate how much padding is necessary
    iBottom = iRequiredUnit - iHr

# check if the image width is enough
iRight = 0
iWr = iW % iRequiredUnit
if 0 < iWr:
    # calculate how much padding is necessary
    iRight = iRequiredUnit - iWr

if iBottom > 0 or iRight > 0:
    # add padding to make the image proportions correct
    oImage = cv.copyMakeBorder(
        src=oInputImage,
        top=iTop,
        bottom=iBottom,
        left=iLeft,
        right=iRight,
        borderType=cv.BORDER_CONSTANT,
        value=[0, 0, 0]
        )
    else:
    # no need to add padding
    oImage = oInputImage.copy()

(iH, iW) = oImage.shape[:2])

ib, ig, ir, _ = cv.mean(oImage)
oBlob = cv.dnn.blobFromImage(
        oImage, 1.0, (iW, iH), (ib, ig, ir),
        swapRB=True, crop=False
)

# load the EAST network
# EAST_path initialized appropriately previously
oNet = cv.dnn.readNet(EAST_path)
oNet.setInput(oBlob)
asLayerNames = [
        "feature_fusion/Conv_7/Sigmoid",
        "feature_fusion/concat_3"]
(afScores, aoGeometry) = oNet.forward(asLayerNames)

Я сделал некоторые изменения, например, Я пересчитываю среднее значение вместо того, чтобы использовать жестко закодированное значение, показанное в примере. Я также пытался вызвать blobFromImage без среднего значения (или по умолчанию из примера) и с swapRB=False, но ошибка продолжает возникать.

Проблема возникает систематически с некоторыми файлами (, вот пример ), тогда как с другими файлами это не так, вместо этого EAST работает гладко. Я не могу определить характеристики, которые делают изображение проблематичным, однако я склонен думать, что ошибка не зависит от необходимости изменять размер изображения, поскольку большинство изображений, которые можно анализировать без проблем, должны быть изменены в любом случае.

Я не нашел никакой документации, относящейся к этой проблеме, и не могу легко восстановить проблему из источника (который, я думаю, this ).

Как я могу предотвратить ошибку?

...