EAST文本检测-215:断言失败(OpenCV Python)

EAST文本检测-215:断言失败(OpenCV Python),python,opencv,ocr,Python,Opencv,Ocr,当尝试在某些图像上使用Windows 10上Python中的OpenCV时,出现以下错误: 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_v20180

当尝试在某些图像上使用Windows 10上Python中的OpenCV时,出现以下错误:

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是图像的路径,以前已设置
oInputImage=cv.imread(sFileName)
aiShape=oinpitimage.shape
(iH,iW)=aiShape[:2]
iRequiredUnit=32
#检查图像高度是否足够
iHr=iH%I所需单位
iBottom=0
iHr=iH%I所需单位
如果00或iLight>0:
#添加填充以使图像比例正确
oImage=cv.copyMakeBorder(
src=输出图像,
top=iTop,
底部=iBottom,
左=左,
右=iRight,
borderType=cv.BORDER_常数,
值=[0,0,0]
)
其他:
#不需要添加填充
oImage=oInputImage.copy()
(iH,iW)=图像形状[:2])
ib,ig,ir,uu=变异平均值(oImage)
oBlob=cv.dnn.blobFromImage(
oImage,1.0,(iW,iH),(ib,ig,ir),
swapRB=真,裁剪=假
)
#加载东部网络
#之前已正确初始化EAST_路径
oNet=cv.dnn.readNet(东路)
一次设置输入(oBlob)
asLayerNames=[
“特征融合/转换7/Sigmoid”,
“特征融合/融合3”]
(afScores,aoGeometry)=一次前进(如层名称)
我做了一些修改,例如,我重新计算平均值,而不是使用示例中显示的硬编码值。我还尝试了无意义调用(或使用示例中的默认值)和
swapRB=False
,但错误不断发生

这个问题在一些文件()中系统性地出现,而在其他文件中则没有,相反,EAST在这些文件上运行平稳。我无法确定使图像变得麻烦的特征,但是我倾向于认为错误与调整图像大小的需要无关,因为大多数可以分析而没有问题的图像无论如何都必须调整大小

我还没有找到任何特定于该问题的文档,也无法从源代码(我猜是源代码)轻松地重构该问题


如何防止错误?

我在另一个应用程序中遇到了类似的问题。这与输入大小有关。我使用了以下到目前为止没有失败的变通方法:

    orig_height, orig_width = image.shape[:2]
    while True:
        height, width = image.shape[:2]

        blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size=(width, height),mean=(104.00698793, 116.66876762, 122.67891434),swapRB=False, crop=False)
        self.net.setInput(blob)
        try:
            prediction = self.net.forward()
            break
        except:
            pass

        if width*height  < 100:
            raise
        image = cv2.resize(image, (int(width*0.9), int(height*0.9)))

    prediction = cv2.resize(prediction[0, 0], (orig_width, orig_height))
原始高度,原始宽度=图像。形状[:2] 尽管如此: 高度,宽度=图像。形状[:2] blob=cv2.dnn.blobFromImage(图像,比例因子=1.0,大小=(宽度,高度),平均值=(104.00698793116.66876762122.67891434),swapRB=False,裁剪=False) self.net.setInput(blob) 尝试: 预测=self.net.forward() 打破 除: 通过 如果宽度*高度<100: 提升 image=cv2。调整大小(图像,(int(宽度*0.9),int(高度*0.9))) 预测=cv2。调整大小(预测[0,0],(原始宽度,原始高度))