openCV:图片处理
OCR:文字识别技术
调试的时候:Visulas studio;开发软件
然后把这个代码移动到java里面去,因为用studio效率太低了。
可以直接在Visulas studio进行调试。然后看到效果
比如:如果要得到一张图片。要得到Bitmap对象,然后放到c里面
在Visulas studio可以直接用到。
图片灰度:图片灰度可以降低图片比较的复杂度,提高效率
demo地址:
https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2FApeCold%2FLearn_IDRecognize
实现流程:
手机获取身份证图片
找到文字所在图片的区域
使用openCV进行图像定位与分割
tesseract-OCR文字识别
实现原理分析 :通过zxing库捕捉相机获得图像,或者从相册里获取图片,再对图像进行处理. 对图像处理 : 对源图像进行像素放大缩小处理>预处理(图像灰度化,低通滤波处理,边缘检测,二值化,中值平滑处理,闭运算)>刷选身份证号的矩形,得到有效行>对有效行进行灰度化,二值化>然后就进行识别.
图片处理:
机器视觉分为三个阶段 : 图像转化、图像分析、图像理解。若要将一幅图像转化为方便分析理解的格式,有一个很关键的过程就是“图像二值化”。一幅图像能否分析理解的准确很大程度上来说取决于二值化(非黑即白)效果的好坏。而在二值化之前,有一个重要步骤,那便是“图像灰度化”
所以,先将图片灰度化,这里有个公式:f(x) = R*0.3+G*0.51+B*0.11,实际需要做的就是将图片的每个像素(这里假定android里用ARGB表示一个像素点)的red、green、blue取出并代入此公式算出每个点的灰度值,这样便实现了灰度化
————————————————
再来看看二值化,二值化的原理就是取一个阈值,然后将每个像素点的灰度值和这个阈值进行比较,如果大于阈值则定为白色,反之为黑色(这里假定要识别的图像是白底黑字),如此一来便实现了二值化。可以看到,最重要的是这个阈值,该怎么取值才合理,最简单的阈值取定便是取整幅图画的均值了:
把图片识别文字的库:google的。可以训练模型
tess-two api识别
dependencies { implementation 'com.rmtheis:tess-two:9.0.0' }
java -----jni---------c
java调用jni通过JVM
jni调用c,直接无缝对接
里面把java都类型转c
c转java类型
里面方法名是如何对应的?
通过包名,类名规则,java-------jni方法的关系
cmake是干嘛用的?
类似java,加载库,通过依赖compile
西瓜视频:
android 架构师
android 进阶小刘
参考博客:
https://blog.csdn.net/WangRain1/article/details/97371424