Install
openclaw skills install captcha-recognitionRecognizes CAPTCHA images using ddddocr library. Invoke when user needs to recognize/decode CAPTCHA images or mentions captcha verification.
openclaw skills install captcha-recognition基于 ddddocr 的验证码识别技能,提供简单易用的验证码识别功能。
当用户有以下请求时,应该激活此技能:
识别验证码图片:
网络验证码识别:
OCR 相关请求:
验证码验证场景:
pip install ddddocr opencv-python numpy Pillow requests
本技能支持多种验证码图片输入方式:
| 格式 | 示例 | 说明 |
|---|---|---|
| 本地文件路径 | captcha.jpg | 本地存储的验证码图片 |
| HTTP/HTTPS URL | http://example.com/captcha.png | 网络上的验证码图片 |
| Blob URL | blob:https://example.com/... | 浏览器 Blob URL(需特殊处理) |
| 字节数据 | bytes | 图片的二进制数据 |
| PIL Image | PIL.Image.Image | PIL Image 对象 |
Blob URL(如 blob:https://example.com/xxx)是浏览器内部创建的临时 URL,无法从服务器端直接访问。如果用户提供 Blob URL,需要:
python scripts/captcha.py <image_path_or_url> [--preprocess]
参数说明:
image_path_or_url: 验证码图片路径或网络 URL(必需)--preprocess: 可选,启用图像预处理(灰度化、二值化)示例:
# 本地文件
python scripts/captcha.py captcha.jpg
python scripts/captcha.py captcha.jpg --preprocess
# 网络 URL
python scripts/captcha.py http://example.com/captcha.png
python scripts/captcha.py https://example.com/captcha.jpg --preprocess
(注意:如果想要更快速和节省Token,你应该优先使用命令行的方式!)
from scripts.captcha import recognize_captcha
# 方法1: 从文件路径识别(最常用)
result = recognize_captcha("path/to/captcha.jpg")
print(f"验证码内容: {result}")
# 方法2: 从网络 URL 识别
result = recognize_captcha("http://example.com/captcha.png")
print(f"验证码内容: {result}")
result = recognize_captcha("https://example.com/captcha.jpg")
print(f"验证码内容: {result}")
# 方法3: 从字节数据识别
with open("captcha.jpg", "rb") as f:
image_bytes = f.read()
result = recognize_captcha(image_bytes)
# 方法4: 从 PIL Image 对象识别
from PIL import Image
pil_image = Image.open("captcha.jpg")
result = recognize_captcha(pil_image)
对于质量较差或有干扰线的验证码,可以启用预处理:
# preprocess=True 会进行灰度化和二值化处理
result = recognize_captcha("captcha.jpg", preprocess=True)
recognize_captcha(image, preprocess=False, show_ad=False, timeout=10)主要识别函数,支持多种输入格式。
参数:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
image | str / bytes / PIL.Image.Image | 是 | 验证码图片,可以是文件路径、网络 URL、字节数据或 PIL Image 对象 |
preprocess | bool | 否 | 是否启用图像预处理(灰度化、二值化),默认 False |
show_ad | bool | 否 | 是否显示 ddddocr 广告,默认 False |
timeout | int | 否 | 网络 URL 请求超时时间(秒),默认 10 |
返回值:
str: 识别出的验证码文本异常:
FileNotFoundError: 图片文件不存在ValueError: 不支持的 URL 格式(如 Blob URL)RuntimeError: 网络请求失败或图像处理失败TypeError: 不支持的图片类型ImportError: 缺少必要的依赖库CaptchaRecognizer 类如需更细粒度的控制,可以直接使用类:
from scripts.captcha import CaptchaRecognizer
recognizer = CaptchaRecognizer(show_ad=False)
# 从文件识别
result = recognizer.recognize_from_file("captcha.jpg", preprocess=False)
# 从网络 URL 识别
result = recognizer.recognize_from_url("http://example.com/captcha.png", preprocess=False)
# 从字节识别
with open("captcha.jpg", "rb") as f:
result = recognizer.recognize_from_bytes(f.read())
# 从 PIL Image 识别
from PIL import Image
img = Image.open("captcha.jpg")
result = recognizer.recognize_from_pil(img)
preprocess=TrueFileNotFoundError、ValueError 和 TypeError 提供友好的错误提示recognize_captcha() 使用单例模式,重复调用不会重复加载 OCR 模型timeout 参数调整请求超时时间from scripts.captcha import recognize_captcha
def solve_captcha(image_source):
"""识别验证码并处理可能的错误"""
try:
# 先尝试不预处理
result = recognize_captcha(image_source)
# 如果结果为空或不合理,尝试预处理
if not result or len(result) < 2:
result = recognize_captcha(image_source, preprocess=True)
return result
except FileNotFoundError:
return "错误:找不到图片文件"
except ValueError as e:
return f"错误:{e}"
except ImportError as e:
return f"错误:缺少依赖库 - {e}"
except Exception as e:
return f"错误:识别失败 - {e}"
# 使用本地文件
result = solve_captcha("captcha.jpg")
print(f"识别结果: {result}")
# 使用网络 URL
result = solve_captcha("http://example.com/captcha.png")
print(f"识别结果: {result}")