Other

JavaScript写放大镜效果

<!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8> <title>Document</title> <style type=text/css> #middle { width: 400px; height: 400px; position: absolute; top : 50px; left : 100px; border: 1px solid; } #middle img { width: 400px; height: 400px; } #len { width: 200px; height: 200px; background: #f00; position: absolute; top: 0; left: 0; opacity: 0.5; display: none; } #big { width: 400px; height: 400px; position: absolute; top : 50px; left : 520px; border:1px solid; overflow: hidden; display: none; } #big img { width: 800px; height: 800px; position: absolute; top : 0; left : 0; } </style> </head> <body> <div id=middle> <img src=images/middle.

攻防世界_Re_新手区_python-trade

pyc文件,使用EasyPythonDecompiler反汇编 得到源码 # Embedded file name: 1.py import base64 def encode(message): s = '' for i in message: x = ord(i) ^ 32 x = x + 16 s += chr(x) return base64.b64encode(s) correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' flag = '' print 'Input flag:' flag = raw_input() if encode(flag) == correct: print 'correct' else: print 'wrong' 直接上脚本8 import base64 correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' x=base64.b64decode(correct) for i in x: s=(int(i)-16)^32 print(chr(s),end='') flagnctf{d3c0mpil1n9_PyC}

基于深度学习的人脸识别与管理系统(UI界面增强版,Python代码)

