第14课:Tensorflow深度学习实战之实时分类

模型经过漫长的训练,慢慢成熟,其实可以看作一种变相的模式识别,训练的多,看的多了,每种图片都有自己的特点和特征,根据这些规律形成自己的判断模式,记录入模型。
等模型成熟之后,就可以直接拿来调用,实时分类图片

要实时分类图片,第一步是上传一张图片到服务端,然后服务端读取这张图片,调用模型进行识别分类
上传步骤这里就不说了,偏客户端,有各种方式,也有各种成熟的插件,我们从服务端开始讲

1.获取图片
def getOneImage(self, img_dir):#img_dir是图片的全路径
    from PIL import Image
    import matplotlib.pyplot as plt
    image = Image.open(img_dir)
    plt.imshow(image)
    image = image.resize([208, 208])
    image = np.array(image)
    return image

2.调用模型识别图片
def evaluateOneImage(self, image_array, n_class = 2, mode = {}):#调用示例 brain.evaluateOneImage(image_info, 2, {'cat' : 0, 'dog' : 1}) image_info是第一步的返回值,n_class表示分成几类,mode表示分类标准
    mode = {value: key for key, value in mode.items()}
    with tf.Graph().as_default():
        image = tf.cast(image_array, tf.float32)
        image = tf.image.per_image_standardization(image) #标准化处理,可以使得不同的特征具有相同的尺度(不是归一化)作用是加速神经网络的训练
        image = tf.reshape(image, [1, 208, 208, 3]) #第1个参数为被调整维度的张量 第2个参数为要调整为的形状
        logit = self.inference(image, 1, n_class) #这里上一节有说到,详细代码可以参见:https://github.com/zhimengzhe/iBrain/blob/master/neuron/cnn.py
        logit = tf.nn.softmax(logit)#执行卷积流程
        x = tf.placeholder(tf.float32, shape=[208, 208, 3])
        saver = tf.train.Saver()
        with tf.Session() as sess:
            print("Reading checkpoints...")
            ckpt = tf.train.get_checkpoint_state(self.logs_train_dir)#获取并使用模型
            if ckpt and ckpt.model_checkpoint_path:
                global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
                saver.restore(sess, ckpt.model_checkpoint_path)
                print('Loading success, global_step is %s' % global_step)
            else:
                print('No checkpoint file found')

            prediction = sess.run(logit, feed_dict={x: image_array})#开始判断
            for i in range(len(prediction[0])):
                print(mode[i] + ' with possibility %.6f' % prediction[:, i])