用101000张食物图片实现图像识别,数据的获取与处理!

前段时间,日剧 《轮到你了》 大火,作为程序员的我,看到了另外一个 程序员 —二阶堂,他的生活作息,以及饮食规律,让我感同身受,最让我感触的是他做的 AI聊天机器人,AI菜品分析机器人,AI罪犯分析。

这让作为程序员的我突然萌生了一股攀比和一种激情,我也得做一个出来(小声bb,都得尝试下):

Python资源共享群:626017123

于是,我想从相对简单的做起,《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张图片进行训练,注意图片维度,以及图片长度。

等数据测试稳定后会放出源码让大家学习。

持续更新中,希望大家留意后面的博客.....

你可能感兴趣的:(Python)