【问题标题】:How can I increase performance of Java Computer Vision using WebSocketServer?如何使用 WebSocketServer 提高 Java 计算机视觉的性能?
【发布时间】:2015-01-18 04:48:17
【问题描述】:
@OnWebSocketMessage
public void onMessage(byte[] data, int offset, int length) throws IOException {                          

    //convert packet to output stream
    ByteArrayOutputStream byteArrayImg = new ByteArrayOutputStream();
    byteArrayImg.write(data, offset, length);
    //convert output stream to bytearray
    byte[] byteArray = byteArrayImg.toByteArray();
    //creating iplimage instance from byte array
    iplimage = cvDecodeImage(cvMat(1, byteArray.length,CV_8UC1, new BytePointer(byteArray)));
    /* HERE GOES FACE RECOGNITION OR SOMETHING */
    //iplimage back to outputstream
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    BufferedImage imgb = iplimage.getBufferedImage();
    ImageIO.write(imgb, "png", bout);
    //sendig back echo packet to javascript client
    ByteBuffer buf = ByteBuffer.wrap(bout.toByteArray());
    this.session.getRemote().sendBytes(buf);
}

我正在尝试将网络摄像头流(从 javascript 客户端接收的字节数组)转换为 IplImage 对象,以便可以使用 JavaCV。我编写了这段代码,它从我的网络摄像头中获取帧并发送回一个回声,但性能非常慢(10 FPS)。我对计算机视觉和处理图像真的很陌生,也许我做错了什么。如果您有任何可以加快速度的想法,我很想听听。

【问题讨论】:

    标签: java websocket computer-vision


    【解决方案1】:

    尝试替换此代码

    ByteArrayOutputStream byteArrayImg = new ByteArrayOutputStream();
    byteArrayImg.write(data, offset, length);
    byte[] byteArray = byteArrayImg.toByteArray();
    

    拨打Arrays.copyOfRange(..)。这应该会大大减少所需的数据移动量。

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 2016-02-20
      • 1970-01-01
      • 2012-10-24
      • 2013-08-07
      • 2012-02-01
      • 1970-01-01
      • 2010-10-30
      • 2018-11-07
      相关资源
      最近更新 更多