身份證圖片拍照存在亮度不均的情況,導(dǎo)致過(guò)濾出現(xiàn)部分區(qū)域無(wú)法識(shí)別。
初步解決辦法:
1.切割圖片,按照區(qū)域坐標(biāo)切割出名字,身份證號(hào)兩塊大致區(qū)域。再將身份證號(hào)切割成多個(gè)小圖片(因?yàn)樘?hào)碼較長(zhǎng),光線不均勻情況很明顯)? ? 前端拍照時(shí)通過(guò)攝像頭提示框解決切割圖片
2.色彩過(guò)濾,忽略RGB值超過(guò)300的像素,將其調(diào)整為-1變?yōu)榘咨#?00這個(gè)閾值需要根據(jù)實(shí)際圖片進(jìn)行調(diào)整,如果光線過(guò)強(qiáng),則數(shù)值要調(diào)大一些)? ?通過(guò)OpenCV進(jìn)行二值化、去噪點(diǎn)。(如果是進(jìn)行驗(yàn)證碼識(shí)別,還需要RGB分層等算法進(jìn)行過(guò)濾雜質(zhì),比較復(fù)雜后續(xù)有時(shí)間會(huì)研究)
3.圖片拼接,將多段身份證號(hào)碼的小圖片重新拼接然后進(jìn)行OCR識(shí)別。? 經(jīng)過(guò)上面兩步之后已經(jīng)解決問(wèn)題
繼續(xù)。
切割圖片直接用java自帶的包根據(jù)坐標(biāo)來(lái)解決,拍照傾斜角造成了圖片曝光不均的問(wèn)題嚴(yán)重影響解析,找了下資料準(zhǔn)備使用opencv提供的局部自適應(yīng)閾值圖像二值化來(lái)試試。web下使用opencv出現(xiàn)Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path,而且服務(wù)器是在linux上,先去服務(wù)器安裝opencv。
2017.9.1日繼續(xù)
身份證識(shí)別功能基本完成。
使用opencv對(duì)圖片進(jìn)行二值化(可以去除光線造成的曝光不均問(wèn)題)、去噪點(diǎn)(忽略小區(qū)域像素,這點(diǎn)非常重要。我使用了點(diǎn)手段,通過(guò)縮放和擴(kuò)大來(lái),試了下縮2擴(kuò)2連續(xù)3-4次效果比較好)
tess4j進(jìn)行文本識(shí)別。直接上maven

正則過(guò)濾保留數(shù)字、中文、字母。
.String reg = "[^a-zA-Z0-9\\u4e00-\\u9fa5]";
result = result.replaceAll(reg, "");
身份證號(hào)驗(yàn)證規(guī)則驗(yàn)證號(hào)碼正確性。