# sophon-drillpipe-count-pipeline **Repository Path**: tiny_prawn/sophon-drillpipe-count-pipeline ## Basic Information - **Project Name**: sophon-drillpipe-count-pipeline - **Description**: 基于算能盒子的数钻 - **Primary Language**: C++ - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: http://www.mineiot.net - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-02 - **Last Updated**: 2025-02-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 说明 使用SoC平台(如SE、SM系列边缘设备),刷机后在`/opt/sophon/`下已经预装了相应的libsophon、sophon-opencv和sophon-ffmpeg运行库包,可直接使用它作为运行环境。通常还需要一台x86主机作为开发环境,用于交叉编译C++程序。 通常在x86主机上交叉编译程序,您需要在x86主机上使用SOPHON SDK搭建交叉编译环境,将程序所依赖的头文件和库文件打包至soc-sdk目录中,具体请参考[交叉编译环境搭建](../../../docs/Environment_Install_Guide.md#41-交叉编译环境搭建)。本例程主要依赖libsophon、sophon-opencv和sophon-ffmpeg运行库包。 # 编译步骤 ```bash cd cpp/yolov5_bmcv mkdir build && cd build #请根据实际情况修改-DSDK的路径,需使用绝对路径。 cmake -DTARGET_ARCH=soc -DSDK=/path_to_sdk/soc-sdk .. make ``` ```bash cmake .. -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk-24.04.01 ``` 编译完成后,会在yolov8_bmcv目录下生成yolov8_bmcv.soc。 ```bash docker exec -it stream_dev bash cd drillpipe-count-pipeline/drillpipe-count-pipeline/yolov8_bmcv/build/ ``` 测试 ```bash scp yolov8_bmcv.soc linaro@192.168.111.56:/data/drillpipe-count/pipeline/yolov8_bmcv/ ``` # 运行配置 运行配置放在了yolov8_bmcv.soc的同级目录下的config文件夹中,具体配置如下: ```json { "decoder":{ // 解码配置,包含解码的流地址列表 "urls":[ "rtsp://192.168.111.18:554/live", "rtsp://192.168.111.18:554/live" ] }, "encoder":{ "urls":[ "rtsp://192.168.111.18:8554/live" ] }, "http_push":{ // 结果推送 "ip_port": "http://192.168.111.18:8082", "path": "/sophon/test" }, "mqtt_push":{ "address": "tcp://192.168.111.56:1883", "topic": "/sophon/test" }, "http_srv":{ "ip": "192.168.111.56", "port": 8052 }, "yolov8":{ "dev_id": 0, "bmodel_path": "../models/BM1684X/yolov8s-seg_1684x_f16.bmodel", "mask_bmodel": "../models/BM1684X/yolov8s_getmask_32_fp32.bmodel", "tpu_kernel_module_path": "../tools/tpu_kernel_module/libbm1684x_kernel_module.so", "que_size": 1, "skip_num": 0, "nmsThreshold": 0.5, "confThreshold": 0.5, "class_names":[ "cable-rack", "miner", "drill-pipe-pile", "drill-pipe", "drill-rig", "ground" ] }, "drill_pipe_judge": { "angle_change_threshold_by_degree": 3, // 钻杆角度变化阈值,默认为5度,通过fps和skip_frame_num可以计算出计算钻杆角度的频率,从而得知钻杆角度 "angle_judge_continuous_time_by_second": 15, // 每多少秒进行一次钻杆角度的判断,通过fps和skip_frame_num可以计算出计算钻杆角度的频率,注意这个是指的用15秒内的视频帧数据进行判断 "angle_continuous_stable_judge_time_by_second": 15 // 钻杆稳定状态判断持续时间,默认为15秒 }, "display":{ "rows": 1, "cols": 1 } } ``` 具体配置说明如下 | 配置项 | 说明 | | :--- | :--- | | decoder | 解码配置,包含解码的流地址列表 | | encoder | 编码配置,包含编码的流地址列表 | | http_push | 图片推送配置,包含推送的ip和端口、路径以及是否发送base64编码的图片 | | mqtt_push | 消息推送配置,包含mqtt的地址和主题 | | http_srv | 图片和消息推送配置,包含服务器的ip和端口 | | yolov8 | YOLOv8模型配置,包含设备ID、bmodel路径、tpu内核模块路径、队列大小、跳过帧数、NMS阈值、置信度阈值以及类别名称 | |drill_pipe_judge|钻杆角度识别一些参数| | display | 显示配置,包含显示的行数和列数 | # 结果推送 目前选择的推送方式是http推送,推送的数据格式是json格式。推送的内容是图片的base64编码(由于base64编码比较大,耗带宽,因此增加了一个开关)。 ```json { "channel_idx": 0, "channel_url": "rtsp://192.168.111.18:554/live", "is_mask": true, "width": 1920, "height": 1080, "drill_pipe_forward_backward_direction": 0, // 1: forward, 1: backward, 0: unknown "img_base64_data": "", "boxes": [ { "x1": 579.75, "y1": 342.93, "x2": 782.25, "y2": 524.06, "score": 0.69, "class_id": 3, "class_name": "drill-pipe", "angle": -137.72, "length": 267.58, "hullPoints": [ { "x": 0, "y": 0 }, { "x": 10, "y": 10 } ] }, { "x1": 270.75, "y1": 254.25, "x2": 777.25, "y2": 746.25, "score": 0.89, "class_id": 4, "class_name": "drill-rig", "angle": -117.51, "length": 541.20, "hullPoints": [ { "x": 0, "y": 0 }, { "x": 10, "y": 10 } ] } ] } ``` 具体解释如下: | key | 说明 | | :--- | :--- | | channel_idx | 通道索引,从0开始计数 | | channel_url | 通道的流地址 | | is_mask | 是否是掩码图,如果是掩码图,则后面的box不为空,否则为空| | width | 图片的宽度 | | height | 图片的高度 | | drill_pipe_forward_backward_direction | 钻杆的前后方向,1表示向前,2表示向后,0表示未知 | | img_base64_data | 图片的base64编码,若为非空字符串,则可以通过base64转换成照片 | | boxes | 检测到的目标框信息,包含目标的左上角x坐标、左上角y坐标、右下角x坐标、右下角y坐标、得分、类别id、类别名称、角度和长度以及轮廓点 | boxes中的hullPoints是轮廓点,用于绘制轮廓。 |key | 说明 | | :--- | :--- | | x1 | 轮廓点的x1坐标 | | y1 | 轮廓点的y1坐标 | |x2 | 轮廓点的x2坐标 | | y2 | 轮廓点的y2坐标 | | score | 识别的置信度 | | class_id | 目标的类别id | | class_name | 目标的类别名称 | | angle | 目标的倾斜角度,单位为度 | | length | 目标的长度,单位为像素点数 | | hullPoints | 轮廓点列表,包含x和y坐标 |