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