python識別登録検証コードピクチャ機能の実現コード(完全コード)
自動化テストケースを作成する時は、ログインするたびに認証コードを入力してください。その後、python自身に画像の中の検証コードを認識させたいです。自分で手動で登録する必要がないので、識別機能がどのように実現されるかを調べてメモしてください。
まず使用するライブラリを導入します。re、Image、pytesseract、selenium、time
クラスを作成して、webdriverとfind_を定義します。element_by_selectorメソッドは、ウェブページを開くために使用されます。
未処理の検証コードピクチャは、pythonにとって識別率が低いので、よく見ると、画像の中には、五色撹乱識別の点が多く、識別率に非常に影響していることが分かります。
取得した検証コードを以下に処理します。
まずconvertで画像を白黒に変えます。閾値を超えるのは黒です。
その後、識別を妨害する画素点を削除する。
最後に処理した画像を文字に変換します。
まずpytesseractのパスを設定します。デフォルトのパスは間違っていますので、画像をテキストに変換します。個々のピクチャでは、処理漏れがあると認識されますので、スペースやポイント、またはセミコロンなどと認識されます。検証コードの中の特殊な文字を取り除く処理を追加しました。
PS:tesseractファイルダウンロードリンク
ここではpythonの識別登録検証コード写真(完全コード)に関する記事を紹介します。より多くの関連pythonの識別登録検証コード画像の内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
まず使用するライブラリを導入します。re、Image、pytesseract、selenium、time
import re #
from PIL import Image #
import pytesseract #
from selenium import webdriver #
import time #
まず、検証コード画像を取得する必要があります。さらに識別することができます。クラスを作成して、webdriverとfind_を定義します。element_by_selectorメソッドは、ウェブページを開くために使用されます。
class VerificationCode:
def __init__(self):
self.driver = webdriver.Firefox()
self.find_element = self.driver.find_element_by_css_selector
ブラウザを開いて検証コードの画像を切り取ります。
def get_pictures(self):
self.driver.get('http://123.255.123.3') #
self.driver.save_screenshot('pictures.png') #
page_snap_obj = Image.open('pictures.png')
img = self.find_element('#pic') #
time.sleep(1)
location = img.location
size = img.size #
left = location['x']
top = location['y']
right = left + size['width']
bottom = top + size['height']
image_obj = page_snap_obj.crop((left, top, right, bottom)) # ,
image_obj.show() #
self.driver.close() #
return image_obj
未処理前の認証コード画像は以下の通りです。未処理の検証コードピクチャは、pythonにとって識別率が低いので、よく見ると、画像の中には、五色撹乱識別の点が多く、識別率に非常に影響していることが分かります。
取得した検証コードを以下に処理します。
まずconvertで画像を白黒に変えます。閾値を超えるのは黒です。
def processing_image(self):
image_obj = self.get_pictures() #
img = image_obj.convert("L") #
pixdata = img.load()
w, h = img.size
threshold = 160 # ,
# ,
for y in range(h):
for x in range(w):
if pixdata[x, y] < threshold:
pixdata[x, y] = 0
else:
pixdata[x, y] = 255
return img
階調処理後の画像その後、識別を妨害する画素点を削除する。
def delete_spot(self):
images = self.processing_image()
data = images.getdata()
w, h = images.size
black_point = 0
for x in range(1, w - 1):
for y in range(1, h - 1):
mid_pixel = data[w * y + x] #
if mid_pixel < 50: #
top_pixel = data[w * (y - 1) + x]
left_pixel = data[w * y + (x - 1)]
down_pixel = data[w * (y + 1) + x]
right_pixel = data[w * y + (x + 1)]
#
if top_pixel < 10:
black_point += 1
if left_pixel < 10:
black_point += 1
if down_pixel < 10:
black_point += 1
if right_pixel < 10:
black_point += 1
if black_point < 1:
images.putpixel((x, y), 255)
black_point = 0
# images.show()
return images
ノイズ除去後の画像最後に処理した画像を文字に変換します。
まずpytesseractのパスを設定します。デフォルトのパスは間違っていますので、画像をテキストに変換します。個々のピクチャでは、処理漏れがあると認識されますので、スペースやポイント、またはセミコロンなどと認識されます。検証コードの中の特殊な文字を取り除く処理を追加しました。
PS:tesseractファイルダウンロードリンク
def image_str(self):
image = self.delete_spot()
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # pyteseract
result = pytesseract.image_to_string(image) #
resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result) #
result_four = resultj[0:4] # 4
# print(resultj) #
return result_four
完全コードは以下の通りです。
import re #
from PIL import Image #
import pytesseract #
from selenium import webdriver #
import time #
class VerificationCode:
def __init__(self):
self.driver = webdriver.Firefox()
self.find_element = self.driver.find_element_by_css_selector
def get_pictures(self):
self.driver.get('http://123.255.123.3') #
self.driver.save_screenshot('pictures.png') #
page_snap_obj = Image.open('pictures.png')
img = self.find_element('#pic') #
time.sleep(1)
location = img.location
size = img.size #
left = location['x']
top = location['y']
right = left + size['width']
bottom = top + size['height']
image_obj = page_snap_obj.crop((left, top, right, bottom)) # ,
image_obj.show() #
self.driver.close() #
return image_obj
def processing_image(self):
image_obj = self.get_pictures() #
img = image_obj.convert("L") #
pixdata = img.load()
w, h = img.size
threshold = 160
# ,
for y in range(h):
for x in range(w):
if pixdata[x, y] < threshold:
pixdata[x, y] = 0
else:
pixdata[x, y] = 255
return img
def delete_spot(self):
images = self.processing_image()
data = images.getdata()
w, h = images.size
black_point = 0
for x in range(1, w - 1):
for y in range(1, h - 1):
mid_pixel = data[w * y + x] #
if mid_pixel < 50: #
top_pixel = data[w * (y - 1) + x]
left_pixel = data[w * y + (x - 1)]
down_pixel = data[w * (y + 1) + x]
right_pixel = data[w * y + (x + 1)]
#
if top_pixel < 10:
black_point += 1
if left_pixel < 10:
black_point += 1
if down_pixel < 10:
black_point += 1
if right_pixel < 10:
black_point += 1
if black_point < 1:
images.putpixel((x, y), 255)
black_point = 0
# images.show()
return images
def image_str(self):
image = self.delete_spot()
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # pyteseract
result = pytesseract.image_to_string(image) #
resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result) #
result_four = resultj[0:4] # 4
# print(resultj) #
return result_four
if __name__ == '__main__':
a = VerificationCode()
a.image_str()
コメントを見るとtesseract.exeファイルが必要な人が多いですが、ファイルが大きすぎてメールを送るとダウンロードできない場合があります。必要なのはちょっと待ってください。ここではpythonの識別登録検証コード写真(完全コード)に関する記事を紹介します。より多くの関連pythonの識別登録検証コード画像の内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。