これは、Python 3、Keras、TensorFlow での CNN の実際の実装です。 Preprocess.py
を使用して、アーティファクトのない数字画像を作成する 2 つの主要な手順で作業します。この画像は、後で CNN モデルをトレーニングして保存するtrain.py
内の CNN モデルに供給されます。
このキャプチャ ソルバーは、コース能力チェック https://student.metu.edu.tr/ のための METU の学生ポータル キャプチャ保護を回避するために、metu-NTE-scraper で使用するために開発され、現在も使用されています。ただし、「使い方」で説明されている簡単な手順でアプリケーションで使用できます。セクション。
TensorFlow を使用して CNN をトレーニングし、数字抽出後のキャプチャ数字の画像を分類しました。モデルは、2 つの畳み込み層とプーリング層、その後に続く全結合層で構成されます。 10,000 個のキャプチャ画像のデータセットでモデルをトレーニングし、その後 60,000 桁の画像に分割し、12,000 桁の画像テスト セットで 99.94% のテスト精度を達成しました。
モデルのトレーニングとテストの精度は次のとおりです。
注: 活性化ニューロン応答の画像の一部は、4 つの前処理ステップの下に表示されます。
predict.py
Python プログラムにインポートします。 Import predict
predict_captcha
関数を呼び出して、キャプチャを予測します。 filepath="pathtocaptchaimage"
prediction=predict.predict_captcha(filepath)
数字抽出器とモデルを理解しやすくするために、視覚化された手順を示します。
Preprocess.py
4 つのステップで動作し、以下に示す数字イメージを作成し、最後にモデルをアクティブ化します。
最初のステップでは、 SampleCollecter.py
使用して収集されたキャプチャ画像のアーティファクトをクリアします。
元の画像 | アーティファクト除去後 |
---|---|
その後、アーティファクトのない画像がキャプチャの桁を境界付けるために切り取られます。
アーティファクト除去後 | 切り取られた |
---|---|
加重 K 平均法を使用して各桁の中心を見つけます。
切り取られた | 重心 |
---|---|
最後に、K 平均法で見つかった重心を使用して数値画像を作成します。
重心 | 数字 |
---|---|
数字が抽出された後。 CNN モデルは、キャプチャ画像を予測するために使用されます。ここでは、CNN の最後の畳み込み層に対して生成された活性化ニューロンを示します。これらの画像は、最後の畳み込み層の出力を抽出し、画像として視覚化することによって作成されました。以下のアクティベーション画像は、2 桁画像の最後の畳み込み層にあるいくつかのフィルターの応答を示しています。
抽出された数字 | アクティベーション10 | アクティベーション 18 | 活性化 26 | 活性化 29 |
---|---|---|---|---|
注: 他のニューロンの反応を確認するには、活性化をチェックします。