2019年12月13日 星期五

Tensorflow Lite on Windows - 使用 Google 並且不求甚解

雖然我很喜歡 Linux,但我工作的環境都是使用 Windows 居多,由於手邊還有 Linux 的電腦,故遇到 OS 相關問題就是跑去該電腦前打開電源開機,然後回到自己座位使用 SSH 登入,中間如果需要傳輸檔案便使用 WinSCP 解決。

最近嘗試使用 Tensorflow Lite 轉換 Tensorflow Model,但在 Windows 上無法成功,隨便 Google 一下錯誤訊息,看起來似乎要跑在 Linux 上,後來果然在 Linux 上成功轉出 Model。

但因為要改 Model 和 Code,不論是 python 還是 Tensorflow 都不是我平常會用的傢伙,故常常改來改去,每次都要用 WinSCP 上傳還真是麻煩,雖然 UltraEdit 貌似有支援 SSH,但我的版本是灰色狀態( 寫文章時,已經找到解決方法 ),目前要處理的事一籮筐,故暫時沒時間解決,只好乖乖的再重頭看一次錯誤訊息。

首先,錯誤訊息是長這樣。

"'toco_from_protos' \xa4\xa3\xacO\xa4\xba\xb3\xa1\xa9\xce\xa5~\xb3\xa1\xa9R\xa5O\xa1B\xa5i\xb0\xf5\
xa6\xe6\xaa\xba\xb5{\xa6\xa1\xa9\xce\xa7\xe5\xa6\xb8\xc0\xc9\xa1C\r\n"

感覺就是一堆火星文,老辦法還是 Google,貌似是 python 16 進位字串,不確定對不對?反正簡單使用 python 是可以轉換的,我們得到下列錯誤訊息。

s = "'toco_from_protos' \xa4\xa3\xacO\xa4\xba\xb3\xa1\xa9\xce\xa5~\xb3\xa1\xa9R\xa5O\xa1B\xa5i\xb0\xf5\
xa6\xe6\xaa\xba\xb5{\xa6\xa1\xa9\xce\xa7\xe5\xa6\xb8\xc0\xc9\xa1C\r\n"

print(s)

Traceback (most recent call last):
  File "Test.py", line 5, in
    print(s)
UnicodeEncodeError: 'cp950' codec can't encode character '\xa4' in position 19: illegal multibyte sequence

一樣繼續 Google,搜尋如何改變 code page,原來使用 "chcp 65001" 就可以改成 UTF8,雖然我也不知道 python string 預設編碼是什麼?管他的,時間寶貴,不行在回來查。

這次有了比較清楚的錯誤訊息,但還是回到一開始隨便 Google 到的結果,找不到 "toco_from_protos" 這支轉換程式。

tensorflow.lite.python.convert.ConverterError: See console for info.
'toco_from_protos' is not recognized as an internal or external command,
operable program or batch file.

坦白講,實在是沒道理,堂堂 Google 霸主加上又是 python,沒道理只支援 Linux,更何況使用關鍵字查詢,看起來就是包在 Tensorflow 裡面的,非 Linux 其他安裝時所安裝的工具。

既然 Tensorflow Lite 並沒有說只支援 Linux,一樣繼續 Google,看到了關鍵字 "C:\Python\Scripts\toco_from_protos.exe"。

果然在我安裝目錄下是有這個執行檔的,接下來問題就簡單了,把該目錄加到 Path 路徑即可,雖然我也不知道為什麼我安裝時沒有選擇自動加入?

終於可以在 Windows 下繼續改 Code 了,這條不歸路不知道還要走多久?


後記

人對沒興趣的東西真的會不求甚解,我對 python 和 Tensorflow 都沒有興趣,故我只想快速解決問題,雖然真的是很快速解決問題,因為打這篇文章比我解決問題所花的時間還要多!

還是老話一句,學海無涯,Code 海茫茫,我也想有無限制的精神時光屋可以修練XD

沒有留言:

張貼留言