如何识别验证码

2023-05-16

http://www.jianblog.com/2009/02/09/574/

 

基于OpenCV的PHP图像人脸识别技术

二月 9, 2009 at 10:13 上午 由 catch · Filed under PHP, 编程

今天无意中发现用OpenCV可以实现人脸识别。找个时间研究下用来识别验证码看可行不?呵呵。。

  1. 安装测试了一下,如果越是高清的大图,效果越明显,感觉不错
  2.  
  3. 一 安装
  4. 1 安装opencv
  5. http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16948
  6. 下载opencv-1.1pre1.tar.gz(1.0版本没有安装成功)
  7. #tar zxvf opencv-1.1pre1.tar.gz
  8. # cd opencv-1.1.0/
  9. # /.configure
  10. #make
  11. #make install
  12.  
  13. 2 安装facedetect
  14. #wget http://www.xarg.org/download/facedetect-1.0.0.tar.gz
  15. #tar xzvf facedetect-1.0.0.tar.gz
  16. #cd facedetect-1.0.0
  17. #/usr/local/php/bin/phpize
  18. #./configure –with-php-config=/usr/local/php/bin/php-config
  19. #make
  20. #make install
  21.  
  22. #vi /usr/local/php/etc/php.ini
  23. // 增加extension=facedetect.so
  24.  
  25. 3 重启web服务器,在phpinfo()里查看是否有facedetect这个模块
  26.  
  27. 二 简单测试
  28. 从openCV源代码/data/haarcascades/里头取出所有xml文件放在php的执行目录下
  29.  
  30. //检查有多少个脸型
  31. var_dump(face_count(’test.jpg’, ‘haarcascade_frontalface_alt.xml’));
  32.  
  33. //返回脸型在图片中的位置参数,多个则返回数组
  34. $arr = face_detect(’test.jpg’, ‘haarcascade_frontalface_alt2.xml’);
  35.  
  36. print_r($arr);
  37.  
  38. 三 测试代码
  39. <?
  40. if(empty($_POST)) {
  41. ?>
  42. <form name=”form” id=”form” method=”POST” enctype=”multipart/form-data” action=”">
  43. 上传图片:<input type=”file” name=”pic” size=”20″><input type=”submit” name=”submit” value=”上传”>
  44. </form>
  45. <?
  46. } else {
  47. $img = $_FILES['pic']['tmp_name'];
  48.  
  49. $arr = face_detect($img, ‘haarcascade_frontalface_alt2.xml’);
  50.  
  51. if(is_array($arr1)) {
  52. $all = array_merge($arr,$arr1);
  53. } else {
  54. $all = $arr;
  55. }
  56. $allowtype = 1;
  57. switch($_FILES['pic']['type']){
  58. case ‘image/pjpeg’: $fix_pic.= “.jpg”; break;
  59. case ‘image/jpeg’: $fix_pic.= “.jpg”; break;
  60. case ‘image/x-png’: $fix_pic.= “.png”; break;
  61. case ‘image/png’: $fix_pic.= “.png”; break;
  62. default: $allowtype = 0; break;
  63. }
  64.  
  65. if($allowtype == 0) {
  66. echo “文件格式错误:只运行jpg或png图片”;exit;
  67. }
  68.  
  69. $tmp_name = time();
  70. $src_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name.$fix_pic;
  71. move_uploaded_file($_FILES['pic']['tmp_name'], $src_pic);
  72.  
  73. $pic_src = $pic_dst = array();
  74. if(is_array($all)){
  75. foreach ($all as $k => $v){
  76. $tmp_name_new = $tmp_name.”_”.$k;
  77. $x = $v['x'];
  78. $y = $v['y'];
  79. $w = $v['w'];
  80. $h = $v['h'];
  81. $dst_pic = “/usr/website/nginx/face/haarcascades/upload/”.$tmp_name_new.$fix_pic;
  82. // echo $src_pic.”<br>”;
  83. // echo $dst_pic.”<br>”;
  84. $cmd = “/usr/bin/convert -crop “.$w.”x”.$h.”+”.$x.”+”.$y.” “.$src_pic.” “.$dst_pic;
  85. // echo $cmd.”<br>”;
  86. echo `$cmd`;
  87. $pic_src[] = “upload/”.$tmp_name.$fix_pic;
  88. $pic_dst[] = “upload/”.$tmp_name_new.$fix_pic;
  89. }
  90. }
  91.  
  92. foreach($pic_src as $key => $value) {
  93. echo “<img src=’”.$value.”‘> => <img src=’”.$pic_dst[$key].”‘><br>”;
  94. }
  95. }
  96. ?>

