C#のWinFormsとPythonの連携検証

前回、Python.NET を使用して C# と Python を連携しようとしましたが、Python.NET の仕様では並列実行ができないため、別の方法を考えました。
結果的には Python.NET をやめて、共有メモリ(mmap)を経由してデータをやり取りするように変更しました。
以下は、Pythonで YOLOv8 を3つ並列で実行した結果を、C# の WinForms に表示したものです。
GIF動画(約20MB)

YOLOv8 Mmap
YOLOv8 Mmap版 GIF動画

今回の検証は、MP4形式の動画ファイルを読み込んで、5FPS(200ms)で処理しました。
GIF動画の録画も行っているため、多少CPU負荷が高くなっていますが、WEBカメラやNWカメラであれば、CPU負荷はもう少し低くなりそうです。GPUの負荷も数%のため、あと数台は同時に処理できそうです。
実際に使用するには、C# と Python で同期処理の方法を考える必要がありますが、前回の Python.NET の方法に比べ、パッケージに依存せずに実装できるため、自由度が高くなりそうです。
当面は、この方法をベースにツール等を作成していこうかと思います。

共有メモリの実装については、以下の公式サイトに記載がありますが、他のWEBサイトのコードを参照しても良いかと思います。

[.NET Microsoft Learn]メモリ マップト ファイル
https://learn.microsoft.com/ja-jp/dotnet/standard/io/memory-mapped-files
[Python 3.11.5 ドキュメント]mmap — メモリマップファイル
https://docs.python.org/ja/3/library/mmap.html

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です