1. 程式人生 > >驗證碼識別之圖片處理(一些細節處理)

驗證碼識別之圖片處理(一些細節處理)

上一篇我們聊到了圖片驗證碼處理的基本流程,已經可以應付絕大多數圖片驗證碼了。

驗證碼識別之圖片處理(基礎流程)------ 連結戳這裡

我們來看一下成果:

可以看到應付我們的學習演算法需求已經足夠。

今天我們來看看一些特殊圖片的處理方法:

1、帶邊框驗證碼:

例如:

這種處理方式比較顯而易見,迴圈遍歷時直接將

i<2 or i>rows-3 or j<2 or j>cols-3

的點置為白色即可,程式碼我就不上了。

2、背景色為深色的驗證碼:

例如:

背景顏色比字母顏色深一些,閾值不好定。

這時我們需要獲取圖片背景色,處理依據:

一般背景色都為圖片中顏色佔比最多,我們只要獲取出現最多的顏色,然後全部置為白色即可。

即將其變為:

後續就都一樣了:

python程式碼如下:

# 獲取圖片中畫素點數量最多的畫素並置為白色
def get_threshold(image):
    pixel_dict = defaultdict(int)

    # 畫素及該畫素出現次數的字典
    rows, cols = image.size
    for i in range(rows):
        for j in range(cols):
            pixel = image.getpixel((i, j))
            pixel_dict[pixel] += 1

    count_max = max(pixel_dict.values()) # 獲取畫素出現出多的次數
    pixel_dict_reverse = {v:k for k,v in pixel_dict.items()}
    threshold = pixel_dict_reverse[count_max] # 獲取出現次數最多的畫素點

    for i in range(rows):
        for j in range(cols):
            #剔除邊框
            if image.getpixel((i, j)) == threshold or i<2 or i>rows-3 or j<2 or j>cols-3:
                image.putpixel((i, j), (255, 255, 255, 255))
    return image

3、驗證碼中帶有粗粗的干擾線:

我們之前的干擾線處理方式依據為:

干擾線一般相比較於字母來說比較細,在去除噪點的時候就將其一起去除了。

比如這種:

或者是這種(紅線是我自己畫的。。):

可以看出,我們可以分為兩種型別:

        ①顏色和字母同色

        ②顏色不和字母同色

1、先看第一種,既然顏色,粗細都和字母差不多,也就是說我們無法從外形上直接區分出來,就算是人工來看,區分的依據也是和我們腦海中的字母一個個匹配,這時候我們只能寄希望於我們的學習演算法了,這時候我們圖片處理能做的只能是提高圖片切割時候的閾值,來保證圖片的正確切割:

2、再看第二種,粗細和字母差不多,但是顏色則可以有明顯的區分,這時候我們明顯第一感覺就可以將其過濾掉,那同樣,我們的程式碼中也是可以實現的。

我們看看干擾線的特點:

    ①顏色有明顯區分度;

    ②跨X軸很長;

所以我們的處理依據就出來了:

除背景色外,在X軸上投影上出現次數最多的即為干擾線,將該顏色轉為白色即可。

注意,這裡是在X軸投影上出現過的次數,而不是總次數。(統計X=N的線上出現的顏色,不管在這條線上出現了多少個,都算1次)

python程式碼如下:

def clear_node_rgb(image):
    pixel_list = []
    rows, cols = image.size
    for i in range(rows):
        pixel_rgb = []
        for j in range(cols):
            rgb = image.getpixel((i, j))
            if rgb != (255,255,255) and rgb not in pixel_rgb:
                pixel_list.append(rgb)
                pixel_rgb.append(rgb)
    max_rgb = Counter(pixel_list).most_common(1)[0][0]

    for i in range(rows):
        for j in range(cols):
            pixel = image.getpixel((i, j))
            if pixel == max_rgb:
                image.putpixel((i, j), (255, 255, 255, 255))
    return image

這裡我們處理後的圖片都有一個很明顯的問題:被分割線擋住的部分斷掉了。

那追求完美的我們就需要想辦法去彌補一下了。