Permalink

3 条评论 »

  1. catch said,

    二月 9, 2009 at 10:30 上午

    http://security.ctocio.com.cn/securitycomment/290/8182290_3.shtml 在网上看到一个介绍破解验证码资料的网站

  2. catch said,

    二月 9, 2009 at 10:37 上午

    http://code.google.com/p/tesseract-ocr/ 一个不错的ocr



如何识别高级的验证码

http://security.ctocio.com.cn/securitycomment/290/8182290.shtml

 

 一、验证码的基本知识

  1. 验证码的主要目的是强制人机交互来抵御机器自动化攻击的。

  2. 大部分的验证码设计者并不得要领,不了解图像处理,机器视觉,模式识别,人工智能的基本概念。

  3. 利用验证码,可以发财,当然要犯罪:比如招商银行密码只有6位,验证码形同虚设,计算机很快就能破解一个有钱的账户,很多帐户是可以网上交易的。

  4. 也有设计的比较好的,比如Yahoo,Google,Microsoft等。而国内Tencent的中文验证码虽然难,但算不上好。

  二、人工智能,模式识别,机器视觉,图像处理的基本知识

  1)主要流程:

  比如我们要从一副图片中,识别出验证码;比如我们要从一副图片中,检测并识别出一张人脸。 大概有哪些步骤呢?

  1.图像采集:验证码呢,就直接通过HTTP抓HTML,然后分析出图片的url,然后下载保存就可以了。 如果是人脸检测识别,一般要通过视屏采集设备,采集回来,通过A/D转操作,存为数字图片或者视频频。

  2.预处理:检测是正确的图像格式,转换到合适的格式,压缩,剪切出ROI,去除噪音,灰度化,转换色彩空间这些。

  3.检测:车牌检测识别系统要先找到车牌的大概位置,人脸检测系统要找出图片中所有的人脸(包括疑似人脸);验证码识别呢,主要是找出文字所在的主要区域。

  4.前处理:人脸检测和识别,会对人脸在识别前作一些校正,比如面内面外的旋转,扭曲等。我这里的验证码识别,“一般”要做文字的切割

  5.训练:通过各种模式识别,机器学习算法,来挑选和训练合适数量的训练集。不是训练的样本越多越好。过学习,泛化能力差的问题可能在这里出现。这一步不是必须的,有些识别算法是不需要训练的。

  6.识别:输入待识别的处理后的图片,转换成分类器需要的输入格式,然后通过输出的类和置信度,来判断大概可能是哪个字母。识别本质上就是分类。

  2)关键概念:

  图像处理:一般指针对数字图像的某种数学处理。比如投影,钝化,锐化,细化,边缘检测,二值化,压缩,各种数据变换等等。

  1.二值化:一般图片都是彩色的,按照逼真程度,可能很多级别。为了降低计算复杂度,方便后续的处理,如果在不损失关键信息的情况下,能将图片处理成黑白两种颜色,那就最好不过了。

  2.细化:找出图像的骨架,图像线条可能是很宽的,通过细化将宽度将为1,某些地方可能大于1。不同的细化算法,可能有不同的差异,比如是否更靠近线条中间,比如是否保持联通行等。

  3.边缘检测:主要是理解边缘的概念。边缘实际上是图像中图像像素属性变化剧烈的地方。可能通过一个固定的门限值来判断,也可能是自适应的。门 限可能是图像全局的,也可能是局部的。不能说那个就一定好,不过大部分时候,自适应的局部的门限可能要好点。被分析的,可能是颜色,也可能是灰度图像的灰 度。

  机器视觉:利用计算机来模式实现人的视觉。 比如物体检测,定位,识别。按照对图像理解的层次的差别,分高阶和低阶的理解。

  模式识别:对事物或者现象的某种表示方式(数值,文字,我们这里主要想说的是数值),通过一些处理和分析,来描述,归类,理解,解释这些事物,现象及其某种抽象。

  人工智能:这种概念比较宽,上面这些都属于人工智能这个大的方向。简单点不要过分学院派的理解就是,把人类的很“智能”的东西给模拟出来协助生物的人来处理问题,特别是在计算机里面。

 