摘要:人脸检测与识别是机器视觉领域最热门的研究方向之一,本文详细介绍博主自主设计的一款基于深度学习的人脸识别与管理系统。博文给出人脸识别实现原理的同时,给出Python的人脸识别实现代码以及PyQt设计的UI界面。系统实现了集识别人脸、录入人脸、管理人脸在内的多项功能:包括通过选择人脸图片、视频、摄像头进行已录入人脸的实时识别;可通过图片和摄像头检测人脸并录入新的人脸;通过系统管理和更新人脸数据等功能,检测速度快、识别精度较高。博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。本博文目录如下: 目录前言1. 效果演示2. 人脸识别原理3. 代码实现下载链接结束语 ➷点击跳转至文末所有涉及的完整代码文件下载页☇ 完整资源下载链接:https://mianbaoduo.com/o/bread/mbd-YpmYlZtw 代码介绍及演示视频链接:https://www.bilibili.com/video/BV1XB4y1U73S(正在更新中,欢迎关注博主B站视频) 前言 近年来,人脸识别的技术愈发成熟,在大型数据集上的训练测试结果已超过人类,其应用也日益广泛,譬如刷脸支付、安防侦破、出入口控制、互联网服务等。人脸识别(Face Recognition)是一种通过获取人面部的特征信息进行身份确认的技术,类似已用于身份识别的人体的其他生物特征(如虹膜、指纹等),人脸具备唯一性、一致性和高度的不可复制性,为身份识别提供了稳定的条件。人脸识别系统是博主一直想做的一个项目,通过人脸面部信息识别可以进行很多有趣的设计,如面部解锁、考勤打卡等。 前面博主撰写了人脸性别识别系统、表情识别系统等,其实是人脸属性识别的一种,即根据人脸面部图像中的相关特征判断其性别或表情属性,该任务本身也同样具有较强的现实意义。这篇博文则回到人脸识别的任务本身,采用深度学习的方法对人脸特征进行提取,计算其与已存在的人脸特征的相似度,判读其是否属于库中的某一人脸,达到身份识别的目的。不过我希望在实现的基础上,能多增加一些可操作性,因此尽可能设计一个功能完善的人脸识别系统。 查阅网上资料发现,研究和分享人脸识别技术和代码的大有人在,主要是做一些简单易行的小Demo等,大家可自行查阅参考。这里博主分享一个自主设计的人脸识别项目,包括识别人脸、录入人脸、管理人脸在内的多项功能,以下是界面的截图,供大家参考学习了: 检测识别人脸时的界面截图(点击图片可放大)如下图,可识别画面中存在的多个人脸,也可开启摄像头或视频检测,以及人脸录入管理等功能: 详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。 1. 效果演示 (一)选择人脸图片识别 在系统的功能选项按钮中选择“识别人脸”,点击下方的图片选择按钮图标选择图片后,在主显区域标记所有人脸识别的结果,并被逐条记录在表格中。本功能的界面展示如下图所示: (二)人脸视频识别效果展示 很多时候我们需要识别一段视频中的人脸信息,这里设计了视频选择功能。同样的在“识别人脸”功能选项下,点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别人脸,并将结果记录在右下角表格中,效果如下图所示: (三)摄像头检测效果展示 在真实场景中,我们往往利用设备摄像头获取实时画面,同时需要对画面中的人脸进行识别,同样可以在“识别人脸”功能选项下选择此项功能。如下图所示,点击摄像头按钮后系统进入准备状态,系统显示实时画面并开始检测画面中的人脸,识别结果展示如下图: (四)录入人脸效果展示 当出现一个新的人脸需要录入时,点击“录入人脸”功能选项按钮,此时底部功能界面切换至录入功能,首先输入人脸名字点击“新建”后可通过选择人脸图片或开启摄像头进行画面捕捉,系统检测到人脸后可选择“取图”,系统得到捕获的人脸区域图片,最后点击“录入”按钮,则提取所有人脸图片特征并写入系统库中,演示效果如下: (五)管理人脸效果展示 对于已经存在的人脸数据可选择“管理人脸”功能选项按钮,切换至管理界面,选择表格中要删除或更新的人脸数据栏,点击确定后系统自动更新人脸数据库,该功能展示如下图: 在识别某张特定人脸前,应该先在系统库中录入人脸信息,即送入一张人脸图像供系统提取特征,此过程可选择图片也可开启摄像头实时获取。至此系统的演示完毕,其实除了动图中演示的功能,当然还有许多细节功能无法一一演示,读者可以自行测试。 2. 人脸识别原理 如今机器学习、神经网络方法广泛应用于人脸识别领域,而后深度学习广泛应用于各种目标检测领域,2015年,Google团队的FaceNet在LFW数据集上得平均准确率达到了99.63%,基于深度学习的人脸识别的准确率已经高于人类本身,深度学习在人脸识别领域基本占据了统治地位。 Dlib是一个包含机器学习算法的C++开源工具包,目前已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。作为人脸识别工具之一,Dlib在图像处理及人脸面部特征处理、分类、识别等方面具有计算简单、较容易实现的优点。 Dlib在人脸识别上的应用:(1)接受图像并将其加载到一个像素数组中进行处理;(2)使用局部二进制模式的人脸描述生成新的图像;(3)根据Dlib库中的scan_image_boxes等函数写入读取到的图片,进而计算人脸之间的特征向量;(4)与人脸数据库中的特征向量进行对比并利用全局函数threshold_image计算阈值,完成人脸识别[1]。 Dlib可通过Python调用,实现对图像预处理、提取特征向量、与人脸数据库中数据进行校验进而判别人物身份的流程。这里我们的人脸识别的过程有人脸检测(Face Detection)、人脸对齐(Face Alignment)、人脸表示(Face Representation)和人脸匹配(Face Matching),示意图如下图所示: (1)人脸检测(Face Detection):首先利用Dlib的get_frontal_face_detector方法检测人脸区域并输出人脸矩形的四个坐标点。调用get_frontal_face_detector会返回 dlib 库中包含的预训练方向梯度直方图 (HOG)结合线性支持向量机(SVM)的人脸检测器,该检测器快速高效。由于方向梯度直方图 (HOG) 描述符的工作原理,它对图像几何的和光学的形变都能保持很好的不变性。 (2)人脸对齐(Face Alignment):这是人脸识别系统中的一种标准操作,即从人脸区域中检测到人脸特征点,并以特征点为依据对人脸进行归一化操作,使人脸区域的尺度和角度一致,方便特征提取与人脸匹配。一般通过旋转、平移与缩放将目标人脸区域放置在图像特定位置。这样做可以减小需要处理的人脸图像在空间分布上的差异。这里我们使用的是基于回归树的人脸对齐算法[2],该算法是Vahid Kazemi 和 Josephine Sullivan在CVPR2014上发表的One Millisecond Face Alignment with an Ensemble of Regression Trees算法(以下简称GBDT),这种方法通过建立一个级联的残差回归树(GBDT)来使人脸形状从当前形状一步一步回归到真实形状。每一个GBDT的每一个叶子节点上都存储着一个残差回归量,当输入落到一个节点上时,就将残差加到改输入上,起到回归的目的,最终将所有残差叠加在一起,就完成了人脸对齐的目的。此处我们使用shape_predictor方法载入shape_predictor_68_face_landmarks.dat模型实现。 (3)人脸表示(Face Representation):这一步我们从归一化的人脸区域中进行面部特征提取,采用深度神经网络方法得到具有128个特征的特征向量。这里利用Dlib中的残差学习深度神经网络(ResNet)[3]为待识别人脸创建128维特征向量。人脸的特征表示,最理想的情况是不同人脸的照片提取出的特征向量差异较大,而同一人脸在不同照片中可以提取出相似度高的特征向量。此处我们使用的是dlib库中的face_recognition_model_v1方法,使用预训练的dlib_face_recognition_resnet_model_v1.dat模型。

