利用opencv调用tensorflow的pb模型对jpg图片进行分类

利用的是opencv中的dnn模块进行调用的,之所以标题是对jpg的图片进行分类,主要的原因是我对bmp格式的图片分类还没有成功,成功之后再更新,

使用比较常用的花卉分类图片进行分类,因为只是为了实验,并没有对图片分类精度进行追求,代码中有许多问题,比如有很多没用的,也没有删掉,也只是对花进行了二分类

对这两种花进行二分类,daisy标签为0 dandelion为1

首先进行分类,分类使用python3.5+tensorflow-gpu1.4.0+ubuntu16.04

整个过程有3个py文件,input_data.py是对图片的读取处理

train_model.py是进行训练  t_model.py是在python中测试图片

input_data.py文件

import input_data
#from tensorflow.python.framework import graph_util
from skimage import io, transform
import glob
import os
import tensorflow as tf
import numpy as np
import time

NG_path='/home/dyf/PycharmProjects/classifer_flower/flower_photos/daisy/'
OK_path='/home/dyf/PycharmProjects/classifer_flower/flower_photos/dandelion/'

#读取图片
def _dense_to_one_hot(labels_dense, num_classes):
  """Convert class labels from scalars to one-hot vectors."""
  num_labels = labels_dense.shape[0]
  index_offset = np.arange(num_labels) * num_classes
  labels_one_hot = np.zeros((num_labels, num_classes))
  labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1
  return labels_one_hot

#读取图片
def read_img():
    imgs = []
    label = []
    #for k in range(1,10):
    #path1= os.path.join(os.path.abspath(NG_path), '1'+format(str(k)))
    #path2=os.path.join(os.path.abspath(labels_path), 'NG'+format(str(k)+'.txt'))
    piclist = os.listdir(NG_path)
    for pic in piclist:
        if pic.endswith(".jpg"):
            old_path = os.path.join(os.path.abspath(NG_path), pic)
            img=io.imread(old_path)
            img=transform.resize(img,(500,500))
            #print(img)
            # img=img.reshape(100,100,3)
            imgs.append(img)
            label.append(0);

    piclist = os.listdir(OK_path)
    for pic in piclist:
        if pic.endswith(".jpg"):
            old_path = os.path.join(os.path.abspath(OK_path), pic)
            img = io.imread(old_path)
            img = transform.resize(img, (500, 500))
            # img=img.reshape(100,100,3)
            imgs.append(img)
            label.append(1);

    # for i in range(2180):
    #     new_path = os.path.join(os.path.abspath(OK_path), '1(' + format(str(i + 1)) + ').bmp')
    #
    #     img = io.imread(new_path)
    #     img = transform.resize(img, (100, 100))
    #     #img=img.reshape(100, 100, 3)
    #     imgs.append(img)
    #     label.append(1);
    #         #labels.append(idx)

    return np.asarray(imgs, np.float32), np.asarray(label, np.int32)


def train_test_split(ratio):
    data, label = read_img()
    #print(data.shape)
    print(data.shape)
    # data = np.array(data).reshape(-1, 200, 200,3);
    # print(data.shape)
    #打乱顺序
    num_example=data.shape[0]
    arr=np.arange(num_example)
    np.random.shuffle(arr)
    data=data[arr]
    label=label[arr]
    label=_dense_to_one_hot(label,2)

    #将所有数据分为训练集和验证集
    ratio=0.8
    s=np.int(num_example*ratio)
    x_train=data[:s]
    y_train=label[:s]
    x_test=data[s:]
    y_test=label[s:]
    return x_train,x_test,y_train,y_test

#定义一个函数,按批次取数据
def minibatches(inputs=None, targets=None, batch_size=None, shuffle=False):
    assert len(inputs) == len(targets)
    if shuffle:
        indices = np.arange(len(inputs))
        np.random.shuffle(indices)
    for start_idx in range(0, len(inputs) - batch_size + 1, batch_size):
        if shuffle:
            excerpt = indices[start_idx:start_idx + batch_size]
        else:
            excerpt = slice(start_idx, start_idx + batch_size)
        yield inputs[excerpt], targets[excerpt]

def _test():
    x_train,x_test,y_train,y_test = train_test_split(0.8)

    print("dataset.train.images.shape:", x_train.shape)
    print("dataset.train.labels.shape:", y_train.shape)
    print("dataset.test.images.shape:", x_test.shape)
    print
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值