mirror of
https://github.com/NanjingForestryUniversity/supermachine-tobacco.git
synced 2025-11-08 14:23:55 +00:00
[ext] 增加了模拟测试功能的简洁性
This commit is contained in:
parent
fd6671d3d4
commit
483a78d423
45
README.md
45
README.md
@ -176,9 +176,9 @@
|
|||||||
|
|
||||||
结论是考虑RGB相机的触发存在一定问题。
|
结论是考虑RGB相机的触发存在一定问题。
|
||||||
|
|
||||||
## 喷阀检查
|
# 喷阀检查相关
|
||||||
|
|
||||||
### 喷阀检验脚本
|
## 喷阀检验脚本
|
||||||
|
|
||||||
为了能够有效的对喷阀进行检查,我写了一个用于测试的小socket,这个小socket的使用方式是这样的:
|
为了能够有效的对喷阀进行检查,我写了一个用于测试的小socket,这个小socket的使用方式是这样的:
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ python valve_test.py -c
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 只使用RGB或SPEC预测
|
## 仅使用RGB或SPEC预测以调节延时
|
||||||
|
|
||||||
只使用RGB或者SPEC预测时,使用如下代码:
|
只使用RGB或者SPEC预测时,使用如下代码:
|
||||||
|
|
||||||
@ -218,6 +218,16 @@ python main.py -oc
|
|||||||
python main.py -os
|
python main.py -os
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 同时开启喷阀数量限制
|
||||||
|
|
||||||
|
由于喷阀的电源有限,所以必须对同时开启的喷阀数量加以限制,否则会造成流在导线上的电流过大,就像是在烧水。
|
||||||
|
|
||||||
|
最大允许开启的喷阀数量$n$和电源功率$p$之间的关系如下:
|
||||||
|
$$
|
||||||
|
n = \frac{p}{12}
|
||||||
|
$$
|
||||||
|
这里$12 V \cdot A$是对应喷阀的电压和电流的乘积,建议在这个基础之上再进行数量除以$2$的操作,因为我们不可合并rgb和spec两个mask,所以如果当出现杂质时,仅对一个mask的最大值进行限定存在风险。
|
||||||
|
|
||||||
# 代码加密
|
# 代码加密
|
||||||
|
|
||||||
本来想使用pyarmor,但是它在加密过程中一直重复不停的进行下载,这太麻烦了,而且还要考虑到兼容性问题,所以果断放弃,后来发现简单的方案是这样的,把python编译成字节码就行:
|
本来想使用pyarmor,但是它在加密过程中一直重复不停的进行下载,这太麻烦了,而且还要考虑到兼容性问题,所以果断放弃,后来发现简单的方案是这样的,把python编译成字节码就行:
|
||||||
@ -296,3 +306,32 @@ jmpy -i "tobacco_color" [-o output dir]
|
|||||||
甚至可以加入延时:
|
甚至可以加入延时:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
# 模拟运行与文件转换
|
||||||
|
|
||||||
|
## 模拟运行
|
||||||
|
|
||||||
|
需要模拟运行的话可以使用`main_test.py`脚本进行。模拟运行的方法如下:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
python main_test.py /path/to/test
|
||||||
|
```
|
||||||
|
|
||||||
|
其中`/path/to/test`填写C程序抓取的运行时数据。运行后的数据如下:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 转换保存下来的buffer文件
|
||||||
|
|
||||||
|
脚本用法:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
python main_test.py /path/to/convert -convert_dir /output/dir -s
|
||||||
|
```
|
||||||
|
|
||||||
|
这里`path/to/convert`填写转换的buffer文件夹,文件夹需要是只有rgb和spec文件`/output/dir`填输出文件夹,如果输出文件夹不存在就会创建。如果不加`-s(--silent)`静默参数就会顺便显示预测的结果。
|
||||||
|
|
||||||
|
转换后的图片经过测试可以正常在ENVI中打开:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ class Config:
|
|||||||
# mask parameter
|
# mask parameter
|
||||||
target_size = (1024, 1024) # (Width, Height) of mask
|
target_size = (1024, 1024) # (Width, Height) of mask
|
||||||
valve_merge_size = 2 # 每两个喷阀当中有任意一个出现杂质则认为都是杂质
|
valve_merge_size = 2 # 每两个喷阀当中有任意一个出现杂质则认为都是杂质
|
||||||
max_open_valve_limit = 49 # 最大同时开启喷阀限制,按照电流计算,当前的喷阀可以开启的喷阀 600W的电源 / 12V电源 = 50A, 一个阀门1A
|
max_open_valve_limit = 25 # 最大同时开启喷阀限制,按照电流计算,当前的喷阀可以开启的喷阀 600W的电源 / 12V电源 = 50A, 一个阀门1A
|
||||||
|
|
||||||
# save part
|
# save part
|
||||||
offset_vertical = 0
|
offset_vertical = 0
|
||||||
|
|||||||
@ -140,6 +140,7 @@ class TestMain:
|
|||||||
ax3 = fig.add_subplot(gs[1, 0])
|
ax3 = fig.add_subplot(gs[1, 0])
|
||||||
ax4 = fig.add_subplot(gs[1, 1])
|
ax4 = fig.add_subplot(gs[1, 1])
|
||||||
ax5 = fig.add_subplot(gs[2, :])
|
ax5 = fig.add_subplot(gs[2, :])
|
||||||
|
|
||||||
fig.suptitle("Result")
|
fig.suptitle("Result")
|
||||||
|
|
||||||
ax1.imshow(rgb_img)
|
ax1.imshow(rgb_img)
|
||||||
@ -219,7 +220,7 @@ if __name__ == '__main__':
|
|||||||
parser.add_argument('-convert_dir', default=None, help='是否将c语言采集的buffer进行转换')
|
parser.add_argument('-convert_dir', default=None, help='是否将c语言采集的buffer进行转换')
|
||||||
parser.add_argument('-s', '--silent', default=False, action='store_true', help='是否显示')
|
parser.add_argument('-s', '--silent', default=False, action='store_true', help='是否显示')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
# file check
|
# file path check
|
||||||
if args.convert_dir is not None:
|
if args.convert_dir is not None:
|
||||||
if os.path.exists(args.convert_dir):
|
if os.path.exists(args.convert_dir):
|
||||||
if not os.path.isdir(args.convert_dir):
|
if not os.path.isdir(args.convert_dir):
|
||||||
@ -230,7 +231,6 @@ if __name__ == '__main__':
|
|||||||
else:
|
else:
|
||||||
print(f"已创建需要存放转换文件的文件夹 {args.convert_dir}")
|
print(f"已创建需要存放转换文件的文件夹 {args.convert_dir}")
|
||||||
os.makedirs(args.convert_dir, mode=0o777, exist_ok=False)
|
os.makedirs(args.convert_dir, mode=0o777, exist_ok=False)
|
||||||
|
|
||||||
tester = TestMain()
|
tester = TestMain()
|
||||||
tester.pony_run(test_path=args.path, test_rgb=args.test_rgb, test_spectra=args.test_spec,
|
tester.pony_run(test_path=args.path, test_rgb=args.test_rgb, test_spectra=args.test_spec,
|
||||||
get_delta=args.get_delta, convert_dir=args.convert_dir, silent=args.silent)
|
get_delta=args.get_delta, convert_dir=args.convert_dir, silent=args.silent)
|
||||||
|
|||||||
2
utils.py
2
utils.py
@ -182,7 +182,7 @@ def valve_limit(mask: np.ndarray, max_valve_num: int) -> np.ndarray:
|
|||||||
:param max_valve_num: 最大阀门数量
|
:param max_valve_num: 最大阀门数量
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
assert (max_valve_num >= 5) and (max_valve_num < 50)
|
assert (max_valve_num >= 1) and (max_valve_num < 50)
|
||||||
row_valve_count = np.sum(mask, axis=1)
|
row_valve_count = np.sum(mask, axis=1)
|
||||||
if np.any(row_valve_count > max_valve_num):
|
if np.any(row_valve_count > max_valve_num):
|
||||||
over_rows_idx = np.argwhere(row_valve_count > max_valve_num).ravel()
|
over_rows_idx = np.argwhere(row_valve_count > max_valve_num).ravel()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user