sml2h3 / ddddocr

带带弟弟 通用验证码识别OCR pypi版
https://ddddocr.com
MIT License
8.96k stars 1.64k forks source link

滑块拼图,存在两个相同缺口坑位的拼图,有解决方法吗? #110

Closed LEIRONGHUA closed 1 year ago

LEIRONGHUA commented 1 year ago

image 类似上图,已知slider滑动图片的top偏移量,能否改进识别呢? 背景图: image 滑块图: image

LEIRONGHUA commented 1 year ago

自己慢慢折腾去吧,这tm谁能帮得了你

嗯,已经折腾,解决了。 现在关闭这个问题。

BilikoX commented 1 year ago

自己慢慢折腾去吧,这tm谁能帮得了你

嗯,已经折腾,解决了。 现在关闭这个问题。

可以分享下解决方案吗😊

SweetInk commented 1 year ago

自己慢慢折腾去吧,这tm谁能帮得了你

嗯,已经折腾,解决了。 现在关闭这个问题。

可以分享下解决方案吗😊

估计基于top偏移,剪裁top以上区域,再识别

BilikoX commented 1 year ago

自己慢慢折腾去吧,这tm谁能帮得了你

嗯,已经折腾,解决了。 现在关闭这个问题。

可以分享下解决方案吗😊

估计基于top偏移,剪裁top以上区域,再识别

这个思路挺好,我尝试实现了一下,不知道有没有更合适的方法

import ddddocr
from PIL import Image
from io import BytesIO

det = ddddocr.DdddOcr(det=False, ocr=False)

def get_slide_distance(target_img_bytes: bytes = None, background_img_bytes: bytes = None):
    # 获取滑块图片高度
    target = det.get_target(target_img_bytes)

    # 对滑块和背景图片进行裁剪
    target_img = Image.open(BytesIO(target_img_bytes))
    background_img = Image.open(BytesIO(background_img_bytes))
    target_box = (0, target[2], target_img.width, target_img.height)
    target_img = target_img.crop(target_box)
    background_box = (0, target[2], background_img.width,background_img.height)
    background_img = background_img.crop(background_box)

    # 将图片转换为bytes类型
    with BytesIO() as target_buffer:
        target_img.save(target_buffer, format='PNG')
        target_bytes = target_buffer.getvalue()
    with BytesIO() as background_buffer:
        background_img.save(background_buffer, format='PNG')
        background_bytes = background_buffer.getvalue()

    # 返回滑动距离
    return det.slide_match(target_bytes, background_bytes)["target"][0]