- 博客(130)
- 资源 (17)
- 收藏
- 关注
原创 selenium绕过网站检测的方法
在这里可使用一个selenium提供的插件undetected_chromedriver,使用这个可以通过检测。使用这个,对于一些有网站有瑞数加密的都可以通过,非常强大。发现webdriver被检测到了。
2024-04-12 13:38:11 1174
原创 使用playwright防止被网站检测的方法
现在很多网站为了保护信息不被爬取,添加了一些防护手段,比如直接打开谷歌浏览器,在控制台输入window.navigator.webdriver,可以看到该属性为false当用selenium或者playWright打开浏览器,该属性为true因此网站很容易在前端根据这些属性判断是否使用了playwright,从而阻止用户采用自动化工具获取信息,那么如何屏蔽掉这些属性,让网站无法识别是否使用了playwright了。
2024-04-11 17:26:17 4520 2
原创 tensorflow/serving部署keras的h5模型服务
当我们使用keras训练好模型之后,下一步就是部署服务了,采用flask直接加载keras的h5模型,服务的并发性能会很低。如果为了追求高并发性能,就可以采用Nginx+gunicorn+gevent的方式来启动服务,这种方式服务虽然可以达到极高的并发性能,但却存在一个问题,也就是gunicorn的方式是启动了多个进程,每个进程都会加载一次模型,造成服务启动后所占用的内存很大,另外直接加载h5模型,整个进程随着使用过程中占用内存也会也逐步增大,这就是python存在了内存泄漏的问题。......
2022-08-03 15:48:56 1869 16
原创 Docker数据卷volume的使用详解
Docker将运用与运行的环境打包形成容器运行,Docker容器产生的数据,如果不通过dockercommit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在Docker中我们使用卷。卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但卷不属于联合文件系统(UnionFileSystem),因此能够绕过联合文件系统提供一些用于持续存储或共享数据的特性。...
2022-07-28 14:39:59 894
原创 docker发布自己的镜像到docker hub上
当我们从拉取一个公有镜像,并且配置好开发环境,需要把这个镜像分享出去,供自己或者其他人拉取使用,这个时候就需要把自己的镜像推送到docker hub上了。
2022-07-27 15:38:24 858
原创 boost::asio创建的HTTP服务支持跨域CORS
浏览器中js的请求访问非同一个域名下的服务,就会产生跨域问题,浏览器会自动发送一个OPTIONS请求进行验证,服务端会做出响应,当浏览器判断服务的响应头中包含允许跨域的字段后,才会允许HTML中js进行请求。跨域的错误提示如下:Access to XMLHttpRequest at 'http://127.0.0.1:8092/' from origin 'http://192.168.10.135:38312' has been blocked by CORS policy: Response to
2022-05-27 17:18:14 608
原创 flask创建的http服务支持跨域CORS的处理
对于web前端页面,如果访问的地址与域名不一致时,就会出现跨域问题,这种情况,每次js的请求发起时,浏览器会自动发送一个OPTIONS请求进行验证。可以看到,每个请求都会发送两个,其中一个是浏览器发送的。如果服务不支持跨域,就会提示如下CORS policy的错误:Access to XMLHttpRequest at 'http://127.0.0.1:8092/' from origin 'http://192.168.10.135:38312' has been blocked by CORS
2022-05-27 16:55:11 1380
原创 国税局发票查验中英文验证码识别最新版,识别率99.9%
采用深度学习进行发票查验验证码模型的训练,在我电脑上模型训练的环境如下:显卡:RTX 2080TItensorflow-gpu:2.5.31 训练集和测试集的准备发票查验的验证码分为4种类型,分别为黑色、红色、黄色、蓝色,经过我的测试,采用4个模型的效果最好,每个模型对应识别一种类型的验证码。首先我们4种类型的验证码都准备10万张。00黑色类型的验证码:01红色类型的验证码:02黄色类型的验证码:03蓝色类型的验证码:验证码图像图像准备好后,对其进行标记,也就是对验证码重命名:
2022-05-13 13:45:15 836599 18
原创 中文OCR的汉字按常见度的划分
在OCR中,会需要自己制作中文字符的图像样本,因此需要了解各种常见度汉字的划分。常见的3500个汉字:'阿啊哎哀唉埃挨癌矮艾爱碍安氨俺岸按案暗昂凹熬傲奥澳八巴叭吧拔把坝爸罢霸白百柏摆败拜班般颁斑搬板版办半伴扮瓣邦帮膀傍棒包胞宝饱保堡报抱豹暴爆卑杯悲碑北贝备背倍被辈奔本崩逼鼻比彼笔币必毕闭辟碧蔽壁避臂边编蝙鞭扁便变遍辨辩标表别宾滨冰兵丙柄饼并病拨波玻剥播脖伯驳泊勃博搏膊薄卜补捕不布步部擦猜才材财裁采彩踩菜蔡参餐残蚕惨灿仓苍舱藏操曹槽草册侧测策层叉插查茶察差拆柴缠产阐颤昌长肠尝偿常厂场畅倡唱抄超巢朝潮吵炒车
2022-03-15 15:18:39 36345
原创 纯numpy实现多标签多分类进行验证码识别
在我之前的两篇博客中,讲解了使用纯numpy实现手写数字识别以及采用keras的多标签多分类进行验证码识别,建议阅读这篇文章之前提前看下另外两篇博客。卷积神经网络实现手写数字识别(纯numpy实现)Keras深度学习(6)-多标签多分类之验证码识别今天这篇博客将讲解使用纯numpy搭建多分类多标签算法来完成验证码识别任务。多标签多分类与单标签多分类的一个显著的区别是输出层激活函数采用sigmoid函数以及损失函数采用二元交叉熵。首先看激活函数sigmoid,sigmoid的数学公式为:根据
2022-03-08 16:23:32 33704
原创 jupyter notebook的安装使用以及代码自动提示
jupyter notebook是一款基于浏览器的应用,正如名字中的notebook一词所表示的含义,通过jupyter notebook,我们可以以笔记的形式记录和保存相关的代码和运行结果,并将结果以文档的形式与其他人共享。1 jupyter notebook的安装和启动安装完anaconda后,可以直接通过conda命令进行安装conda install jupyter notebook安装完后,启动jupyter notebook启动后的软件界面如下所示:Files目录代表程序运行
2022-03-03 17:12:14 39073 3
原创 卷积神经网络的可视化(基于keras)
在通常的认知中,神经网络的模型是一个“黑盒”,即模型学到的内容很难用人能够理解的方式来提取和表现,虽然对于某些类型的深度学习模型来说,这种表述部分正确,但对卷积神经网络来说绝对不是这样,卷积神经网络学到的表示非常适合可视化,很大程度上是因为它们是视觉概念的表示。到现在为止,人们开发了多种技术来对这些表示进行可视化和理解,这里介绍3种最容易理解也是最有效的方法。可视化卷积神经网络的中间输出(中间激活):有助于理解卷积神经网络连续的层如何对输入进行变换,也有助于初步了解卷积神经网络每个过滤器的含义。可视化
2022-02-16 17:14:36 40415 19
原创 keras深度学习之猫狗分类四(微调模型)
另一种广泛使用的模型复用方法是模型微调(fine-tuning),与特征提取互为补充。对于用于特征提取的冻结的模型基,微调是指将其顶部的几层“解冻”,并将这解冻的几层和新增加的部分(本例中是全连接分类器)联合训练。之所以叫作微调,是因为它只是略微调整了所复用模型中更加抽象的表示,以便让这些表示与手头的问题更加相关。前面说过,冻结 VGG16 的卷积基是为了能够在上面训练一个随机初始化的分类器。同理,只有上面的分类器已经训练好了,才能微调卷积基的顶部几层。如果分类器没有训练好,那么训练期间通过网络传播的误
2022-02-15 15:15:09 32295
原创 keras深度学习之猫狗分类三(特征提取)
想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络。预训练网络(pretrained network)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训练好。如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以有效地作为视觉世界的通用模型,因此这些特征可用于各种不同的计算机视觉问题,即使这些新问题涉及的类别和原始任务完全不同。举个例子,你在 ImageNet 上训练了一个网络(其类别主要是动物和日常用品),然后将这个训练好的网络应用于某
2022-02-15 14:20:29 33265
原创 keras深度学习之猫狗分类二(数据增强)
在上一篇博客中,讲述了对猫狗采用二分类方法进行模型训练,最终得到的模型在测试数据上的准确率为79%。在这里我们采用数据增强的方法进一步提高识别率。数据增强是从现有的训练样本中生成更多的训练数据,其方法是利用多种能够生成可信图像的随机变换来增加(augment)样本。其目标是,模型在训练时不会两次查看完全相同的图像。这让模型能够观察到数据的更多内容,从而具有更好的泛化能力。例如有如下一张图像:对这个狗的图像进行数据增强,代码如下:from tensorflow.keras.preprocessing
2022-02-14 16:48:42 34464 1
原创 keras深度学习之猫狗分类一
在计算机视觉图像分类中,在实践过程中会经常遇到样本数量很少的情况。很少的样本可能是几百张图像或者几万张图像,在小样本上如何训练一个泛化能力强的模型是一个很值得探讨的问题,中间有不少过程需要我们进行优化。在这里使用通用的猫狗样本进行二分类模型的训练,在训练的过程中来研究怎样采取一些措施提高模型预测的准确率。1 训练样本的下载猫狗的分类样本采用kaggle上的猫狗样本,网址为:https://www.kaggle.com/chetankv/dogs-cats-images如果从官网上不方便下载该样本集
2022-02-11 17:32:49 36433 1
原创 Keras深度学习(6)-多标签多分类之验证码识别
在针对一个网站的RPA技术中,验证码识别也是一个很常见的需要解决的问题。如下图所示的验证码:前面在我的博客中所讲的内容是单标签多分类,例如一个手写数字图片,分出10类,得到这个图片表示的1个字符信息,而验证码一般是多个字符,每一个字符均有多个类别,因此验证码识别的问题就属于多标签多分类问题,在这里不能用之前识别手写数字的方法来进行验证码识别。本文的开发环境如下:tensorflow 2.5.0本文所用的训练样本如下:下载链接1 多标签多分类之验证码识别模型的训练多标签多分类的处理要点是验证码
2022-01-29 17:00:00 35271 3
原创 Keras深度学习(5)-卷积神经网络识别手写数字
在前面的博客中,曾经介绍了以全连接网络识别手写数字,这里以卷积神经网络识别手写数字。1 卷积神经网络模型的训练训练代码如下:from tensorflow.keras.datasets import mnistfrom tensorflow.keras import modelsfrom tensorflow.keras import layersfrom tensorflow.keras import optimizersfrom tensorflow.keras import losses
2022-01-28 18:15:02 33058
原创 Keras深度学习(4)-回归问题之预测房价
在深度学习的任务中,回归问题也是一个常见的任务。本文将要预测 20 世纪 70 年代中期波士顿郊区房屋价格的中位数,已知当时郊区的一些数据点,比如犯罪率、当地房产税率等。本节用到的数据集与前面两个例子有一个有趣的区别。它包含的数据点相对较少,只有 506 个,分为 404 个训练样本和 102 个测试样本。输入数据的每个特征(比如犯罪率)都有不同的取值范围。例如,有些特性是比例,取值范围为 0~1;有的取值范围为 1~12;还有的取值范围为 0~100,等等。1 回归问题模型的训练回归问题有以下几个要
2022-01-28 16:15:25 37068 3
原创 keras深度学习(3)-单标签多分类问题之新闻分类
将路透社新闻划分为 46 个互斥的主题,因为有多个类别,所以这是多分类(multiclass classification)问题的一个例子。因为每个数据点只能划分到一个类别,所以更具体地说,这是单标签、多分类(single-label, multiclass classification)问题的一个例子。如果每个数据点可以划分到多个类别(主题),那它就是一个多标签、多分类(multilabel, multiclass classification)问题。1 单标签多分类问题模型的训练单标签多分类问题有以
2022-01-27 18:28:23 34020
原创 Keras深度学习(2)-二分类问题之电影评论分类
二分类问题可能是应用最广泛的机器学习问题。在这个例子中,你将学习根据电影评论的文字内容将其划分为正面或负面。本节使用 IMDB 数据集,它包含来自互联网电影数据库(IMDB)的 50 000 条严重两极分化的评论。数据集被分为用于训练的 25 000 条评论与用于测试的 25 000 条评论,训练集和测试集都包含 50% 的正面评论和 50% 的负面评论。1 二分类问题模型的训练二分类问题有以下几个要点:隐藏层激活函数使用Relu输出层的神经元只有1个,并且输出层的激活函数为sigmoid损失
2022-01-27 16:21:03 34637
原创 Keras深度学习(1)-全连接手写数字的识别
在各种主流的深度学习框架中,手写数字的识别均作为第一个入门教程,同样,在开始学习Keras这个近些年非常流行的深度学习框架时,也用全连接手写数字识别作为入门的第一个例子。为了紧跟时代潮流,在之后我的所有博客中,均使用TensorFlow2以上的版本,而在TensorFlow2中的版本,Keras已经集成到tf中去了,可见谷歌也在逐步放弃TensorFlow1中的模型搭建方法,转而使用Keras来进行模型训练。因此可见,Keras的优势,也希望大家从一开始就学习Keras。使用的TensorFlow版本:
2022-01-25 15:10:51 32706
原创 卷积层CNN在观察什么?
我们通过对CNN滤波器W1进行可视化,来观察卷积层到底在观察什么?卷积层的可视化函数如下:#可视化函数def filter_show(filters, nx=8, margin=3, scale=10): FN, C, FH, FW = filters.shape ny = int(np.ceil(FN / nx)) fig = plt.figure() fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hsp
2022-01-19 17:40:37 34261
原创 卷积神经网络实现手写数字识别(纯numpy实现)
前面讲解了使用纯numpy实现数值微分和误差反向传播法的手写数字识别,这两种网络都是使用全连接层的结构。全连接层存在什么问题呢?那就是数据的形状被“忽视”了。比如,输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据。实际上,前面提到的使用了MNIST数据集的例子中,输入图像就是1通道、高28像素、长28像素的(1, 28, 28)形状,但却被排成1列,以784个数据的形式输入到最开始的Affine层。图像是3维形状,这个形状中应该含有重要的空间信
2022-01-19 17:16:19 39792 8
原创 误差反向传播法实现手写数字识别(纯numpy实现)
使用纯Python语言,仅仅只用到numpy这个模块,利用误差反向传播法实现手写数字识别。代码如下:from audioop import reverseimport numpy as npfrom collections import OrderedDictfrom dataset.mnist import load_mnistimport matplotlib.pylab as plt'''OrderedDict:有序字典,有序指的是它可以记住向字典里添加元素的顺序'''def
2022-01-17 11:29:52 8234
原创 数值微分法实现手写数字识别(纯numpy实现)
手写数字识别作为深度学习入门经典的识别案例,各种深度学习框架都有这个例子的实现方法。我这里将不用任何深度学习现有框架,例如TensorFlow、Keras、pytorch,直接使用Python语言的numpy实现各种激活函数、损失函数、梯度下降的方法。程序分为两部分,首先是手写数字数据的准备,直接使用如下mnist.py文件中的方法load_minist即可。文件代码如下:# coding: utf-8try: import urllib.requestexcept ImportError:
2022-01-13 17:03:03 32820
原创 vs2019上编写vs2015的程序并且支持xp
在项目中,有个同事用vs2015开发了一个C++程序,并且平台工具集采用的Visual Studio 2015 - Windows XP (v140_xp),然后我需要在自己的电脑上去运行并改写这个程序,不能升级平台工具集,也必须采用vs2015并且支持xp,那么该如何操作了?首先在安装vs2019的时候选上如下选项,安装完后可以重新运行安装包进行修改,勾选上vs2015 C++工具集和vs2017 C++工具集。接下来需要下载一个Windows 8.1 sdk,因为需要支持xp,不能用Windows
2022-01-07 10:09:35 34462
原创 国税局发票查验API接口文档说明
该接口通过RPA机器人技术进行查验,通过浏览器模拟的方式,使用UIpath、selenium、playwright等RPA自动化测试工具、结合人工智能图像识别技术制作而成,仅供个人方便查看自己的票,提高工作效率。
2021-11-15 10:00:01 767063 35
原创 win10通过局域网共享文件夹
在一个公司里,由于处于局域网,同事之间可以通过文件共享来分享文件,这种方式比用u盘传输更加方便。首先找到要分享的文件夹,右键文件目录在属性栏里选择共享在共享用户名称里输入everyone,然后添加这个目录就共享成功。然后在另外一个电脑运行里输入这个电脑的ip就可以访问共享文件,如下所示:\172.24.103.105在弹出的框里输入电脑的用户名和密码既可以访问这个共享目录。如果遇到输入ip后无响应的情况,则是电脑防火墙的问题,关闭电脑防火墙即可。...
2021-11-04 11:09:52 43967
原创 C++23种设计模式(23)-解释器模式
解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式解决的问题是,如果一种特定类型的问题发生的频率足够高,那么可能就只得将该问题的各个示例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。#include <iostream>#include <list>#include<vector>#include<string>using namespac
2021-11-04 10:09:20 63239
原创 C++23种设计模式(22)-中介者模式
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了中间者的角色,协调各方利益。本文就以租房为例子,如果没有房屋中介,那么房客要自己找房东,而房东也要自己找房客,非常不方便。有了房屋中介机构就方便了,房东可以把要出租的房屋信息放到中介机构,而房客可以去中介机构咨询。在软件中,就是多个对象之间需要通信,如果没有中介,对象就需要知道其他对象,最坏情况下,可能需要知
2021-11-04 10:07:39 63036
原创 C++23种设计模式(21)-访问者模式
访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间耦合解脱开,使得操作几何可以相对自由地演化。访问者模式的目的使要把处理从数据结构中分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的。#include <iostream>#include <list>#
2021-11-04 10:07:20 63005
原创 C++23种设计模式(20)-状态模式
状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。它有两种使用情况:(1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。(2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。本文的例子为第一种情况,以战争为例,假设一场战争需经历四个阶段:前期、中期、后期、结束。当战争处于不同的阶段,战争的行为是不一样的,也就说战争的行为取决于所处的阶段,而且随着时间的推进是动态变化的。#include <iostream>#in
2021-11-04 10:06:59 63199
原创 C++23种设计模式(19)-备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态[DP]。举个简单的例子,我们玩游戏时都会保存进度,所保存的进度以文件的形式存在。这样下次就可以继续玩,而不用从头开始。这里的进度其实就是游戏的内部状态,而这里的文件相当于是在游戏之外保存状态。这样,下次就可以从文件中读入保存的进度,从而恢复到原来的状态。#include <iostream>#include <list>#include<vec
2021-11-04 10:06:39 62987
原创 C++23种设计模式(18)-命令模式
命令模式,是将一个请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支持可撤销的操作。#include <iostream>#include <list>using namespace std;// Receiver类,知道如何实施与执行一个与请求相关的操作:class Receiver {public: void Action() { cout << "Receiver" << endl; }
2021-11-04 10:06:23 63108 1
原创 C++23种设计模式(17)-职责链莫斯
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有请求。这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求。#include <iostream
2021-11-04 10:06:02 62955
原创 C++23种设计模式(16)-迭代子模式
提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。当一家公司发展到足够大,需要陆续的合并或收购其他公司,但保持原有公司的人力架构。对于总公司的HR,需要面对不同的人力系统,当要统计各子公司各部门的人力信息时,比较困难。每收购一家公司,都需要熟悉一套新的人力系统。但当每套人力系统对外暴露的统计方式一致时,HR就不需要关心各子公司具体的人力架构。#include <iostream>#include <string&g
2021-11-04 10:05:26 63041
原创 C++23种设计模式(15)-观察者模式
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些订阅的读者就会收到通知,然后进行相应的动作,比如去看文章,或者收藏起来。博主与读者之间存在种一对多的依赖关系。#include<iostream>#include<string>#include&
2021-11-03 16:23:20 63276
卷积神经网络的可视化(基于keras):猫狗可视化模型源码
2023-04-24
libcurl_7.72.rar
2020-09-11
Perl5.24_dmake.rar
2020-09-11
数字图片字库
2019-05-17
train_image.zip
2019-05-17
VS2015 MFCActiveX使用对话框调用另外一个ActiveX控件
2018-12-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人