吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 705|回复: 2
收起左侧

[讨论] 某验4文字点选代图片处理33333

[复制链接]
52hypocrite 发表于 2024-3-21 22:38
本帖最后由 52hypocrite 于 2024-3-22 00:04 编辑

站点:aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v
我们可以看到三代的图片,他自带点选的顺序文字--燕禾金

再看看4代文字点选,可以看到是没有自带文字点选顺序的,逆向的朋友都知道他是站点自己会返回顺序字体的

这里就可以看到站点返回的顺序图片,像看详细点的可以去原站点看看
[url=][/url]
实现的最终结果看下面这张图
[url=]image.png[/url]
看着和三代的差不多对吧,那么我们在识别的时候或者打码平台识别的时候,会不会通过率会比没有处理过的高一点呢
下面是我的思路
1,我们可以按照顺序得到他需要点选的文字,但是得到了之后我们会发现他是一个透明的图片,
将图片放到桌面上之后就可以看到是透明的,就很神奇对吧,使用ddddocr识别不了

这是我放在pycharm里面的效果,当然了他看着不是透明的,需要看看是怎么个事,可以去原站点瞧瞧
那么不难发现他是透明的,字体颜色是黑色的,那么我们需要怎么处理给他可以弄到可识别呢?直接给他一个反转处理
将图片背景改为不透明,他字体不是黑色的嘛,将背景改为白色,神奇地方就来了,可识别。(为啥就变得可识别我就不知道了)

2,我们不是可以拿到顺序文字的几张图片嘛,都这么处理之后图片以他识别出来的文字命名,或者直接按照123顺序拼接,之后再识别

3,新建一张图片,宽不变,比原来的底图高20像素
4,之后将底图copy到新建的图片里面,再将拼接或者识别的文字添加到高出底图的位置就行

最后补充:
对于第二步:这里将拼接的图片放到底部之后会出现超出来,那么就修改新建图片的大小,那么就修改新建拖得大小就行了,只不过不美观
第一次发帖排版望理解,最后就是为啥我保存了之后会变为空白啊,编辑了好几次
有啥简便的方法可以讨论,我这并不是唯一方法。当然了最后就是代码
[Python] 纯文本查看 复制代码
import pytesseract
from PIL import Image
import ddddocr


def demo(img_path: str):
    """
    OCR库识别图片
    :param img_path:
    :return:
    """
    image = Image.open(img_path)
    # 使用pytesseract调用image_to_string方法进行识别,传入要识别的图片,lang='chi_sim'是设置为中文识别,
    text = pytesseract.image_to_string(image, lang='chi_sim')
    name = ''
    for i in text.split(' '):
        if '\n\x0c' in i:
            i.replace('\n\x0c', '')
            name += i
            continue
        name += i
    return name


def xxx(tt: list, new_path: str):
    """
    需要去修改新图片大小,和小图片大小 (未完善)
    将图片copy 到另一个图片里面,按照坐标来copy:
    tt = [[0, 0, '0'], [1, 0, '1'], [2, 0, '2']]
    tt = [[0, 0, 'result_0'], [1, 0, 'result_1'], [2, 0, 'result_2']]
    img_path = 'text_2.png'
    :param tt:
    :parame new_path: 新图片名字
    :return:
    """
    # 把所有小图片加载进列表
    images = []
    x = 0
    y = 0
    for i in tt:
        x = i[0]
        y = i[1]
        x_x = x * 64
        x_y = y * 65
        # img_name = './img/' + i[-1] + '.png'
        # img_name = i[-1] + '.png'
        img_name = i[-1]
        img = Image.open(img_name)
        images.append([x_x, x_y, img])
    print(tt)
    # 创建一个空的大图像
    large_image_width = 192
    large_image_height = 65

    large_image = Image.new('RGBA', (large_image_width, large_image_height), (255, 255, 255, 255))
    # large_image = Image.open('image.png')

    # 定义小图像素大小和数量
    small_image_width = 64
    small_image_height = 65

    # 定义每张小图的坐标,并粘贴到大图上
    for coordinates in images:
        x1, y1 = coordinates[0], coordinates[1]
        img = coordinates[2]
        x2, y2 = x1 + small_image_width, y1 + small_image_height
        large_image.paste(img, (x1, y1, x2,  y2))
        # 把生成的大图保存到磁盘
        large_image.save(new_path)
    print('将图片copy到一个图片中,完成')


