Re: NetBSD 10 and opencv-3.4.17 pkg crash

[email protected]
Newsgroups gmane.os.netbsd.ports.arm
Message-ID <[email protected]>
I found a workaround.

First, I'm also seeing this with the latest binary packages:
opencv-3.4.20nb2. Similar stack trace in the core dump as the previous
package version.

I then tried to build and install from pkgsrc/graphics/opencv, and see the
same issue. There seems to be a problem with how the opencv package is
built on Aarch64.

What I did get to work is the latest OpenCV 4.x (4.10.0-pre) source from
https://github.com/opencv/opencv. I was able to (patiently) build on my
Pinebook Pro with NetBSD 10. Below is the git diff.

To test, I ran the samples/python/video.py and it worked -- sure enough,
it successfully displayed the Pinebook Pro's built in video cam. I have a
simple frame capture test below that works too.

Cool.

If I can get the samples and tests to pass (still experimenting), would
this be worth my effort to integrate into pkgsrc?

Thanks - Joel

Here's a simple frame capture test:
import cv2

cam = cv2.VideoCapture('/dev/video0')
print((cam.get(cv2.CAP_PROP_FRAME_WIDTH),cam.get(cv2.CAP_PROP_FRAME_HEIGHT)))
ret, frame = cam.read()
if ret:
    cv2.imwrite('/tmp/snap.jpeg', frame)
else:
    print("Camera read failed.")
cam.release()

Here's the git diff:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 136de5c79f..d6cc1e6480 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,6 +5,13 @@
 #      $ cmake <PATH_TO_OPENCV_ROOT>
 #
 #
----------------------------------------------------------------------------
+
+# BSD
+add_compile_options($<$<COMPILE_LANGUAGE:C>:-std=gnu99>)
+add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=gnu++20>)
+add_definitions(-D__OpenBSD__)
+#
+
 # Disable in-source builds to prevent source tree corruption.
 if(" ${CMAKE_SOURCE_DIR}" STREQUAL " ${CMAKE_BINARY_DIR}")
   message(FATAL_ERROR "
@@ -143,7 +150,7 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)  #
https://cmake.org/cmake/help/
     if(WIN32)
       set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH
"Installation Directory" FORCE)
     else()
-      set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation
Directory" FORCE)
+      set(CMAKE_INSTALL_PREFIX "/usr/pkg" CACHE PATH "Installation
Directory" FORCE)
     endif()
   else()
     # any cross-compiling
@@ -706,9 +713,9 @@ if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE)
           message(STATUS "CUDA: Not detected, for stand alone
installations the path to the CUDA toolkit should be manually
specified with -DCUDA_PATH=. e.g. -DCUDA_PATH=\"C:/Program
Files/NVIDIA GPU Computing Toolkit/CUDA/vXX.X\"")
         endif()
       elseif(UNIX)
