Java Servlet在无限循环中编写图像

时间:2017-05-19 14:37:33

标签: javascript java opencv tomcat servlets

我正在Java servlet中编写一个图像文件。当它从网络摄像头获取数据时,我想以无限循环写入文件,以使图像保持最新。

我将图像文件嵌入到我的网页中,并使用JavaScript函数每秒读取图像。我在我的网页上用一个按钮启动servlet,然后发送一个GET。

我的问题是,这可能是显而易见的,servlet运行它的无限写入循环并且图像不会在页面上更新。 我可以在我的文件浏览器中看到图像是不断写入的,但是我的页面上没有更新。我知道正在调用JS函数,因为我通过将当前时间写入页面进行测试,该页面正在更新。

如何在没有这种无限循环的情况下更新图像?

网页:

<html>
    <head>
    <title>Webcam CCTV</title>
    </head>
    <body>
        <img id='feed' src="img/frame.jpg" width='600' />
        <form method="GET"
            action="startCCTV.do">
            <br><br>
            <center>
                <input type="SUBMIT"? value='Start'/>
            </center>
        </form>
        <script src='https://code.jquery.com/jquery-3.1.0.min.js'></script>
        <script src="js/main.js"></script>
    </body>
 </html>

main.js:

window.setInterval(function updateFrame() {
    $("#feed").attr('src', 'img/frame.jpg');
}, 1000);

控制器:

public class CCTVStart extends HttpServlet {

    public void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws IOException, ServletException {

        String contextPath = getServletContext().getRealPath("/");

        ImageCapturer ic = new ImageCapturer(contextPath);
        ic.captureImage();
    }
}

型号:

public class ImageCapturer {

    private String mContextPath;

    public ImageCapturer(String contextPath) {

        mContextPath = contextPath;
    }

    public void captureImage() throws IOException {

        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        FileOutputStream os = new FileOutputStream(
                new File(mContextPath + "myLog.txt"));

        os.write("\nStarting capture...".getBytes());
        os.close();

        VideoCapture camera = new VideoCapture(0);
        Mat frame = new Mat();

        camera.read(frame);

        if (!camera.isOpened()) {
            return;
        }

        while (true) {
            if (camera.read(frame)) {
                imwrite(mContextPath + "img\\frame.jpg", frame);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我猜你的浏览器正在缓存原始图像,因此后续调用刷新它不会从服务器重新提取图像。而是使用浏览器缓存中的图像。因此,网页上的图像保持不变。

强制刷新有一个很棒的提示here。希望它有所帮助。