- 底层基于UDP协议,图传实时性强。
- 可用于高清数字图传(测试可支持1080P,100Mbps局域网下可达100+FPS)。
- 可用于局域网wifi无线图传。
- 跨平台,支持Windows,Linux,MacOS,Jetson,树莓派等。
- 跨语言,支持C/C++,Python。跨平台使用时支持不同终端运行不同语言。
C/C++快速开始
请确保您的机器已安装CMake及C/C++编译器工具链。
安装OpenCV库:
Jetson平台
# Jetson平台JetPack已预装OpenCV库,无需操作。
Ubuntu/树莓派/香橙派
sudo apt-get install libopencv-dev
MacOS
brew install opencv
克隆本仓库。
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
文件夹拷贝到你自己的工程中即可使用。
为了演示使用方法,我们假设cpp
就是您的工程目录。
在您的工程目录下创建源码文件,如picsocket_sender.cpp、picsocket_receiver.cpp。创建CMake文件,如CMakeLists.txt。
随后编译您的工程。
cd ~/PicSocket/install/cpp # 进入您的工程目录
mkdir build # 创建编译目录
cd build
cmake ..
make -j4
随后,在您的编译目录下可以看到二进制文件picsocket_sender
及picsocket_receiver
。运行他们即可。
注意:运行本demo时,请确保您的发送端设备安装有摄像头,并可由
cv::VideoCapture(0)
正常读取。
# 由8888端口接受图片流
./picsocket_receiver 8888
# 向127.0.0.0:8888发送图片流
./picsocket_sender 127.0.0.1 8888
Python快速开始
请确保您的机器已安装CMake及C/C++编译器工具链。
安装OpenCV库:
Jetson平台
# Jetson平台JetPack已预装OpenCV库,无需操作。
Ubuntu/树莓派/香橙派
sudo apt-get install libopencv-dev
MacOS
brew install opencv
克隆本仓库。
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 .
作为一个简单示例,您可以复制并创建picsocket_sender.py、picsocket_receiver.py,并运行他们。
注意:运行本demo时,请确保您的发送端设备安装有摄像头,并可由
cv2.VideoCapture(0)
正常读取。
# 由8888端口接受图片流
python3 picsocket_receiver 8888
# 向127.0.0.0:8888发送图片流
python3 picsocket_sender 127.0.0.1 8888
- 发送端
// 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;
}
- 发送端
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)