自定义算法/程序如何使用,案例【C++/Python/Java】_物联网平台_边缘计算网关

指定目录下:【/home/myir/tools/】

用户自行上传程序使用

💡提示:边缘一体机提供了HDMI和USB口;自行准备鼠标,键盘,显示器,将【自己的可执行程序】放在指定目录下,调用即可。

1、C++(cpp)程序—案例

目录在:【/home/myir/tools/yolov10-cpp/】

执行命令:

cd /home/myir/tools/yolov10-cpp/

./rknn_yolov10_demo ./model/yolov10.rknn ./image/1-personBus.jpg ./outImage/personBus.jpg

C++程序,命令格式说明

./rknn_yolov10_demo

./model/yolov10.rknn

./image/1-personBus.jpg

./outImage/personBus.jpg

程序名称

指定模型

指定输入源(图片)

输出推理结果

效果如下:

2、python程序—案例

系统内置【python】版本:3.11.2

系统内置【rknn_toolkit_lite2】版本:2.3.0

执行效果图,如下:

执行命令:

cd /home/myir/tools/yolov10-python/

python3 yolov10.py --img_path ./image/1-personBus.jpg

PS:该输出路径已经写进python中,因此不需要在命令参数中体现

Python程序,命令格式说明

python3

yolov10.py

–img_path ./image/1-personBus.jpg

程序固定头

程序名

–img_path+指定输入【图片】

效果如下:

3、Java程序—案例

系统内置【jdk】版本:11

Java程序下载:

在/home/myir/tools下新建一个java目录用于存放上传的文件:

cd /home/myir/tools
mkdir java

行效果如下:

执行命令运行Java程序:

cd /home/myir/tools/java

javac SumCalculator.java

java SumCalculator 12 34

ython程序,命令格式说明

java

SumCalculator

12 36

程序固定头

程序名

加法的两个固定参数

4、在NodeRED中,如何调用程序

4-1、NodeRED执行C++(cpp)程序

节点连接图示:

exec节点配置:

function节点配置:

读取文件节点配置:

PS:该输出路径已经写进python中,因此不需要在命令参数中体现

执行效果如图:

