--- title: 'Mac M1 Springboot + OpenCV' tags: OpenCV description: 'Mac M1 Springboot + OpenCV' --- # Mac M1 Springboot + OpenCV --- [TOC] --- ## 下載OpenCV 4.9.0 ``` terminal unzip opencv.zip wget -O opencv.zip https://github.com/opencv/opencv/archive/4.9.0.zip unzip opencv_contrib.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.9.0.zip ``` --- ## 安裝OpenCV ``` terminal cd opencv-4.9.0zip mkdir build && cd build ``` 編譯安裝 ``` terminal arch -arm64 cmake \ -DCMAKE_SYSTEM_PROCESSOR=arm64 \ -DCMAKE_OSX_ARCHITECTURES=arm64 \ -DOPENCV_JAVA_TARGET_VERSION=17 \ -DWITH_OPENJPEG=OFF \ -DWITH_IPP=OFF \ -DCMAKE_BUILD_TYPE=RELEASE \ -DJAVA_INCLUDE_PATH=/opt/homebrew/Cellar/openjdk@17/17.0.8.1/libexec/openjdk.jdk/Contents/Home/include \ -DJAVA_AWT_INCLUDE_PATH=/opt/homebrew/Cellar/openjdk@17/17.0.8.1/libexec/openjdk.jdk/Contents/Home/include \ -DJAVA_INCLUDE_PATH2=/opt/homebrew/Cellar/openjdk@17/17.0.8.1/libexec/openjdk.jdk/Contents/Home/include/darwin \ -DBUILD_opencv_python2=OFF \ -DBUILD_opencv_java=ON \ -DINSTALL_PYTHON_EXAMPLES=OFF \ -DINSTALL_C_EXAMPLES=OFF \ -DBUILD_ZLIB=OFF \ -DOPENCV_ENABLE_NONFREE=ON \ -DOPENCV_EXTRA_MODULES_PATH=/Users/gn715364/Documents/server/opencv_contrib-4.9.0/modules \ -DBUILD_EXAMPLES=ON .. ``` ``` terminal arch -arm64 make -j8 # 需要安裝在安裝 # arch -arm64 make install ``` --- ## Springboot 整合 Lib 放置 ![image](https://hackmd.io/_uploads/SyG0XoEZC.png) JDK -VM設置 ``` terminal -Djava.library.path=/Users/gn715364/Documents/server/opencv-4.9.0/lib ``` Gradle Jar設置 build.gradle ``` groovy dependencies { implementation fileTree(dir: 'libs',includes: ['*.jar']) ... } ``` 測試程式碼 ``` java static { try { logger.info("Start headless mode..."); System.setProperty("java.awt.headless", "true"); logger.info("Path:{}", System.getProperty("java.library.path")); logger.info("Add OpenCV lib..."); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); logger.info("load success"); } catch (Exception e) { e.printStackTrace(); } } ... ... Resource resource = new ClassPathResource("xml/haarcascade_frontalface_alt.xml"); if(resource.exists()) { CascadeClassifier faceDetector = new CascadeClassifier(); faceDetector.load(resource.getURI().getPath()); String imgPath = "/Users/gn715364/Documents/server/opencv-4.9.0/image/group1.jpg"; Mat image = Imgcodecs.imread(imgPath); if (image.empty()) { throw new RuntimeException("圖片內存為空"); } MatOfRect face = new MatOfRect(); faceDetector.detectMultiScale(image, face); Rect[] rects = face.toArray(); System.out.println("識別人臉個數: " + rects.length); } ``` 注意:以下兩個套件一定要拿掉,不然OpenCV無法連結 ``` terminal spring-boot-devtools springloaded ``` --- ## 參考鏈結: https://blog.csdn.net/hengqianqq/article/details/99241294?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-12-99241294-blog-88896268.235^v43^pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.7&utm_relevant_index=15 https://blog.csdn.net/Mattscl/article/details/134259677?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-134259677-blog-118438244.235%5Ev43%5Epc_blog_bottom_relevance_base6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-134259677-blog-118438244.235%5Ev43%5Epc_blog_bottom_relevance_base6 https://blog.csdn.net/qq_39567427/article/details/131890490 https://yungger.medium.com/%E5%9C%A8-mac-m1-%E4%B8%8A%E5%AE%89%E8%A3%9D-opencv-%E6%8C%87%E5%AE%9A%E8%B7%AF%E5%BE%91-22728c515c7f