三、常见的验证码的破解分析

  以http://libcaca.zoy.org/wiki/PWNtcha这里PWNtcha项目中的资料为例分析,各种验证码的破解。(方法很多,仅仅从我个人乍看之下觉得可行的方法来分析)

  1)Authimage

  

      使用的反破解技巧:

  1.不连续的点组成字符

  2.有一定程度的倾斜

  设计不好的地方:

  1.通过纵横的直方图投影,可以找到字幕区域

  2.通过Hough变换,适当的参数,可以找到近似的横线,可以做倾斜矫正

  3.字符串的倾斜式面内的,没有太多的破解难度

  4.字母宽度一定,大小一定

  2)Clubic

   

      使用的反破解技巧:

  1.字符是手写体

  设计不好的地方:

  1.检测切割阶段没有任何技术含量,属于设计的比较丑的

  2.只有数字,而且手写体变化不大

  3.表面看起来对识别阶段有难度,仔细分析,发现几乎不用任何高级的训练识别算法,就

  固定的招某些像素点是否有色彩就够了

  3)linuxfr.org

  

      使用的反破解技巧:

  1.背景颜色块

  2.前景的横线或矩形

  设计不好的地方:

  1.背景色是单一色块,有形状,通过Region-Growth区域增长来很容易把背景给去掉

  2.前景色是标准的线条,色彩单一

  3.字母无粘连

  4.都是印刷体

  4)Ourcolony

   

      使用的反破解技巧:

  1.设计的太低级,不屑于去评价

  设计不好的地方:

  1.这种验证码,设计的最丑,但还是能把菜鸟搞定,毕竟学计算机的少,搞这个破解的更少,正所谓隔行如隔山

  5)LiveJournal

  

      使用的反破解技巧:

  1.这个设计略微好点,使用个随机噪音,而且作为前景

  2.字母位置粗细都有变化

  设计不好的地方:

  1.字母没有粘连

  2.噪音类型单一

  3.通过在X轴的直方图投影,能准确分割字幕

  4.然后在Y周作直方图投影,能准确定位高度

  5.识别阶段,都是印刷体,简单地很

 

 四、网上的一些高级验证码

  1)ICQ

  

      2)IMDb

  

      3)MS MVPS

  

  4)MVN Forum

  

  这些类型是被很多人认为比较难得类型,分析一下可以发现,字符检测,定位和分割都不难。 唯一影响识别率的是IMDBb和MVPS这两类,字体变形略大。

  总体来说,这些类型的破解也不难,很容易做到50%以上的识别率。

 

