免费图片素材网站有哪些

免费图片素材网站有哪些,第1张

一个不太一样的素材网站源库素材网,简单介绍一下。

其他素材资源网站大多只是依赖于搜索找到你想要的素材,这个网站在搜索基础上添加了父源、子源、同源的概念。

假设你找到一个有着近30张素材的平面设计包或者100个图标包或者有着近1000个动态元素的AE模板工具包,但是你只需要其中几个,那么在这个网站你就可以通过子源能快速进行单独下载你想要的那么几个: 

假设你好不容易搜索到一个你想要的场景或者是元素,但是这一个素材并不能完全满足当下的工作,还需要能与之相配的、相同美术风格的元素或者场景,那么同源可以让你快速找到相同美术风格的其他素材;父源能让你快速下载整个相同美术风格的集合包(PS:在工作或者创作中,美术风格统一的重要性相信你很清楚,但是目前大部分素材网站并没有去解决这个问题,这个网站就这个问题提供了很大的便利性): 

还有不一样的是网站在尝试打造单一美术风格制作的系统方案,其中包括制作此类风格的教程、配套使用的辅助工具文件和额外可以立刻使用的素材,使用这套方案完全可以从零基础制作上乘的完整作品。这里给一个制作MG游戏风格专题链接,可以看看:

当然和其他素材网站相同的是海量的优质素材和丰富的资源分类,源库素材网里有MG扁平卡通素材、抖音Vlog素材、AE模板素材、AE脚本插件资源、花字弹幕模板素材、AI矢量素材、表情包素材、音乐音效素材、平面设计模板素材等等。。。

目前正在做活动,差不多累计下来能免费获得30天的VIP会员,这里就不多说了,感兴趣的可以去看看源库素材网

  找出之前一起拍过的很多照片和短视频,还找一些朋友录了“嫁给他吧”这样的视频,录一段独白,然后就是制作了。

求婚视频制作之:选一段音乐

  不要选歌曲,不要选歌曲,不要选歌曲!重要的事情说三遍,因为歌曲的歌词会分散注意力。之后按照时间,把各种素材不管是视频还是不管三七二十一的铺上去。 

求婚视频制作:剪辑处理

  挑选,该删除的删除;视频处理,该剪切的剪切。出来的时候不要用一样的时间,不然会让人感觉自己看的不是一个求婚视频,而是一个PPT。

求婚视频制作:精剪调整

  理解音乐,选定音乐高潮的节点(催人泪下的那个音乐点上);调节前后素材的时间长短,把感情发展具有经典意义的和视频,调整到那个点上去:煽情啊!如果还想锦上添花,找专业点的朋友帮忙:加点字幕,加点转场特效。

求婚视频制作:单独录一段求婚誓言

  对着镜头,手捧礼物,没有钻石,鲜花亦可:别怕自己傻逼样,男人一生总得做几件傻但是值得骄傲的事。至于说什么话:诚恳,诚恳,诚恳。千万背熟台词,千万别看提示版:诚意,从内心发出的声音,难道需要看提示板

  最后一个忠告:态度比质量重要,内容比酷炫重要,诚意比文案重要。祝:求婚成功!

1、先来找到一个矢量素材下载网站,在百度中搜索flash素材,在搜索结果中进入一个素材下载网站。

2、一般的素材网站都会有搜索栏,在搜索栏中输入飞鸟,来搜索我们需要的素材类型。

3、搜索结果中会列出和飞鸟相关的矢量素材图,找到合适自己动画风格的点击进入对应素材的详细页面。

4、在详细页面中确认该素材可用,再点击进入下载地址。

5、在大型网站的下载链接地址中都会根据移动、联通等线路进行区分,可以按照自己家宽带的类型选择下载。

6、下载到本地后可以看到矢量图分为ai格式和tif格式,其中ai格式是可以导入到Flash软件中使用的。

7、在Flash软件中,打开一个空白的flash场景。

8、点击菜单文件-导入-导入到库。

9、选择刚才下载的ai格式的文件,确认导入。

10、在导入预览框中,可以看到该素材一共包括9种动物。

11、因为这里需要的是飞鸟的素材,所以取消其它动物的勾选,只保留飞鸟素材,点击确定。

12、导入成功后,可以在库的界面中看到刚才导入的飞鸟素材。

