Keras基于TensorFlow的RGBA,RGB,GrayScale颜色属性适配

适合使用Keras的TensorFlow框架实现的计算机视觉。本文阅读需要3分钟。

本文是对Keras采用2.x/3.x思路预处理彩色照片产生的不识别RGB与RGBA标准问题提出的解决方案。sRGB\aRGB(Adobe&Apple)均为广泛接受的RGB标准,RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间。虽然它有的时候被描述为一个颜色空间,但是它其实仅仅是RGB模型的附加了额外的信息。

 

前言:将sRGB转换为RGBA的方法

Stack Overflow上有许多C++实现的本地方法,这里不再累述。此处给出一个网址,可在线转换:

https://convertio.co/zh/ps-rgba/

 

正文:

使用TensorFlow框架加载单张图片的预测时,本人习惯的写法是调用一个sys.argv.这样做有三个好处,一个是减少反复修改代码源文件路径;另外,cmd可任意切换路径且十分灵活;最重要的,开发阶段的神经网络时常歇菜,通常IDE会造成文件占用问题。

我们def一个load_image()来接收来自sys.argv的文件:

from keras.preprocessing import image

def load_image(image_path,grayscale=False,target_size=None):
    pil_image = image.load_image(image_path,grayscale,target_size)
    return image.img_to_array(pil_image)//返回一个图片矩阵

Keras会报错:

C:\Users\o.hemant.pawaskar\Downloads\EMOTION_RECOGNITION_ALL_DATA\face_classification-master\src>python C:\Users\o.hemant.pawaskar\Downloads\EMOTION_RECOGNITION_ALL_DATA\face_classification-master\src\image_emotion_gender_demo.py C:\Users\o.hemant.pawaskar\Desktop\happy.jpg
Using TensorFlow backend.
2018-10-22 14:48:39.056701: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Traceback (most recent call last):
File "C:\Users\o.hemant.pawaskar\Downloads\EMOTION_RECOGNITION_ALL_DATA\face_classification-master\src\image_emotion_gender_demo.py", line 42, in 
rgb_image = load_image(image_path, grayscale=False)
File "C:\Users\o.hemant.pawaskar\Downloads\EMOTION_RECOGNITION_ALL_DATA\face_classification-master\src\utils\inference.py", line 7, in load_image
pil_image = image.load_img(image_path, grayscale, target_size)
File "C:\Users\o.hemant.pawaskar\AppData\Local\Continuum\anaconda3\envs\py36\lib\site-packages\keras_preprocessing\image.py", line 509, in load_img
raise ValueError('color_mode must be "grayscale", "rbg", or "rgba"')
ValueError: color_mode must be "grayscale", "rbg", or "rgba"

查资料很久时间,发现此时产生的问题是,在最新版本的Keras中,image.load_image()的颜色模式参量不接受布尔值。改为:

def load_image(image_path, grayscale=False, target_size=None):
    color_mode = 'grayscale'
    if grayscale == False:
        color_mode = 'rgb'
    else:
        grayscale = False
    pil_image = image.load_img(image_path, grayscale, color_mode, target_size)
    return image.img_to_array(pil_image)

逻辑如上,可根据自己具体情况更改。此时,Keras可完整兼容彩色图片颜色模式。keras.preprocessing.image.array_to_img用来将数组数据(代表图像)转换为图像。

 

 

引用:

PIL模块中可用的图像格式:https://pillow.readthedocs.io/en/3.1.x/handbook/image-file-formats.html

图像压缩格式与方法:https://en.wikipedia.org/wiki/Image_compression

你可能感兴趣的:(Deep,Learing,计算机视觉,Computer,Vision,Keras,TensorFlow)