Sfoglia il codice sorgente

opencv 优化依赖

DevYK 3 anni fa
parent
commit
2fe7fab267

+ 58 - 56
CMakeLists.txt

@@ -24,9 +24,9 @@ IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
     set(JNI_PATH ${JAVA_HOME}/include)
     include_directories(${JNI_PATH})
 
-    set(OPENCV_HOME /usr/local/Cellar/opencv/4.5.4_4)
-    set(OPENCV_INCLUDE ${OPENCV_HOME}/include/opencv4)
-    set(OPENCV_LIBS ${OPENCV_HOME}/lib)
+    set(OPENCV_HOME /usr)
+    set(OPENCV_INCLUDE ${OPENCV_HOME}/include/)
+    set(OPENCV_LIBS ${OPENCV_HOME}/lib64)
 
 ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
     set(JNI_PATH ${JAVA_HOME}/include)
@@ -55,62 +55,64 @@ add_library(piaoquan_java_opencv SHARED
         ${OPENCV_SRC}
         ${JAVA_JNI_SRC})
 
-set(OpenCV_LIBS -lopencv_xphoto
-        -lopencv_xobjdetect
-        -lopencv_ximgproc
-        -lopencv_xfeatures2d
-        -lopencv_wechat_qrcode
-        -lopencv_viz
-        -lopencv_videostab
-        -lopencv_videoio
-        -lopencv_video
-        -lopencv_tracking
-        -lopencv_text
-        -lopencv_surface_matching
-        -lopencv_superres
-        -lopencv_structured_light
-        -lopencv_stitching
-        -lopencv_stereo
-        -lopencv_shape
-        -lopencv_sfm
-        -lopencv_saliency
-        -lopencv_rgbd
-        -lopencv_reg
-        -lopencv_rapid
-        -lopencv_quality
-        -lopencv_plot
-        -lopencv_photo
-        -lopencv_phase_unwrapping
-        -lopencv_optflow
-        -lopencv_objdetect
-        -lopencv_ml
-        -lopencv_mcc
-        -lopencv_line_descriptor
-        -lopencv_intensity_transform
+set(OpenCV_LIBS
         -lopencv_imgproc
         -lopencv_imgcodecs
-        -lopencv_img_hash
-        -lopencv_highgui
-        -lopencv_hfs
-        -lopencv_gapi
-        -lopencv_fuzzy
-        -lopencv_freetype
-        -lopencv_flann
-        -lopencv_features2d
-        -lopencv_face
-        -lopencv_dpm
-        -lopencv_dnn_superres
-        -lopencv_dnn_objdetect
-        -lopencv_dnn
-        -lopencv_datasets
         -lopencv_core
-        -lopencv_ccalib
-        -lopencv_calib3d
-        -lopencv_bioinspired
-        -lopencv_bgsegm
-        -lopencv_barcode
-        -lopencv_aruco
-        -lopencv_alphamat)
+#        -lopencv_xphoto
+#        -lopencv_xobjdetect
+#        -lopencv_ximgproc
+#        -lopencv_xfeatures2d
+#        -lopencv_wechat_qrcode
+#        -lopencv_viz
+#        -lopencv_videostab
+#        -lopencv_videoio
+#        -lopencv_video
+#        -lopencv_tracking
+#        -lopencv_text
+#        -lopencv_surface_matching
+#        -lopencv_superres
+#        -lopencv_structured_light
+#        -lopencv_stitching
+#        -lopencv_stereo
+#        -lopencv_shape
+#        -lopencv_sfm
+#        -lopencv_saliency
+#        -lopencv_rgbd
+#        -lopencv_reg
+#        -lopencv_rapid
+#        -lopencv_quality
+#        -lopencv_plot
+#        -lopencv_photo
+#        -lopencv_phase_unwrapping
+#        -lopencv_optflow
+#        -lopencv_objdetect
+#        -lopencv_ml
+#        -lopencv_mcc
+#        -lopencv_line_descriptor
+#        -lopencv_intensity_transform
+#        -lopencv_img_hash
+#        -lopencv_highgui
+#        -lopencv_hfs
+#        -lopencv_gapi
+#        -lopencv_fuzzy
+#        -lopencv_freetype
+#        -lopencv_flann
+#        -lopencv_features2d
+#        -lopencv_face
+#        -lopencv_dpm
+#        -lopencv_dnn_superres
+#        -lopencv_dnn_objdetect
+#        -lopencv_dnn
+#        -lopencv_datasets
+#        -lopencv_ccalib
+#        -lopencv_calib3d
+#        -lopencv_bioinspired
+#        -lopencv_bgsegm
+#        -lopencv_barcode
+#        -lopencv_aruco
+#        -lopencv_alphamat
+        )
 
 target_link_libraries(ImageBlurDetection_debug
         ${OpenCV_LIBS}

+ 83 - 0
README.md

@@ -0,0 +1,83 @@
+## OpenCV 项目
+
+
+
+### 如何编译该项目
+**必须安装的环境**
+1. 配置 `JAVA_HOME`
+2. 安装 opencv
+
+####Linux:
+
+**配置 JAVA_HOME 环境变量**
+```shell
+export JAVA_HOME=xxx
+```
+
+**命令安装 2.4.5**
+```shell
+sudo yum install opencv opencv-devel
+
+#检查版本
+pkg-config --modversion opencv
+```
+
+**源码安装 4.5.5**
+```shell
+#opencv 环境 4.5.5
+#安装依赖包
+sudo yum install freeglut-devel mesa-libGL mesa-libGL-devel  boost boost-thread boost-devel libv4l-devel libjpeg-turbo-devel libtiff-devel  libdc1394-devel tbb-devel eigen3-devel gstreamer-plugins-base-devel python-devel numpy python34-numpy gtk2-devel libpng-devel jasper-devel openexr-devel libwebp-devel
+
+#下载 OpenCV 源码 
+
+wget -O opencv-4.5.5.zip         https://github.com/opencv/opencv/archive/refs/tags/4.5.5.zip
+wget -O opencv_contrib-4.5.5.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.zip
+unzip opencv-4.5.5.zip
+unzip opencv_contrib-4.5.5.zip
+
+cd opencv-4.5.5
+mkdir build && cd build
+
+OPENCV_CONTRIB_DIR=/root/opencv/opencv_contrib-4.5.5/modules
+
+cmake -D CMAKE_BUILD_TYPE=RELEASE \
+    -D CMAKE_INSTALL_PREFIX=/usr/local \
+    -D INSTALL_C_EXAMPLES=ON \
+    -D INSTALL_PYTHON_EXAMPLES=ON \
+    -D OPENCV_GENERATE_PKGCONFIG=ON \
+    -D OPENCV_EXTRA_MODULES_PATH="${OPENCV_CONTRIB_DIR}" \
+    -D BUILD_EXAMPLES=ON ..
+
+#使用 8cpu 编译并安装    
+make -j8 && make install    
+ 
+
+```
+
+#### MAC:
+**命令安装**
+```shell
+brew install opencv
+```
+
+### 如何使用?
+#### java
+
+**1、初始化 SDK**
+```java
+PQCVMediaProcessor.initSDK("/Users/devyk/Data/Project/sample/github_code/OpenCVSample/output/lib/libpiaoquan_java_opencv.dylib");
+```
+
+**2、以 bytes 流形式传递**
+```java
+PQCVMediaProcessor.blurDetectionFromImageBytes(byte[] data)
+
+```
+
+
+**2、以 path 流形式传递**
+```java
+PQCVMediaProcessor.blurDetectionFromImagePath(String path);
+
+```
+

+ 1 - 1
cmake-build-debug/CMakeFiles/ImageBlurDetection_debug.dir/link.txt

@@ -1 +1 @@
-/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/ImageBlurDetection_debug.dir/main.cpp.o CMakeFiles/ImageBlurDetection_debug.dir/opencv/image_blur_detection.cpp.o CMakeFiles/ImageBlurDetection_debug.dir/jni/ImageBlurDetection.cpp.o -o ../output/bin/ImageBlurDetection_debug   -L/usr/local/Cellar/opencv/4.5.4_4/lib  -Wl,-rpath,/usr/local/Cellar/opencv/4.5.4_4/lib -lopencv_xphoto -lopencv_xobjdetect -lopencv_ximgproc -lopencv_xfeatures2d -lopencv_wechat_qrcode -lopencv_viz -lopencv_videostab -lopencv_videoio -lopencv_video -lopencv_tracking -lopencv_text -lopencv_surface_matching -lopencv_superres -lopencv_structured_light -lopencv_stitching -lopencv_stereo -lopencv_shape -lopencv_sfm -lopencv_saliency -lopencv_rgbd -lopencv_reg -lopencv_rapid -lopencv_quality -lopencv_plot -lopencv_photo -lopencv_phase_unwrapping -lopencv_optflow -lopencv_objdetect -lopencv_ml -lopencv_mcc -lopencv_line_descriptor -lopencv_intensity_transform -lopencv_imgproc -lopencv_imgcodecs -lopencv_img_hash -lopencv_highgui -lopencv_hfs -lopencv_gapi -lopencv_fuzzy -lopencv_freetype -lopencv_flann -lopencv_features2d -lopencv_face -lopencv_dpm -lopencv_dnn_superres -lopencv_dnn_objdetect -lopencv_dnn -lopencv_datasets -lopencv_core -lopencv_ccalib -lopencv_calib3d -lopencv_bioinspired -lopencv_bgsegm -lopencv_barcode -lopencv_aruco -lopencv_alphamat 
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/ImageBlurDetection_debug.dir/main.cpp.o CMakeFiles/ImageBlurDetection_debug.dir/opencv/image_blur_detection.cpp.o CMakeFiles/ImageBlurDetection_debug.dir/jni/ImageBlurDetection.cpp.o -o ../output/bin/ImageBlurDetection_debug   -L/usr/local/Cellar/opencv/4.5.4_4/lib  -Wl,-rpath,/usr/local/Cellar/opencv/4.5.4_4/lib -lopencv_imgproc -lopencv_imgcodecs -lopencv_core 

BIN
cmake-build-debug/CMakeFiles/ImageBlurDetection_debug.dir/main.cpp.o


BIN
cmake-build-debug/CMakeFiles/ImageBlurDetection_debug.dir/opencv/image_blur_detection.cpp.o


+ 1 - 1
cmake-build-debug/CMakeFiles/piaoquan_java_opencv.dir/link.txt

@@ -1 +1 @@
-/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk -dynamiclib -Wl,-headerpad_max_install_names -o ../output/lib/libpiaoquan_java_opencv.dylib -install_name @rpath/libpiaoquan_java_opencv.dylib CMakeFiles/piaoquan_java_opencv.dir/opencv/image_blur_detection.cpp.o CMakeFiles/piaoquan_java_opencv.dir/jni/ImageBlurDetection.cpp.o   -L/usr/local/Cellar/opencv/4.5.4_4/lib  -Wl,-rpath,/usr/local/Cellar/opencv/4.5.4_4/lib -lopencv_xphoto -lopencv_xobjdetect -lopencv_ximgproc -lopencv_xfeatures2d -lopencv_wechat_qrcode -lopencv_viz -lopencv_videostab -lopencv_videoio -lopencv_video -lopencv_tracking -lopencv_text -lopencv_surface_matching -lopencv_superres -lopencv_structured_light -lopencv_stitching -lopencv_stereo -lopencv_shape -lopencv_sfm -lopencv_saliency -lopencv_rgbd -lopencv_reg -lopencv_rapid -lopencv_quality -lopencv_plot -lopencv_photo -lopencv_phase_unwrapping -lopencv_optflow -lopencv_objdetect -lopencv_ml -lopencv_mcc -lopencv_line_descriptor -lopencv_intensity_transform -lopencv_imgproc -lopencv_imgcodecs -lopencv_img_hash -lopencv_highgui -lopencv_hfs -lopencv_gapi -lopencv_fuzzy -lopencv_freetype -lopencv_flann -lopencv_features2d -lopencv_face -lopencv_dpm -lopencv_dnn_superres -lopencv_dnn_objdetect -lopencv_dnn -lopencv_datasets -lopencv_core -lopencv_ccalib -lopencv_calib3d -lopencv_bioinspired -lopencv_bgsegm -lopencv_barcode -lopencv_aruco -lopencv_alphamat 
+/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk -dynamiclib -Wl,-headerpad_max_install_names -o ../output/lib/libpiaoquan_java_opencv.dylib -install_name @rpath/libpiaoquan_java_opencv.dylib CMakeFiles/piaoquan_java_opencv.dir/opencv/image_blur_detection.cpp.o CMakeFiles/piaoquan_java_opencv.dir/jni/ImageBlurDetection.cpp.o   -L/usr/local/Cellar/opencv/4.5.4_4/lib  -Wl,-rpath,/usr/local/Cellar/opencv/4.5.4_4/lib -lopencv_imgproc -lopencv_imgcodecs -lopencv_core 

BIN
cmake-build-debug/CMakeFiles/piaoquan_java_opencv.dir/opencv/image_blur_detection.cpp.o


+ 2 - 2
cmake-build-debug/Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Feb 23 23:36 CST
+Start testing: Feb 24 13:15 CST
 ----------------------------------------------------------
-End testing: Feb 23 23:36 CST
+End testing: Feb 24 13:15 CST

BIN
java/out/production/java/com/bytesflow/opencv/media/test/OpenCVImageBlurTest$ImageBlurRunable.class


BIN
java/out/production/java/com/bytesflow/opencv/media/test/OpenCVImageBlurTest.class


+ 13 - 2
java/src/com.bytesflow.opencv.media/test/OpenCVImageBlurTest.java

@@ -5,27 +5,38 @@ import com.bytesflow.opencv.media.jni.PQCVMediaProcessor;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.util.Arrays;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 public class OpenCVImageBlurTest {
+    private static String sIMAGE_PATH = "/Users/devyk/Downloads/IMG_3067.PNG";
+    private static String sSO_PATH = "/Users/devyk/Data/Project/sample/github_code/OpenCVSample/output/lib/libpiaoquan_java_opencv.dylib";
+
     public static void main(String[] args) {
         int count = 10;
+        if (args.length > 0) {
+            sIMAGE_PATH = args[0];
+            sSO_PATH = args[1];
+            count = Integer.parseInt(args[2]);
+        }
         try {
-            PQCVMediaProcessor.initSDK("/Users/devyk/Data/Project/sample/github_code/OpenCVSample/output/lib/libpiaoquan_java_opencv.dylib");
+            PQCVMediaProcessor.initSDK(sSO_PATH);
         } catch (FileNotFoundException e) {
             e.printStackTrace();
             return;
         }
         ExecutorService executorService = Executors.newFixedThreadPool(count);
         for (; ; ) {
+            long startTime = System.currentTimeMillis();
             CountDownLatch countDownLatch = new CountDownLatch(count);
             for (int i = 0; i < count; i++) {
                 executorService.execute(new ImageBlurRunable(countDownLatch));
             }
             try {
                 countDownLatch.await();
+                System.out.println("const time = " + (System.currentTimeMillis() - startTime));
                 Thread.sleep(1000);
             } catch (InterruptedException e) {
                 e.printStackTrace();
@@ -50,7 +61,7 @@ public class OpenCVImageBlurTest {
 
     private static void blurTest() {
         try {
-            String path = "/Users/devyk/Downloads/black.png";
+            String path = sIMAGE_PATH;
             int ret;
             ret = PQCVMediaProcessor.blurDetectionFromImagePath(path);
             System.out.println("PQCVMediaProcessor path = " + ret);

+ 1 - 1
main.cpp

@@ -14,7 +14,7 @@ static void *detection_thread(void *arg) {
     rewind(fp);
     uint8_t *data = (uint8_t *) malloc(sizeof(uint8_t) * size);
     size_t size2 = fread(data, size, 1, fp);
-    printf("图片模糊度检测 %d \n", image_blur_detection("/Users/devyk/Downloads/IMG_3067.PNG"));
+    printf("图片模糊度检测 %d \n", image_blur_detection(filename));
     printf("图片模糊度检测 %d \n", bytes_blur_detection(data,size));
     free(data);
 //    printf("图片模糊度检测 %d \n", image_blur_detection("/Users/devyk/Downloads/black.png"));

+ 1 - 1
opencv/image_blur_detection.cpp

@@ -36,7 +36,7 @@ int doDetection(cv::Mat cvImage) {
             cv::Scalar mu, sigma;
             cv::meanStdDev(laplacianImage, mu, sigma);
             int blur_value = sigma.val[0] * sigma.val[0];
-            blur_value = blur_value < DEFAULT_BLUR_THRESHOLD ? image_color_ratio(grayCVImage) : blur_value;
+            blur_value = blur_value < DEFAULT_BLUR_THRESHOLD ? image_color_ratio(grayCVImage)==0?blur_value : image_color_ratio(grayCVImage):blur_value;
             cvImage.release();
             grayCVImage.release();
             return blur_value;

BIN
output/bin/ImageBlurDetection_debug


BIN
output/lib/libpiaoquan_java_opencv.dylib