-写霸-Android 实现字体识别(二)
来源:互联网 发布:外贸软件 知乎 编辑:程序博客网 时间:2024/06/05 07:41
上次简单说了一下 字体识别的分析 这篇 咱们就来一点一点探求一下这个的实现吧
这个字体识别软件 会用到 SQLite 以及 简单的 Android绘图
首先我们需要建立一个模板 就是汉字笔画的模板 这个模板就需要用到SQLite了
关键代码如下
@Overridepublic boolean onTouchEvent(MotionEvent event) {// Log.e("Draw", "onTouchEvent");float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:chardata = new ArrayList<CharData>();Log.v("Draw", "startx=" + x + " y=" + y);path.moveTo(x, y);currentPreX = x;currentPreY = y;lastPreX = x;lastPreY = y;currentX = (int) (x / (Width / GridNum)) + 1;currentY = (int) (y / (Width / GridNum)) + 1;String grid = "(" + currentX + "," + currentY + ")";System.out.println(grid);gridList.add(grid);addData(x, y);System.out.println("起点坐标" + x + "," + y);break;case MotionEvent.ACTION_MOVE:Log.v("Draw", "x=" + x + " y=" + y);path.quadTo(currentPreX, currentPreY, x, y);lastX = (int) (lastPreX / (Width / GridNum)) + 1;lastY = (int) (lastPreY / (Width / GridNum)) + 1;currentX = (int) (x / (Width / GridNum)) + 1;currentY = (int) (y / (Width / GridNum)) + 1;String grids = "(" + currentX + "," + currentY + ")";// 如果换格子了 就进入if (listDataQuery(grids)) {gridList.add(grids);charCUP(x, y);}currentPreX = x;currentPreY = y;break;case MotionEvent.ACTION_UP:Log.v("Draw", "endx=" + x + " y=" + y);System.out.println("终点坐标" + x + "," + y);addData(x, y);Datas.add(chardata);/*** 计算度数 计算笔顺 去除杂点 计算大小*/// JSAngle();cacheCanvas.drawPath(path, paints);path.reset();// chardata.clear();// initCanvas();for (int i = 0; i < Datas.size(); i++) {System.out.println("第" + i + "笔" + Datas.get(i).size());}break;}invalidate();return true;}/*** 计算笔顺*/void JSStrokeNum() {int num = 0;chardata.get(0).setIndex(0);float oneAngle, twoAngle;for (int i = 1; i < chardata.size(); i++) {oneAngle = chardata.get(i).getAngle();if (i + 1 < chardata.size()) {twoAngle = chardata.get(i + 1).getAngle();if (Math.abs(oneAngle - twoAngle) > 180) {num = StrokeNumJiSuan(i, num, oneAngle, twoAngle, 0);} else {num = StrokeNumJiSuan(i, num, oneAngle, twoAngle, 1);}}}}/*** 计算笔顺方法* * @param i* @param num* @param oneAngle* @param twoAngle* @param type*/int StrokeNumJiSuan(int i, int num, float oneAngle, float twoAngle, int type) {float angles = 0;if (type == 0) {angles = 180 - (360 - Math.abs(oneAngle - twoAngle));} else {angles = Math.abs(oneAngle - twoAngle);}if (angles > 36) {num++;chardata.get(i + 1).setIndex(num);} else {if (i + 2 < chardata.size()) {twoAngle = chardata.get(i + 2).getAngle();if (Math.abs(oneAngle - twoAngle) > 180) {float angless = 180 - (360 - Math.abs(oneAngle - twoAngle));if (angless > 36) {System.out.println(oneAngle + "****" + twoAngle);num++;chardata.get(i + 1).setIndex(num);} else {chardata.get(i + 1).setIndex(num);}} else {if (Math.abs(oneAngle - twoAngle) > 36) {System.out.println(oneAngle + "****" + twoAngle);num++;chardata.get(i + 1).setIndex(num);} else {chardata.get(i + 1).setIndex(num);}}} else {chardata.get(i + 1).setIndex(num);}}return num;}/*** 顺序写入点* * @param x* @param y*/void addData(float x, float y) {CharData data = new CharData();data.setPointX(x);data.setPointY(y);data.setAngle(0);data.setIndex(0);chardata.add(data);}/*** 根据位置写入点* * @param x* @param y*/void addData(int wz, float x, float y) {CharData data = new CharData();data.setPointX(x);data.setPointY(y);data.setAngle(0);data.setIndex(0);chardata.add(wz, data);}
以上就是笔画模板的核心代码 给大家说明一下
首先 我们要获取用户输入的点坐标 通过记录用户手指走过的路径 来得到用户输入的这一笔的坐标我们存到一个集合里面
然后我们需要对这个集合里面的坐标进行 去除没有用的坐标点 然后增加标记点 记录用户在一笔里面是否有一些拐弯啦什么 最后通过算法优化等 来得到一个笔画的模板然后把它存到我们相应的模板库中 有什么不明白的地方欢迎大家在评论里面提问
0 0
- -写霸-Android 实现字体识别(二)
- -写霸-Android 实现字体识别(一)原理分析
- android 手势识别(二)
- Android-谷歌语音识别之离线识别(二)
- Android光学字体识别 -- Android OCR demo
- Android实战简易教程<二十九>基于Face++实现年龄识别APP(一))
- Android实现二维码扫描功能(二)-ZXing个性化与近距离识别优化
- cnn实现手写识别字体代码详解
- TensorFlow实现简单的手写字体识别
- KNN 在手写识别中的应用(Java 实现)
- Android自定义字体实现
- android-实现自定义字体
- 字体识别-字体下载
- Android 实现语音识别
- Android实现语音识别
- Android实现语音识别
- Android实现语音识别 .
- Android O体验系列(二)自定义字体
- Win32_API注册表类的编制以及使用
- linux下文件的读写操作
- 菜鸟学习日志一(Linux)
- Openerp命令行接口:odoo.py
- 使用Apache POI将ppt截屏成png格式(+背景和图片)
- -写霸-Android 实现字体识别(二)
- 16-m-3Sum Closest
- Splay树(区间更新)—— POJ 3468 A Simple Problem with Integers
- 九度OJ-题目1508:把字符串转换成整数
- 从无头单链表中删除节点
- kd树(k-dimensional tree)(1)
- js页面跳转整理
- 浅析Java中的final关键字
- 线程池相关