c# 计算空格宽度像素_用pythonnet为计算机视觉做图像整理
??中國的.NETer是國內技術的另類,當他們強調.NET也可以做啥啥時都會給別的技術藐視,畢竟主流都不用.NET。本人這幾年其實花在.NET時間也少,都投入在Python/Go社區。可我還是有點工作外的寄托,就是讓.NET也有一個很好的推廣,畢竟在使用Python/Go中有些東西比不少.NET來得方便。機器學習對于.NETer又是一個危機,特別在國內有一句名言".NET 不行"。幸虧這是9012年了,Github上有很多開源項目,有不少.NET Core的開源項目讓大家有了和其他技術競爭的底氣。SciSharp(https://github.com/SciSharp)就是一個基于.NET的機器學習/深度學習解決方案,讓.NETer不需要學習Python,就可以用Keras/TensorFlow/Torch 通過C#/F# 來完成機器學習/深度學習。
? ? ? ? SciSharp現在有兩種不同的綁定方式如TensorFlow.NET/NumSharp都是基于原生c庫做擴展,不需要依賴客戶端的環境,隨處可以調用,但有個問題是因為綁定的工作太多,往往功能上不太完整。而另一種方式就是通過pythonnet去完成,這種方式依賴于客戶端的Python環境可以直接通過C#/F#直接調用任何本機已經安裝的Python庫和自帶方法,如之前提到的Keras.NET / Numpy.NET都是這種形式。就我個人而言比較喜歡后者,畢竟實現更快,更容易上手,而且對于現在SciSharp社區不同子項目的擴展也有不少幫助,畢竟社區內的都是業余時間,功能不可能一時半刻都完成,所以這種方式能更好地填補缺陷。
? ? ? ?pythonnet允許Python代碼與CLR做交互,也可以將Python代碼嵌入.NET 應用中(https://github.com/pythonnet/pythonnet).你可以編譯源碼為本機Python和.NET互相調用的支持。如果你只是單一希望通過.NET調用Python可以基于你系統和Python版本通過Nuget添加SciSharp社區編譯好的Python.Runtime包。下面通過圖像整理來說明一下我是如何做的。
??做計算機視覺,圖像前期的處理很重要。首先收集來的圖像大小不一,其次是像素,還有格式。在Python下通過Pilow對圖片進行處理,通過Pillow可以對圖片像素,大小,方向,格式進行調整。通過pip install pillow就可以添加Pillow庫。如果希望通過.NET調用Pillow就需要通過pythonnet進行引用。我們來看看一個實例:
? ? ? ?1. 首先我創建一個.NET Core的控制臺程序,然后添加Python.Runtime包, 因為我是macOS,所以添加的是Python.Runtime.OSX, 而機上的Python版本是3.7 所以對應的是Python.Runtime.OSX 3.7.0的版本, 然后通過VSCode打開創建好的項目
? ? ? ? 2. 使用pythonenet, Py.GIL()是必須有的,初始化后,通過Py.Import引入不同的模塊(注意這里必須還是得強調必須是本機已經有的模塊,沒有是不能引用的), 還有引用后參數類型都是dynamic
? ? ? ?我這里分別引用了Numpy , Matplotlib, Pillow三個庫,Pillow負責圖像處理/Numpy負責數值計算,存儲和處理矩陣/Matplotlib主要用于繪制2D圖形,通常用來顯示相關處理后的結果。對圖像處理,我們基本上就是用這三個庫。
? ? ? 3. 方法調用,我這里針對一張圖完成三種處理,旋轉/灰度/還有就是縮放。先來看看效果
? ? ? ?我們這里需要通過Matplotlib顯示一個一行四列的圖片,通過numpy為Matplotlib設置好大小,第一個是原圖,第二個是旋轉,第三個是灰度,因為引入了庫,所以你可以直接調用庫自帶相應的方法。
? ? ? ? 遇到一個問題是PIL.Image 有一個自帶方法new,這個方法是不能直接調用的,因為和C#的關鍵字new沖突,這個時候你需要通過InvokeMethod的方法去觸發new方法,以下是實現方式?
? ? ? ? 最后別忘記使用plt.show() 顯示結果。
? ? ? ? 上面的例子把pythonnet如何在C#使用展示出來,我也通過ICSharpCore在JupyterNotebook 上進行了調用。擴展了一下Plot.NET(https://github.com/SciSharp/Plot.NET)讓它支持圖像顯示, 這是在Notebook上使用的效果
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的c# 计算空格宽度像素_用pythonnet为计算机视觉做图像整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html获取此次点击的id,github
- 下一篇: android点击通知栏之后消失,为什么