13、拖动该库文件到场景中,在后面的动画创作中就可以使用这个飞鸟素材了。

  九商VR云是一款轻设计在线VR全景制作设计软件平台,该平台除了可以制作VR全景图以外,还提供了VR全景图的上传、存储、展示、分享等等功能。

  九商VR云平台具备了热点、音乐、特效、导航等个性化的功能,支持高清大图上传,速度快,单张可达300M,VR全景图作品界面无水印、无广告、无压缩,每周定期升级更新。

模板|86套党政风PPT|77套其他精选PPT    免费下载

7tcg

幻灯片模板即已定义的幻灯片格式。PowerPoint和Word、Excel等应用软件一样,都是Microsoft公司推出的Office系列产品之一,主要用于设计制作广告宣传、产品演示的电子版幻灯片,制作的演示文稿可以通过计算机屏幕或者投影机播放;利用PowerPoint,不但可以创建演示文稿,还可以在互联网上召开面对面会议、远程会议或在Web上给观众展示演示文稿。随着办公自动化的普及,PowerPoint的应用越来越广    

1 商用+私用网站。如视觉中国,特点:优质正版素材库,代理国外图库,按张收费。

现阶段我个人使用频次ZUI高的素材、视频素材版权交易网站了。主要是因为视觉中国代理了全球执行的版权供应商Getty Images并且拥有全球第三大公司Corbis图库版权以及近3亿的素材和500万视频素材。这一平台就能满足你的所有需e79fa5e98193e58685e5aeb931333431333937求了,而且不用担心版权等后期问题,是设计师和创意公司口碑共识的了。

2 主私用网站。特点:正版和分享的图混杂,量较大

要是商用的话,还是需要谨慎注意的。好处是网站的素材量较多,但里面掺杂了大量的分享,可能存在版权纠纷等问题,但可以满足一般文案的需求。我个人在使用的过程中会出现会员限制下载权限的问题,便捷性稍差。

3 纯免费、无版权网站。特点:素材量不大。

这一类网站的有版权图库钓鱼执法的风险,商用要谨慎。量虽然比较小,但也有不错的素材,若在使用时不涉及版权问题,可以参照使用,这一类平台使用人数相对少一些·。

1   摘要

验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义。

然后经过了一年的时间,笔者又研究和get到了一种更强大的基于CNN卷积神经网络的直接端到端的验证识别技术(文章不是我的,然后我把源码整理了下,介绍和源码在这里面):

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

2   关键词

关键词:安全,字符,验证码识别,OCR,Python,SVM,PIL

3   免责声明

本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共资源。

本文只做了该网站对外公开的公共资源进行了爬取, 并未越权 做任何多余操作。

本文在书写相关报告的时候已经 隐去 漏洞网站的身份信息。

本文作者 已经通知 网站相关人员此系统漏洞,并积极向新系统转移。

本报告的主要目的也仅是用于 OCR交流学习 和引起大家对 验证安全的警觉 。

4   引言

关于验证码的非技术部分的介绍,可以参考以前写的一篇科普类的文章:

互联网安全防火墙(1)--网络验证码的科普

里面对验证码的种类,使用场景,作用,主要的识别技术等等进行了讲解,然而并没有涉及到任何技术内容。本章内容则作为它的 技术补充 来给出相应的识别的解决方案,让读者对验证码的功能及安全性问题有更深刻的认识。

5   基本工具

要达到本文的目的,只需要简单的编程知识即可,因为现在的机器学习领域的蓬勃发展,已经有很多封装好的开源解决方案来进行机器学习。普通程序员已经不需要了解复杂的数学原理,即可以实现对这些工具的应用了。

主要开发环境:

python35

python SDK版本

PIL

处理库

libsvm

开源的svm机器学习库

关于环境的安装,不是本文的重点,故略去。

6   基本流程

一般情况下,对于字符型验证码的识别流程如下:

准备原始素材

预处理

字符切割

尺寸归一化

字符标记

字符特征提取

生成特征和标记对应的训练数据集

训练特征标记数据生成识别模型

使用识别模型预测新的未知集

达到根据“”就能返回识别正确的字符集的目标

7   素材准备

71   素材选择

由于本文是以初级的学习研究目的为主,要求 “有代表性,但又不会太难” ,所以就直接在网上找个比较有代表性的简单的字符型验证码(感觉像在找漏洞一样)。

最后在一个比较旧的网站(估计是几十年前的网站框架)找到了这个验证码。

原始图:

放大清晰图:

此能满足要求,仔细观察其具有如下特点。

有利识别的特点 :

由纯阿拉伯数字组成

字数为4位

字符排列有规律

字体是用的统一字体

