前言
云从科技还不错,基于JNI封装了java sdk
初始化
CloudWalkFaceControl control = CloudWalkFaceControl.getInstance();
int res=-1;
res=CloudWalkFaceControl.cwInit(cwModels);
if (0 != res) {
log.error("cwInit error,code={}",res);
}
res=CloudWalkFaceControl.cwSetFrameDataCallBack(frameDataCallBack);
if (0 != res) {
log.error("cwSetFrameDataCallBack error,code={}",res);
}
res=CloudWalkFaceControl.cwSetSingleFace(1);
if (0 != res) {
log.error("cwSetSingleFace error,code={}",res);
}
res=CloudWalkFaceControl.cwOpenCamera_FaceControl(0, 640, 480, 0);
if (0 != res) {
log.error("cwOpenCamera_FaceControl error,code={}",res);
}
帧回调
@Slf4j
@Service
public class FaceFrameCallBackImpl implements FrameDataCallBack {
public FaceFrameCallBackImpl() {
}
@Override
public int FrameCallBackData(int width, int height, int bytesPerPixel, int stride, byte[] data, String faces) {
// 暂无展示需求
/*opencv_core.IplImage iplImage = cvCreateImageHeader(cvSize(width,height), IPL_DEPTH_8U, 3);
BytePointer bytePointer = new BytePointer(data);
cvSetData(iplImage, bytePointer, ((width*3) + 3) >> 2 << 2);
// 画人脸框
if (StringUtils.isNotEmpty(faces)) {
log.info("faces={}",faces);
List<FacePos> facePosList = transToFacePos(faces);
int faceNum = facePosList.size();
for (int i = 0; i < faceNum; i++) {
int left = facePosList.get(i).x;
int top = facePosList.get(i).y;
int right = left+facePosList.get(i).w;
int bottom = top+facePosList.get(i).h;
cvRectangle(iplImage,
cvPoint(left, top),
cvPoint(right, bottom),
CV_RGB(0, 255, 0),
1,
4,
0
);
}
}
cvNamedWindow("test",CV_WINDOW_NORMAL);
cvResizeWindow("test", width, height);
cvShowImage("test", iplImage);
cvWaitKey(30);
cvReleaseImageHeader(iplImage);*/
return 0;
}
}
人脸抓拍
CaptureFaceData[] captureFaceData = new CaptureFaceData[]{new CaptureFaceData()};
CloudWalkFaceControl.cwCaptureFace(captureFaceData);
if (captureFaceData[0].faceData == null) {
log.debug("没有抓拍到人脸数据");
return;
}
String imgData = Base64.encodeBase64String(captureFaceData[0].faceData);
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!