用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张图片进行训练,注意图片维度,以及图片长度。

    

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

          

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