以上就是本文所说的此验证码简单的重要原因,后续代码实现中会用到

不利识别的特点 :

背景有干扰噪点

这虽然是不利特点,但是这个干扰门槛太低,只需要简单的方法就可以除去

72   素材获取

由于在做训练的时候,需要大量的素材,所以不可能用手工的方式一张张在浏览器中保存,故建议写个自动化下载的程序。

主要步骤如下:

通过浏览器的抓包功能获取随机验证码生成接口

批量请求接口以获取

将保存到本地磁盘目录中

这些都是一些IT基本技能,本文就不再详细展开了。

关于网络请求和文件保存的代码,如下:

def downloads_pic(kwargs):

   pic_name = kwargsget('pic_name', None)

   url = 'httand_code_captcha/'

   res = requestsget(url, stream=True)

   with open(pic_path + pic_name+'bmp', 'wb') as f:        for chunk in resiter_content(chunk_size=1024):            if chunk:  # filter out keep-alive new chunks                fwrite(chunk)

               fflush()

       fclose()

循环执行N次,即可保存N张验证素材了。

下面是收集的几十张素材库保存到本地文件的效果图:

8   预处理

虽然目前的机器学习算法已经相当先进了,但是为了减少后面训练时的复杂度,同时增加识别率,很有必要对进行预处理,使其对机器识别更友好。

针对以上原始素材的处理步骤如下:

读取原始素材

将彩色二值化为黑白

去除背景噪点

81   二值化

主要步骤如下:

将RGB彩图转为灰度图

将灰度图按照设定阈值转化为二值图

image = Imageopen(img_path)

imgry = imageconvert('L')  # 转化为灰度图table = get_bin_table()

out = imgrypoint(table, '1')

上面引用到的二值函数的定义如下:

1234567891011121314   def get_bin_table(threshold=140):    """    获取灰度转二值的映射table    :param threshold:    :return:    """    table = []    for i in range(256):        if i < threshold:            tableappend(0)        else:            tableappend(1)     return table   

由PIL转化后变成二值:0表示黑色,1表示白色。二值化后带噪点的 6937 的像素点输出后如下图:

1111000111111000111111100001111100000011

1110111011110111011111011110111100110111

1001110011110111101011011010101101110111

1101111111110110101111110101111111101111

1101000111110111001111110011111111101111

1100111011111000001111111001011111011111

1101110001111111101011010110111111011111

1101111011111111101111011110111111011111

1101111011110111001111011110111111011100

1110000111111000011101100001110111011111

如果你是近视眼,然后离屏幕远一点,可以隐约看到 6937 的骨架了。

82   去除噪点

在转化为二值后,就需要清除噪点。本文选择的素材比较简单,大部分噪点也是最简单的那种 孤立点,所以可以通过检测这些孤立点就能移除大量的噪点。

关于如何去除更复杂的噪点甚至干扰线和色块,有比较成熟的算法: 洪水填充法 Flood Fill ,后面有兴趣的时间可以继续研究一下。

本文为了问题简单化,干脆就用一种简单的自己想的 简单办法 来解决掉这个问题:

对某个 黑点 周边的九宫格里面的黑色点计数

如果黑色点少于2个则证明此点为孤立点,然后得到所有的孤立点

对所有孤立点一次批量移除。

下面将详细介绍关于具体的算法原理。

将所有的像素点如下图分成三大类

顶点A

非顶点的边界点B

内部点C

种类点示意图如下:

其中:

A类点计算周边相邻的3个点(如上图红框所示)

B类点计算周边相邻的5个点(如上图红框所示)

C类点计算周边相邻的8个点(如上图红框所示)

当然,由于基准点在计算区域的方向不同,A类点和B类点还会有细分:

A类点继续细分为:左上,左下,右上,右下

B类点继续细分为:上,下,左,右

C类点不用细分

然后这些细分点将成为后续坐标获取的准则。

主要算法的python实现如下:

