BestAnHongjun / PicSocket

PicSocket:轻量级局域网跨平台图传

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PicSocket:轻量级局域网跨平台图传

1.特性

  • 底层基于UDP协议,图传实时性强。
  • 可用于高清数字图传(测试可支持1080P,100Mbps局域网下可达100+FPS)。
  • 可用于局域网wifi无线图传。
  • 跨平台,支持Windows,Linux,MacOS,Jetson,树莓派等。
  • 跨语言,支持C/C++,Python。跨平台使用时支持不同终端运行不同语言

2.快速开始

C/C++快速开始

(1)安装依赖项:

请确保您的机器已安装CMake及C/C++编译器工具链。

安装OpenCV库:

Jetson平台

# Jetson平台JetPack已预装OpenCV库,无需操作。

Ubuntu/树莓派/香橙派

sudo apt-get install libopencv-dev

MacOS

brew install opencv

(2)编译安装

克隆本仓库。

cd ~
git clone https://github.com/BestAnHongjun/PicSocket.git

编译并安装。

cd ~/PicSocket
mkdir build
cd build
cmake ..
make -j4
make install # 不会安装到系统目录,安装到项目的install目录

编译安装结束后,项目目录项生成install目录。

|-install
    |- include  # C/C++头文件
    |- lib      # 链接库
    |- cpp      # 一个简易的demo

include文件夹和lib文件夹拷贝到你自己的工程中即可使用。

(3)在自定义工程中使用PicSocket

为了演示使用方法,我们假设cpp就是您的工程目录。

在您的工程目录下创建源码文件,如picsocket_sender.cpppicsocket_receiver.cpp。创建CMake文件,如CMakeLists.txt

随后编译您的工程。

cd ~/PicSocket/install/cpp # 进入您的工程目录
mkdir build     # 创建编译目录
cd build
cmake ..
make -j4

随后,在您的编译目录下可以看到二进制文件picsocket_senderpicsocket_receiver。运行他们即可。

注意:运行本demo时,请确保您的发送端设备安装有摄像头,并可由cv::VideoCapture(0)正常读取。

# 由8888端口接受图片流
./picsocket_receiver 8888

# 向127.0.0.0:8888发送图片流
./picsocket_sender 127.0.0.1 8888
Python快速开始

(1)安装依赖项:

请确保您的机器已安装CMake及C/C++编译器工具链。

安装OpenCV库:

Jetson平台

# Jetson平台JetPack已预装OpenCV库,无需操作。

Ubuntu/树莓派/香橙派

sudo apt-get install libopencv-dev

MacOS

brew install opencv

(2)编译安装

克隆本仓库。

cd ~
git clone https://github.com/BestAnHongjun/PicSocket.git

编译并安装。

cd ~/PicSocket
mkdir build
cd build
cmake .. -DPYTHON_BUILD=TRUE
make -j4

安装Python模块。

cd ~/PicSocket
pip3 install -e .

(3)在自定义工程中使用PicSocket

作为一个简单示例,您可以复制并创建picsocket_sender.pypicsocket_receiver.py,并运行他们。

注意:运行本demo时,请确保您的发送端设备安装有摄像头,并可由cv2.VideoCapture(0)正常读取。

# 由8888端口接受图片流
python3 picsocket_receiver 8888

# 向127.0.0.0:8888发送图片流
python3 picsocket_sender 127.0.0.1 8888

3.简明教程

(1)C/C++简明教程

  • 发送端
// 0.引入头文件
#include "pic_socket.h" 

int main()
{
    // 1.OpenCV读取摄像头
    cv::VideoCapture capture(0);

    // 2.创建发送端实例,目标IP地址127.0.0.1,目标端口8888
    UDPImgSender img_sender("127.0.0.1", 8888);

    while (true)
    {
        // 3.读取OpenCV-Mat
        cv::Mat frame;
        capture >> frame;

        // 4.发送一帧
        img_sender.send(frame);

        // 5.可视化当前帧
        cv::imshow("sender", frame);
        cv::waitKey(30);
    }
    
    // 6.结束程序
    return 0;
}
  • 接收端
// 0.引入头文件
#include "pic_socket.h"

int main()
{
    // 1.创建接收端实例,接收端口8888
    UDPImgReceiver img_receiver(8888);

    while (true)
	{
		// 2.读取一帧
        cv::Mat frame = img_receiver.read();

        // 3.可视化当前帧
		cv::imshow("receiver", frame);
		cv::waitKey(30);
	}

    // 4.退出程序
	return 0;
 }

(2)Python简明教程

  • 发送端
import cv2
# 0.引入picsocket库
import picsocket


if __name__ == "__main__":
    # 1.创建发送端实例,目标IP地址127.0.0.1,目标端口8888
    img_sender = picsocket.ImgSender("127.0.0.1", 8888)

    cap = cv2.VideoCapture(0)
    while True:
        # 2.读取OpenCV-Mat
        ret, img = cap.read()
        
        # 3.发送一帧
        img_sender.send(img)
  • 接收端
import cv2
# 0.引入picsocket库
import picsocket


if __name__ == "__main__":
    # 1.创建接收端实例,监听端口8888
    img_receiver = picsocket.ImgReceiver(8888)

    while True:
        # 2.读取一帧
        img = img_receiver.read()

        # 3.可视化当前帧
        cv2.imshow("receiver", img)
        cv2.waitKey(5)

About

PicSocket:轻量级局域网跨平台图传

License:Apache License 2.0


Languages

Language:C++ 87.0%Language:Python 6.4%Language:CMake 5.5%Language:C 1.1%