人脸跟踪回调函数


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 则没有出现



计算机视觉      人脸跟踪 人脸web展示

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!