之前写过关于车牌识别的项目,银行卡识别和车牌识别类似,也是先从待检测图片中找到银行卡号码的区域,再将号码提取出来。
银行卡识别的难点在于:
1.银行卡种类繁多,不能使用一类固定的算法识别所有的银行卡。
2.银行卡固定和银行卡号码区域的固定比较复杂,因为主要应用于手机拍摄识别,所以像素光线都会产生很大影响。
针对手机拍摄有两套方案:
1.拍摄时固定好银行卡的位置,这样我们就不需要先进行银行卡区域的提取,直接提取银行卡号码区域。
2.对于普通拍摄照片,先进行银行卡区域提取,再提取银行卡号码区域。
版本更新:
CardOCR1.0
——银行卡轮廓和数字轮廓均采用canny边缘检测算法。
CardOCR1.1
——银行卡轮廓定位利用sobel算法替代canny算法。获取数字区域过程中采用增强对比度再利用特定阈值获取数字区域替代了之前canny算法的边缘检测。识别效果较之前有比较大的提升,鲁棒性也更好了。下一阶段是关于银行卡轮廓的偏斜扭正,和利用人工神经网络识别数字。
这里我们先采用第二种方案,如果后续识别效果不理想我们再采用第一种。
大概流程:
1.提取银行卡轮廓
2.偏斜扭正
3.获取数字区域
4.数字识别
我这里刚开始采用农业银行的银行卡做为研究,后期再推及其他银行卡。
原图:(来自百度)
(1)提取银行卡轮廓
高斯模糊-》灰度化-》Canny边缘检测-》二值化-》找轮廓-》轮廓判断
高斯模糊:去除小的噪声影响,平滑图像。