IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> js逆向案例五-字符类验证码 -> 正文阅读

[人工智能]js逆向案例五-字符类验证码

案例:一二三四

五、字符验证码的逆向(???)

1、案例插曲_验证码识别ocr库

(1) 字符验证码特点
  • 字符验证码:指用数字、字母、汉字和标点符号等字符作为元素的图片验证码,主要由数字、大写字母、彩色斜线、彩色噪点和彩色背景组成,图像分为3层,最底层为背景色,字符(数字和大写字母)层在背景色之上,干扰(斜线和噪点)层则在最上面,如以下验证码;
    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述在这里插入图片描述

  • 计算型验证码计算型验证码在字符验证码的基础上增加了数学运算,它也是将人类视觉和计算机视觉的差异作为区分用户的依据,如以下验证码
    在这里插入图片描述 在这里插入图片描述

  • 难点:部分验证码带有彩色背景斜线、噪点、字符扭曲、角度旋转和文字重叠,图片中的字符颜色与背景颜色并没有强烈的反差

  • 解决方法:降低斜线和噪点对文字的干扰,增强背景色与字符颜色的反差,也就是对图片进行灰度处理(去掉彩色)和二值化处理(降低干扰、增强颜色反差)

  • 二值化处理:其实是根据阈值调整原图的像素值,将大于阈值的像素点颜色改为白色,小于阈值的像素点改为黑色,这样就能够达到增强颜反差的目的

(1) pytesseract / tesserocr安装与使用(不推荐)
  • 此类ocr识别不是很推荐,毕竟依赖了tesseract-ocr.exe,可作为了解

  • tesserocr需安装依赖tesseract-ocr.exe,可用于识别字母中文,中文需指定参数lang=‘chi_sim’

    pip install tesserocr -i https://mirrors.aliyun.com/pypi/simple
    
  • tesserocr识别之python解析使用如下,有两种二选一

    import tesserocr
    code = tesserocr.file_to_text('img_3.jpg')
    print(code)  
    
    import tesserocr
    from PIL import Image
    code = tesserocr.image_to_text(Image.open('img_3.jpg'))
    print(code)
    # 识别中文
    code = tesserocr.image_to_text(Image.open('img_4.jpg'), lang='chi_sim')
    print(code)
    
  • pytesseract需安装依赖tesseract-ocr.exe,可用于识别字母中文,中文需指定参数lang=‘chi_sim’

    pip install pytesseract -i https://mirrors.aliyun.com/pypi/simple
    
  • pytesseract识别之python解析使用如下

    import pytesseract
    from PIL import Image
    code = pytesseract.image_to_string(Image.open('img_3.jpg'))
    print(code)
    # 识别中文
    code = pytesseract.image_to_string(Image.open('img_4.jpg'), lang='chi_sim')
    print(code)
    
  • 可以选择训练字体模型: 起因:看一张原图识别如下,有部分错别字,所以我们需要训练字体进行优化,可以生成一套自己的字体
    在这里插入图片描述 在这里插入图片描述

    • 如何训练,点击参考这篇文章,最终将生成的zwp.traineddata文件放到tessdata下面,然后识别的时候语言选择该字体。生成box文件原文章中的改成这个tesseract zwp.test.exp0.tif zwp.test.exp0 -l chi_sim --psm 7 batch.nochop makebox,双击jTessBoxEditorFX的.bat文件要等几秒才出现
    • 实践训练出来识别也是失败的,暂未知原因,不管了,哈哈,差不多是这么个流程。最后不推荐这种训练,我们看下面的模块更好用
      在这里插入图片描述
      在这里插入图片描述
