本篇内容主要讲解“opencv使用中常见的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“opencv使用中常见的问题”吧!
最近项目遇到一个问题,springboot2在打包过程中出现的问题;
1、引用本地的jar包,怎么打包到项目;
pom.xml 配置 dependencies标签配置 <!--打包本地jar包--> <dependency> <groupId>org.opencv</groupId> <artifactId>opencv</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/lib/opencv-440.jar</systemPath> </dependency> 其中,version为必填,尝试过省略,报错; plugins标签配置 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <compilerArguments> <!-- 打包本地jar包 --> <extdirs>${project.basedir}/src/main/resources/lib</extdirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> resources标签 配置 <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>lib/*.jar</include> </includes> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>lib/*.dll</include> </includes> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>*.yml</include> </includes> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>*/*.xml</include> </includes> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>*/*.json</include> </includes> </resource> </resources>
2、opencv使用人脸识别过程中,需要引入haarcascade_frontalface_alt2.xml文件,如果放在项目的lib文件中,在打包的过程中能够打到包里,但是在动态引用的过程中,由于jar包中文件的引用出现混乱路径的情况,找不到文件。找到一个折中的办法,haarcascade_frontalface_alt2.xml文件放到固定目录下,再引用的时候,只需要读取固定的路径即可。
yml文件配置
path:
resourcePath: C:\haarcascade_frontalface_alt2.xml # 人脸识别的xml配置文件
NativeConfig.java类
package com.hake.smart.configration; import com.hake.smart.ymlconfig.YmlConfigUtil; import lombok.extern.slf4j.Slf4j; import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.ClassUtils; import javax.annotation.Resource; import java.util.Arrays; /** * @Author: Liu Yue * @Descripition: * @Date; Create in 2020/8/25 15:59 **/ @Configuration @Slf4j public class NativeConfig { @Resource private YmlConfigUtil ymlConfigUtil; @Value("${path.resourcePath}") private static String resourcePath; @Value(value = "${path.resourcePath}") private void setResourcePath(String resourcePath){ this.resourcePath = resourcePath ; } @Bean public NativeConfig initFrontalface(){ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); log.error("路径:{}",resourcePath); faceDetector = new CascadeClassifier(resourcePath); return new NativeConfig(); } /** * 测试OpenCV是否能运行:需要自行修改图片位置 * @throws Exception 测试是否成功 */ static CascadeClassifier faceDetector; /* static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //String url = "C:/hake/gitremote/hakesmartacceptback/target/classes/lib/haarcascade_frontalface_alt2.xml"; //ClassPathResource("lib/haarcascade_frontalface_alt2.xml"); *//*ClassPathResource resource = new ClassPathResource("lib/haarcascade_frontalface_alt2.xml"); String path = resource.getPath(); path = basepath + path;*//* URL urlClass = ClassLoader.getSystemResource("lib/haarcascade_frontalface_alt2.xml"); String path = urlClass.getPath(); log.error("路径:{}",path); path = path.substring(1,path.length()); faceDetector = new CascadeClassifier(path); }*/ private Mat conv_Mat(String img_1) { Mat image0 = Imgcodecs.imread(img_1); Mat image = new Mat(); //灰度转换 Imgproc.cvtColor(image0, image, Imgproc.COLOR_BGR2GRAY); MatOfRect faceDetections = new MatOfRect(); //探测人脸 faceDetector.detectMultiScale(image, faceDetections); // rect中是人脸图片的范围 for (Rect rect : faceDetections.toArray()) { //切割rect人脸 Mat mat = new Mat(image, rect); return mat; } return null; } //比较图片相似度 public Boolean compare_image(String img_1, String img_2) { Mat mat_1 = conv_Mat(img_1); Mat mat_2 = conv_Mat(img_2); Mat hist_1 = new Mat(); Mat hist_2 = new Mat(); //颜色范围 MatOfFloat ranges = new MatOfFloat(0f, 256f); //直方图大小, 越大匹配越精确 (越慢) MatOfInt histSize = new MatOfInt(1000); Imgproc.calcHist(Arrays.asList(mat_1), new MatOfInt(0), new Mat(), hist_1, histSize, ranges); Imgproc.calcHist(Arrays.asList(mat_2), new MatOfInt(0), new Mat(), hist_2, histSize, ranges); // CORREL 相关系数 double res = Imgproc.compareHist(hist_1, hist_2, Imgproc.CV_COMP_CORREL); log.info("OPENCV人脸相似度:{}",res); int lifePhotostandard = ymlConfigUtil.getLifePhotostandard(); log.info("相识度标准:{}",lifePhotostandard); boolean bl = res * 100 > lifePhotostandard ? true:false; return bl; } }
到此,相信大家对“opencv使用中常见的问题”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。