def sum_9_region(img, x, y):    """

   9邻域框,以当前点为中心的田字框,黑点个数

   :param x:

   :param y:

   :return:    """

   # todo 判断的长宽度下限

   cur_pixel = imggetpixel((x, y))  # 当前像素点的值

   width = imgwidth

   height = imgheight    if cur_pixel == 1:  # 如果当前点为白色区域,则不统计邻域值

       return 0    if y == 0:  # 第一行

       if x == 0:  # 左上顶点,4邻域

           # 中心点旁边3个点

           sum = cur_pixel \                  + imggetpixel((x, y + 1)) \                  + imggetpixel((x + 1, y)) \                  + imggetpixel((x + 1, y + 1))            return 4 - sum        elif x == width - 1:  # 右上顶点

           sum = cur_pixel \                  + imggetpixel((x, y + 1)) \                  + imggetpixel((x - 1, y)) \                  + imggetpixel((x - 1, y + 1))            return 4 - sum        else:  # 最上非顶点,6邻域

           sum = imggetpixel((x - 1, y)) \                  + imggetpixel((x - 1, y + 1)) \                  + cur_pixel \                  + imggetpixel((x, y + 1)) \                  + imggetpixel((x + 1, y)) \                  + imggetpixel((x + 1, y + 1))            return 6 - sum    elif y == height - 1:  # 最下面一行

       if x == 0:  # 左下顶点

           # 中心点旁边3个点

           sum = cur_pixel \                  + imggetpixel((x + 1, y)) \                  + imggetpixel((x + 1, y - 1)) \                  + imggetpixel((x, y - 1))            return 4 - sum        elif x == width - 1:  # 右下顶点

           sum = cur_pixel \                  + imggetpixel((x, y - 1)) \                  + imggetpixel((x - 1, y)) \                  + imggetpixel((x - 1, y - 1))            return 4 - sum        else:  # 最下非顶点,6邻域

           sum = cur_pixel \                  + imggetpixel((x - 1, y)) \                  + imggetpixel((x + 1, y)) \                  + imggetpixel((x, y - 1)) \                  + imggetpixel((x - 1, y - 1)) \                  + imggetpixel((x + 1, y - 1))            return 6 - sum    else:  # y不在边界

       if x == 0:  # 左边非顶点

           sum = imggetpixel((x, y - 1)) \                  + cur_pixel \                  + imggetpixel((x, y + 1)) \                  + imggetpixel((x + 1, y - 1)) \                  + imggetpixel((x + 1, y)) \                  + imggetpixel((x + 1, y + 1))            return 6 - sum        elif x == width - 1:  # 右边非顶点

           # print('%s,%s' % (x, y))

           sum = imggetpixel((x, y - 1)) \                  + cur_pixel \                  + imggetpixel((x, y + 1)) \                  + imggetpixel((x - 1, y - 1)) \                  + imggetpixel((x - 1, y)) \                  + imggetpixel((x - 1, y + 1))            return 6 - sum        else:  # 具备9领域条件的

           sum = imggetpixel((x - 1, y - 1)) \                  + imggetpixel((x - 1, y)) \                  + imggetpixel((x - 1, y + 1)) \                  + imggetpixel((x, y - 1)) \                  + cur_pixel \                  + imggetpixel((x, y + 1)) \                  + imggetpixel((x + 1, y - 1)) \                  + imggetpixel((x + 1, y)) \                  + imggetpixel((x + 1, y + 1))            return 9 - sum

Tips:这个地方是相当考验人的细心和耐心程度了,这个地方的工作量还是蛮大的,花了半个晚上的时间才完成的。

计算好每个像素点的周边像素黑点(注意:PIL转化的黑点的值为0)个数后,只需要筛选出个数为 1或者2 的点的坐标即为 孤立点 。这个判断方法可能不太准确,但是基本上能够满足本文的需求了。

经过预处理后的如下所示:

对比文章开头的原始,那些 孤立点 都被移除掉,相对比较 干净 的验证码已经生成。

9   字符切割

由于字符型 验证码 本质就可以看着是由一系列的 单个字符 拼接而成,为了简化研究对象,我们也可以将这些分解到 原子级 ,即: 只包含单个字符的。

于是,我们的研究对象由 “N种字串的组合对象” 变成 “10种阿拉伯数字” 的处理,极大的简化和减少了处理对象。

91   分割算法

现实生活中的字符验证码的产生千奇百怪,有各种扭曲和变形。关于字符分割的算法,也没有很通用的方式。这个算法也是需要开发人员仔细研究所要识别的字符的特点来制定的。

当然,本文所选的研究对象尽量简化了这个步骤的难度,下文将慢慢进行介绍。

使用图像编辑软件(PhoneShop或者其它)打开验证码,放大到像素级别,观察其它一些参数特点:

可以得到如下参数:

整个尺寸是 4010

单个字符尺寸是 610

左右字符和左右边缘相距2个像素

字符上下紧挨边缘(即相距0个像素)

这样就可以很容易就定位到每个字符在整个中占据的像素区域,然后就可以进行分割了,具体代码如下:

