Я использовал OpenCV v4.0.1. Ниже приведен тест python код
import cv2
img = cv2.UMat(cv2.imread("image.jpg", cv2.IMREAD_COLOR))
imgUMat = cv2.UMat(img)
gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 1.5)
gray = cv2.Canny(gray, 0, 50)
cv2.imwrite('test.jpg',img)
cv2.imwrite('test_UMat.jpg' , imgUMat)
Он вернул сообщение об ошибке, как показано ниже
[ WARN:0] Using world accessible cache directory. This may be not secure: /var/tmp/
OpenCL error CL_INVALID_WORK_GROUP_SIZE (-54) during call: clEnqueueNDRangeKernel('row_filter_C1_D0', dims=2, globalsize=128x528x1, localsize=16x16x1) sync=false
[ 1] 25: FMA_MUL temp(322).dp.x, 2.000000, temp(319).dp.x
Я проверил свой OpenCL
root@imx6qsabresd:/usr/opencv_test# opencv_version --opencl
4.0.1
OpenCL Platforms:
Vivante OpenCL Platform
iGPU: Vivante OpenCL Device GC2000.5108.0000 (OpenCL 1.1 )
Current OpenCL device:
Type = iGPU
Name = Vivante OpenCL Device GC2000.5108.0000
Version = OpenCL 1.1
Driver version = OpenCL 1.1 V6.2.4.p1.150331
Address bits = 32
Compute units = 4
Max work group size = 1024
Local memory size = 1 KB
Max memory allocation size = 32 MB
Double support = No
Host unified memory = Yes
Device extensions:
cl_khr_byte_addressable_store
cl_khr_gl_sharing
Has AMD Blas = No
Has AMD Fft = No
Preferred vector width char = 4
Preferred vector width short = 4
Preferred vector width int = 4
Preferred vector width long = 0
Preferred vector width float = 4
Preferred vector width double = 0
"localsize = 16x16x1 "меньше, чем" Максимальный размер рабочей группы = 1024 "
" globalsize = 128x528x1 "равномерно делится на" localsize = 16x16x1 "
Я не знаю, почему он вернул ошибка "CL_INVALID_WORK_GROUP_SIZE". Поэтому я проверял код построчно и обнаружил ошибку, вызванную cv2.GaussianBlur (). Кстати, если я не использую UMat, cv2.GaussianBlur () не вызовет никакой ошибки.
Может кто-нибудь сказать мне причину и как я могу исправить ошибку?