# PicSocket
**Repository Path**: an_hongjun/PicSocket
## Basic Information
- **Project Name**: PicSocket
- **Description**: PicSocket:轻量级局域网跨平台图传
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: v0.0.1
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2024-02-12
- **Last Updated**: 2025-05-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# PicSocket:轻量级局域网跨平台图传
### 1.特性
* 底层基于UDP协议,图传实时性强。
* 可用于高清数字图传(测试可支持1080P,100Mbps局域网下可达100+FPS)。
* 可用于局域网wifi无线图传。
* 跨平台,支持Windows,Linux,MacOS,Jetson,树莓派等。
* 跨语言,支持C/C++,Python。***跨平台使用时支持不同终端运行不同语言***。
### 2.快速开始
C/C++快速开始
#### (1)安装依赖项:
请确保您的机器已安装CMake及C/C++编译器工具链。
安装OpenCV库:
> Jetson平台
```sh
# Jetson平台JetPack已预装OpenCV库,无需操作。
```
> Ubuntu/树莓派/香橙派
```sh
sudo apt-get install libopencv-dev
```
> MacOS
```sh
brew install opencv
```
#### (2)编译安装
克隆本仓库。
```sh
cd ~
git clone https://github.com/BestAnHongjun/PicSocket.git
```
编译并安装。
```sh
cd ~/PicSocket
mkdir build
cd build
cmake ..
make -j4
make install # 不会安装到系统目录,安装到项目的install目录
```
编译安装结束后,项目目录项生成`install`目录。
```sh
|-install
|- include # C/C++头文件
|- lib # 链接库
|- cpp # 一个简易的demo
```
将`include`文件夹和`lib`文件夹拷贝到你自己的工程中即可使用。
#### (3)在自定义工程中使用`PicSocket`
为了演示使用方法,我们假设`cpp`就是您的工程目录。
在您的工程目录下创建源码文件,如[picsocket_sender.cpp](./example/cpp/picsocket_sender.cpp)、[picsocket_receiver.cpp](./example/cpp/picsocket_receiver.cpp)。创建CMake文件,如[CMakeLists.txt](./example/cpp/CMakeLists.txt)。
随后编译您的工程。
```sh
cd ~/PicSocket/install/cpp # 进入您的工程目录
mkdir build # 创建编译目录
cd build
cmake ..
make -j4
```
随后,在您的编译目录下可以看到二进制文件`picsocket_sender`及`picsocket_receiver`。运行他们即可。
> **注意**:运行本demo时,请确保您的发送端设备安装有摄像头,并可由`cv::VideoCapture(0)`正常读取。
```sh
# 由8888端口接受图片流
./picsocket_receiver 8888
# 向127.0.0.0:8888发送图片流
./picsocket_sender 127.0.0.1 8888
```
Python快速开始
#### (1)安装依赖项:
请确保您的机器已安装CMake及C/C++编译器工具链。
安装OpenCV库:
> Jetson平台
```sh
# Jetson平台JetPack已预装OpenCV库,无需操作。
```
> Ubuntu/树莓派/香橙派
```sh
sudo apt-get install libopencv-dev
```
> MacOS
```sh
brew install opencv
```
#### (2)编译安装
克隆本仓库。
```sh
cd ~
git clone https://github.com/BestAnHongjun/PicSocket.git
```
编译并安装。
```sh
cd ~/PicSocket
mkdir build
cd build
cmake .. -DPYTHON_BUILD=TRUE
make -j4
```
安装Python模块。
```sh
cd ~/PicSocket
pip3 install -e .
```
#### (3)在自定义工程中使用`PicSocket`
作为一个简单示例,您可以复制并创建[picsocket_sender.py](./example/python/picsocket_sender.py)、[picsocket_receiver.py](./example/python/picsocket_receiver.py),并运行他们。
> **注意**:运行本demo时,请确保您的发送端设备安装有摄像头,并可由`cv2.VideoCapture(0)`正常读取。
```sh
# 由8888端口接受图片流
python3 picsocket_receiver 8888
# 向127.0.0.0:8888发送图片流
python3 picsocket_sender 127.0.0.1 8888
```
### 3.简明教程
#### (1)C/C++简明教程
* 发送端
```cpp
// 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;
}
```
* 接收端
```cpp
// 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简明教程
* 发送端
```py
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)
```
* 接收端
```py
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)
```