PaddlePaddle 極簡(jiǎn)入門(mén)實(shí)踐五:圖像讀取

上個(gè)教程已經(jīng)交代過(guò)深度學(xué)習(xí)中識(shí)別驗(yàn)證碼的一些簡(jiǎn)單步驟了
傳送門(mén):http://www.itdecent.cn/p/df98fcc832ed

但在入坑的時(shí)候總會(huì)在數(shù)據(jù)集列表生成方面出現(xiàn)問(wèn)題
比方說(shuō) 圖像的讀取
“直接open不行嗎?”
“為什么我用OpenCV讀取后顯示Conv intput should be 4-D or 5-D tensor?”
......
簡(jiǎn)單介紹一下常用在PaddlePaddle中處理圖像的方法

1、Pillow(PIL)

PIL是一個(gè)非常輕便的庫(kù),但它讀進(jìn)來(lái)的圖像是一個(gè)對(duì)象,而不是numpy 矩陣
如果要變成矩陣則需要Numpy庫(kù)完成以下代碼

import numpy as np
im = np.array(im)

否則會(huì)在歸一化時(shí)候報(bào)出錯(cuò)誤TypeError: unsupported operand type(s) for /: 'Image' and 'float'

歸一化時(shí)報(bào)錯(cuò)

把它變成Numpy數(shù)組后就可以了嗎?
并不是的,圖片以30x15的灰度單通道圖片為例
此時(shí)圖片的維度為1x30x15(單通道x長(zhǎng)x寬)
而你需要放入訓(xùn)練進(jìn)程的是圖片列表,也就是說(shuō)維度應(yīng)該是Nx1x30x15
(N為圖片數(shù)量,N=1時(shí)表示只有一張圖片)
否則會(huì)提示出類(lèi)似Conv intput should be 4-D or 5-D tensor?的錯(cuò)誤
那么接下來(lái)就應(yīng)該使用Numpy對(duì)維度進(jìn)行調(diào)整

from PIL import Image
im = Image.open(path + "data/" + str(i) + ".jpg").convert('L')#單通道模式打開(kāi)圖片
im = numpy.array(im).reshape(1, 1, 30, 15).astype(numpy.float32)#轉(zhuǎn)換維度

如果使用迭代器方法則可以省去''Nx1x30x15''中的'N'

def dataReader():
     #使用PaddlePaddle中reader生成數(shù)據(jù)集列表
    def redaer():
        for i in range(1,1501):
            im = Image.open(path + "data/" + str(i) + ".jpg").convert('L')
            im = np.array(im).reshape(1,30, 15).astype(np.float32)
            im = im / 255.0 * 2.0 - 1.0
            yield im
    return redaer

2、OpenCV

OpenCV庫(kù)的強(qiáng)大之處在于功能非常全面
但OpenCV讀取的三通道圖片并不是RGB順序,而是BGR順序
在使用PaddlePaddle時(shí)讀取圖片還是改一下顏色通道順序

img=np.transpose(img, (2, 0, 1))#numpy庫(kù)

img為OpenCV讀取的三通道圖像
同樣,要避免出現(xiàn)上文中的'沒(méi)有調(diào)整維度'Nx1x30x15'而造成Conv intput should be 4-D or 5-D tensor?的錯(cuò)誤還是要進(jìn)行reshape轉(zhuǎn)換

3、使用PaddlePaddle中dataset.image.load_image讀取圖像(V1.5版本在文檔中取消了該API描述)

操作起來(lái)也是非常簡(jiǎn)單

import paddle.fluid

img = paddle.dataset.image.load_image("./data/1.jpg")#1x30x15
print(len(img),len(img[0]),len(img[0][0]))#打印維度信息

運(yùn)行一下看看輸出信息


輸出信息

可以看到對(duì)應(yīng)的是 長(zhǎng)x寬x通道數(shù)
如果不變換的情況下在定義輸入數(shù)據(jù)類(lèi)型的時(shí)候需要更改為shape=[30,15,3]

在Python中圖像處理庫(kù)還有非常多
參考一下這篇文章,介紹的很詳細(xì)
https://www.cnblogs.com/skyfsm/p/8276501.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容