this is my error:
:[ERROR:0@2.145] global net_impl.cpp:1164 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Convolution]:(resnet_v1_50/conv1/Conv2D): getMemoryShapes() throws exception. inputs=1 outputs=0/1 blobs=1
[ERROR:0@2.162] global net_impl.cpp:1175 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively blobs[0] = CV_32FC1 [ 64 3 7 7 ]
[ERROR:0@2.167] global net_impl.cpp:1177 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively Exception message: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\convolution_layer.cpp:420: error: (-2:Unspecified error) Number of input channels should be multiple of 3 but got 1 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'
Traceback (most recent call last):
File "c:/Users/Ariya_sys/OneDrive/Desktop/parsa/DNA2/noslip.py", line 20, in <module>
scores = east.forward()
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\convolution_layer.cpp:420: error: (-2:Unspecified error) Number of input channels should be multiple of 3 but got 1 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'
PS C:\Users\Ariya_sys\OneDrive\Desktop\parsa\DNA2> & C:/Users/Ariya_sys/AppData/Local/Programs/Python/Python37/python.exe c:/Users/Ariya_sys/OneDrive/Desktop/parsa/DNA2/noslip.py
[ERROR:0@0.866] global net_impl.cpp:1164 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively OPENCV/DNN: [Convolution]:(resnet_v1_50/conv1/Conv2D): getMemoryShapes() throws exception. inputs=1 outputs=0/1 blobs=1
[ERROR:0@0.875] global net_impl.cpp:1167 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively input[0] = [ 1 1 320 320 ]
[ERROR:0@0.880] global net_impl.cpp:1175 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively blobs[0] = CV_32FC1 [ 64 3 7 7 ]
[ERROR:0@0.887] global net_impl.cpp:1177 cv::dnn::dnn4_v20221220::Net::Impl::getLayerShapesRecursively Exception message: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\convolution_layer.cpp:420: error: (-2:Unspecified error) Number of input channels should be multiple of 3 but got 1 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'
Traceback (most recent call last):
File "c:/Users/Ariya_sys/OneDrive/Desktop/parsa/DNA2/noslip.py", line 19, in <module>
scores = east.forward()
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\convolution_layer.cpp:420: error: (-2:Unspecified error) Number of input channels should be multiple of 3 but got 1 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'
_--------------------------------------
and this is my code:
import cv2
import numpy as np
# تعیین مسیر فایل تصویری
image_path = 'image.jpg'
# بارگذاری تصویر
image = cv2.imread(image_path)
# اعمال پیشپردازش بر روی تصویر
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
# تشخیص مرزهای متن با استفاده از مدل EAST
east_model_path = 'frozen_east_text_detection.pb'
east = cv2.dnn.readNet(east_model_path)
blob = cv2.dnn.blobFromImage(gray, 1.0, (320, 320), (123.68, 116.78, 103.94), True, False)
east.setInput(blob)
scores = east.forward()
geometry = east.getLayerOutputNames()[1]
geometry = east.forward(geometry)
# استخراج مرزهای متن
rectangles = [x]
for y in range(scores.shape[2]):
scores_data = scores[0, 0, y]
x_data0 = geometry[0, 0, y]
x_data1 = geometry[0, 1, y]
x_data2 = geometry[0, 2, y]
x_data3 = geometry[0, 3, y]
angles_data = geometry[0, 4, y]
for x in range(scores.shape[3]):
if scores_data[x] < 0.5:
continue
offset_x, offset_y = x * 4.0, y * 4.0
angle = angles_data[x]
cos_a = np.cos(angle)
sin_a = np.sin(angle)
h = x_data0[x] + x_data2[x]
w = x_data1[x] + x_data3[x]
end_x = int(offset_x + (cos_a * x_data1[x]) + (sin_a * x_data2[x]))
end_y = int(offset_y - (sin_a * x_data1[x]) + (cos_a * x_data2[x]))
start_x = int(end_x - w)
start_y = int(end_y - h)
rectangles.append((start_x, start_y, end_x, end_y))
# حذف مربعهای تکراری با استفاده از non-maximum suppression
indices = cv2.dnn.NMSBoxes(rectangles, scores.flatten(), 0.5, 0.4)
# نمایش مرزهای تشخیص داده شده بر روی تصویر اصلی
for i in indices:
i = i[0]
box = rectangles[i]
cv2.rectangle(image, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)
# نمایش تصویر با مرزهای تشخیص داده شده
cv2.imshow("Text Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()