指定目录下:【/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":[]}]