• 大小: 12.75MB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2023-07-10
  • 语言: Python
  • 标签: tensorflow  python  

资源简介

用python写的tensorflow框架下数码管的识别方法,包含训练代码和测试代码,可直接利用模型进行检测,如果效果不好,可以自己构建数据集训练

资源截图

代码片段和文件信息


# coding: utf-8

# ## 导入各种依赖库
# 因为此目录下已经有训练好的模型,可以直接到最后一个代码块运行,无需额外训练,如果与实际应用情况存在偏差,请添加数据集进行再次训练

# 没有的模块进行安装
# ‘‘‘ bash
# pip install modual
# ‘‘‘

# In[2]:


import tensorflow as tf
import gzip
import os
import tempfile
import cv2
import random
import numpy as np


# ## 生成数据集格式

# ### train data

# In[3]:


#导入数据图片,以features命名
imgs=os.listdir(‘./datasets/train/imgs/‘)
# 定义一个排序函数
def nu_str(string):
    return int(string.split(‘.‘)[0])
# 将文件夹中的文件按照名称数字大小进行排序 能够与labels一一对应
imgs.sort(key=nu_str)
features_train=[]
# 对每一张图片进行处理,主要是将矩阵转化为一个向量,最后将所有图片打包
for i in imgs:
    img=cv2.imread(‘./datasets/train/imgs/‘+str(i)0)
    #resimg=cv2.threshold(img 200 255 cv2.THRESH_BINARY)
    #img=cv2.copyMakeBorder(img5555cv2.BORDER_CONSTANTvalue=0)
    #cv2.imshow(‘3‘img)
    #cv2.waitKey(100)
    img=img.reshape(28*28)/255
    features_train.append(img)
features_train=np.array(features_train) # 包含所有图片的一个向量集


# In[4]:


## 将每一个图片对应的结果转化为one-hot形式储存
# 读取文件所有内容
with open(‘./datasets/train/targets/target.txt‘‘r‘) as f:
    tars=f.readlines()
# 向量不同位置对应的结果
tar_temp=[0123456789‘.‘]
labels_train=[]
# 构造one-hot形式的向量集
for i in tars:
    b=np.array([i[0]==str(tar_temp[j]) for j in range(len(tar_temp))])+0
    labels_train.append(b)  # 一个包含所有结果的向量集(与图片集一一对应)


# ### 验证数据集的正确性

# In[5]:


# 选择运行
# 查看数据集与结果是否一一对应,主要看看显示的图片和打印的数字是否一致

for i in range(len(features_train)):
    cv2.imshow(‘feature‘features_train[i].reshape(2828))
    print(np.argmax(labels_train[i]))
    cv2.waitKey(500) # 单张图片的显示时间ms


# ### test data

# In[6]:


# 生成测试数据集,同训练集一样

imgs=os.listdir(‘./datasets/test/imgs/‘)
def nu_str(string):
    return int(string.split(‘.‘)[0])
imgs.sort(key=nu_str)
features_test=[]
for i in imgs:
    img=cv2.imread(‘./datasets/test/imgs/‘+str(i)0)
    #resimg=cv2.threshold(img 200 255 cv2.THRESH_BINARY)
    #img=cv2.copyMakeBorder(img5555cv2.BORDER_CONSTANTvalue=0)
    #cv2.imshow(‘3‘img)
    #cv2.waitKey(100)
    img=img.reshape(28*28)/255
    features_test.append(img)
features_test=np.array(features_test)


# In[7]:


with open(‘./datasets/test/targets/target.txt‘‘r‘) as f:
    tars=f.readlines()
tar_temp=[0123456789‘.‘]
labels_test=[]
for i in tars:
    b=np.array([i[0]==str(tar_temp[j]) for j in range(len(tar_temp))])+0
    labels_test.append(b)


# In[8]:


# 查看测试训练集的正确性  可以跳过
for i in range(len(features_test)):
    cv2.imshow(‘feature‘features_test[i].reshape(2828))
    print(np.argmax(labels_test[i]))
    cv2.waitKey(500)


# ## 线性训练
# 这个训练结果太差,忽略

# ### train 
# 忽略 不需要运行

# In[9]:


sess = tf.Session()
# 设置放置自变量的空间(图片输入的)
x=tf.placeholder(“float“[None28*28])
# 设置权重以及偏置的变量空间
W=tf.Variable(tf.zeros([28*2811]))
b=tf.Variable(tf.zeros([11]))
# 计算特定权重偏置下的结果
y=tf.nn.softmax(tf.matmul(xW)+b)
# 设置储存实际结果的空间
y_=tf.placeholder(“float“[None11])
# 计算预测与实际的交叉熵
cross_entropy=-tf.reduce_sum(y_*tf.log(y))
# 训练 通过使得交叉熵向减小的方向
train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
# 初始化变量
init = tf.initialize_

评论

共有 条评论