koulab

購入型リサーチャー

CAPTCHAをtesseractで突破する

この記事はあやしいネットワーク関連 Advent Calendar 2018の7日目の記事です

あやしいネットワーク関連 Advent Calendar 2018 - Adventar

f:id:dmca:20181207180037p:plain
captcha-bypass-target

Sorry Japanese Only ! 𠔻

音声認証がなく画像認証のみしか提供していないウェブサイトで目が不自由なユーザがCAPTCHAを入力することなく利用できるようにするために突破します

ちなみに、私は遺伝子検査で加齢黄斑変性と緑内障のリスクが日本人平均の2倍でした。将来的に見えにくくなる、見えなくなった場合のためにも日ごろからCAPTCHAを突破できる学習データを作成しておきましょう(?)

tesseractの学習データをMATLABのOCRトレーナーで作成します

フリーソフトでもtesseract create training dataな感じで探せばあると思います

tesseract-ocr · GitHub

CAPTCHAデータの取得

割愛します。お好きな言語でスクレイピングしやすいので画像データを保存してください

画像前処理

ノイズ除去とか必要ならscipy/numpy/imagick/opencvなどで頑張ってください

学習データ作成

適当にやる f:id:dmca:20181207185529p:plain f:id:dmca:20181207190118p:plain f:id:dmca:20181207190226p:plain

学習ボタン押せばtessdataが出力されます

テストデータの作成

素人なのでよくわかりませんが、CSVで正解文字列,画像ファイル名みたいな感じで作ってtesseractの吐き出す文字列でstrcmpして正答率のチェックすればいいんじゃないですかね。ここ外注ポイントです

tesseractを呼び出してオートメーション化

お好きな言語でどうぞ

GitHub - thiagoalessio/tesseract-ocr-for-php: A wrapper to work with Tesseract OCR inside PHP.

<?php
require './vendor/autoload.php';

$image = 'test.png';

$list = array_merge(
    range('a','z'),
    range('A','Z'),
    range('0','9')
);
$tess = (new TesseractOCR($image));
$result = $tess
    ->whitelist($list)
    ->psm(8)
    ->tessdataDir('./tessdata')
    ->lang('domain','eng')
    ->run();
var_dump($result);

さいごに

画像処理の素人なのでよくわかりませんが、フルスタックエンジニアはこのぐらい朝飯前なんでしょうな

最近のクラウド家計簿サービスとかはこういうこともやってるっぽい気がします