【selenium】28、JavaScript聚集元素到顶部

当元素不在当前屏幕,点击此元素会报错Element is not clickable at point1、使用场景2、当点击看不到的元素时,元素单击被拦截element click intercepted:Element is not clickable at point3、方法一:执行JavaScript脚本让元素出现在屏幕上方document.getElementsByClassName(more)[1].scrollIntoView();参考代码:4、方法二:可以先定位目标元素,对目标元素执行JavaScript方法

Linux进程管理、任务计划、内核管理、加密

一、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。 二、生成10个随机数保存于数组中,并找出其最大值和最小值 三、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序 四、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来) 五、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出success!,若ping不通则输出fail! 六、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间 七、描述密钥交换的过程 八、https的通信过程 九、使用awk以冒号分隔获取/etc/passwd文件第一列 awk -F: '{print $1}' /etc/passwd

SQL Server的跨VLAN访问

事件起因:  公司新增了很多VLAN,原本SQL Server安装在172.21.100.15的服务器上,产线上所有测试电脑也都是VLAN100网段,故使用没有问题。  但新的厂房是按楼层划分的VLAN,二楼使用的是VLAN131,三楼使用的是VLAN134,ping网络是通的,但就是无法访问SQL Server。 原因分析:  首先要做的当然是使用ping命令,VLAN131和VLAN134 ping VLAN100都是没问题的。  其次,配置SQL Server,检查是否开启了远程连接,防火墙是否有打开:TCP 1433端口,这些也是没问题的。           测试方法:  新建一个txt文本文件,再将txt的后缀名修改为udl,这就相当是一个简单的数据库连接测试软件了。    输入服务器的IP地址:172.21.100.15,测试连接后提示:无效的连接     经网上查询,这是因为连接软件无法将IP地址转换成服务器名称\数据库名称,但直接输入服务器名称也是找不到该数据库。  解决方法:  修改Windows系统自带的hosts文件:     注意:该文件如果直接修改会无法保存,必须先复制到其它地方,修改完成后再覆盖原文件。  结论:  此时再输入服务器名称\数据库名称,即可数据库实例并正常连接了,具体如下:       

洗牌算法

