驗證碼識別

2021-08-08 18:25:26 字數 3719 閱讀 5320

驗證碼識別過程好比人大腦的乙個識別過程 。

首先,我們的眼睛接收,並將這張的資訊輸送給大腦;

然後,我們的大腦接收到這個資訊以後,對這個資訊作出處理;

最後,將中的有效資訊提取出來再將其和大腦中儲存的資訊進行對應對比,確定對比結果。

模擬驗證碼識別,大腦接受的處理過程就相當於電腦對的預處理,大腦對進行對比和確定結果就相當於電腦對驗證碼進行的識別。

1.驗證碼獲取

clc; clear all; close all;

% 設定資料庫檔案路徑

foldername = fullfile(pwd, 'database');

if ~exist(foldername, 'dir');

mkdir(foldername);

end% 採集數目

% 獲取指定的驗證碼

img = get_yzm(seed);

imwrite(img, filenamei);

end

2.建立標準字元庫

clc; clear all; close all;

% 設定生成路徑

foldername_out = fullfile(pwd, 'model_out');

if ~exist(foldername_out, 'dir');

mkdir(foldername_out);

end% 上下左右有效區域

th = [3 17 5 56];

for k = 1 : 6

% 讀取模型

% 顏色分割

hsv = rgb2hsv(img);

i = hsv(:,:,3);

i = im2uint8(mat2gray(i));

% 反色

i = imcomplement(i);

% 閾值分割

thresh = graythresh(i);

if thresh < 0.4

thresh = 0.5;

end% 二值化

bw = im2bw(i, thresh);

% 去除小的雜點

bw = bwareaopen(bw, 7);

% 區域分割(把驗證碼之外的區域去除)

bw(1:th(1), :) = 0;

bw(th(2):end, :) = 0;

bw(:, 1:th(3)) = 0;

bw(:, th(4):end) = 0;

% 區域標記

[l, num] = bwlabel(bw);

% 區域分割

stats = regionprops(l);

for i = 1 : num

% 分別提取

rect = stats(i).boundingbox;

bwi = bw;

bwi(l ~= i) = 0;

% 裁剪出字元

bwi = imcrop(bwi, rect);

% 寫出

3.驗證碼識別

clc; clear all; close all;

% 載入模板

% 二值化

bw = im2bw(bw);

[ri, ci] = find(bw);

%驗證碼定位與裁剪

recti = [min(ci) min(ri) max(ci)-min(ci) max(ri)-min(ri)];

bw = imcrop(bw, recti);

% 提取特徵用於識別(自定義函式)

phi = featureextract(bw);

% 提取第乙個字元作為標識

img = get_yzm();

% 影象分割

th = [3 17 5 56];

hsv = rgb2hsv(img);

i = hsv(:,:,3);

i = im2uint8(mat2gray(i));

i = imcomplement(i);

thresh = graythresh(i);

if thresh < 0.4

thresh = 0.5;

endbw = im2bw(i, thresh);

bw = bwareaopen(bw, 7);

bw(1:th(1), :) = 0;

bw(th(2):end, :) = 0;

bw(:, 1:th(3)) = 0;

bw(:, th(4):end) = 0;

%區域標記與分割

[l, num] = bwlabel(bw);

stats = regionprops(l);

result = ;

for i = 1 : num

rect = stats(i).boundingbox;

bwi = bw;

bwi(l ~= i) = 0;

bwi = imcrop(bwi, rect);

[ri, ci] = find(bwi);

recti = [min(ci) min(ri) max(ci)-min(ci) max(ri)-min(ri)];

bwi = imcrop(bwi, recti);

phi = featureextract(bwi);

for j = 1 : length(words)

dis(j) = norm(phi - words(j).phi);

end[~, ind_min_dis] = min(dis);

result = [result words(ind_min_dis).char];

endfigure('color', 'w');

subplot(2, 1, 1); imshow(img, ); title('驗證碼影象');

subplot(2, 1, 2); imshow(bw, ); title(result, 'fontweight', 'bold', 'fontsize', 16, 'color', 'r');

驗證碼 簡單驗證碼識別

這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 興之所至之所以說簡單,我覺得是這樣的 抽了五張驗證碼扔進ps,50 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...

驗證碼識別

import tensorflow as tf 定義乙個初始化權重的函式 def weight variables shape w tf.variable tf.random normal shape shape,mean 0.0,stddev 1.0 return w 定義乙個初始化偏置的函式 d...

CSDN驗證碼識別

獲取影象部分 private stream geturl ref string str private string getnumber 驗證碼識別部分 public class csdn public string readmap bitmap image private int readmap ...