2025-02-25 10:15:21 +08:00
|
|
|
|
# -- coding: utf-8 --
|
|
|
|
|
import sys
|
|
|
|
|
import time
|
|
|
|
|
import os
|
|
|
|
|
import paramiko
|
|
|
|
|
from scp import SCPClient
|
|
|
|
|
import threading
|
|
|
|
|
from os import abort
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
from clog import logger, set_logger_file_handler
|
|
|
|
|
|
|
|
|
|
HOST = "192.168.100.254"
|
|
|
|
|
PORT = 22
|
|
|
|
|
USERNAME = "root"
|
|
|
|
|
PASSWORD = "ebaina"
|
|
|
|
|
|
|
|
|
|
# CLOUD_COUNTS = [600000,800000,1000000,1500000,2000000]
|
|
|
|
|
CLOUD_COUNTS = [1500000]
|
|
|
|
|
DEFAULT_COUNT = 1500000
|
2025-04-07 15:11:21 +08:00
|
|
|
|
EXPS = [10*1000]
|
2025-02-25 10:15:21 +08:00
|
|
|
|
# EXPS = [100 * 1000]
|
2025-04-07 15:11:21 +08:00
|
|
|
|
DEFAULT_EXP = int(8 * 1000)
|
|
|
|
|
PARENT_DIR_NAME = "宁德核电站0327-9-长条形状2"
|
2025-02-25 10:15:21 +08:00
|
|
|
|
# PARENT_DIR_NAME = "test_1"
|
|
|
|
|
SAVE_DIR_NAME = ""
|
|
|
|
|
TEST_CLOUD = False
|
|
|
|
|
TEST_EXP = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ssh_execute_command(host, port, username, password, command):
|
|
|
|
|
ret = False
|
|
|
|
|
# 创建SSH客户端
|
|
|
|
|
client = paramiko.SSHClient()
|
|
|
|
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
|
|
|
client.connect(host, port, username, password)
|
|
|
|
|
|
|
|
|
|
# 执行命令
|
|
|
|
|
stdin, stdout, stderr = client.exec_command(command)
|
|
|
|
|
# 实时读取标准输出
|
|
|
|
|
for line in iter(stdout.readline, ""):
|
|
|
|
|
print(line, end="") # 实时打印
|
|
|
|
|
sys.stdout.flush() # 刷新缓冲区,确保立即输出到终端
|
|
|
|
|
|
|
|
|
|
# 实时读取标准错误(如果有)
|
|
|
|
|
for line in iter(stderr.readline, ""):
|
|
|
|
|
print(f"ERROR: {line}", end="")
|
|
|
|
|
sys.stdout.flush()
|
|
|
|
|
|
|
|
|
|
# 关闭连接
|
|
|
|
|
client.close()
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def scp_get_file(host, port, username, password, remote_path, local_path):
|
|
|
|
|
ret = False
|
|
|
|
|
# 创建SSH客户端
|
|
|
|
|
client = paramiko.Transport((host, port))
|
|
|
|
|
client.connect(username=username, password=password)
|
|
|
|
|
|
|
|
|
|
# 创建SCP客户端
|
|
|
|
|
scp_client = SCPClient(client)
|
|
|
|
|
|
|
|
|
|
# 拉取文件
|
|
|
|
|
try:
|
|
|
|
|
scp_client.get(remote_path, local_path)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(e)
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# 关闭连接
|
|
|
|
|
scp_client.close()
|
|
|
|
|
client.close()
|
|
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def scp_get_multi_file(host, port, username, password, remote_path, local_path):
|
|
|
|
|
ret = False
|
|
|
|
|
# 创建SSH客户端
|
|
|
|
|
client = paramiko.Transport((host, port))
|
|
|
|
|
client.connect(username=username, password=password)
|
|
|
|
|
|
|
|
|
|
# 创建SCP客户端
|
|
|
|
|
scp_client = SCPClient(client)
|
|
|
|
|
|
|
|
|
|
# 拉取文件
|
|
|
|
|
try:
|
|
|
|
|
for rp in remote_path:
|
|
|
|
|
scp_client.get(rp, local_path)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"拉取文件失败:{e}")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# 关闭连接
|
|
|
|
|
scp_client.close()
|
|
|
|
|
client.close()
|
|
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cap(exp=DEFAULT_EXP, cloud_count=DEFAULT_COUNT):
|
|
|
|
|
global SAVE_DIR_NAME
|
|
|
|
|
logger.debug(f"===================开处理============================")
|
|
|
|
|
# 先删除旧数据
|
|
|
|
|
logger.debug("删除旧数据")
|
|
|
|
|
ssh_execute_command(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
command="cd /root/app/detect-gui/ \n " +
|
|
|
|
|
"rm output.jpg \n" +
|
|
|
|
|
"rm output.ply \n" +
|
|
|
|
|
"rm roi_conners.txt \n"
|
|
|
|
|
)
|
|
|
|
|
logger.debug("删除旧数据完成")
|
|
|
|
|
|
|
|
|
|
logger.debug(f"曝光时间设置为:{exp}")
|
|
|
|
|
logger.debug(f"点云数量设置为:{cloud_count}")
|
|
|
|
|
SAVE_DIR_NAME = f"exp_{exp}_cn_{cloud_count}"
|
|
|
|
|
logger.debug(f"保存路径为:{SAVE_DIR_NAME}")
|
|
|
|
|
|
|
|
|
|
# 如果文件夹不存在则创建
|
|
|
|
|
if not os.path.exists(Path(__file__).parent / "result" / PARENT_DIR_NAME / SAVE_DIR_NAME):
|
|
|
|
|
os.makedirs(Path(__file__).parent / "result" / PARENT_DIR_NAME / SAVE_DIR_NAME)
|
|
|
|
|
|
|
|
|
|
# ssh调用远程 borad_image_framework_tmp.py 进行拍摄图片,雷达点云数据采集,角点ROI数据生成
|
|
|
|
|
start_time = time.time()
|
2025-04-07 15:11:21 +08:00
|
|
|
|
# command = (
|
|
|
|
|
# "export LD_LIBRARY_PATH=/root/app/ss928_codec/mpp/out/lib:"
|
|
|
|
|
# "/root/app/detect-gui/vendors/image-framework/linux_arm64:"
|
|
|
|
|
# "/root/app/detect-gui/vendors/image-framework/linux_arm64/lib:"
|
|
|
|
|
# "/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/npu:"
|
|
|
|
|
# "/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/svp_npu:"
|
|
|
|
|
# "/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH \n"
|
|
|
|
|
# "cd /root/app/detect-gui/ \n"
|
|
|
|
|
# f"/root/miniconda3/bin/python borad_image_framework_tmp.py --exp={exp} --count={cloud_count}\n"
|
|
|
|
|
# )
|
|
|
|
|
command = (
|
|
|
|
|
"bash -l -c '"
|
|
|
|
|
"export LD_LIBRARY_PATH=/root/app/ss928_codec/mpp/out/lib:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64/lib:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/npu:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/svp_npu:"
|
|
|
|
|
"/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH; "
|
|
|
|
|
"cd /root/app/detect-gui/ && "
|
|
|
|
|
f"/root/miniconda3/bin/python borad_image_framework_tmp.py --exp={exp} --count={cloud_count}'"
|
|
|
|
|
)
|
|
|
|
|
|
2025-02-25 10:15:21 +08:00
|
|
|
|
logger.debug(f"ssh_execute_command 命令:{command}")
|
|
|
|
|
ssh_execute_command(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
command=command,
|
|
|
|
|
)
|
|
|
|
|
end_time = time.time() # 记录结束时间
|
|
|
|
|
execution_time = end_time - start_time # 计算执行时间
|
|
|
|
|
logger.debug(f"borad_image_framework_tmp.py 程序执行时间:{execution_time}秒")
|
|
|
|
|
time.sleep(1) # 等待操作系统保存数据完毕
|
|
|
|
|
|
|
|
|
|
logger.debug("开始保存文件到本地")
|
|
|
|
|
start_time2 = time.time()
|
|
|
|
|
local_path = Path(__file__).parent / "result" / PARENT_DIR_NAME / SAVE_DIR_NAME
|
|
|
|
|
logger.debug(f"本地文件保存路径为:{local_path}")
|
|
|
|
|
scp_get_multi_file(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
remote_path=[
|
|
|
|
|
"/root/app/detect-gui/output.jpg",
|
|
|
|
|
"/root/app/detect-gui/output.ply",
|
|
|
|
|
"/root/app/detect-gui/roi_conners.txt",
|
|
|
|
|
],
|
|
|
|
|
local_path=local_path
|
|
|
|
|
)
|
|
|
|
|
end_time2 = time.time() # 记录结束时间
|
|
|
|
|
execution_time2 = end_time2 - start_time2
|
|
|
|
|
logger.debug("文件到本地结束")
|
|
|
|
|
logger.debug(f"scp_get_file获取文件到本地 程序执行时间:{execution_time2}秒")
|
|
|
|
|
logger.debug(f"===================开处理结束============================")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cap_wide():
|
|
|
|
|
logger.debug(f"===================广角开始处理============================")
|
|
|
|
|
|
|
|
|
|
# 先删除旧数据
|
|
|
|
|
logger.debug("删除旧数据")
|
|
|
|
|
ssh_execute_command(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
command="cd /root/app/detect-gui/ \n " +
|
|
|
|
|
"rm wide_image_processed.png \n" +
|
|
|
|
|
"rm wide_image.png \n" +
|
|
|
|
|
"rm wide_image_roi.json \n"
|
|
|
|
|
)
|
|
|
|
|
logger.debug("删除旧数据完成")
|
|
|
|
|
|
|
|
|
|
start_time = time.time()
|
2025-04-07 15:11:21 +08:00
|
|
|
|
# command = "export LD_LIBRARY_PATH=/root/app/ss928_codec/mpp/out/lib:/root/app/detect-gui/vendors/image-framework/linux_arm64:/root/app/detect-gui/vendors/image-framework/linux_arm64/lib:/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/npu:/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/svp_npu:$LD_LIBRARY_PATH \n" + \
|
|
|
|
|
# "cd /root/app/detect-gui/ \n" + \
|
|
|
|
|
# f"/root/miniconda3/bin/python cap_wide_camera.py \n"
|
|
|
|
|
|
|
|
|
|
command = (
|
|
|
|
|
"bash -l -c '"
|
|
|
|
|
"export LD_LIBRARY_PATH=/root/app/ss928_codec/mpp/out/lib:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64/lib:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/npu:"
|
|
|
|
|
"/root/app/detect-gui/vendors/image-framework/linux_arm64/lib/svp_npu:"
|
|
|
|
|
"/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH; "
|
|
|
|
|
"cd /root/app/detect-gui/ && "
|
|
|
|
|
f"/root/miniconda3/bin/python cap_wide_camera.py'"
|
|
|
|
|
)
|
2025-02-25 10:15:21 +08:00
|
|
|
|
logger.debug(f"ssh_execute_command 命令:{command}")
|
|
|
|
|
ssh_execute_command(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
command=command,
|
|
|
|
|
)
|
|
|
|
|
end_time = time.time() # 记录结束时间
|
|
|
|
|
execution_time = end_time - start_time # 计算执行时间
|
|
|
|
|
logger.debug(f"cap_wide_camera.py 程序执行时间:{execution_time}秒")
|
|
|
|
|
time.sleep(1) # 等待操作系统保存数据完毕
|
|
|
|
|
|
|
|
|
|
logger.debug("开始保存文件到本地")
|
|
|
|
|
start_time2 = time.time()
|
|
|
|
|
local_path = Path(__file__).parent / "result" / PARENT_DIR_NAME
|
|
|
|
|
logger.debug(f"本地文件保存路径为:{local_path}")
|
|
|
|
|
scp_get_multi_file(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
remote_path=[
|
|
|
|
|
"/root/app/detect-gui/wide_image_processed.png",
|
|
|
|
|
"/root/app/detect-gui/wide_image.png",
|
|
|
|
|
"/root/app/detect-gui/wide_image_roi.json",
|
|
|
|
|
],
|
|
|
|
|
local_path=local_path
|
|
|
|
|
)
|
|
|
|
|
end_time2 = time.time() # 记录结束时间
|
|
|
|
|
execution_time2 = end_time2 - start_time2
|
|
|
|
|
logger.debug("文件到本地结束")
|
|
|
|
|
logger.debug(f"scp_get_file获取文件到本地 程序执行时间:{execution_time2}秒")
|
|
|
|
|
logger.debug(f"===================广角开处理结束============================")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 如果路径不存在则创建
|
|
|
|
|
if not os.path.exists(Path(__file__).parent / "result" / PARENT_DIR_NAME):
|
|
|
|
|
os.makedirs(Path(__file__).parent / "result" / PARENT_DIR_NAME)
|
|
|
|
|
# 设置日志保存路径
|
|
|
|
|
set_logger_file_handler(Path(__file__).parent / "result" / PARENT_DIR_NAME)
|
|
|
|
|
# 加载驱动
|
|
|
|
|
ssh_execute_command(
|
|
|
|
|
host=HOST,
|
|
|
|
|
port=PORT,
|
|
|
|
|
username=USERNAME,
|
|
|
|
|
password=PASSWORD,
|
|
|
|
|
command="/opt/HuarayTech/MVviewer/module/loadAllDrv.sh \n"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if (TEST_CLOUD):
|
|
|
|
|
for cloud_count in CLOUD_COUNTS:
|
|
|
|
|
logger.debug("开始采集")
|
|
|
|
|
start_time = time.time() # 记录开始时间
|
|
|
|
|
cap(cloud_count=cloud_count)
|
|
|
|
|
end_time = time.time() # 记录结束时间
|
|
|
|
|
elapsed_time = end_time - start_time # 计算总时间
|
|
|
|
|
logger.success(f"采集完毕=========== 耗时: {elapsed_time:.2f} 秒")
|
|
|
|
|
if (TEST_EXP):
|
|
|
|
|
for exp in EXPS:
|
|
|
|
|
logger.debug("开始采集")
|
|
|
|
|
start_time = time.time() # 记录开始时间
|
|
|
|
|
cap(exp=exp)
|
|
|
|
|
end_time = time.time() # 记录结束时间
|
|
|
|
|
elapsed_time = end_time - start_time # 计算总时间
|
|
|
|
|
logger.success(f"采集完毕=========== 耗时: {elapsed_time:.2f} 秒")
|
|
|
|
|
cap_wide()
|