人脸跟踪回调函数
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(255, 255, 0),
2,
1,
0
);
}
}
BufferedImage bufferedImage = Java2DFrameUtils.toBufferedImage(iplImage);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(10240);
try {
ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);
String base64 = Base64.encodeBase64String(byteArrayOutputStream.toByteArray());
CefBrowser cefBrowser = applicationContext.getBean(CefBrowser.class);
cefBrowser.executeJavaScript("loadImg('" + base64 + "')", "", 0);
} catch (IOException e) {
e.printStackTrace();
}
cvWaitKey(30);
cvReleaseImageHeader(iplImage);
return 0;
}
前端代码
<html>
<body>
<canvas id="screenshot"></canvas>
<script>
var img = new Image();
var screenshot = document.getElementById("screenshot");
var ctx = screenshot.getContext('2d')
img.onload = function (e) {
var i = e.currentTarget;
screenshot.width = i.width;
screenshot.height = i.height;
ctx.clearRect(0, 0, screenshot.width, screenshot.height);
ctx.drawImage(img, 0, 0, i.width, i.height);
}
function loadImg(base64) {
img.src = "data:image/png;base64," + base64;
}
</script>
</body>
</html>
问题
jcef 49 版本在一段时间后会发生白屏现象,将版本升级到88 则没有出现
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!