iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android中利用orc实现一个文字识别功能
  • 234
分享到

怎么在Android中利用orc实现一个文字识别功能

androidorcroi 2023-05-31 02:05:29 234人浏览 八月长安
摘要

这篇文章给大家介绍怎么在Android中利用orc实现一个文字识别功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、什么是orcorc是指利用光学字符识别(ORC全称:Optical Character Recog

这篇文章给大家介绍怎么在Android中利用orc实现一个文字识别功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一、什么是orc

orc是指利用光学字符识别(ORC全称:Optical Character Recognition)技术,将图片、照片上的文字内容,直接转换为可编辑文本,支持JPG、PNG、GIF、BMP、DOC等图片格式。简单一句话,就是可以把图片上的文字识别出来。应用的场景有很多,比如说:身份证号码识别,银行卡号识别等等。

实现:

下载中文简体语言包

导入依赖

api的使用,获取TessBaseAPI mBaseAPI = new TessBaseAPI();实例

API的使用,初始化TessBaseAPI设置,设置识别的语言和语言包所在文件路径 mBaseAPI.init(path + File.separator, "chi_sim");

API的使用,设置Bitmap,mBaseAPI.setImage(bitmap);

API的使用,从Bitmap获取文字信息,mBaseAPI.getUTF8Text();

1.下载中文简体语言包

语言包下载地址

找到tessdata——>chi_sim.traineddata

下载好了之后,需要放到sd卡中,目录不限,但是必须要放在tessdata目录里面,如果没有tessdata目录需要手动创建,例如我是Demo中是放在sd卡根目录中,就直接在sd卡根目录创建tessdata目录,然后把下载好的chi_sim.traineddata语言包丢进去,实际项目中,在识别时候最好坐下语言包是否复制到位的检查,以免出现异常。Demo中仅仅是检查了是否创建tessdata目录,这里实际上仍然存在风险的。

2.导入依赖

Gradle方式添加:https://GitHub.com/rmtheis/tess-two

3.MainActivity代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView mTvInfo;private TessBaseAPI mBaseAPI;private ProgressBar mProbar;private String path;private RadioGroup mRadioGroup;private RadioButton mRbtnIdCard;private RadioButton mRbtnBankNumber;private RadioButton mRbtnTxt;@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  findViewById(R.id.btn_start).setOnClickListener(this);  mProbar = (ProgressBar) findViewById(R.id.pb);  mTvInfo = (TextView) findViewById(R.id.tv_info);  mRadioGroup = (RadioGroup) findViewById(R.id.rg);  mRbtnIdCard = (RadioButton) findViewById(R.id.rb_idCard);  mRbtnBankNumber = (RadioButton) findViewById(R.id.rb_bankNumber);  mRbtnTxt = (RadioButton) findViewById(R.id.rb_txt);  mRadioGroup.check(0);  path = Environment.getExternalStorageDirectory().getAbsoluteFile().getAbsolutePath();}@Overridepublic void onClick(View v) {  mTvInfo.setText("");  switch (v.getId()) {    case R.id.btn_start:      if (Build.VERSION.SDK_INT >= 23) {        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {          // 没有权限          if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)){            //如果没勾选“不再询问”,向用户发起权限请求            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 0);          }else{            Toast.makeText(this,"请前往设置——>存储卡权限——>允许",Toast.LENGTH_SHORT).show();          }        } else {          // 有权限,接着你要干的活          startReadText();        }      }else{        startReadText();      }      break;  }}private Handler mHandler = new Handler() {  @Override  public void handleMessage(Message msg) {    switch (msg.what) {      case 0:        String s = (String) msg.obj;        if (!TextUtils.isEmpty(s)) {          mProbar.setVisibility(View.GoNE);          mTvInfo.setText(s);          //释放bitmap          mBaseAPI.clear();        } else {          mProbar.setVisibility(View.GONE);          Toast.makeText(MainActivity.this, "识别图片内容失败", Toast.LENGTH_SHORT).show();        }        break;      case 1:        Toast.makeText(MainActivity.this, "读取图片失败", Toast.LENGTH_SHORT).show();        break;    }  }};private Bitmap getBitmap(int id) {  Bitmap bitmap = null;  try {    bitmap = BitmapFactory.decodeResource(getResources(), id);  } catch (Exception e) {    return null;  }  return bitmap;}private void startReadText() {  File f = new File(path+"/tessdata") ;  if(!f.exists()){    Toast.makeText(this,"请先下载好语言包置于sd/tessdata目录",Toast.LENGTH_SHORT).show();    return;  }  final int btnId = mRadioGroup.getCheckedRadioButtonId();  final int resId ;  if(R.id.rb_idCard==btnId){    resId = R.drawable.idcard;  }else if(R.id.rb_bankNumber==btnId){    resId = R.drawable.bank_number;  }else{    resId = R.drawable.tet_info;  }  mProbar.setVisibility(View.VISIBLE);  new Thread() {    @Override    public void run() {      mBaseAPI = new TessBaseAPI();//初始化需要耗时,可以启动时程序时,预初始化      mBaseAPI.init(path + File.separator, "chi_sim");      Bitmap bitmap = getBitmap(resId);      if (bitmap == null) {        mHandler.sendEmptyMessage(1);      } else {        mBaseAPI.setImage(bitmap);        //根据Init的语言,获得ocr后的字符串        String t = mBaseAPI.getUTF8Text();//耗时操作        Message obtain = Message.obtain();        obtain.what = 0;        obtain.obj = t;        mHandler.sendMessage(obtain);      }    }  }.start();}}

--结束END--

本文标题: 怎么在Android中利用orc实现一个文字识别功能

本文链接: https://www.lsjlt.com/news/223063.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android中利用orc实现一个文字识别功能
    这篇文章给大家介绍怎么在Android中利用orc实现一个文字识别功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、什么是orcorc是指利用光学字符识别(ORC全称:Optical Character Recog...
    99+
    2023-05-31
    android orc roi
  • Android中怎么实现一个图片文字识别功能
    Android中怎么实现一个图片文字识别功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。添加依赖implementation 'com.rmtheis:...
    99+
    2023-06-20
  • 如何在java项目中利用ocr实现一个图片文字识别功能
    这期内容当中小编将会给大家带来有关如何在java项目中利用ocr实现一个图片文字识别功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现g...
    99+
    2023-05-31
    java ocr ava
  • 怎么在Android应用中实现一个手势操作识别功能
    今天就跟大家聊聊有关怎么在Android应用中实现一个手势操作识别功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先,在Android系统中,每一次手势交互都会依照以下顺序执行。...
    99+
    2023-05-31
    android roi
  • 利用Android6.0怎么实现一个指纹识别功能
    本篇文章为大家展示了利用Android6.0怎么实现一个指纹识别功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android6.0指纹识别开发实例详解谷歌在android6.0及以上版本对指纹识...
    99+
    2023-05-31
    android roi
  • 怎么在Android中利用DownloadManager实现一个文件下载功能
    本篇文章为大家展示了怎么在Android中利用DownloadManager实现一个文件下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android中DownloadManager实现文件下...
    99+
    2023-05-31
    android downloadmanager age
  • 在Android 开发中使用camera怎么实现一个人脸识别功能
    这篇文章将为大家详细讲解有关在Android 开发中使用camera怎么实现一个人脸识别功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android camera实时预览 实时处理,面部...
    99+
    2023-05-31
    android camera
  • 怎么在Android中利用IntentUtil实现一个跳转功能
    本文章向大家介绍怎么在Android中利用IntentUtil实现一个跳转功能的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统...
    99+
    2023-05-30
    android intentutil
  • Android实现扫一扫识别数字功能
    1.准备工作 首先实现识别数字等字符,我们要知道需要采用OCR (Optical Character Recognition,光学字符识别)来实现。而tesseract是非常不错的开源OCR工具,但是要在Android中直接使用可能要费点...
    99+
    2023-05-30
    android 扫一扫 识别数字
  • 怎么在Android中利用AlertDialog实现一个多选框功能
    怎么在Android中利用AlertDialog实现一个多选框功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在使用AlertDialog实现单选和多选对话框时,分别设置se...
    99+
    2023-05-31
    android alertdialog roi
  • 怎么在Android 中利用camera2 API 实现一个相机功能
    怎么在Android 中利用camera2 API 实现一个相机功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。流程因为 camera2 提供的接口比较多,虽然很灵活,但是也...
    99+
    2023-05-31
    android camera2 api roi
  • 怎么在Android中利用CountDownTimer实现一个倒计时功能
    这篇文章主要介绍了怎么在Android中利用CountDownTimer实现一个倒计时功能,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:Android是什么Android是一种基于Lin...
    99+
    2023-05-30
    android countdowntimer
  • 怎么在Android应用中利用View实现一个旋转功能
    本篇文章为大家展示了怎么在Android应用中利用View实现一个旋转功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。添加右侧旋转Bitmap turnBitmap =&nbs...
    99+
    2023-05-31
    android view roi
  • 怎么在Centos中利用文件实现一个swap功能
    怎么在Centos中利用文件实现一个swap功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建swap文件mkdir/var/swap#创建一个文件夹用于存放交换分区文件,...
    99+
    2023-06-10
  • 怎么在Android中利用ListView实一个汉字转成拼音功能
    本篇文章为大家展示了怎么在Android中利用ListView实一个汉字转成拼音功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。项目结构我按照项目中类的顺序来一一介绍其功能SortModel 一个...
    99+
    2023-05-31
    android listview roi
  • 怎么在Android中利用ImageView控件实现一个圆角功能
    今天就跟大家聊聊有关怎么在Android中利用ImageView控件实现一个圆角功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。创建CustomImageView 类在你的项目中(...
    99+
    2023-05-31
    android age imageview
  • 怎么在Android中利用RecyclerView实现一个快速滚动功能
    本篇文章给大家分享的是有关怎么在Android中利用RecyclerView实现一个快速滚动功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先,在 build.gradle...
    99+
    2023-05-30
    recyclerview android
  • 怎么在Android中利用google实现一个消息通知功能
    怎么在Android中利用google实现一个消息通知功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 定义一个派生于WakefulBroadcastReceiver的类pu...
    99+
    2023-05-31
    android google roi
  • 怎么在Android中利用RecyclerView实现一个频道管理功能
    本篇文章给大家分享的是有关怎么在Android中利用RecyclerView实现一个频道管理功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。需要在build里添加依赖 com...
    99+
    2023-05-31
    recyclerview android recycle
  • 怎么在Android中利用GridView实现一个水平滚动功能
    怎么在Android中利用GridView实现一个水平滚动功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android为我们提供了竖直方向的滚动控件Grid...
    99+
    2023-05-31
    gridview idv android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作