(2) muggle-ocr安装与使用(推荐)
  • 官方文档https://pypi.org/project/muggle-ocr/已经下架,目前可以通过下面的方法安装;可用于识别字母数字中文
    pip install muggle-ocr -i https://mirrors.aliyun.com/pypi/simple
    
  • muggle-ocr识别之python解析使用如下
    import muggle_ocr
    
    
    class ImageIdentify:
        @staticmethod
        def muggle_identify(captcha_bytes, ocr=False):
            """
            使用预置模型,预置模型包含了[ModelType.OCR, ModelType.Captcha] 两种
            其中 ModelType.OCR 用于识别普通印刷文本, ModelType.Captcha 用于识别4-6位简单英数验证码
            :param captcha_bytes: 验证码
            :param ocr: 是否使用ocr识别
            :return:
            """
            if ocr:
                sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)
            else:
                sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
            return sdk.predict(image_bytes=captcha_bytes)
    
        @staticmethod
        def muggle_by_yaml_identify(captcha_bytes):
            """
            使用自定义模型
            支持基于 https://github.com/kerlomz/captcha_trainer 框架训练的模型
            训练完成后,进入导出编译模型的[out]路径下, 把[graph]路径下的pb模型和[model]下的yaml配置文件放到同一路径下。
            将 conf_path 参数指定为 yaml配置文件 的绝对或项目相对路径即可,其他步骤一致,如下示例:
            """
            sdk = muggle_ocr.SDK(conf_path="D:\Software\python37\operation18.yaml")
            text = sdk.predict(image_bytes=captcha_bytes)
            return text
    
    
    with open(r'./img/img_1.jpg', 'rb') as f:
        print(ImageIdentify.muggle_identify(f.read(), True))
    	print(ImageIdentify.muggle_identify(f.read()))
    	print(ImageIdentify.muggle_by_yaml_identify(f.read()))
    
  • 可以选择训练字体模型
    • 可查看up主视频解析讲解训练和部署,或者看文档介绍,或者看我下面简要的操作步骤,更详细的还是看上面的两个

    • 使用captcha_trainer项目源码训练模型,下载源码并解压
      在这里插入图片描述

    • 然后安装一些项目环境依赖,上述下载的文件解压后可看见requirements.txt,建个虚拟环境安装进行安装依赖库pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt,框架默认安装TensorFlow-GPU版,建议使用GPU进行训练,如需换用CPU训练则需替换 requirements.txt 文件中的tensorflow-gpu 为tensorflow,其他无需改动。

    • 下载好安装包(GPU训练需要),注意下载runfile类型的安装包,deb安装会自动安装默认驱动:显卡NVIDIA 驱动下载 , CUDA 下载地址cuDNN 下载地址(其中cuDNN需要注册NVIDIA账号且登陆,下载deb安装包))

    • 准备验证码训练样本如下:验证码命名必须是验证码_MD5的形式,如下图,修改验证码统一命名

      import hashlib
      import os
      
      path = r"E:\Samples\case4\true"
      filelist = os.listdir(path)
      for item in filelist:
          src = os.path.join(os.path.abspath(path), item)
          print(src)
          with open(src, "rb") as f:
              _id = hashlib.md5(f.read()).hexdigest()
          dst = os.path.join(os.path.abspath(path), f'{item.split(".")[0]}_{_id}.jpg')
          os.rename(src, dst)
      

      在这里插入图片描述

    • 训练集样本数量准备注意事项:详细看这篇文章

    • 然后运行当前目录下的app.py,即可看到可视化操作界面,如何具体操作可看可查看up主视频第12分钟开始解析讲解训练和部署,以及参数设置的注意事项,点击 [Start Training] 开始训练,中途若需终止训练可点击 [Stop] 停止,若是未达到结束条件而终止任务,可以手动点击 [Compile] 编译
      在这里插入图片描述

    • 训练完成后,在该框架下projects的项目名称下的out目录里可以找到.pb和.yaml文件,才是将该两个文件复制到muggle_ocr相同的目录下
      在这里插入图片描述
      在这里插入图片描述

    • 训练模型后的调用方法,将训练模型和muggle_ocr原有的模型放在同一个目录下,然后调用的时候指定conf_path即可正常调用自己的模型
      在这里插入图片描述

(3) ddddocr安装与使用(推荐)
  • ddddocr安装:识别数字、字母验证码
    pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  • ddddocr识别之python解析使用如下,可选择是否使用gpu
    import ddddocr
    ocr = ddddocr.DdddOcr(use_gpu=False)
    with open(r'./img/img_3.jpg', 'rb') as f:
    	print(ocr.classification(f.read()))
    
(4) easyocr安装与使用(推荐)
  • easyocr安装:支持80多种语言的识别,据该文章介绍,精度优于PaddleOCR
    pip install easyocr -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  • easyocr识别之python解析使用如下,第一次运行时加载稍长,需要在线下载检测模型和识别模型,之后就正常了,可选择是否使用gpu
    reader = easyocr.Reader(['ch_sim', 'en'], gpu=False)  # need to run only once to load model into memory
    print(reader.readtext('./img/img_7.png', detail=0))
    
(5) paddleocr安装与使用(推荐)
  • paddleocr安装:注意此版本为CPU版本
    pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  • paddleocr识别之python解析使用如下
    from paddleocr import PaddleOCR, draw_ocr
    from PIL import Image
    
    
    ocr = PaddleOCR(use_angle_cls=True, lang="ch")
    result = ocr.ocr(captcha_path, cls=True)
    for line in result:
        print(line)
    image = Image.open(captcha_path).convert('RGB')
    boxes = [line[0] for line in result]
    txts = [line[1][0] for line in result]
    scores = [line[1][1] for line in result]
    im_show = draw_ocr(image, boxes, txts, scores)
    im_show = Image.fromarray(im_show)
    im_show.show()
    

2、案例13_验证码去噪及识别

  • ① 对图片验证码降噪、二值化,适用于提取字段颜色与背景颜色完全相同的验证码,效果如下
    在这里插入图片描述 在这里插入图片描述

  • ② 9领域法,以一点为中心, 即数字九宫格键,去除周边黑点小于阈值的噪点,效果如下
    在这里插入图片描述 在这里插入图片描述

  • 详细代码见github

3、案例插曲_tensorflow与pytorch

  • 还没学,后面再补上
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:49:57  更:2021-11-16 18:51:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:37:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码