def xxx_list(img_path: list, new_path: list):
    """
    这里是把透明图片改为不透明 以列表方式传进来  批量处理
    需要传入列表,保存的名字,也是列表
    :param img_path: 需要修改透明背景的图片 -- 列表方式
    :param new_path: 保存修改之后的图片  -- 列表方式
    :return:
    """
    """ 这里只是处理完成,并没有返回图片名字"""
    # 打开RGBA图像
    # for img_name, new_name in zip(img_path, new_path):
    #     image = Image.open(img_name)
    #     # 创建一个新的PNG图像,背景为白色,大小与原始图像相同
    #     background = Image.new('RGB', image.size, (255, 255, 255))
    #     # 合并两个图像,将不透明度应用于原始图像
    #     background.paste(image, mask=image.split()[3])
    #     background.save(new_name)
    #     print(f'{img_name} 图片处理之后为: {new_name}')

    """这里是处理完成之后返回图片名字"""
    new_img_name = []
    for i in range(len(img_path)):
        image = Image.open(img_path[i])
        # 创建一个新的PNG图像,背景为白色,大小与原始图像相同
        background = Image.new('RGB', image.size, (255, 255, 255))
        # 合并两个图像,将不透明度应用于原始图像
        background.paste(image, mask=image.split()[3])
        background.save(new_path[i])
        new_img_name.append([i, 0, new_path[i]])
        print(f'{img_path[i]} 图片处理之后为: {new_path[i]}')
    return new_img_name


def xxx_(img_path: str, new_path: str):
    """
    这里是把透明图片改为不透明 以列表方式传进来  单个处理
    需要传入列表,保存的名字,也是列表
    :param img_path: 需要修改透明背景的图片
    :param new_path: 保存修改之后的图片
    :return:
    """
    image = Image.open(img_path)
    # 创建一个新的PNG图像,背景为白色,大小与原始图像相同
    background = Image.new('RGB', image.size, (255, 255, 255))
    # 合并两个图像,将不透明度应用于原始图像
    background.paste(image, mask=image.split()[3])
    background.save(new_path)
    print(f'处理完成 - 处理的图片{img_path} - 新图片{new_path}')


def dddd_ocr(img_path: str):
    """
    用于识别图片文字
    :param img_path:
    :return:
    """
    ocr = ddddocr.DdddOcr()
    inage_content = Image.open(img_path)
    dc_zb = ocr.classification(inage_content)
    return dc_zb


if __name__ == '__main__':
    # 加载字体
    font_path = "C:\\Users\\user\\Desktop\\新建文件夹\\Noto_Sans_SC\\NotoSansSC-Thin.otf"
    # orc库识别汉字
    # text = demo(img_path='img_1.png')
    # print(text)

    """将小图片通过坐标方式copy 到大图片里面"""
    # tt = [[0, 0, '0'], [1, 0, '1'], [2, 0, '2']]
    tt = [[0, 0, 'result_0'], [1, 0, 'result_1'], [2, 0, 'result_2']]
    xxx(tt=tt, new_path='text_2.png')
    xxx_(img_path='1.png', new_path='1_1.png')

    """ 通过图片识别重命名图片"""
    # name = 'shunxu_img/1685079490先选顺序.png'
    # dc_zb = dddd_ocr('shunxu_img/1685079490先选顺序.png')
    # im = Image.open(name)
    # im.save(f'shunxu_img/{dc_zb}.png')


这个是处理的图片代码,有啥缺的告诉我,我贴出来。
转发的话,添加一个文章来源就行。
文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 52hypocrite 发表于 2024-3-22 00:05
这个需要有一个文字库,因为使用到了,自己系统自带或者下载一个都可
watfe 发表于 2024-3-22 09:05
昨天刚好也用到了ddddocr,识别4位数字带直线干扰的验证码。目前的话(截至2024-03-22)ddddocr暂不支持python3.12,想要使用测试的请确保python≤3.11。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 17:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表