用101000張食物圖片實現影像識別(數據的獲取與處理)-python-tensorflow框架
- 2019 年 10 月 3 日
- 筆記
前段時間,日劇《輪到你了》大火,作為程式設計師的我,看到了另外一個程式設計師—二階堂,他的生活作息,以及飲食規律,讓我感同身受,最讓我感觸的是他做的AI聊天機器人,AI菜品分析機器人,AI罪犯分析。
這讓作為程式設計師的我突然萌生了一股攀比和一種激情,我也得做一個出來(小聲bb,都得嘗試下):
於是,我想從相對簡單的做起,《AI菜品分析機器人》:
AI菜品分析機器人:
1.建立語料庫,爬取各個網站的對話和問答,這裡我採用的是知乎以及調用api獲取實時對話,至於程式碼的話我這裡就不放了,涉及比較多,我這裡側重點是影像識別,大概獲取了將近4萬條數據,
這裡給出部分結果:
2.關於影像識別:
1.影像訓練需要極大的數據,我這裡找了很久,通過各種手段,找到了kaggle比賽曾用過的101000張圖片,裡面有101種食物圖片,如下(部分)
類似於上述圖片,每一個圖片都是都是對應得食物,我們需要提取每一張圖片的特徵值。
2.我們可以看出上述圖片,大小不一,還具有色彩,我們特徵值提取,是將圖片進行矩陣化,所以我們在這裡需要將圖片變成大小一樣,並且灰度處理。這裡我們解釋下:
將圖片處理成大小一樣:我們訓練數據的時候是將圖片矩陣化,如果圖片大小不一樣,我們得矩陣大小就不一樣,所以在訓練得時候會有問題,為了簡單方便,我們直接將其同一化:
import numpy as np from PIL import Image img =Image.open("F:/images/baby_back_ribs/"+i).convert('L') img=img.resize((512,512)) img.save("F:/baby_back_ribs28/"+i)
這裡,我們通過img =Image.open(“F:/images/baby_back_ribs/“+i).convert(‘L‘)將圖片灰度處理,然後img=img.resize((512,512))處理圖片為512,512,最後保存:
可以看出,我們處理過後得圖片如上,得出這樣的圖片後,我們就可以用來作為數據了
3.我們將我們獲取的灰度圖片矩陣化:
for i in range(512): for j in range(512): pixel=1.0-float(img.getpixel((j,i)))/255.0
所以我們可以將其矩陣化:
每張圖片有512*512個數據,我們這裡是將一個二維矩陣扁平化為一維矩陣。所以我們可以將這101000張圖片所有數據都矩陣化,然後測試演算法。
具體的程式碼,還在測試中,目前遇到得問題比較多,正在一步一步處理,後面會繼續更新,下面給出我遇到的一些問題和解決:
1.數據的獲取:這101000張圖片我找了很久才找到的數據(約有5個g)。
2.數據量比較大,在處理的時候容易出錯,所以大家在寫的時候一定要仔細,最好把源圖複製一份,保留下來。
3.圖片特徵比較多,普通的演算法難以滿足,容易出現過擬合現象,而且1000張圖也不算特別多,準確率較低,容易識別出錯。
4.在實現矩陣演算法的時候,每次帶入100張圖片進行訓練,注意圖片維度,以及圖片長度。
等數據測試穩定後會放出源碼讓大家學習。
持續更新中,希望大家留意後面的部落格…..