次の図のような単純な画像キャプチャを読み取るには、Python用のキャプチャデコーダが必要です。
このキャプチャを読むのに役立つライブラリを知っていますか?
キャプチャを読むためのライブラリを知らない場合は、PILでこれ(およびこのような他の人)を読むのを手伝ってもらえますか?
次の図のような単純な画像キャプチャを読み取るには、Python用のキャプチャデコーダが必要です。
このキャプチャを読むのに役立つライブラリを知っていますか?
キャプチャを読むためのライブラリを知らない場合は、PILでこれ(およびこのような他の人)を読むのを手伝ってもらえますか?
このキャプチャがどこにも使用されていないことを願っています。
以下はそれをデコードするためのダミーの方法です。基本的に必要なのは、これらのキャプチャに存在する0から9までのパターンです。あなたの例から、私は0 3 4 5 7 8のパターンしか持っていません。すべてがそれらに固定されているので、各文字をどこで分割するかがわかります。また、各文字は固定サイズと固定フォントの数であることも知っています。文字またはそれ以上の文字が含まれているが、サイズとフォントが固定されている場合は、次のコードを簡単に適合させることができます。
コードの機能は次のとおりです。a)パターンをロードします(n0.png、n1.png、...という名前だと思います)。b)キャプチャをNUMS個に分割します。c)各パターンと各分割数の差の2乗の合計を実行します。d)分割数が最小の合計を持つものであると決定します。キャプチャに存在する各番号のリストを順番に返します。初期パターンを取得するには、分割番号を保存している行のコメントを解除し、return
その部分の後に配置して、ファイル名を調整します。
import sys
from PIL import Image, ImageOps
PAT_SIZE = (8, 10)
NUMS = 3
FIRST_NUM_OFFSET = 5
NUM_OFFSET = (1, 3)
NUMBERS = []
for i in xrange(10):
try:
NUMBERS.append(Image.open('n%d.png' % i).load())
except IOError:
print "I do not know the pattern for the number %d." % i
NUMBERS.append(None)
def magic(fname):
captcha = ImageOps.grayscale(Image.open(fname))
im = captcha.load()
# Split numbers
num = []
for n in xrange(NUMS):
x1, y1 = (FIRST_NUM_OFFSET + n * (NUM_OFFSET[0] + PAT_SIZE[0]),
NUM_OFFSET[1])
num.append(captcha.crop((x1, y1, x1 + PAT_SIZE[0], y1 + PAT_SIZE[1])))
# If you want to save the split numbers:
#for i, n in enumerate(num):
# n.save('%d.png' % i)
def sqdiff(a, b):
if None in (a, b): # XXX This is here just to handle missing pattern.
return float('inf')
d = 0
for x in xrange(PAT_SIZE[0]):
for y in xrange(PAT_SIZE[1]):
d += (a[x, y] - b[x, y]) ** 2
return d
# Calculate a dummy sum of squared differences between the patterns
# and each number. We assume the smallest diff is the number in the
# "captcha".
result = []
for n in num:
n_sqdiff = [(sqdiff(p, n.load()), i) for i, p in enumerate(NUMBERS)]
result.append(min(n_sqdiff)[1])
return result
print magic(sys.argv[1])
誠意を持って使用しており、誰かに危害を加えたり(/スパムしたり)しないことを願っています。
スクリプトを作成したり、外部プラグインに転送したりすることはありません。しかし、これを自分で書いている場合、これは役立つかもしれません:
アカデミックな理由でやるのはいいプロジェクトです。少し前に興味がありました。いくつかのオプションがあります。
あなたはこのサイトの助けを借りてあなた自身を書きます:[スクラブされたデッドリンク]
OpenCVを使用してマッチングを行います。
ニューラルネットワークの画像マッチング専用のライブラリがあったと思うが、私はそれを見つけることができないようです。
基本的に、他の人が言ったように、ノイズを取り除き、単一の文字に分割し、選択した手法を使用してモデルの文字と比較します。