[{"id":"b018747c202efe37","type":"inject","z":"9c3ab4a0320eb8b4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":250,"y":220,"wires":[["898aaed2a85c7f49"]]},{"id":"898aaed2a85c7f49","type":"exec","z":"9c3ab4a0320eb8b4","command":"cd /home/myir/tools/yolov10-cpp/ && ./rknn_yolov10_demo ./model/yolov10.rknn ./image/1-personBus.jpg ./outImage/personBus.jpg","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"YOLOv10识别图片","x":470,"y":220,"wires":[["4e51a2e1a6dc8c33","8512622ecbcdf8dc"],[],[]]},{"id":"62f5e1e9f929cbff","type":"image","z":"9c3ab4a0320eb8b4","name":"","width":"800","data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":false,"outputs":0,"x":800,"y":420,"wires":[]},{"id":"1be82dadda5ad72f","type":"file in","z":"9c3ab4a0320eb8b4","name":"","filename":"/home/myir/tools/yolov10-cpp/outImage/personBus.jpg","filenameType":"str","format":"utf8","chunk":false,"sendError":false,"encoding":"base64","allProps":false,"x":400,"y":420,"wires":[["62f5e1e9f929cbff"]]},{"id":"4e51a2e1a6dc8c33","type":"delay","z":"9c3ab4a0320eb8b4","name":"","pauseType":"delay","timeout":"0.5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":660,"y":260,"wires":[["1be82dadda5ad72f"]]},{"id":"8512622ecbcdf8dc","type":"function","z":"9c3ab4a0320eb8b4","name":"function 2","func":"var result = msg.payload;n// 找到 rknn_run 的起始位置nconst startIndex = result.indexOf('rknn_run');n// 找到 write_image 的起始位置nconst endIndex = result.indexOf('write_image');nnif (startIndex!== -1 && endIndex!== -1) {n    // 截取从 rknn_run 到 write_image 之间的内容n    const resultOK = result.substring(startIndex + 'rknn_run'.length, endIndex);n    // console.log(result.trim());n    msg.payload = resultOK;n}nnreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":660,"y":160,"wires":[["ccea2616778fa01b"]]},{"id":"ccea2616778fa01b","type":"debug","z":"9c3ab4a0320eb8b4","name":"debug 5","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":820,"y":160,"wires":[]},{"id":"a2652b3897e29ee4","type":"comment","z":"9c3ab4a0320eb8b4","name":"inject节点","info":"","x":240,"y":180,"wires":[]},{"id":"2ece6cb93e90065a","type":"comment","z":"9c3ab4a0320eb8b4","name":"exec节点","info":"","x":460,"y":180,"wires":[]},{"id":"288a24219e77ed41","type":"comment","z":"9c3ab4a0320eb8b4","name":"function节点","info":"","x":670,"y":120,"wires":[]},{"id":"1ce73a08b54b147e","type":"comment","z":"9c3ab4a0320eb8b4","name":"debug节点","info":"","x":820,"y":120,"wires":[]},{"id":"9a1726a8401ee307","type":"comment","z":"9c3ab4a0320eb8b4","name":"delay节点","info":"","x":660,"y":220,"wires":[]},{"id":"9c568d9fd855a3cf","type":"comment","z":"9c3ab4a0320eb8b4","name":"读取文件节点","info":"","x":470,"y":380,"wires":[]},{"id":"f77cf0ad58769652","type":"comment","z":"9c3ab4a0320eb8b4","name":"image节点","info":"","x":780,"y":380,"wires":[]}]

4-2、NodeRED执行python程序

节点连接图示:

exec节点配置:

function节点配置:

读取文件节点配置:

PS:能在NodeRED显示的内容,一定是程序打印输出的内容。

执行效果如图:

[{"id":"b018747c202efe37","type":"inject","z":"9c3ab4a0320eb8b4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":250,"y":220,"wires":[["898aaed2a85c7f49"]]},{"id":"898aaed2a85c7f49","type":"exec","z":"9c3ab4a0320eb8b4","command":"cd /home/myir/tools/yolov10-python/ && python3 yolov10.py --img_path ./image/1-personBus.jpg","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"YOLOv10识别图片","x":470,"y":220,"wires":[["4e51a2e1a6dc8c33","8512622ecbcdf8dc"],[],[]]},{"id":"62f5e1e9f929cbff","type":"image","z":"9c3ab4a0320eb8b4","name":"","width":"800","data":"payload","dataType":"msg","thumbnail":false,"active":true,"pass":false,"outputs":0,"x":800,"y":420,"wires":[]},{"id":"1be82dadda5ad72f","type":"file in","z":"9c3ab4a0320eb8b4","name":"","filename":"/home/myir/tools/yolov10-cpp/outImage/personBus.jpg","filenameType":"str","format":"utf8","chunk":false,"sendError":false,"encoding":"base64","allProps":false,"x":400,"y":420,"wires":[["62f5e1e9f929cbff"]]},{"id":"4e51a2e1a6dc8c33","type":"delay","z":"9c3ab4a0320eb8b4","name":"","pauseType":"delay","timeout":"0.5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":660,"y":260,"wires":[["1be82dadda5ad72f"]]},{"id":"8512622ecbcdf8dc","type":"function","z":"9c3ab4a0320eb8b4","name":"function 2","func":"var result = msg.payload;n// 找到 rknn_run 的起始位置nconst startIndex = result.indexOf('IMG');n// 找到 write_image 的起始位置nconst endIndex = result.indexOf('Detection');nnif (startIndex!== -1 && endIndex!== -1) {n    // 截取从 rknn_run 到 write_image 之间的内容n    const resultOK = result.substring(startIndex + 'rknn_run'.length, endIndex);n    // console.log(result.trim());n    msg.payload = resultOK;n}nnreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":660,"y":160,"wires":[["ccea2616778fa01b"]]},{"id":"ccea2616778fa01b","type":"debug","z":"9c3ab4a0320eb8b4","name":"debug 5","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":820,"y":160,"wires":[]},{"id":"a2652b3897e29ee4","type":"comment","z":"9c3ab4a0320eb8b4","name":"inject节点","info":"","x":240,"y":180,"wires":[]},{"id":"2ece6cb93e90065a","type":"comment","z":"9c3ab4a0320eb8b4","name":"exec节点","info":"","x":460,"y":180,"wires":[]},{"id":"288a24219e77ed41","type":"comment","z":"9c3ab4a0320eb8b4","name":"function节点","info":"","x":670,"y":120,"wires":[]},{"id":"1ce73a08b54b147e","type":"comment","z":"9c3ab4a0320eb8b4","name":"debug节点","info":"","x":820,"y":120,"wires":[]},{"id":"9a1726a8401ee307","type":"comment","z":"9c3ab4a0320eb8b4","name":"delay节点","info":"","x":660,"y":220,"wires":[]},{"id":"9c568d9fd855a3cf","type":"comment","z":"9c3ab4a0320eb8b4","name":"读取文件节点","info":"","x":470,"y":380,"wires":[]},{"id":"f77cf0ad58769652","type":"comment","z":"9c3ab4a0320eb8b4","name":"image节点","info":"","x":780,"y":380,"wires":[]}]

4-3、NodeRED执行java程序

节点连接图示:

exec节点配置:

运行效果如图:

[{"id":"b018747c202efe37","type":"inject","z":"9c3ab4a0320eb8b4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":370,"y":300,"wires":[["898aaed2a85c7f49"]]},{"id":"898aaed2a85c7f49","type":"exec","z":"9c3ab4a0320eb8b4","command":"cd /home/myir/tools/java  && javac SumCalculator.java && java SumCalculator 12 34","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"YOLOv10识别图片","x":590,"y":300,"wires":[["ccea2616778fa01b"],[],[]]},{"id":"ccea2616778fa01b","type":"debug","z":"9c3ab4a0320eb8b4","name":"debug 5","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":840,"y":280,"wires":[]},{"id":"a2652b3897e29ee4","type":"comment","z":"9c3ab4a0320eb8b4","name":"inject节点","info":"","x":360,"y":260,"wires":[]},{"id":"2ece6cb93e90065a","type":"comment","z":"9c3ab4a0320eb8b4","name":"exec节点","info":"","x":580,"y":260,"wires":[]},{"id":"1ce73a08b54b147e","type":"comment","z":"9c3ab4a0320eb8b4","name":"debug节点","info":"","x":840,"y":240,"wires":[]}]

本文通过 YUQUE WORDPRESS 同步自语雀
云腾五洲-AI助理