在實做 flask 時,我透過 curl 指令取得了張圖片,但它的資料格式是 'werkzeug.datastructures.FileStorage'
,不能直接用 cv2.imread
,但我又不想跟範例程式碼一樣,先存出再讀回。所以找了其他的方法來實做。
一般常見的範例都會先存出再讀回,將像下面程式碼一樣。
不過要先存出再讀回,我實在不是很喜歡,所以找到的 cv2.imdecode
,根據解釋:
cv2.imdecode()
函數從指定的記憶體快取中讀取數據,並把數據解碼成圖像格式;主要用於從網路傳輸數據中恢復出圖像。
看到網路傳輸數據眼睛就亮起來了有沒有!當下就決定把 cv.imread
換成 cv2.imdecod
,並搭配 numpy
的fromstring
使用字串來建立一個矩陣,完整程式碼如下:
用這方式讀進來的資料型態是 uint8
,在我的應用中,我會接著喂進 TensorFlow 做 predict,結果會跳出:
TensorFlow TypeError: Value passed to parameter input has DataType uint8 not in list of allowed values: float16, float32
所以我又在最後加了行型態轉換:
在使用 imdecode()
和 imencode()
也是進行了 IO,所以用省下 IO 的描述並不正確。
本文作者: 辛西亞.Cynthia
本文連結: 辛西亞的技能樹 / hackmd 版本
版權聲明: 部落格中所有文章,均採用 姓名標示-非商業性-相同方式分享 4.0 國際 (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!