def get_crop_imgs(img):    """

   按照的特点,进行切割,这个要根据具体的验证码来进行工作 # 见原理图

   :param img:

   :return:    """

   child_img_list = []    for i in range(4):

       x = 2 + i (6 + 4)  # 见原理图

       y = 0

       child_img = imgcrop((x, y, x + 6, y + 10))

       child_img_listappend(child_img)    return child_img_list

然后就能得到被切割的 原子级 的元素了:

92   内容小结

基于本部分的内容的讨论,相信大家已经了解到了,如果验证码的干扰(扭曲,噪点,干扰色块,干扰线……)做得不够强的话,可以得到如下两个结论:

4位字符和40000位字符的验证码区别不大

纯字母

不区分大小写。分类数为26

区分大小写。分类数为52

纯数字。分类数为10

数字和区分大小写的字母组合。分类数为62

纯数字 和 数字及字母组合 的验证码区别不大

在没有形成 指数级或者几何级 的难度增加,而只是 线性有限级 增加计算量时,意义不太大。

10   尺寸归一

本文所选择的研究对象本身尺寸就是统一状态:610的规格,所以此部分不需要额外处理。但是一些进行了扭曲和缩放的验证码,则此部分也会是一个图像处理的难点。

11   模型训练步骤

在前面的环节,已经完成了对单个的处理和分割了。后面就开始进行 识别模型 的训练了。

整个训练过程如下:

大量完成预处理并切割到原子级的素材准备

对素材进行人为分类,即:打标签

定义单张的识别特征

使用SVM训练模型对打了标签的特征文件进行训练,得到模型文件

12   素材准备

本文在训练阶段重新下载了同一模式的4数字的验证总计:3000张。然后对这3000张进行处理和切割,得到12000张原子级。

在这12000张中删除一些会影响训练和识别的强干扰的干扰素材,切割后的效果图如下:

13   素材标记

由于本文使用的这种识别方法中,机器在最开始是不具备任何 数字的观念的。所以需要人为的对素材进行标识,告诉 机器什么样的的内容是 1……。

这个过程叫做 “标记”。

具体打标签的方法是:

为0~9每个数字建立一个目录,目录名称为相应数字(相当于标签)

人为判定 内容,并将拖到指定数字目录中

每个目录中存放100张左右的素材

一般情况下,标记的素材越多,那么训练出的模型的分辨能力和预测能力越强。例如本文中,标记素材为十多张的时候,对新的测试识别率基本为零,但是到达100张时,则可以达到近乎100%的识别率

14   特征选择

对于切割后的单个字符,像素级放大图如下:

从宏观上看,不同的数字的本质就是将黑色按照一定规则填充在相应的像素点上,所以这些特征都是最后围绕像素点进行。

字符 宽6个像素,高10个像素 ,理论上可以最简单粗暴地可以定义出60个特征:60个像素点上面的像素值。但是显然这样高维度必然会造成过大的计算量,可以适当的降维。

通过查阅相应的文献 [2],给出另外一种简单粗暴的特征定义:

每行上黑色像素的个数,可以得到10个特征

每列上黑色像素的个数,可以得到6个特征

最后得到16维的一组特征,实现代码如下:

def get_feature(img):    """

   获取指定的特征值,

   1 按照每排的像素点,高度为10,则有10个维度,然后为6列,总共16个维度

   :param img_path:

   :return:一个维度为10(高度)的列表    """

   width, height = imgsize

   pixel_cnt_list = []

   height = 10    for y in range(height):

       pix_cnt_x = 0        for x in range(width):            if imggetpixel((x, y)) == 0:  # 黑色点

               pix_cnt_x += 1

       pixel_cnt_listappend(pix_cnt_x)    for x in range(width):

       pix_cnt_y = 0        for y in range(height):            if imggetpixel((x, y)) == 0:  # 黑色点

               pix_cnt_y += 1

       pixel_cnt_listappend(pix_cnt_y)    return pixel_cnt_list

然后就将素材特征化,按照 libSVM 指定的格式生成一组带特征值和标记值的向量文

是这种效果吗?

教程[简略版

打开

插入素材

反色

正片叠底

反色

保存

教程帖带素材http://tiebabaiducom/p/2516176849

如果不是这种效果,楼主可以放个效果图吗

如果(^__^) 

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/jiehun/2718012.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-31
下一篇2023-07-31

发表评论

登录后才能评论

评论列表(0条)

    保存