-        message(STATUS "CUDA: Not detected, make sure you have performed
the mandatory Post-installation actions described in the CUDA installation
guide.\n   For stand alone installations you can set the CUDA_PATH
environmental or CMake variable. e.g. export
CUDA_PATH=/usr/local/cuda-XX.X or -DCUDA_PATH=/usr/local/cuda-XX.X.")
-        message(STATUS "CUDA: Falling back to searching for the CUDA
compiler in its default location (/usr/local/cuda)")
-        set(CUDA_PATH "/usr/local/cuda" CACHE INTERNAL "")
+        message(STATUS "CUDA: Not detected, make sure you have performed
the mandatory Post-installation actions described in the CUDA installation
guide.\n   For stand alone installations you can set the CUDA_PATH
environmental or CMake variable. e.g. export CUDA_PATH=/usr/pkg/cuda-XX.X
or -DCUDA_PATH=/usr/pkg/cuda-XX.X.")
+        message(STATUS "CUDA: Falling back to searching for the CUDA
compiler in its default location (/usr/pkg/cuda)")
+        set(CUDA_PATH "/usr/pkg/cuda" CACHE INTERNAL "")
         set(ENV{CUDA_PATH} ${CUDA_PATH})
         unset(CMAKE_CUDA_COMPILER CACHE)
         unset(CMAKE_CUDA_COMPILER)
@@ -720,7 +727,7 @@ if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE)
     if(CMAKE_CUDA_COMPILER)
       enable_language(CUDA)
     elseif(UNIX)
-      message(WARNING "CUDA: Not detected!  If you are not using the
default host compile
+add_compile_options($<$<COMPILE_LANGUAGE:C>:-std=gnu99>)
+add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=gnu++20>)
+add_definitions(-D__OpenBSD__)
+#
+
 # Disable in-source builds to prevent source tree corruption.
 if(" ${CMAKE_SOURCE_DIR}" STREQUAL " ${CMAKE_BINARY_DIR}")
   message(FATAL_ERROR "
@@ -143,7 +150,7 @@ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)  #
https://cmake.org/cmake/help/
     if(WIN32)
       set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH
"Installation Directory" FORCE)
     else()
-      set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation
Directory" FORCE)
+      set(CMAKE_INSTALL_PREFIX "/usr/pkg" CACHE PATH "Installation
Directory" FORCE)
     endif()
   else()
     # any cross-compiling
@@ -706,9 +713,9 @@ if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE)
           message(STATUS "CUDA: Not detected, for stand alone
installations the path to the CUDA toolkit should be manually
specified with -DCUDA_PATH=. e.g. -DCUDA_PATH=\"C:/Program
Files/NVIDIA GPU Computing Toolkit/CUDA/vXX.X\"")
         endif()
       elseif(UNIX)
-        message(STATUS "CUDA: Not detected, make sure you have performed
the mandatory Post-installation actions described in the CUDA installation
guide.\n   For stand alone installations you can set the CUDA_PATH
environmental or CMake variable. e.g. export
CUDA_PATH=/usr/local/cuda-XX.X or -DCUDA_PATH=/usr/local/cuda-XX.X.")
-        message(STATUS "CUDA: Falling back to searching for the CUDA
compiler in its default location (/usr/local/cuda)")
-        set(CUDA_PATH "/usr/local/cuda" CACHE INTERNAL "")
+        message(STATUS "CUDA: Not detected, make sure you have performed
the mandatory Post-installation actions described in the CUDA installation
guide.\n   For stand alone installations you can set the CUDA_PATH
environmental or CMake variable. e.g. export CUDA_PATH=/usr/pkg/cuda-XX.X
or -DCUDA_PATH=/usr/pkg/cuda-XX.X.")
+        message(STATUS "CUDA: Falling back to searching for the CUDA
compiler in its default location (/usr/pkg/cuda)")
+        set(CUDA_PATH "/usr/pkg/cuda" CACHE INTERNAL "")
         set(ENV{CUDA_PATH} ${CUDA_PATH})
         unset(CMAKE_CUDA_COMPILER CACHE)
         unset(CMAKE_CUDA_COMPILER)
@@ -720,7 +727,7 @@ if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE)
     if(CMAKE_CUDA_COMPILER)
       enable_language(CUDA)
     elseif(UNIX)
-      message(WARNING "CUDA: Not detected!  If you are not using the
default host compiler (g++) then you need to specify both
CMAKE_CUDA_HOST_COMPILER and CMAKE_CUDA_COMPILER. e.g.
-DCMAKE_CUDA_HOST_COMPILER=/usr/bin/clang++
-DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc.")
+      message(WARNING "CUDA: Not detected!  If you are not using the
default host compiler (g++) then you need to specify both
CMAKE_CUDA_HOST_COMPILER and CMAKE_CUDA_COMPILER. e.g.
-DCMAKE_CUDA_HOST_COMPILER=/usr/bin/clang++
-DCMAKE_CUDA_COMPILER=/usr/pkg/cuda/bin/nvcc.")
     endif()
   endif()
 endif()
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.