В настоящее время я работаю над проектом, который требует обнаружения нескольких доминирующих цветов на изображении и получения их цветов для отображения на объекте реального мира. Я искал способ сделать это, но после одного месяца поиска я обнаружил, что использование беспорядка K-средних из учебника python кажется именно тем, что я хотел сделать. Поэтому в настоящее время я хотел бы использовать Iron Python для запуска сценария python из самого Unity и отправки данных обратно в Unity через Socket.IO.
Я получил ошибку «ImportException: Невозможно импортировать имя RAND_egd» при загрузке путей к каталогам плагинов python и сторонних плагинов, использующих Iron Python в Unity
. Этот код я использую для выполнить мой python скрипт (просто хочу уточнить, я не эксперт по кодированию)
public void RunPython()
{
// 1) Create engine
var engine = Python.CreateEngine();
// 2) Provide script and arguments
var script = @"D:/[MY DIRECTORY]/Assets/Python/Simulator.py";
var source = engine.CreateScriptSourceFromFile(script);
ICollection<string> Paths = engine.GetSearchPaths();
Paths.Add("C:/Windows/SYSTEM32/python27.zip");
Paths.Add("C:/Python27/DLLs");
Paths.Add("C:/Python27/lib");
Paths.Add("C:/Python27/lib/plat-win");
Paths.Add("C:/Python27/lib/lib-tk");
Paths.Add("C:/Python27");
Paths.Add("C:/Users/[MY DIRECTORY]/AppData/Roaming/Python/Python27/site-packages");
Paths.Add("C:/Python27/lib/site-packages");
engine.SetSearchPaths(Paths);
var argv = new List<string>();
argv.Add("");
argv.Add("2019-1-1");
argv.Add("2019-1-22");
engine.GetSysModule().SetVariable("argv", argv);
// 3) Output redirect
var eIO = engine.Runtime.IO;
var errors = new MemoryStream();
eIO.SetErrorOutput(errors, Encoding.Default);
var results = new MemoryStream();
eIO.SetOutput(results, Encoding.Default);
// 4) Execute script
var scope = engine.CreateScope();
source.Execute(scope);
// 5) Display output
string str(byte[] x) => Encoding.Default.GetString(x);
Console.WriteLine("ERRORS:");
Console.WriteLine(str(errors.ToArray()));
Console.WriteLine();
Console.WriteLine("Results:");
Console.WriteLine(str(results.ToArray()));
}