反编译并修复过的手写识别类--(android 搜狗 libhanwonhw_v15)
android的搜狗拼音输入法中,手写识别库貌似接口非常简单,所以我动了要用它的念头,于是反编译之。并修正了代码如下:
// HWIMEInterface.java
package com.sohu.handwriting.engine;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
import android.util.Log;
import java.io.File;
import java.io.FileDescriptor;
import java.util.ArrayList;
import java.util.List;
import com.sohu.imputmethod.sogou.R;
public class HWIMEInterface
{
public static final int ALC_CS_CURSIVE = 65536;
public static final int ALC_GB18030 = 15;
public static final int ALC_GBK = 7;
public static final int ALC_GESTURE = 32768;
public static final int ALC_HONGKONG = 16;
public static final int ALC_LCALPHA = 1024;
public static final int ALC_NUMERIC = 256;
public static final int ALC_PUNC_COMMON = 2048;
public static final int ALC_PUNC_RARE = 4096;
public static final int ALC_SC_COMMON = 1;
public static final int ALC_SC_GB18030EX = 8;
public static final int ALC_SC_GBK34 = 4;
public static final int ALC_SC_RADICAL = 128;
public static final int ALC_SC_RARE = 2;
public static final int ALC_SYM_COMMON = 8192;
public static final int ALC_SYM_RARE = 16384;
public static final int ALC_TC_TO_SC = 32;
public static final int ALC_UCALPHA = 512;
private static final boolean DEBUG = false;
private static final int RESULT_NUM = 512;
private static final String TAG = "HWIMEInterface";
private static HWIMEInterface sInterface;
private ArrayList<CharSequence> mCandidateWords;
private Context mContext;
private int mNativeContext;
private char[] mRecognizedResult;
static
{
System.loadLibrary("hanvonhw_v15");
}
private HWIMEInterface(Context context)
{
this.mContext = context;
nativeSetup();
this.mCandidateWords = new ArrayList<CharSequence>();
this.mRecognizedResult = new char[RESULT_NUM];
String fileName = mContext.getFilesDir().getAbsolutePath() + "/dic_gb18030.bin";
File file = new File(fileName);
if (!file.exists())
return;
file.delete();
}
private static void LOGD(String string)
{
Log.d(TAG,string);
}
public static HWIMEInterface getInterface(Context context)
{
if (sInterface == null)
sInterface = new HWIMEInterface(context);
return sInterface;
}
private void splitCandidates_hw(char[] candidatesString, int candidatesNum, List<CharSequence> candidatesList, int paramInt2)
{
int i = 0;
while (true)
{
if (i >= candidatesNum)
return;
String str = String.valueOf(candidatesString[i]);
candidatesList.add(i, str);
i += 1;
}
}
public native void freeDict();
public void freeHWDict()
{
freeDict();
}
public native void loadDict();
public native void loadDictRes(FileDescriptor mFileDescriptor, long startOffset, long length);
public void loadHWDict()
{
AssetFileDescriptor mAssetFileDescriptor = this.mContext.getResources().openRawResourceFd(R.raw.dic_hw);
FileDescriptor mFileDescriptor = mAssetFileDescriptor.getFileDescriptor();
loadDictRes(mFileDescriptor, mAssetFileDescriptor.getStartOffset(), mAssetFileDescriptor.getLength());
}
public native void nativeFinalize();
public native void nativeSetup();
public native int recognize(short[] strokeData, char[] result, int limit);
public ArrayList<CharSequence> recognizeStroke(short[] strokeData)
{
int i = recognize(strokeData, mRecognizedResult, 16);
mCandidateWords.clear();
splitCandidates_hw(mRecognizedResult, i, mCandidateWords, 0);
return mCandidateWords;
}
public void release()
{
if (sInterface == null)
return;
nativeFinalize();
mCandidateWords.clear();
mCandidateWords = null;
mRecognizedResult = null;
sInterface = null;
}
public native void setDictPath(String dictpath);
public native void setRecognizeRange(int range);
}
******* 这个类使用起来也比较简单
//onCreate
HWIMEInterface mHwIme = HWIMEInterface.getInterface(this);
mHwIme.loadHWDict();
....
//onDestroy()
mHwIme.freeHWDict();
// 在需要识别的地方调用
mHwIme.recognizeStroke(strokes); // strokes 是short[] 类型,也就是你给的笔画数据
注意:
本文用到的数据请自己去下载搜狗输入法。
反编译并修复过的手写识别类--(android 搜狗 libhanwonhw_v15)相关推荐
- Qt之手写识别开发笔记:Zinnia介绍、编译、使用以及Demo
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- AI应用开发实战 - 手写识别应用入门
AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...
- AI应用开发实战系列之三:手写识别应用入门
AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...
- 实验5-9 使用函数输出水仙花数_正点原子STM32F407探索者开发板资料连载第五十三章 手写识别实验
1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十三章 手写识别实 ...
- 手写识别转文字怎么弄?用这三个手写识别转文字的软件就够了
我有很多从事教师行业的朋友,他们每天都需要手写教案,写完还要再手动输出为电子版.他们表示,这样的录入过程很花费时间.其实,我们可以通过一些智能软件来解决这一难题.那么,手写识别转文字的软件哪个好呢?今 ...
- Qt虚拟键盘更新,支持手写识别功能
Qt官方博客发布消息称,新版本的Qt虚拟键盘支持手书写识别功能(HWR).性能改进.Nuance T9书写一体化,并支持繁体中文! Qt虚拟键盘日前发布了新功能和版本控制方案的更新.作为最近的许可变更 ...
- application.properties 不识别_阿波罗 STM32F767 开发板资料连载第五十八章 手写识别实验
1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十八章 手写识别实验 ...
- 不反编译、无逆向基础也能轻松编写Android App Hook插件? Xposed的远房表弟,Hookworm来也!
前言 Xposed的大名相信很多同学都不陌生,它提供了一种能力,可以在不修改原apk的情况下,以插件的方式改变目标App的某些行为. 但随着Android系统版本的迭代,原来的Xposed已经不适合在 ...
- 使用zinnia库进行中文手写识别
研究手写识别的时候看到了zinnia,就进行了测试,存在问题是zinnia书写依赖笔画顺序,而且没有找到更多的可以用于训练的数据. zinnia介绍 zinnia是一个基于svm的开源的手写识别库.z ...
最新文章
- Scrapy网络爬虫框架实战[以腾讯新闻网为例]
- 递归函数之阶乘的实现
- C语言中字符串的处理方式
- Underscore.js
- 基于协同过滤,NMF和Baseline的推荐算法
- Python自动化之socket初识
- GhostNet 详解
- java4.25生成车牌号_泸牌16年涨882倍 超25万人拍一张车牌为哪般?
- DB2数据库HANG住的时候应该收集什么数据以及如何处理
- 计算机安全中采用的用户身份验证技术主要有,探究用户身份认证技术在信息安全中运用的意义...
- 程序员技能树的分层分级方法
- 分享六款原型设计软件,交流协作更便捷
- 一个程序员的自白(认同迷失)
- 【QT数字图像处理】(三)QSlider滑块学习
- 利用Pytorch中深度学习网络进行多分类预测(multi-class classification)
- 低频矢量网络分析仪(VNA)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Packet Tracer(第二期)--4RIP
- Jfrog Artifactory安装及备份恢复搭建
- FireFox火狐浏览器设置不加载图片
- maven profile指定配置文件打包适用多环境
热门文章
- 万物互联机遇 物联网步入迅速发展期
- java字符串转数组(JAVA把字符串转化为数组)
- ORB-SLAM2源码笔记(1)——框架结构
- string.h 或 cstring 头文件包含的字符串操纵函数查询
- TP、TN、FP、FN解析
- 搭搭云3.0平台上线 全面定制SaaS带给用户什么样的体验?
- MSC.SIMXPERT.V2016全集成多学科仿真解决方案
- 在HTML网页中怎么使用jquery,怎么调用jquery
- Matplotlib——直方图_hist()函数_histogram()函数_二维数据
- Word中邮件功能的使用