• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于學(xué)習(xí)的OCR字符識(shí)別

      2018-09-17 05:20:34肖堅(jiān)
      計(jì)算機(jī)時(shí)代 2018年7期

      肖堅(jiān)

      摘 要: OCR(Optical CharacterRecognition)是通過(guò)檢測(cè)字符每個(gè)像素亮度的模式確定其形狀,然后用字符識(shí)別方法將形狀翻譯成計(jì)算機(jī)文字的過(guò)程。文章利用Java語(yǔ)言實(shí)現(xiàn)OCR步驟,包括像素二值化,圖像分割,訓(xùn)練識(shí)別和輸出等。測(cè)試開(kāi)發(fā)是在web驗(yàn)證碼識(shí)別場(chǎng)景中進(jìn)行的,web驗(yàn)證碼是將一串隨機(jī)產(chǎn)生的符號(hào),生成為圖片,再加上一些干擾線,使之能有效防止惡意注冊(cè)和灌水。通過(guò)測(cè)試表明,該方法可行、有效;拒識(shí)率、誤識(shí)率低;識(shí)別速度快,具有一定的實(shí)用意義。

      關(guān)鍵詞: OCR; 驗(yàn)證碼; 文字識(shí)別; 干擾線; 拒識(shí)率; 誤識(shí)率

      中圖分類(lèi)號(hào):TP3 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2018)07-48-04

      Abstract: OCR (Optical Character Recognition) is the process of translating the shape, which is determined by detecting the pattern of the brightness of each pixel of the character, into computer text by character recognition method. In this paper, OCR procedure is implemented in Java language, including pixel binarization, image segmentation, recognition training and output. The test development is carried out in the Web verification code identification scene. The Web verification code is a string of randomly generated symbols, generated as a picture, and a number of interference lines added on it, so that it can effectively prevent malicious registration and irrigation. The test shows that the method is feasible and effective, with low rejection rate and error rate, fast recognition speed, and has practical significance.

      Key words: OCR; verification code; character recognition; interfering line; rejection rate; error rate

      0 引言

      識(shí)別原理及實(shí)現(xiàn)方法:OCR采用光學(xué)的方式,將紙質(zhì)或圖片文檔中的文字轉(zhuǎn)換成為黑白點(diǎn)陣的圖像文件,并通過(guò)識(shí)別軟件將圖像中的文字轉(zhuǎn)換成文本格式,供文字處理軟件進(jìn)一步編輯加工的技術(shù)。

      識(shí)別過(guò)程一般分以下幾個(gè)步驟:

      首先訓(xùn)練學(xué)習(xí)過(guò)程,分成圖像生成,預(yù)處理,圖像分割三個(gè)步驟,圖像分割不是簡(jiǎn)單的將圖片等份分割,常常需要程序員像素級(jí)微調(diào),才能最終生成合適的樣本。

      其次才是識(shí)別過(guò)程,識(shí)別前3個(gè)步驟和訓(xùn)練學(xué)習(xí)是一致的,而且各個(gè)步驟處理的參數(shù)必須和訓(xùn)練完全一樣,否則獲取的單字符圖片完全沒(méi)有可比性,識(shí)別步驟是把單字符圖片和樣本數(shù)據(jù)一一比較,獲得最為接近的作為結(jié)果。識(shí)別流程如圖1所示。

      以下是各個(gè)步驟詳細(xì)內(nèi)容及代碼實(shí)例。

      1 圖像預(yù)處理

      預(yù)處理過(guò)程就是用閾值分割法把圖片上每個(gè)像素二值化,像素紅綠藍(lán)在一定范圍內(nèi)置成白色,反之黑色。這里常見(jiàn)的問(wèn)題是背景和字符亮度接近,需要手工試探,才能找到合適的閾值。以下是java預(yù)處理函數(shù),函數(shù)根據(jù)圖片高和寬遍歷每個(gè)像素點(diǎn),通過(guò)ISWHITE函數(shù)來(lái)判斷當(dāng)前像素取值。

      INT WIDTH=IMG.GETWIDTH();

      INT HEIGHT=IMG.GETHEIGHT();

      FOR (INT X=0; X

      FOR (INT Y=0; Y

      IF (ISWHITE(IMG.GETRGB(X, Y))==1) {

      IMG.SETRGB(X, Y, COLOR.WHITE.GETRGB());

      } ELSE {

      IMG.SETRGB(X, Y, COLOR.BLACK.GETRGB());

      }

      2 分割

      最常見(jiàn)的驗(yàn)證碼字符,一般是四位數(shù)字,為了識(shí)別字符串,需要將圖片分割成四個(gè)單字符圖片,以下方法適用于位置固定的驗(yàn)證碼。SPLITIMAGE函數(shù)按照固定寬高分別生成1.JPEG,2.JPEG,3.JPEG,4.JPEG四張圖片。

      PUBLIC STATIC LIST

      SPLITIMAGE(BUFFEREDIMAGE IMG)

      THROWS EXCEPTION {

      IMAGEIO.WRITE(IMG, "JPEG", NEW FILE

      (WORKPATH+"RESULT\\ALL.JPEG"));

      LIST SUBIMGS=NEW

      ARRAYLIST();

      SUBIMGS.ADD(IMG.GETSUBIMAGE(4, 1, 15, 18));

      SUBIMGS.ADD(IMG.GETSUBIMAGE(19, 1, 15, 18));

      SUBIMGS.ADD(IMG.GETSUBIMAGE(34, 1, 15, 18));

      SUBIMGS.ADD(IMG.GETSUBIMAGE(49, 1, 15, 18));

      IMAGEIO.WRITE(IMG.GETSUBIMAGE(4, 1, 15, 18),

      "JPEG",NEW FILE(WORKPATH+"RESULT\\1.JPEG"));

      IMAGEIO.WRITE(IMG.GETSUBIMAGE(19,1, 15, 18),

      "JPEG",NEW FILE(WORKPATH+"RESULT\\2.JPEG"));

      IMAGEIO.WRITE(IMG.GETSUBIMAGE(34,1, 15, 18),

      "JPEG",NEW FILE(WORKPATH+"RESULT\\3.JPEG"));

      IMAGEIO.WRITE(IMG.GETSUBIMAGE(49,1, 15, 18),

      "JPEG",NEW FILE(WORKPATH+"RESULT\\4.JPEG"));

      RETURN SUBIMGS;

      }

      3 訓(xùn)練

      訓(xùn)練是指按照步驟1,2,窮舉單字符樣式圖片,并將文件名設(shè)置成實(shí)際字符值。-1,-2,-3則是字符多種變形時(shí)不同的樣本序號(hào)。

      4 識(shí)別

      相對(duì)前面三個(gè)步驟,識(shí)別則相對(duì)簡(jiǎn)單,算法只是機(jī)械地將分割圖片和樣本對(duì)象對(duì)比,獲取相似度最高的樣本圖片,該圖片的結(jié)果就是樣本的文件名(“-”前面部分)。代碼為冒泡排序算法。

      PUBLIC STATIC STRING GETSINGLECHAROCR

      (BUFFEREDIMAGE IMG,

      MAPMAP) {

      STRING RESULT="";

      INT WIDTH=IMG.GETWIDTH();

      INT HEIGHT=IMG.GETHEIGHT();

      INT MIN=WIDTH * HEIGHT;

      FOR (BUFFEREDIMAGE BI : MAP.KEYSET()) {

      INT COUNT=0;

      LABEL1: FOR (INT X=0; X

      FOR (INT Y=0; Y

      IF (ISWHITE(IMG.GETRGB(X,Y))!=ISWHITE

      (BI.GETRGB(X, Y))) {

      COUNT++;

      IF (COUNT>=MIN)

      BREAK LABEL1;

      }

      }

      }

      IF (COUNT < MIN) {

      MIN=COUNT;

      RESULT=MAP.GET(BI);

      }

      }

      RETURN RESULT;

      }

      為了防止暴力破解,網(wǎng)站開(kāi)發(fā)方通常會(huì)增加驗(yàn)證碼復(fù)雜度,常用的方法有以下幾種:

      4.1 干擾線

      增加干擾線會(huì)大大增加誤識(shí)率。對(duì)不同的干擾線,也有不同的方法處理,a干擾線和字符亮度差別大。

      如圖3所示,X軸代表亮度,Y軸代表像素?cái)?shù)量,此類(lèi)情況干擾線亮度較集中,可以直接根據(jù)三原色重新調(diào)整閾值,從閾值1改至閾值2,這樣背景色和干擾線設(shè)置在閾值之外,預(yù)處理之后的圖片就已經(jīng)不含干擾線了。

      b對(duì)于干擾線和驗(yàn)證碼亮度接近,無(wú)法用閾值二值化處理的,可以用算法剔除干擾。譬如對(duì)點(diǎn)Color[I][J],如果Color[I+1][J],Color[I-1][J],Color[I][J+1],Color[I][J-1]都是純黑色或者純白色的,就認(rèn)為Color[I][J]是干擾,將Color[I][J]置為白色。

      4.2 字符變形

      字符變形也是常用的防識(shí)別手段,字符變形多種多樣,有些扭曲的非常嚴(yán)重,這樣的識(shí)別還是有些難度的,而常見(jiàn)的變形往往是幾個(gè)固定方向的傾斜,這樣情況處理起來(lái)非常簡(jiǎn)單,只要窮舉各個(gè)角度各個(gè)字符的樣本圖片,依然能識(shí)別成功。

      4.3 位置不固定的字符

      有些驗(yàn)證碼并不固定的圖片的某個(gè)位置上,而是在一定區(qū)間范圍內(nèi);x,y方向隨機(jī)偏移,這種情況處理分兩種。

      直接在圖片分割的時(shí)候,采用先縱后橫的算法,直接獲取單個(gè)字符圖片,其算法如下:

      PUBLIC STATIC LIST

      SPLITIMAGE(BUFFEREDIMAGE IMG)

      THROWS EXCEPTION {

      LIST SUBIMGS=NEW

      ARRAYLIST();

      INT WIDTH=IMG.GETWIDTH();

      INT HEIGHT=IMG.GETHEIGHT();

      LIST WEIGHTLIST=NEW ARRAYLIST

      ();

      FOR (INT X=0; X

      INT COUNT=0;

      FOR (INT Y=0; Y

      IF (ISWHITE(IMG.GETRGB(X, Y))==1) {

      COUNT++;

      }

      }

      WEIGHTLIST.ADD(COUNT);

      }

      FOR (INT I=0; I

      INT LENGTH=0;

      WHILE (WEIGHTLIST.GET(I++)>1) {

      LENGTH++;

      }

      IF (LENGTH > 12) {

      SUBIMGS.ADD(REMOVEBLANK(IMG

      .GETSUBIMAGE(I-LENGTH-1, 0,

      LENGTH/2, HEIGHT)));

      SUBIMGS.ADD(REMOVEBLANK(IMG

      .GETSUBIMAGE(I-LENGTH/2-1, 0,

      LENGTH/2, HEIGHT)));

      } ELSE IF (LENGTH>3) {

      SUBIMGS.ADD(REMOVEBLANK(IMG

      .GETSUBIMAGE(I-LENGTH-1, 0,

      LENGTH, HEIGHT)));

      }

      }

      RETURN SUBIMGS;

      }

      第二種方法,在識(shí)別過(guò)程中遍歷整個(gè)區(qū)間和樣本圖片比較識(shí)別。

      圖4中所示案例情況:樣本為4*3像素,實(shí)際圖片范圍為7*6像素,XY坐標(biāo)區(qū)間[11,21][16,28],函數(shù)方法從原點(diǎn)向右下角遍歷所有的4*3圖片,再與樣本作比較。函數(shù)在[13,24][15,27]處獲得比較結(jié)果字符7。

      5 結(jié)束語(yǔ)

      文章介紹OCR字符識(shí)別四個(gè)步驟的函數(shù)方法,并描述了簡(jiǎn)單干擾下的應(yīng)對(duì)措施。通過(guò)代碼測(cè)試,證實(shí)該方法穩(wěn)定、有效。OCR識(shí)別一直是模式識(shí)別領(lǐng)域極具代表性的課題,隨著互聯(lián)網(wǎng)的發(fā)展,產(chǎn)生出許多以光學(xué)字符識(shí)別作為入口的文字信息錄入及查詢類(lèi)應(yīng)用。由于能力和時(shí)間所限,上述方法依然比較粗淺,研究中發(fā)現(xiàn)幾乎每個(gè)步驟都有大量?jī)?yōu)化算法的空間。在OCR領(lǐng)域,新的算法思路不斷涌現(xiàn),在一個(gè)高效的OCR系統(tǒng)中僅僅采用一種識(shí)別方式是無(wú)法滿足現(xiàn)實(shí)要求的。單個(gè)識(shí)別策略的能力有限,因此采用多種策略實(shí)現(xiàn)優(yōu)勢(shì)互補(bǔ),多角度利用字符的特征信息是OCR發(fā)展的方向。在這個(gè)方向上經(jīng)常采用的集成策略有投票法、概率法、Dempster-Shafer法以及行為知識(shí)空間法等多種綜合方法[4]。目前,在漢字圖像識(shí)別中拒識(shí)率、誤識(shí)率較高,是一個(gè)有待解決的問(wèn)題。由于漢字是非字母化、非拼音化的文字,且漢字信息量很大,有不同的字形、字體,而且結(jié)構(gòu)復(fù)雜,因此漢字識(shí)別的過(guò)程比一般英文字符識(shí)別更加復(fù)雜[5] 。

      參考文獻(xiàn)(References):

      [1] 霍強(qiáng).光學(xué)字符識(shí)別技術(shù):讓電腦像人一樣閱讀[A].China Academic Journal Electronic Publishing House [C].科學(xué)與現(xiàn)代化,2016.14.

      [2] 楊淑瑩.圖像識(shí)別與項(xiàng)目實(shí)踐VC++、MATLAB技術(shù)實(shí)現(xiàn)[M].電子工業(yè)出版社,2014.

      [3] 田媛美.基于深度學(xué)習(xí)的車(chē)牌檢測(cè)[D].西安電子科技大學(xué)碩士學(xué)位論文,2017.

      [4] 荊濤,王仲.光學(xué)字符識(shí)別技術(shù)與展望[J].計(jì)算機(jī)工程,2003.29(2):2

      [5] 李南.光學(xué)字符識(shí)別技術(shù)與圖書(shū)館信息資源的數(shù)字化[J].激光雜志,2012.33(5):3

      定陶县| 靖远县| 射洪县| 通榆县| 万年县| 砚山县| 枣强县| 余江县| 安西县| 浮山县| 金坛市| 鹤壁市| 南澳县| 云浮市| 淄博市| 调兵山市| 叙永县| 顺义区| 宜丰县| 商水县| 营山县| 左权县| 郑州市| 鸡西市| 温州市| 安岳县| 乐陵市| 宁化县| 阜康市| 沽源县| 三亚市| 读书| 西畴县| 固阳县| 睢宁县| 阿拉尔市| 灵璧县| 彭山县| 客服| 石家庄市| 通道|