# !/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : ${20200326} ${18:00}
# @Author : ZicoZhou
# @Version :1.0
# @Function : VGG16网络提取图像特征
from keras.models import model_from_json
from keras.models import Model
from PIL import Image as pil_image
from keras import backend as K
import numpy as np
import pickle
import os
import keras
import time
os.chdir(os.path.split(os.path.realpath(__file__))[0])
print(os.getcwd())
def load_vgg16_model():"""从当前目录下的vgg16_exported.json和vgg16_exported.h5文件导入vgg16网络并返回创建的网络模型 # Returns 创建的网络模型Models """
with open("G:/KeepOnStudying/ML/Documents/CV/PycharmProjects/Image_captioning/task1/vgg16_exported.json", "r") as json_file:
loaded_model_json= json_file.read()
loaded_model= model_from_json(loaded_model_json)
loaded_model.load_weights("G:/KeepOnStudying/ML/Documents/CV/PycharmProjects/Image_captioning/task1/vgg16_exported.h5")
return loaded_model
def preprocess_input(x):"""预处理图像用于网络输入,将图像由RGB格式转换为BGR格式 将图像的每一个图像通道减去其均值 #:argument numpy数组,4维 data_format: Data format of the Image array # Returns preprocessed numpy array """
x_red = x[:, :, :, 0].copy()
x[:, :, :, 0] = x[:, :, :, 2]
x[:, :, :, 2] = x_red
x[:, :, :, 0] -= np.mean(x[:, :, :, 0])
x[:, :, :, 1] -= np.mean(x[:, :, :, 1])
x[:, :, :, 2] -= np.mean(x[:, :, :, 2])
return x
def load_img_as_np_array(path,target_size):"""从指定文件加载图像,转换图像为target_size,返回2位浮点数numpy数组, :param path: 图像文件路径 :param target_size:元组(图像高度,图像宽度) :returns A PIL Image instance """
img=pil_image.open(path)
img=img.resize(target_size,pil_image.NEAREST)
return np.asarray(img,dtype=K.floatx())
def extract_features(directory):"""提取给定文件夹中所有图像的特征,将提取的特征保存在features.pkl中 提取的文件保存在一个dict中,key为文件名,value为特征值【np.array】 :param directory:包含.JPG文件的文件夹, :returns:None """
model = load_vgg16_model()
model.layers.pop()
model = Model(inputs=model.inputs, outputs=model.layers[-1].output)
print("the model used is summarized as follow:")
model.summary()
features = {}
count = 0
for fn in os.listdir(directory):
img_id = os.path.splitext(fn)[0]
if (img_id[-4] == "."): continue
count += 1
print("[" + str(count) + "] " + img_id)
fn = os.path.join(directory, fn)
arr = load_img_as_np_array(fn, (224, 224))
arr = np.reshape(arr, (1, arr.shape[0], arr.shape[1], arr.shape[2]))
arr = preprocess_input(arr)
feature = model.predict(arr, verbose=0)
features[str(img_id)] = feature
return features
if __name__ == '__main__':
# 提取所有图像的特征,保存在一个文件中, 大约一小时的时间,最后的文件大小为127M
directory='G:/KeepOnStudying/ML/Documents/CV/PycharmProjects/Image_captioning/task1/Flicker8K'
time_start=time.time()
features = extract_features(directory)
time_end=time.time()
print("time cost : ",format(time_end-time_start))
print("提取特征文件个数: " ,format(len(features)))
print(keras.backend.image_data_format())
#保存特征到文件
pickle.dump(features,open('features.pkl','wb'))
print("I am lucky and finish this summary for sharing")
print('Your evalution and correction is waited')
print('Thanks a lot for your good teaching, especially Jerry')

