某验4文字点选代图片处理33333
本帖最后由 52hypocrite 于 2024-3-22 00:04 编辑站点:aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v
我们可以看到三代的图片,他自带点选的顺序文字--燕禾金
https://attach.52pojie.cn//forum/202403/21/224015ubmoa88cz8ffc1id.png?l
再看看4代文字点选,可以看到是没有自带文字点选顺序的,逆向的朋友都知道他是站点自己会返回顺序字体的
https://attach.52pojie.cn//forum/202403/21/233733eh3g2a8ni9fi9fp8.png?l
这里就可以看到站点返回的顺序图片,像看详细点的可以去原站点看看
https://attach.52pojie.cn//forum/202403/21/234024i57fhhshwcfppsz7.png?l
实现的最终结果看下面这张图
image.png
看着和三代的差不多对吧,那么我们在识别的时候或者打码平台识别的时候,会不会通过率会比没有处理过的高一点呢
下面是我的思路
1,我们可以按照顺序得到他需要点选的文字,但是得到了之后我们会发现他是一个透明的图片,
将图片放到桌面上之后就可以看到是透明的,就很神奇对吧,使用ddddocr识别不了
https://attach.52pojie.cn//forum/202403/21/234612na4yeyxim8y88a3m.png?l
这是我放在pycharm里面的效果,当然了他看着不是透明的,需要看看是怎么个事,可以去原站点瞧瞧:Dweeqw
那么不难发现他是透明的,字体颜色是黑色的,那么我们需要怎么处理给他可以弄到可识别呢?直接给他一个反转处理
将图片背景改为不透明,他字体不是黑色的嘛,将背景改为白色,神奇地方就来了,可识别。(为啥就变得可识别我就不知道了)
https://attach.52pojie.cn//forum/202403/21/235021qvr8tdvlm8873mzl.png?l
2,我们不是可以拿到顺序文字的几张图片嘛,都这么处理之后图片以他识别出来的文字命名,或者直接按照123顺序拼接,之后再识别
https://attach.52pojie.cn//forum/202403/21/235351g77upv9vp7h29hhz.png?l
3,新建一张图片,宽不变,比原来的底图高20像素
4,之后将底图copy到新建的图片里面,再将拼接或者识别的文字添加到高出底图的位置就行
https://attach.52pojie.cn//forum/202403/21/235613fo1y80yxuym36yx9.png?l
最后补充:
对于第二步:这里将拼接的图片放到底部之后会出现超出来,那么就修改新建图片的大小,那么就修改新建拖得大小就行了,只不过不美观
第一次发帖排版望理解,最后就是为啥我保存了之后会变为空白啊,编辑了好几次{:1_889:}
有啥简便的方法可以讨论,我这并不是唯一方法。当然了最后就是代码
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 = [, , ]
tt = [, , ]
img_path = 'text_2.png'
:param tt:
:parame new_path: 新图片名字
:return:
"""
# 把所有小图片加载进列表
images = []
x = 0
y = 0
for i in tt:
x = i
y = i
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()
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, coordinates
img = coordinates
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())
# 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)
# 创建一个新的PNG图像,背景为白色,大小与原始图像相同
background = Image.new('RGB', image.size, (255, 255, 255))
# 合并两个图像,将不透明度应用于原始图像
background.paste(image, mask=image.split())
background.save(new_path)
new_img_name.append(])
print(f'{img_path} 图片处理之后为: {new_path}')
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())
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 = [, , ]
tt = [, , ]
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个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。 这个需要有一个文字库,因为使用到了,自己系统自带或者下载一个都可 昨天刚好也用到了ddddocr,识别4位数字带直线干扰的验证码。目前的话(截至2024-03-22)ddddocr暂不支持python3.12,想要使用测试的请确保python≤3.11。
页:
[1]