1.从100张牌里随机抽一张,这很简单吧,rand随机就行了。 2.从100张牌中抽50张牌,要求不重复呢。最简单的思路就是反复rand,并且将rand存入到hash表中,如果重复就在来一次,直到50次不重复。 3.从100张牌中抽99张不同的牌呢,那2的思路就很困难了,越到后面重复的概率越大,越耗时间。 接下来就到洗牌算法登场了。 这个算法的核心思路就是:将最后一个数和前面任意 n-1 个数中的一个数进行交换(也可以不换),然后倒数第二个数和前面任意 n-2 个数中的一个数进行交换,如此往复直到最后一个元素,就完成了洗牌,该算法保证了每个元素在每个位置的概率都是相等的。 我们举例子来说明:1,2,3,4,5 第一次交换,1,2,3,4,5出现在第五个位置的概率为1/5。假设我们交换的是2,序列变为1,5,3,4,2。 第二次交换,1,5,3,4出现在第四个位置的概率为1/4,同时第一次没有选中他们的概率为4/5,所以最后的概率还是1/5。假设交换的序列为4,5,3,1。 第三次交换,4,5,3出现在第三个位置的概率为1/3,同时需要乘上第一次没被选中和第二次没被选中的概率,分别为4/5和3/4。最后概率还是1/5。 相信后面不需要推演了,大家应该都能知道这个算法的厉害之处了。 代码: for(int i = n-1; i >= 0 ; --i){ swap(arr[i],arr[rand()%(i+1)]); } 洗牌的速度是o(n)哦。

32.自定义Java异常捕获处理类及其使用

自定义异常捕获处理类 /** * <h1>异常捕捉</h1> * */ public class ExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { StackTraceElement[] ses = e.getStackTrace(); System.err.println(Exception in thread \ + t.getName() + \ + e.toString()); for (StackTraceElement se : ses) { System.err.println(\tat + se); } Throwable ec = e.getCause(); if (null != ec) { uncaughtException(t, ec); } } } 使用异常捕获处理类 /** * <h1>想办法打印完整的异常栈信息</h1> * */ public class CompleteException { private void imooc1() throws Exception { throw new Exception(imooc1 has exception.

socket套接字补充、操作系统发展史、进程

目录socket套接字之UDP协议操作系统的发展史手工操作批处理系统联机批处理系统脱机批处理系统多道技术进程理论并发与并行同步与异步阻塞与非阻塞同步异步与阻塞非阻塞总结 socket套接字之UDP协议 在我们创建socket对象的时候,默认是使用TCP协议的,如果想要使用UDP协议,需要给个参数。 server = socket.socket(type=socket.SOCK_DGRAM) 如果使用了UDP协议,那么它的一些方法也会发生变化。 举例 服务端(Server) import socket server = socket.socket(type=socket.SOCK_DGRAM) # 绑定ip地址和端口号不变 server.bind(('127.0.0.1', 8080)) # 接收消息的方法改变了,不与客户端进行连接就直接获取消息 msg, addr = server.recvfrom(1024) print('来自客户端:', msg.decode('utf8')) print('客户端地址:', addr) # 发送消息的方法改变了,根据客户端地址发送 server.sendto('来自服务端的消息'.encode('utf8'), addr) 客户端(Client) import socket client = socket.socket(type=socket.SOCK_DGRAM) # 可以先写个变量存储服务端地址,后续用起来方便 server_addr = ('127.0.0.1', 8080) # 发送消息的方法改变了,根据服务端地址发送 client.sendto('来自客户端的消息'.encode('utf8'), server_addr) # 接收消息的方法改变了,可以获取服务端的消息和地址 msg, addr = client.recvfrom(1024) print('来自服务端:', msg.decode('utf8')) print('服务端地址:', addr) 由于使用的是UDP协议,不会建立双向通道,所以可以启动多个客户端给服务端发送消息,服务端都会接收到,谁先发送消息服务端就会优先收到,并且使用UDP协议是不会发生黏包问题的。 操作系统的发展史 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。 优点:用户独占全机,不会出现因资源已被其他用户占用而等待的现象。 缺点:CPU的利用不充分,资源的利用率低。 批处理系统 批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。