项目架构
- 后端:Spring Boot。
- 视觉框架:OpenCV。
文件结构
- src/main/java:Spring Boot的主目录,包含类、控制器、服务、DLL动态链接库、data/haarcascades分类器等。
- src/main/resources:配置文件、静态资源等。
OpenCV依赖
- 前往OpenCV官网下载相关安装包。
- 下载完毕后,进行解压(我的是opencv-4.10.0-windows)。
- 将解压文件中的 opencv/build/java 文件夹中的所有文件复制到 ${project.basedir}/lib/ 中。
- 导入opencv依赖(pom.xml
<dependency>
<groupId>cn.lz.zy</groupId>
<artifactId>opencv</artifactId>
<version>4.10.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/opencv-4100.jar</systemPath>
</dependency>
实现
添加VM Options
可根据自身需求设置library路径
-Djava.library.path=C:\MyFiles\Projects\Spring_Boot_Projects\opencv_demo\lib\x64
人脸识别测试
将opencv中的opencv/sources/data目录中文件复制到项目/data中。
import org.opencv.core.*;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;
import static org.opencv.highgui.HighGui.*;
import static org.opencv.imgproc.Imgproc.*;
/**
* @author zy
* @date 2024/6/24
* @Description 人脸视频测试
*/
@Slf4j
public class FaceDetection {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String systemProperties = String.valueOf(System.getProperties().get("os.arch"));
log.info("系统架构:{}", systemProperties);
}
static CascadeClassifier faceDetector = new CascadeClassifier("data/haarcascades/haarcascade_frontalface_alt.xml");
public static void main(String[] args) {
//获取摄像头
VideoCapture capture = new VideoCapture(0);
//判断摄像头是否打开
if (!capture.isOpened()) {
log.info("摄像头打开失败");
return;
}
//循环读取摄像头数据
while (true) {
Mat frame = new Mat();
//读取摄像头数据
capture.read(frame);
Mat grayFrame = new Mat();
if (frame.empty()) {
log.info("没有获取到视频流");
break;
}
cvtColor(frame, grayFrame, COLOR_BGR2GRAY);
equalizeHist(grayFrame, grayFrame);
MatOfRect faces = new MatOfRect();
faceDetector.detectMultiScale(grayFrame, faces);
for (Rect rect : faces.toArray()) {
rectangle(frame, rect, new Scalar(0, 255, 0), 2);
}
imshow("人脸检测:", frame);
if (waitKey(1) == 27) {
break;
}
}
capture.release();//释放摄像头资源
destroyAllWindows();//释放窗口资源
}
}
运行结果
总结
-
确保Maven引入本地JAR包的正确性。
-
VM Options的正确配置。
-
获取摄像头,并确保摄像头可用。
-
灰度图、人脸检测的正确调用。
-
资源释放。