精华内容
下载资源
问答
  • 如何制作自己的图片数据库
    万次阅读
    2018-11-09 00:33:14

    写在开始

    自己最开始接触python的时候,第一个学会使用的库就是tensorflow,在经历了everyone 都会经历的mnist数据集训练后,就开始想自己做一个图片分类的深度学习,期间也是一波三折,看了很多csdn上的博客,摸索出了自己的数据集制作习惯,用以简单的分类。

    数据集下载

    数据集的话,一是通过自己下载收集,也可以去很多赛题里下分类好的资源,像阿里的天池大数据比赛,我用的数据集来自天池大数据数据集

    数据集制作

    tensorflow只能读取二进制数据,以tfrecord格式保存图片,所以我们必须先把矩阵型的图片数据转化。

    import os
    import tensorflow as tf 
    from PIL import Image
    import numpy as np
    data_path= 'data\\guangdong_round1_train2_20180916'#也可以输入你自己的test路径
    writer=tf.python_io.TFRecordWriter('data\\train_data.tfrecord')
    classes=['正常',
            '不导电',
            '擦花',
            '横条压凹',
            '桔皮',
            '漏底',
            '碰伤',
            '起坑',
            '凸粉',
            '涂层开裂',
            '脏点',
            '其他'
            ]#也可以输入你自己的分类,这是比赛时要求的分类
    class_path=[]
    for index,name in enumerate(classes):
        if name=='正常':
            class_path.append(os.path.join(data_path,'无瑕疵样本'))
        else:
            if name=='其他':
                new_path=os.path.join(data_path,'瑕疵样本','其他')
                for newpath in os.listdir(new_path):
                    class_path.append(os.path.join(data_path,'瑕疵样本',name,newpath)) 
            else:
                class_path.append(os.path.join(data_path,'瑕疵样本',name))
      #上面的过程是为每个类别的图片建一个收索路径,使每一张图片进入进入这个搜索路径,方便下文遍历搜索
      #下一个遍历是让每张图片转换为tfrecord格式
    for path in class_path:
        for image_path in os.listdir(path):
            image_path=os.path.join(path,image_path)
            image= Image.open(image_path)
            image=image.resize((256,256)) #图片太大,根据你的需求缩小尺寸
            image_raw=image.tobytes()
            example=tf.train.Example(features=tf.train.Features(feature={
        'lable':tf.train.Feature(int64_list=tf.train.Int64List(value=[index])) ,
        'image_raw':tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_raw]))                                                           
        }))
        writer.write(example.SerializeToString())
    writer.close() 
    

    下面读取tfrecord文件的文件readdata

    import os
    import tensorflow as tf 
    from PIL import Image
    tf_record_train_path='data\\train_data.tfrecord'
    def read_tfrecord(path):
        filename_queue=tf.train.string_input_producer([path])
        reader=tf.TFRecordReader()
        _,serialized_example=reader.read(filename_queue)
        features=tf.parse_single_example(serialized_example,features={
        'lable':tf.FixedLenFeature([],tf.int64),
        'image_raw':tf.FixedLenFeature([],tf.string)})
        image=tf.decode_raw(features['image_raw'],tf.uint8)
        image=tf.reshape(image,[256,256,3]) 
        image=tf.image.per_image_standardization(image) #标准化每张图片
        lable=tf.cast(features['lable'],tf.int32)
        return image,lable
    def get_tfrecord(batch_size,isTrain=True):
        if isTrain:
            tf_record_path=tf_record_train_path
        image,lable=read_tfrecord(tf_record_path)
        image_batch,lable_batch=tf.train.shuffle_batch([image,lable],batch_size=batch_size,
        num_threads=1,capacity=1000,min_after_dequeue=10) #制作每次喂入神经网络的数据量,取决于batch_size
        return image_batch,lable_batch
    

    开始训练

    这为了简化篇幅,这里训练的时候采用的自带的resnet网络,只是为了方便大家理解,不一定适应本数据集。其他就是训练的基本操作。label采用采用one-hot编码。
    如果图片是第2类,那么他的标签就是向量:
    [ 0 1 0 . . . . . ] \begin{bmatrix}0&1&0&.&.&.&.&.\end{bmatrix} [010.....]

    import tensorflow as tf
    import tensorflow.contrib.slim.nets as nets
    import readdata
    save_dir=r'./train_image_63.model'
    batch_size=2#你设定的值
    lr=tf.Variable(0.0001,tf.float32)
    x=tf.placeholder(tf.float32,[None,256,256,3])
    y_=tf.placeholder(tf.float32,[None])
    image_batch,lable_batch=readdata.get_tfrecord(batch_size,isTrain=True)
    one_hot_lables=tf.one_hot(indices=tf.cast(y_,tf.int32),depth=12) #这里是one_hot编码给与标签
    pred,endpoint=nets.resnet_v2.resnet_v2_50(x,num_classes=12,is_training=True)
    pred=tf.reshape(pred,shape=[-1,12])
    loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred,labels=one_hot_lables))
    optimizer=tf.train.AdamOptimizer(learning_rate=lr).minimize(loss)
    a=tf.argmax(pred,1)
    b=tf.argmax(one_hot_lables,1)
    correct_pred=tf.equal(a,b)
    accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))
    saver=tf.train.Saver()
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        threads=tf.train.start_queue_runners(sess=sess)
        i=0
        while True:
            i+=1
            print(i)
            b_image,b_lable=sess.run([image_batch,lable_batch])
            _,loss_,y_t,y_p,a_,b_=sess.run([optimizer,loss,one_hot_lables,pred,a,b],
            feed_dict={x:b_image,y_:b_lable})
            print(loss_)
            if i==1500:
                saver.save(sess,save_dir,global_step=i)
                break
              
    

    写在最后

    这个只是最简单的数据集处理方式,帮助我们入门,我也只是初学在路上,希望与大家共勉。如果觉得这么看代码不方便的同学可以访问我的github去下载来看。请多指正。

    更多相关内容
  • form页面上的图片显示用 {:UpImage("imgname",100,100,$item['img'])} $item['img']就是调用数据库图片的绝对路径 点击保存执行update方法, $name = I('post.imgname', '', 'strip_tags'); 获取图片的绝对路径
  • 主要介绍了Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果的方法,涉及asp.net数据库操作及JavaScript幻灯片生成的相关技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
  • 如何给文件夹图片生成数据库

    千次阅读 2021-11-18 14:00:52
    在标签制作软件中完成一个完整的标签制作,有时可能需要在标签中插入所需的图片或者照片,其实在标签制作软件中有专门的图片导入工具,可以将图片直接导入到软件中。但是如果需要批量的插入图片,而且根据标签的内容...

    在标签制作软件中完成一个完整的标签制作,有时可能需要在标签中插入所需的图片或者照片,其实在标签制作软件中有专门的图片导入工具,可以将图片直接导入到软件中。但是如果需要批量的插入图片,而且根据标签的内容不同随时更换图片,那就需要将图片生成数据库,下面,我们就一起看看如何操作。

    1、打开软件,点击图片按钮,选择目标文件夹里的图片。
     2、图片导入进来后,勾选“打印或导出时先读取数据源的字段值作为文件名,然后从该文件中读取图片”。然后再点击图片文件名整理工具。在弹出的界面里选择图片所在的文件夹,选择完成后就可以在界面下方看见所有的图片。最后点击导出到Excel。3、将导出的Excel文件保存,这个文件夹图片的数据库就完成了。将生成的数据拷贝到其他Excel文件里。
    4、点击设置数据源,将上面的Excel表作为数据库导入到软件中。
    5、使用单行文字输入文本,并添加数据源字段。同时给图片选择相应的数据源字段。
    6、通过打印预览可以查看效果,图片和名称都一一对应。
    综上所述就是标签软件将图片生成数据库的方法,此种方法就可以实现批量导入图片并进行打印。想要了解更多有关条码标签的信息请持续关注我们。


     

    展开全文
  • 轻松实现将上传图片数据库 很久就想自己写一写程序了,不过由于赖就不想写我,今天刚好有空,所以写了这个小小的程序很容易一看就知道的,不多说了就此开始: 我们做一个上传的。数据据库的字段就id自动编号 big...
  • 本文给大家分享的是使用Python制作爬虫爬取图片的小程序,非常的简单,但是很实用,有需要的小伙伴可以参考下
  • 为什么要发这个阿里云RDS数据库实例呢,有的同学可能买了阿里云RDS实例不太会用,看了阿里云配置步骤还是不会连接,所以就整理了一下,就一张PDF图片,但是内容看了通俗易懂.收获不易,谢谢你们的支持。
  • springboot集成达梦数据库-所需jar包-pom形式,内含maven坐标图片
  • 本文实例讲述了 (C) 读取数据库并生成 JS 文件制作首页图片切换效果的方法 分享给大家供大家参考具体如下 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web...
  • 本文实例讲述了 (C)读取数据库并生成 JS文件制作首页图片切换效果的方法 分享给大家供大家参考具体如下 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web....
  • jsp上传图片数据库

    2013-06-19 09:11:06
    一个简单的图片上传。对于想制作网络相册的可以参考下
  • 这次练习是把图片存储于数据库,也就是以图片的数据流存储,在上传时我们需要把文件处理为数据库,显示时,我们需要把数据流处理为文件。 一看上面的演示,我们还会看到一个预览区。选择图片时,预览区会预先显示...
  • Python徒手实现识别手写数字—简易图片数据库。为了方便数据的读取与存储。我决定建立一个简单的小数据库用来存放。

    Python徒手实现识别手写数字—简易图片数据库

    写在前面

    上一篇文章Python徒手实现识别手写数字—图像的处理中我们讲了图片的处理,将图片经过剪裁,拉伸等操作以后将每一个图片变成了1x10000大小的向量。但是如果只是这样的话,我们每一次运行的时候都需要将他们计算一遍,当图片特别多的时候会消耗大量的时间。

    所以我们需要将这些向量存入一个文件当中,每次先看看图库中有没有新增的图片,如果有新增的图片,那么就将新增的图片变成1x10000向量再存入文件之中,然后从文件中读取全部图片向量即可。当图库中没有新增图片的时候,那么就直接调用文件中的图片向量进行计算就好。这样子算是节省了大量的时间。

    所以本文就是从零开始建立一个这样的图片存储管理系统。

    实现逻辑

    第一次读入图片

    我们的图库中拥有一大堆图片,每一张图片上面都是一个手写的数字,图片的名称为[数字内容]_[序号]。比如说一个图片的名称为2_3,代表这一张图片里面的数字是2,并且是“数字是2的第3张图片”。

    存在一个csv文件作为我们的建议的图片数据库,名称为Data.csv。

    首先我们读取图库中所有图片的名称,保存在fileNames中。然后读取Data.csv中所有数据。

    提取出Data.csv的最后一列(一共10002列,第10001列说明该数字是什么数字,第10002列是图片的名称),也就是数据库中存储的所有图片的名称,存储在item中。

    将新加入图库的图片名称保存在newFileNames中。如果Data.csv为空,那么就直接令newFileNames = fileNames。也就是说如果数据库中什么也没有,那么图库中所有图片都是新加入的。

    如果Data.csv不为空,那么就将item里面的内容与fileNames的内容比较,如果出现了fileNames里面有的名称item中没有,那么就将这些名称放进newFileNames中。如果item里有的名称fileNames中没有,那就不管。

    也就是说,我令我们的数据库只进不出。

    现在我们得到了新加入图库的图片的名称newFileNames。

    将newFileNames中的名称的图片带入上一文中函数GetTrainPicture进行处理,得到了一个nx10001的矩阵,每一行代表一个新加入的图片,前10000列是图片向量,第10001列是该图片的数字,保存在pic中。

    将这些图片压入到数据库的后面。

    读取之前数据库原有的图片向量,并与pic合并,得到目前拥有的所有的训练图片向量pic。

    Created with Raphaël 2.1.0 图库图片名称fileNames 数据库为空? 全部导入newFileNames 带入GetTrainPicture函数 得到矩阵pic 与数据库中原有数据合并 压入数据库 数据库图片名称item 比较得到newFileNames yes no

    以上就是本章写的所有内容,下面放出代码来详细解释一下。

    代码解析

    主文件

    import os
    import numpy as np
    import OperatePicture as OP
    import OperateDataBase as OD
    import csv
    
    ##Essential vavriable 基础变量
    #Standard size 标准大小
    N = 100
    #Gray threshold 灰度阈值
    color = 100/255
    
    #读取原CSV文件
    reader = list(csv.reader(open('DataBase.csv', encoding = 'utf-8')))
    #清除读取后的第一个空行
    del reader[0]
    #读取num目录下的所有文件名
    fileNames = os.listdir(r"./num/")
    #对比fileNames与reader,得到新增的图片newFileNames
    newFileNames = OD.NewFiles(fileNames, reader)
    print('New pictures are: 'newFileNames)
    #得到newFilesNames对应的矩阵
    pic = OP.GetTrainPicture(newFileNames)
    #将新增图片矩阵存入CSV中
    OD.SaveToCSV(pic, newFileNames)
    #将原数据库矩阵与新数据库矩阵合并
    pic = OD.Combination(reader, pic)

    我将两节内容分别封装在两个py文件里面,上一篇文章中的图片的切割与处理等所有内容我放在文件OperatePicture里面了,这一节的数据库处理放在了文件OperateDatabase里面。

    因为整个代码的逻辑我在上面已经捋过一遍了,所以我不再解释其中的内容,接下来针对每个函数开始讲解。

    OperateDatabase代码

    从上面的主文件中,我们首先用到了函数NewFiles,主要是对比fileNames和reader这两个文件中图片的名称有什么不同,返回值是新增的图片的名称的列表。下面是代码

    def NewFiles(fileNames, reader):
        '''判断是否有不同于数据库中的新文件加入'''
        #如果数据库中没有数据,则返回filenames
        if len(reader) == 0:
            return fileNames
        else:
            #从数据库中提取所有名称
            files = [item[10001] for item in reader]
            #需要加入的图片名称
            newFileNames = []
            for item in fileNames:
                #判断当前名称是否存在数据库中
                #如果不存在,则加入newFileNames
                if item not in files:
                    newFileNames.append(item)
            return newFileNames

    首先判断reader是否有内容,如果没有内容,说明是第一次执行,那么会直接把fileNames返回。否则才会进入下面进行比较。

    返回了newFileNames之后,就会把这个列表中的所有名称的图片通过GetTrainPicture函数得到一个1x10001大小的矩阵,具体过程请看我上一篇文章讲的内容。

    之后为了把新的数据存入CSV文件中,我们利用函数SaveToCSV将pic存入文件中,具体代码如下。

    def SaveToCSV(pic, fileNames):
        '''将pic与对应的dileNames存入CSV文件'''
        writer = csv.writer(open('Database.csv', 'a', newline = ''), dialect = 'excel')
        #将fileNames变为列表
        f = [item for item in fileNames]
        #每一行依次写入文件中
        for i in range(len(pic)):
            #将改行图片向量转为list
            item = pic[i].tolist()
            #将这个图片向量对应的名称f放入列表最后一个
            item.append(f[i])
            writer.writerow(item)

    当函数运行过后,会把pic矩阵对应的内容直接给续写入CSV文件中,相当于数据库操纵的写入,并不会覆盖之前原有的数据。

    之后我们需要将数据库原有的一大堆数据reader和新加进来的数据pic合并到pic里面,所以利用Combination函数将两个矩阵合并,代码如下

    def Combination(reader, pic):
        '''将两个矩阵reader与pic合并'''
        #两个矩阵的总行数
        l = len(reader) + len(pic)
        #初始化新的矩阵
        newPic = np.zeros(l*10001).reshape(l, 10001)
        #将reader最后的那个字符串名称去掉
        for item in reader:
            item.pop()
        #将reader转化为numpy的矩阵形式
        reader = np.array(reader)
        #新矩阵前半部分放reader,后半部分放pic
        if len(reader) != 0:
            newPic[0:len(reader), :] = reader
        newPic[len(reader):len(pic), :] = pic
        return newPic

    因为reader最后一行还包括了一个图片的名称,所以先利用pop将其去掉,之后转化为矩阵形式,然后再直接放入矩阵中。这个矩阵操作可能没有见过,下面我详细解释一下。

    假如我现在有一个2x3的矩阵和一个2x2的矩阵

    m = [[1 2 3]
         [4 5 6]]
    n = [[7 8]
         [9 1]]

    我可以进行如下操作

    #操作一
    m[:, 0:2] = n
    print(m)
    #操作二
    m[:, 1:3] = n
    print(m)
    
    #以下为输出结果
    #操作一
    [[7 8 3]
     [9 1 6]]
    #操作二
    [[7 7 8]
     [9 9 1]]

    可以看出操作一直接把m的第一二列给替换成n,操作二把m的第二三列替换成了n。具体过程可以百度查一下numpy的矩阵的操作,也可以自己总结规律,不细讲了。

    以上就是这一篇的全部代码。

    小结

    这一篇我相当于用CSV文件制作了一个非常简陋的数据库,能够执行的操作只有识别已有内容NewFiles与添加内容SaveToCSV,并没有插入、删改等操作。主要是我觉得这两个函数目前已经够用,因此只写了这两个操作,所以再需求已经被满足的情况下就不再拓展了。

    所有的源代码已经上传到了我的GitHub上,可以前去下载,谢谢阅读。

    如果喜欢的话麻烦点一个喜欢哦,加关注可以得到超厉害的更新提醒。

    展开全文
  • 任务2 制作图片横向移动效果;任务描述;任务分析;图片轮播原理;图片轮播原理;自定义动画animate;动画控制;动画控制;动画控制;思考;停止动画;解决光标效果与用户操作不一致问题;判断元素是否处于动画
  • ASP上传图片到指定文件夹,并保存图片信息到数据库,实现图片上传功能。
  • 开发集图像、声音、文字等多媒体信息于一体的数据库管理系统,仍是近阶段数据库的一个发展方向。如何使系统既具有数据库管理系统的优异性能,又具备多媒体系统的丰富多彩,是目前大家在探讨的一个问题。下面将作者...
  • 植物词典全栈植物词典应用程序可存储植物的信息,包括水/光照需求,属/种信息和图片。 使用flask和Amazon RDS MySQL创建的数据库后端。
  • 本工具是因很多网站客户的要求而制作,主要是方便将存放于Access数据库中的二进制图片转换成JPG格式,并批量导出到硬盘中。 广告:本人提供商业版和工业版的进销存贴牌加工(OEM)服务
  • 使用 Javascript 和 Open Trivia Database API 制作的响应式问答游戏。 使用的 API 用于各种类别的琐事问题和答案。 图片 静态图片 动图
  • EXCEL VBA连接数据库

    2017-03-24 19:31:43
    本人为公司制作的连接数据库的实际案列,EXCEL VBA连接数据库。绝对的拿去就可用,如果不可以,可以找我退货,.还有其他的VB.NET连接数据库,或者管理软件的制作,打印二维码等。
  • 优秀课件 WEB数据库设计与开发 第3章 使用PowerDesigner进行数据库建模
  • Excel制作数据库的介绍及图片演示,方便大家用于自己创作
  • ASP是目前学习网页动态程序最基本的程序语言之一。通过对本教程的学习实践,你能更快的掌握ASP在动态网页设计中的一些问题,同时为制作网站等提供最大的方便!
  • 电影网站数据库课程设计.doc
  • 本期教程制作的是web端的幻灯片,制作中使用了中继器做为图片和文本的内容存储源,制作繁琐了一点,但是可以当做初步了解中继器的一种方式。老规矩,先看GIF效果图制作方式我们先看下幻灯片需要用到的元素:幻灯片...

    本期教程制作的是web端的幻灯片,制作中使用了中继器做为图片和文本的内容存储源,制作繁琐了一点,但是可以当做初步了解中继器的一种方式。

    b8dde11de28a22d0c91d245ad651f9a4.png

    老规矩,先看GIF效果图

    bfa5cdf3596f38e97bb5a03305f91728.gif

    制作方式

    我们先看下幻灯片需要用到的元素:

    46d704981bfb8a69cfc643a2947b5fd1.png

    幻灯片需要用到的基础元素是5个。

    分别为:

    背景大图

    左按钮

    右按钮

    大图上的文本

    图片切换按钮

    首先

    我们在Axure中拖入一个动态面板,我们命名为:“幻灯片”。

    然后为这个面板设置3种状态,分别命名为:“图片1”,“图片2”,“图片3”。

    eb748e12a5dc2dbeadd27bcdb81b0f08.png

    每个状态里面都要放一张图片元件和一个文本元件。

    命名方式为元素加序号,比如这样:image1,title1。

    20f6d654d7cc84d753104606ad762ed7.png

    做两个按钮,分别为左右按钮,放到动态面板的左右两边,设置为隐藏。

    42e12ebfa91d4f8b5b0d4bf1fff889b7.png

    再做三个小按钮,放到动态面板的右下脚,设置点亮后的颜色,和默认的颜色。

    ec6bf99ae82809243262417c61cfd5f8.png

    其次

    需要用到我们的中继器,元素库里拖一个中继器到页面中,删除里面到内容。

    创建两个字段,设置三条数据:

    a5ba95314aa8c3f765f51962227aba63.png

    为中继器设置交互,一个是载入的时候进行排序,一个是为动态面板里的图片和标题进行赋值。

    eb464430663a6a3199b3961db5463ad3.png

    最后

    我们给动态面板和按钮分别设置交互动作,这个幻灯片就算完成了。

    0b1f4e88e61fb76cbd9ceaee8fc7de0d.png

    缺点/Bug

    1.这样制作幻灯片,底部的三个按钮,在显示顺序上要比图片速度慢,不够流畅。

    2.左右按钮默认是隐藏的,在鼠标放到幻灯片之后,才会显示。这种交互在来回进入图片的时候,会导致按钮的显示交互紊乱。

    3.制作幻灯片的步骤并没有减少,制作速度并没有提高。

    本文到此结束,欢迎朋友们拍砖,多多指出其中的不足。

    本文Axure版本:Axure RP 8

    扩展阅读

    其他原型链接

    本文由 @jiantian 原创发布于人人都是产品经理。未经许可,禁止转载。

    题图来自Unsplash,基于CC0协议。

    给作者打赏,鼓励TA抓紧创作!赞赏

    6人打赏

    00e20d7ecb67d77f8fa7b3b8980a360a.png

    494e27181268898b67d950352474fb80.png

    2400aefd7fcc33a35f9eed1d5bdefad4.png

    f0436a2f7c017e61a1e8bc80c7fbcb69.png

    51e3bb4ba1c3e2e5612a521e675016ba.png

    5dc9fc3ac92b3df93e1065847467ef06.png

    展开全文
  • lightbox和jquery库图片弹出层冲突解决 div+css制作的二级弹出标题--竖版 ASP.NET数据库图片存储及读取
  • ASP是目前学习网页动态程序最基本的程序语言之一。通过对本教程的学习实践,你能更快的掌握ASP在动态网页设计中的一些问题,同时为制作网站等提供最大的方便!
  • 在线制图工具 我们可能会接触到很多的绘图工具,有客户端版本APP,...满足自己的要求,发挥灵感 预览你的作品 随时查看您的作品的整体面貌 分享您的作品 利用多种方式安全地共享图表, 发送可共享链接,可嵌入HTML, 图片

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,961
精华内容 23,984
关键字:

如何制作自己的图片数据库

友情链接: CS_Primary_Attack.rar