在opencv中有一對圖片處理的方法,叫做腐蝕和膨脹

腐蝕的意思為將圖片上的內容邊界消除;

膨脹的意思為將圖片上的內容邊界加粗。

舉個例子:

原圖:

膨脹後:

腐蝕後:

所以,先膨脹後腐蝕,就能消除圖片中的白點,斷層等等。

我們來看看效果:

先膨脹,消除斷層:

再腐蝕,回到原來的比例即可:

python程式碼:

import cv2
import numpy as np


def ercode_dilate(img, threshold):
    #腐蝕引數, (threshold, threshold)為腐蝕矩陣大小
    kernel = np.ones((threshold, threshold), np.uint8)

    # 膨脹圖片
    erosion = cv2.erode(img, kernel, iterations=1)

    # 腐蝕圖片
    eroded = cv2.dilate(erosion, kernel, iterations=1)

    return eroded

img = cv2.imread('test.png', 0)
ercode_dilate(img, 6)

相關推薦

驗證識別圖片處理一些細節處理

上一篇我們聊到了圖片驗證碼處理的基本流程,已經可以應付絕大多數圖片驗證碼了。 驗證碼識別之圖片處理(基礎流程)------ 連結戳這裡 我們來看一下成果: 可以看到應付我們的學習演算法需求已經足夠。 今天我們來看看一些特殊圖片的處理方法: 1、帶邊框驗證碼:

驗證識別演算法腐蝕和二值化處理演算法

