- @return 相同尺寸的灰度图片的MAT对象
*/
static Mat buildGrayImage(Mat src) {
return new Mat(src.rows(), src.cols(), CV_8UC1);
}
/**
-
初始化操作,例如模型下载
-
@throws Exception
*/
void init() throws Exception;
/**
-
得到原始帧,做识别,添加框选
-
@param frame
-
@return
*/
Frame convert(Frame frame);
/**
- 释放资源
*/
void releaseOutputResource();
}
- 然后就是DetectService的实现类DetectAndRecognizeService .java,功能是用摄像头的一帧图片检测人脸,再拿检测到的人脸给RecognizeService做识别,完整代码如下,有几处要注意的地方稍后提到:
package com.bolingcavalry.grabpush.extend;
import lombok.extern.slf4j.Slf4j;
import org.bytedeco.javacpp.Loader;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.opencv_core.*;
import org.bytedeco.opencv.opencv_objdetect.CascadeClassifier;
import java.io.File;
import java.net.URL;
import java.util.Map;
import static org.bytedeco.opencv.global.opencv_imgproc.*;
/**
-
@author willzhao
-
@version 1.0
-
@description 音频相关的服务
-
@date 2021/12/3 8:09
*/
@Slf4j
public class DetectAndRecognizeService implements DetectService {
/**
- 每一帧原始图片的对象
*/
private Mat grabbedImage = null;
/**
- 原始图片对应的灰度图片对象
*/
private Mat grayImage = null;
/**
- 分类器
*/
private CascadeClassifier classifier;
/**
- 转换器
*/
private OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
/**
- 检测模型文件的下载地址
*/
private String detectModelFileUrl;
/**
- 处理每一帧的服务
*/
private RecognizeService recognizeService;
/**
- 为了显示的时候更加友好,给每个分类对应一个名称
*/
private Map<Inte