OpenCV TextDetectorCNN触发PriorBoxLayerImpl断言错误的原因咨询
_minSize.size() == _maxSize.size() 的原因及解决办法 错误核心原因
这个错误是OpenCV的dnn模块处理PriorBox层时触发的断言校验失败,具体原因有两点:
OpenCV版本与模型配置不兼容
你使用的OpenCV 3.4.18版本对PriorBox层的参数校验逻辑做了严格限制,要求min_size和max_size两个参数的元素数量必须完全相等。而TextBoxes原始模型的prototxt配置文件中,部分PriorBox层可能只定义了min_size未定义max_size,或者两者数量不匹配,这种情况在旧版OpenCV中不会触发错误,但3.4.18的断言会直接阻断运行。prototxt文件配置有误
如果你的textbox.prototxt是自行修改或非官方版本,可能存在PriorBox层的min_size和max_size参数数量不一致的问题,比如某层设置了3个min_size值,但对应的max_size只有2个,直接触发断言失败。
解决办法
修正prototxt文件
打开textbox.prototxt,找到所有包含PriorBox的层,确保每个层的min_size和max_size元素数量一致。如果不需要设置max_size,可以将max_size的值设置为和min_size完全相同的内容。示例:layer { name: "mbox_priorbox" type: "PriorBox" bottom: "conv4_3_norm" bottom: "data" top: "mbox_priorbox" prior_box_param { min_size: 10.0 min_size: 20.0 max_size: 10.0 max_size: 20.0 aspect_ratio: 1.0 flip: false clip: false } }更换兼容的OpenCV版本
可以降级到OpenCV 3.4.10及之前的版本,这类版本的dnn模块还未添加该严格断言;或者升级到OpenCV 4.x系列,部分4.x版本对TextBoxes模型的兼容性做了优化,能避免这个错误。使用官方配套模型文件
确保textbox.prototxt和TextBoxes_icdar13.caffemodel是TextBoxes官方发布的配套文件,不要混用不同版本或衍生项目的模型配置。
内容的提问来源于stack exchange,提问作者ahmed osama