腐蝕演算法實現程式碼 private static int[][] erosion(int[][] source,int threshold){ int width = source[0].length; int height = source.leng

Python識別圖形驗證,實現自動登陸附視訊教程

驗證碼有圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、宮格驗證碼。這回重點講講圖形驗證碼的識別。 雖說圖形驗證碼最簡單,但是對於我這等新手,還是要苦學一番。首先尋找測試網站,網站選的是如雲閣小說網,小網站不怕被封。他們的驗證碼一般如下:視訊教程:     &n

Python影象處理圖片驗證識別

  在上一篇部落格Python影象處理之圖片文字識別(OCR)中我們介紹了在Python中如何利用Tesseract軟體來識別圖片中的英文與中文,本文將具體介紹如何在Python中利用Tesseract軟體來識別驗證碼(數字加字母)。   我們在網上瀏覽網頁或

驗證識別最簡單印刷體數字

轉化 end double show ray app def 藍色 代碼實現 # -*- coding: utf-8 -*- import numpy from PIL import Image image = Image.open("5.gif") heigh

2.CNN圖片多標籤分類基於TensorFlow實現驗證識別OCR

上一篇實現了圖片CNN單標籤分類(貓狗圖片分類任務) 地址:juejin.im/post/5c0739… 預告:下一篇用LSTM+CTC實現不定長文字的OCR,本質上是一種不固定標籤個數的多標籤分類問題 本文所用到的10w驗證碼資料集百度網盤下載地址(也可使用下文程式碼自行生成): pan.baidu

.net c#識別圖片二維 圖片處理Img和BitMap

1.場景 承接上篇,如何對攝像頭得到的圖片或者本地圖片進行二維碼識別   2.程式   程式使用類庫zxing.dll(用來識別二維碼),根據圖片識別二維碼方法是通用的 (1)識別二維碼並得到二維碼資訊的方法。(傳入引數為BitMap物件)

驗證識別處理--基於java

先給出要處理的驗證碼地址(地址後面為隨機數字,便於生成不同的驗證碼)http://vote.sun0769.com/include/ ... 1025&rid=866359 (圖示應該為bmp的,因為論壇限制,給存為jpg格式上傳了)看到此驗證碼,開始想到的步驟就

Python爬蟲專案實戰3 | 圖片文字識別驗證識別為例

1.專案背景 我在實習過程中,當我抓取環保平臺相關資料時,常常發現有圖片的情況,比如以下這種圖片,所以抓取這種圖片中的資訊是我進行圖片文字識別的動力: 2.專案思路 因為在某一網站中有大量這種想要抓取的圖片,所以我的思路是, 1.先抓取這些圖片的名稱和URL; 2.然後再根

python爬蟲實現登陸簡單圖片驗證識別Tesseract識別

Tesseract下載與安裝 附:德國曼海姆大學發行的3.05版本下載 安裝與配置PATH環境變數 安裝略,環境變數只要將目錄新增到PATH路徑,PATH路徑針對於命令列解析。 tesseract 1.png output-l eng -psm 7 -ps

卷積神經網路CNN學習演算法----基於LeNet網路的中文驗證識別

  由於公司需要進行了中文驗證碼的圖片識別開發,最近一段時間剛忙完上線,好不容易閒下來就繼上篇《基於Windows10 x64+visual Studio2013+Python2.7.12環境下的Caffe配置學習 》文章,記錄下利用caffe進行中文驗證碼圖片識別的開發過程。由於這裡主要介紹開發和實現過程,

python驗證識別 特征向量提取和余弦相似性比較

wow gif .get extra time ade upd orm log 0.目錄 1.參考2.沒事畫個流程圖3.完整代碼4.改進方向 1.參考 https://en.wikipedia.org/wiki/Cosine_similarity https://zh.wi

python tesseract-ocr 基礎驗證識別功能Windows

please 沒有 pan eas pin mage 需要 utf 文件夾 一、環境   windows 7 x64   Python 3 + 二、安裝   1、tesseract-ocr安裝   http://digi.bib.uni-mannheim.

python 驗證識別示例 復雜驗證識別

def code 分享 切割 edr convert pen https lis    在這篇博文中手把手教你如何去分割驗證,然後進行識別。 一:下載驗證碼        驗證碼分析,圖片上有折線,驗證碼有數字,有英文字母大小寫,分類的時候需要更多的樣本,驗證碼的字母

字元型圖片驗證,使用tensorflow實現卷積神經網路,進行驗證識別CNN

本專案使用卷積神經網路識別字符型圖片驗證碼,其基於 TensorFlow 框架。它封裝了非常通用的校驗、訓練、驗證、識別和呼叫 API,極大地減低了識別字符型驗證碼花費的時間和精力。  專案地址: https://github.com/nickliqian/cnn_captcha

那些年,我爬過的北科(八)——反反爬蟲驗證識別

寫在前面 本章將要介紹一下如何識別簡單的驗證碼。會涉及到一些影象的概念以及機器學習的知識。 我們本次識別的驗證碼來自csdn,長相如下: 在學習之前,我們先安裝本章需要的三個庫:影象庫Pillow、機器學習庫Scikit-Learn、科學計算庫Numpy。通過pip命令就可以進行安裝。

Python網路爬蟲極驗滑動驗證識別

驗證碼分析 使用程式碼完成極驗驗證碼的識別,需要了解一下幾點: 通過該驗證碼的識別動作為:點選並拖拽滑塊 - 滑動滑塊至缺口處 - 釋放滑鼠 該驗證碼增加了機器學習來識別拖動的軌跡,即:

端到端車牌/驗證識別tensorflow版——2

端到端車牌識別(2) 二 、CNN方法 4. 模型訓練 先附上程式碼train.py: """ Created on Tue Sep 5 15:37:26 2017 @author: llc """ #%% import os import numpy as

tensorflow實現驗證識別

tfrecords 由於有個5W張圖片的訓練集,如果是placeholder的方式來把資料餵給graph的話,那可真蠢。。所以不如用tensorflow官方推薦的tfrecords來進行IO。這種IO方式主要是兩步: 1.先把資料dump成tfrecords檔案 2.用佇列來把資料餵

Tensorflow例項2:將影象和標籤資料(*.csv)轉化成tfrecords檔案,以便後續直接讀取tfrecords檔案進行圖片驗證識別訓練

由於多張影象和標籤值不在一起,現在此方法是把captcha_dir = "../data/GenPics/"此路徑下的圖片與此路徑下的.csv檔案合併起來,通過writer = tf.python_io.TFRecordWriter(path="./data/captcha.tfreco