最近做的项目需要C#编写上位机程序,同时也要使用yolo进行深度学习检测。
使用pythonnet调用写好的py文件,C#代码如下:
Runtime.PythonDLL = "python310.dll";
PythonEngine.Initialize();
using (Py.GIL())
{
dynamic sys = Py.Import("sys");
dynamic torch = Py.Import("torch");
sys.path.append(@"F:\Python\E");
dynamic mod = PyModule.Import("predict");
dynamic results = mod.my_function();
}
我用的是python3.10,
predict.py代码如下:
from ultralytics import YOLO
import os
def my_function():
model = YOLO('best.pt')
base_path = 图片路径
image_name = 图片名称
image_paths = os.path.join(base_path, image_name)
results = model.predict(image_path, conf=0.3)
return results
遇到的主要问题:
1.调用py程序后,会再次开启一个C#程序。
在网上查了很久资料,发现是yolo源码的问题,注释掉之后就正常了。
我的yolo版本是8.2.28,找到源代码里面的torch_utils.py,把里面的get_cpu_info()调用注释掉即可。