五、高级验证码的破解分析

  时间关系,我简单介绍如何利用图像处理和模式识别技术,自动识别比较高级的验证码。

  (以风头正劲的Google为例)

  

      1)至少从目前的AI的发展程度看,没有简单的做法能自动处理各种不同的验证码,即使能力很强,那么系统自然也十分复杂强大。所以,要想在很简单的算法实现比较高级的验证码破解,必须分析不同验证码算法的特点:

  作为一般的图像处理和计算机视觉,会考虑色彩,纹理,形状等直接的特征,同时也考虑直方图,灰度等统计特征,还考虑FFT,Wavelet等各 种变换后的特征。但最终目标都是Dimension Reduction(降维)然后利于识别,不仅仅是速度的考虑。从图像的角度看,很多系统都考虑转换为灰度级甚者黑白图片。

  Google的图片可以看出,颜色变化是虚晃一枪,不存在任何处理难度。难度是字体变形和字符粘连。

  如果能成功的分割字符,那么后期识别无论是用SVM等分类算法,还是分析笔顺比划走向来硬识别,都相对好做。

  2)图像处理和粘连分割

  代码中的part1目录主要完成图像预处理和粘连字符分割

  001:将图像从jpg等格式转换为位图便于处理

  002:采用Fix/Adaptive的Threshold门限算法,将图片Bin-Value二值化。(可用003算法)

  003:采用OSTU分水岭算法,将图片Bin-Value二值化。(更通用,大部分时候效果更好)

  005:获取ROI感兴趣的区域。

  006:Edge Trace边缘跟踪。

  007:Edge Detection边界检测。

  008:Thin细化去骨架。

  009:做了一些Tidy整理。(这个一般要根据特定的Captcha算法调整)

  010:做切割,注意图片中红色的交叉点。

  011:将边缘检测和骨干交叉点监测的图像合并。(合并过程可以做分析: 比如X坐标偏移门限分析,交叉点区域纹理分析,线条走势分析,等等各种方法,找出更可能的切分点和分离后部件的组合管理。)

  

      代码:(代码质量不高,从其他项目拷贝过来,简单修改的。)

  查看代码(./pstzine_09_01.txt)

  注:在这里,我们可以看到,基本的部件(字母是分割开了,但可以造成统一字母的被切割成多个Component。 一种做法是:利用先验知识,做分割; 另外一种做法是,和第二部分的识别结合起来。 比如按照从左至右,尝试增加component来识别,如果不能识别而且component的总宽度,总面积还比较小,继续增加。 当然不排除拒识的可能性。)

  3)字符部件组合和识别。

  part2的代码展示了切割后的字母组合,和基于svm的字符识别的训练和识别过程。

  Detection.cpp中展示了ImageSpam检测过程中的一些字符分割和组合,layout的分析和利用的简单技术。 而Google的验证码的识别,完全可以不用到,仅做参考。

  SVM及使用:

  本质上,SVM是一个分类器,原始的SVM是一个两类分类的分类器。可以通过1:1或者1:n的方式来组合成一个多类分类的分类器。 天生通过核函数的使用支持高维数据的分类。从几何意义上讲,就是找到最能表示类别特征的那些向量(支持向量SV),然后找到一条线,能最大化分类的 Margin。

  libSVM是一个不错的实现。

  训练间断和识别阶段的数据整理和归一化是一样的。这里的简单做法是:

  首先:

 

      #define SVM_MAX +0.999
  #define SVM_MIN +0.001

  其次:

  扫描黑白待识别字幕图片的每个像素,如果为0(黑色,是字母上的像素),那么svm中该位置就SVM_MAX,反之则反。

  最后:

  训练阶段,在svm的input的前面,为该类打上标记,即是那一个字母。

  识别阶段,当然这个类别标记是SVM分类出来。

  注意:

  如果是SVM菜鸟,最好找一个在SVM外边做了包装的工具,比如样本选择,交叉验证,核函数选择这些,让程序自动选择和分析。

  代码:通过ReginGrowth来提取单个单个的字符,然后开始识别。

  查看代码(./pstzine_09_02.txt)

 

 六、对验证码设计的一些建议

  1.在噪音等类型的使用上,尽力让字符和用来混淆的前景和背景不容易区分。尽力让坏人(噪音)长得和好人(字母)一样。

  2.特别好的验证码的设计,要尽力发挥人类擅长而AI算法不擅长的。 比如粘连字符的分割和手写体(通过印刷体做特别的变形也可以)。 而不要一味的去加一些看起来比较复杂的噪音或者其他的花哨的东西。即使你做的足够复杂,但如果人也难识别,显然别人认为你是没事找抽型的。

  3. 从专业的机器视觉的角度说,验证码的设计,一定要让破解者在识别阶段,反复在低阶视觉和高阶视觉之间多反复几次才能识别出来。 这样可以大大降低破解难度和破解的准确率。

  七、郑重申明

  1.这个问题,本身是人工智能,计算机视觉,模式识别领域的一个难题。作为破解者来说,是出于劣势地位。要做的很好,是很难得。总体来说,我走 的是比较学院派的线路,能真正的破解难度比较高的验证码,不同于网上很多不太入流的破解方法。我能做的只有利用有限的知识,抛砖引玉而已。很多OCR的技 术,特别是离线手写体中文等文字识别的技术,个人了解有限的很,都不敢在这里乱写。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何识别验证码 的相关文章

  • 将VMDK格式的镜像转成qcow2

    将VMDK格式的镜像转成qcow2格式 1 我们要通过Linux虚拟机进行格式转化工作 在虚拟机中创建单文件可以提取出来VMDK格式 这是我自己的虚拟机创建出来的文件 2 我们找到我们创建好的虚拟机 通过我们远程连接工具进行上传到我们要转为
  • 如何做好一个项目经理

    第一部分 xff1a 软件项目经理的要求 首先是一个管理者 xff0c 其次熟悉某些工具 xff0c 某几种语言 xff0c 行业背景 xff0c 项目管理技能 软件项目经理面临的恶劣环境 xff0c 我们绝大部分软件企业运行在相对混乱的状
  • Cortex-M3利用SVC中断调用系统服务的例子

    SVC xff08 系统服务调用 xff0c 亦简称系统调用 xff09 和PendSV xff08 可悬起系统调用 xff09 xff0c 它们多用在上了操作系统的软件开发中 SVC用于产生系统函数的调用请求 例如 xff0c 操作系统通
  • Nginx + Tomcat + HTTPS极速配置

    由于最近在学习微信小程序开发 xff0c 所以在阿里云申请了一个免费的https证书 xff0c 这个证书申请起来十分简单 xff0c 大约十几分钟就好 所以不再赘述 更多信息可以访问我的个人网站 xff1a https www cjluz
  • Keil uVision5软件的操作与编写基础(入门)

    目录 x1f46c 一 如何新建一个空白文档 x1f46c 二 程序编写 x1f46c 三 编译程序 Keil uVision5是一款编写单片机程序的必备软件 其图标为 xff1a 一 如何新建一个空白文档 1 打开Keil uVision
  • 【工作笔记】Mysql写入报错:Incorrect datetime value: ‘1970-01-01 08:00:00‘

    在写入Mysql的timestamp格式列时 xff0c 将默认时间赋值为1970 01 01 08 00 00 xff1a new Timestamp 0L 此时报错 xff1a Incorrect datetime value 39 1
  • 【人脸识别】L2_Softmax Loss详解

    论文题目 xff1a L2 constrained Softmax Loss for Discriminative Face Verification 论文地址 xff1a https arxiv org pdf 1703 09507 pd
  • JS 常见的 6 种继承方式

    JS 常见的 6 种继承方式 第一种 xff1a 原型链继承 原型链继承是比较常见的继承方式之一 xff0c 其中涉及的构造函数 原型和实例 xff0c 三者之间存在着一定的关系 xff0c 即每一个构造函数都有一个原型对象 xff0c 原
  • MapReduce编程小案例.9th—join算法

    MapReduce编程小案例 9th join算法 数据 xff1a 有订单数据 xff1a order001 u001 order002 u001 order003 u005 order004 u002 order005 u003 ord
  • centos7 安装qt6,安装失败

    Error during installation process qt qt6 624 gcc 64 Could not find the required QmakeOutputInstallerKey qt qt6 624 gcc 6
  • ubuntu安装chrome浏览器

    1 xff09 使用自带的firefox打开 Google Chrome 网络浏览器 点击下载 xff0c 在linux下 xff0c 下载google chrome stable current amd64 deb 2 进入下载目录 su
  • maven xsd文件

    lt xml version 61 34 1 0 34 gt lt xs schema xmlns xs 61 34 http www w3 org 2001 XMLSchema 34 elementFormDefault 61 34 qu
  • 一个电子发烧友的程序员成长之路

    回想起高考已经是7年前的事情了 xff0c 一直想在毕业之际记忆记录一下7年的历程 xff0c 懒惰始终占据着我的整个身躯 看到这个征文活动 xff0c 让我有点想提笔记录的冲动了 1 邂逅 一直在想该用什么样的语言来将我对电子制作发烧程度
  • AI与医学辅助诊断

    人工智能一词越来越频繁的出现在日常生活中 一种事物的时髦 xff0c 必然有其背后的原因 而对于这样一个大的话题 xff0c 从整体上来叙述总显得有些不接地气 作为跟AI沾过一些边的博主将以自己接触的方面来发表一点看法 首先介绍一下 xff
  • 最优传输理论与计算 ——雷娜 顾险峰 【新书发布】

    缘起 1995年秋季 第二作者刚刚来到哈佛大学开始攻读计算机科学领域的博士学位 并在数学系学习丘成桐先生的微分拓扑课程 同时在麻省理工学院人工智能实验室学习Berthold Horn教授的机器人视觉课程 Horn教授提倡从物理的角度来理解视
  • 1.2.6 Linux distributions

    鸟哥的Linux私房菜 基础学习篇 xff08 第三版 xff09 第1章Linux是什么 xff0c 本章介绍为何Linux可以免除专利软件之争 xff0c 并且了解到Linux为何可以同时在个人计算机与大型主机上面大放光彩 本节为大家介
  • 全球40个免费电子图书馆网址~收藏

    中文 中图在线 xff08 提供 3600 种国外期刊的查阅服务 xff09 http cnplinker cnpeak com 国家哲学社会科学文献中心 xff08 提供 2039 种中文期刊 xff0c 7898 种外文期刊 xff09
  • 【docker】WSL+docker_desktop+GPU配置环境失败

    尝试windows下使用docker desktop安装深度学习的GPU环境 xff0c 结果很失败 xff0c GPU调用不了 我一共尝试两种方式调用GPU 第一种是新版本WSL2直接支持 xff0c 下载一个Nvidia官方的docke
  • public,private,protected 常见区别

    1 作用域public private protected 以及不写时的区别 答 xff1a 不写时默认为default 区别 作用域当前类 同一package子孙类其他packagepublic protected default pri
  • NETCONF协议netopeer软件安装与环境搭建

    NETCONF协议netopeer软件安装与环境搭建 目录 NETCONF协议netopeer软件安装与环境搭建 目录简介相关网站参考准备工作手动编译安装部份依赖包手动编译netopeer启动与验证 简介 最近工作涉及一些NETCONF协议