open cv提取图片特征值_基于VGG16网络提取Flicker8K数据集图像特征相关推荐

  1. DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构FineTuning

    DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构FineTuning 输出结果   False: input_1 False: block1_conv1 F ...

  2. DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构进行迁移学习

    DL之VGG16:基于VGG16(Keras)利用Knifey-Spoony数据集对网络架构迁移学习 目录 数据集 输出结果 设计思路 1.基模型 2.思路导图 核心代码 更多输出 数据集 Datas ...

  3. 神经网络 mse一直不变_基于关系网络的视觉建模:有望替代卷积神经网络

    最近两年,自注意力机制.图和关系网络等模型在NLP领域刮起了一阵旋风,基于这些模型的Transformer.BERT.MASS等框架已逐渐成为NLP的主流方法.这些模型在计算机视觉领域是否能同样有用呢 ...

  4. java识别图片中的图形形状_基于Java+OpenCV技术对几何图像颜色与形状识别

    基于 Java+OpenCV 技术对几何图像颜色与形状识别 杨思阳 黄军 吴春秋 (黔东南民族职业技术学院,贵州 凯里 556000) [摘 要] 通过 Java 调用 OpenCV 视觉库实现几何图 ...

  5. python提取pdf文字_python基于pdfminer库提取pdf文字代码实例

    安装pdfminer 库 windows 下安装pdfminer3k pip install pdfminer3k Liunx 下安装pdfminer pip install pdfminer 代码 ...

  6. java web网络硬盘设计_基于JavaEE网络硬盘的设计与实现

    DOI. 10.14004巧cnkl.ckt. 2015,3111 1课题背景 随着信息化进程的加快,文件的存储数量的逐年递增,在朋友同事之间文件数据相互之间进行分享学习越来越频繁,因此在工作和生活中 ...

  7. php简单排课_基于PHP-WEB网络云环境下的自动排课系统

    基于 PHP-WEB 网络云环境下的自动排课系统 陈佳硕 ; 孙穆赫 ; 付兴建 ; [期刊名称] <信息与电脑:理论版> [年 ( 卷 ), 期] 2013(000)010 [摘要] 随 ...

  8. java 复杂网络分析_基于复杂网络的Java程序分析工具设计与实现思路浅谈

    基于复杂网络的Java程序分析工具设计与 实现思路浅谈 摘要:近年来,随着科学技术的进步,计算机技术发展速度的加快,使得软件价值也逐步提高,不管是软件系统的应用领域,还是其规模均获得了相应的扩大,且软 ...

  9. lda进行图片分类_基于SIFT+Kmeans+LDA的图片分类器的实现

    题记:2012年4月1日回到家,南大计算机研究僧复试以后,等待着的就是独坐家中无聊的潇洒.不知哪日,无意中和未来的同学潘潘聊到了图像处理,聊到了她的论文<基于LDA的行人检测>,出于有一年 ...

最新文章

  1. Kaldi不支持Cuda10_1版本
  2. 嵌入式开发中使用DDD进行调试
  3. linux中的shell脚本case,【shell】Linux shell 之 case 详解
  4. SpringSecurity关闭csrf拦截
  5. 域控下发脚本_域环境下做到单用户登陆控制脚本
  6. 第二章 Java多线程入门类和接口
  7. CentOS7安装xrdp(windows远程桌面连接CentOS)
  8. 【PAT乙】1069 微博转发抽奖 (20分) set
  9. iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转
  10. [转载]MySQL exists的用法介绍
  11. CrtmpServer 接收推送视频流 注册流基本流程
  12. 前端后台的爱恨情仇——接口调试
  13. 求最小公倍数利用数组java_菜鸟级求解:Java求1到20的最小公倍数
  14. [linux学习笔记] GCC环境安装问题
  15. 技术|“狩零人”威胁攻击分析报告!
  16. 免打扰时间设置_我的视频设置是什么样的,为什么要打扰我
  17. 64匹马,8个赛道,找出跑得最快的4匹马(面试题详解)
  18. PowerBI如何注册
  19. 达人评测 锐龙r5 5600h和r5 6600h差别大吗
  20. 隐私保护新观点(信息防泄漏的意义)

热门文章

  1. pcb二次钻孔_线路板中的二次孔是什么?线路板钻孔有哪些常见问题?
  2. 【LeetCode】LeetCode之乘积最大子数组——枚举+动态规划+Kadane算法
  3. Linux——SSH连接错误【No supported authentication methods available】解决方案
  4. Stock Arbitraging
  5. android 黑边边框,手机屏幕边缘的黑边是什么呢?
  6. 【记录】在云服务器安装tomcat部署自己的项目 通过ip无需加端口号直接访问
  7. idea(一)使用详解
  8. docker svn
  9. 5种网络IO模型介绍
  10. iOS: Crash文件解析