适合使用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