随机推荐

  • centos7 vnc黑屏解决办法

    手动安装的dbus与系统dbus冲突 xff0c 导致vnc启动黑屏 解决办法如下 xff1a 通过命令 find name 34 dbus daemon 34 查找安装的dbus 其中 usr bin dbus daemon 是系统自带的
  • OVS常用命令与使用总结

    OVS常用命令与使用总结 说明 在平时使用ovs中 xff0c 经常用到的ovs命令 xff0c 参数 xff0c 与举例总结 xff0c 持续更新中 进程启动 1 先准备ovs的工作目录 xff0c 数据库存储路径等 mkdir p et
  • 故障容忍分布式协调框架 Atomix

    Atomix 详细介绍 Atomix 是 JAVA8 的故障容忍分布式协调框架 Fault tolerant distributed coordination framework for Java 8 主要特性 xff1a list 可靠
  • 极几何,本质矩阵,基础矩阵,单应矩阵,相机投影矩阵

    什么是三角化 xff1f 三角化就是下图的红字部分 xff1a K和K 分别为两个相机的内参矩阵 什么是极几何 xff1f 极几何描述了同一场景或者物体在两个视点图像间的对应关系 下图中的O1和O2分别是两个相机的光心 xff0c 即摄像机
  • vncserver Cannot establish any listening sockets - Make sure an X server isn‘t already running(EE)

    说明vnc按顺序想要打开的可视化界面端口已被占用 xff0c 可以使用ps ef grep X命令查看一下进程里已经打开的图形化界面 xff08 有些是其他用户已打开的vnc xff0c 有些是系统默认已启用的图形界面 xff0c 不要随意
  • 如何处理linux Ubuntu网络不通的问题

    ubuntu 网络图标不见的问题解决方案 xff08 即无法联网解决方案 xff09 尝试以下操作 xff1a sudo service network manager stop sudo rm var lib NetworkManager
  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • Python添加或去掉百分号

    数据 xff1a import pandas testing as tm data 61 tm makeDataFrame data 61 data iloc 5 示例数据 xff1a A B C D 6EBYVo9iQi span cla
  • MxNet(GPU版本)安装及相关配置(CUDA,CuDNN,Graphviz,d2l,虚拟环境配置)及最终建议

    深度学习框架MxNet配置 xff08 GPU版本 xff09 1 对应镜像 xff1a https mirrors aliyun com pypi simple mxnet 找到与自己电脑Python版本对应 xff08 命令行使用pyt
  • Kali Linux使用(含VMVare station player安装教程)

    VMware Workstation Player下载及安装配置 1 官方下载地址 xff1a VMvare Workstation Player 2 安装 xff1a 基本一路点 xff0c 需要注意的地方就是后面弄好了要重启一下 xff
  • 那些提升效率的tips(不定期更新中...)

    电脑插了网线可以上网却显示无internet 打开设备管理器 xff08 找不到在控制面板中搜索 设备管理器 xff09 找到网络适配器 选择网卡驱动程序 xff0c 先禁用设备再开启设备 xff08 重启 xff09 用MarkDownl
  • cmake的一个编译报错

    在一台新搭建的服务器上执行cmake的时候 xff0c 报了如下错误 xff1a cmake The C compiler identification is unknown The CXX compiler identification
  • 名词解释专用链接

    算法相关 xff1a 主元素 设T 1 n 是一个含有n个元素的数组 当 i T i 61 x gt n 2 xff0c 时称元素x是数组T的主元素 例如 xff0c T 61 1 1 1 2 5 5 1 1 1 1 xff0c T中有10
  • 微服务讲堂--【4】风洞系统

    一 系统特性 风洞是以人工的方式产生并且控制气流 xff0c 用来模拟飞行器周围气体的流动情况 xff0c 并可测量气流对飞行器的作用效果以及观察物理现象的实验设备 这个定义来自百度百科 xff0c 微服务和飞行器压根就搭不上边 xff0c
  • 微服务讲堂--【5】系统自举

    这里的 系统自举 借用了操作系统的概念 在操作系统启动之前 xff0c 计算机要先加载自举程序 xff0c 再由自举程序加载操作系统的启动程序 整个详细过程不在这里描述 xff0c 可以在网络查阅相关资料 为什么要在微服务系统中特别提及系统
  • 微服务讲堂--【6】系统稳定性

    稳定性 xff0c 通常是以可靠性来衡量 xff0c 即我们常说的几个9 xff0c 这个主题在之前各个系列文章中已经提到过 xff0c 本来没有打算单独写一篇 前几天一个老同事在群里发出一个灵魂之问 xff0c 如何解决生产环境更新系统后
  • 状态和无状态--2种服务器架构之间的比较

    对服务器程序来说 xff0c 有两个基本假设十分重要 xff0c 究竟服务器是基于状态请求还是无状态请求 状态化的判断是指两个来自相同发起者的请求在服务器端是否具备上下文关系 如果是状态化请求 xff0c 那么服务器端一般都要保存请求的相关
  • 日志系统设计

    一 重要性 日志系统在整个系统架构中的重要性可以称得上基础的基础 xff0c 但是这一点 xff0c 都容易被大多数人所忽视 因为日志在很多人看来只是printf 在系统运行期间 xff0c 是很难step by step的 xff0c 所
  • 提高链表随机访问效率的一种方案

    一 问题的描述 链表由于各个元素之间是通过指针方式连接在一起 xff0c 所以增加删除都非常方便 xff0c 但是在随机访问却远不如数组 数组的下标是可以通过算法直接定位的 xff0c 但链表却不行 二 问题的方案 我们定义一种组织方式 x
  • 如何识别验证码

    http www jianblog com 2009 02 09 574 周俭 Blog 基于OpenCV的PHP图像人脸识别技术 二月 9 2009 at 10 13 上午 由 catch Filed under PHP 编程 今天无意中