2019-01-09 08:55:59 qq_15029743 阅读数 2118

首先来看一下识别的效果:这里需要完整代码以及SDK的请点击此处下载:百度文字识别OCR-通用文字识别

首先需要注册百度账号并且创建对应的应用,这里具体方法如图:

访问:http://ai.baidu.com/  点击控制台

登录后创建应用:

 此处注意:图像处理中的各项功能共用的是一个SDK包,只是不同功能实现的时候使用的函数以及返回参数不同,点击完创建应用后就可以生成三个我们后期识别过程中必须使用的参数:AppID,API Key和secert key,这里我们可以点击查看应用详情来获取

 

 

 

 

至此,前期的准备工作就完成了,这时我们通过Pip或者官网直接下载SDK包,pip下载指令为:

这里支持Python版本:2.7.+ ,3.+

如果已安装pip,执行pip install baidu-aip即可。
如果已安装setuptools,执行python setup.py install即可。

接下来,在下载的SDK文档下新建Python文件,当然你也可以使用导入包的模式:

然后创建一个AipOcr(亦可以简单的理解为一个和百度的一个连接),这里代码为:

from aip import AipOcr

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

完成上述工作后我们就可以正式进入到文字识别的实现过程了,具体的官方代码为:

""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

image = get_file_content('example.jpg')

""" 调用通用文字识别, 图片参数为本地图片 """
client.basicGeneral(image);

""" 如果有可选参数 """
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "true"
options["detect_language"] = "true"
options["probability"] = "true"

""" 带参数调用通用文字识别, 图片参数为本地图片 """
client.basicGeneral(image, options)

url = "http//www.x.com/sample.jpg"

""" 调用通用文字识别, 图片参数为远程url图片 """
client.basicGeneralUrl(url);

""" 如果有可选参数 """
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "true"
options["detect_language"] = "true"
options["probability"] = "true"

""" 带参数调用通用文字识别, 图片参数为远程url图片 """
client.basicGeneralUrl(url, options)

注意:这里的一些请求参数的具体含义为:

参数名称 是否必选 类型 可选值范围 默认值 说明
image string     图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
url string     图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效
language_type string CHN_ENG
ENG
POR
FRE
GER
ITA
SPA
RUS
JAP
KOR
CHN_ENG 识别语言类型,默认为CHN_ENG。可选值包括:
- CHN_ENG:中英文混合;
- ENG:英文;
- POR:葡萄牙语;
- FRE:法语;
- GER:德语;
- ITA:意大利语;
- SPA:西班牙语;
- RUS:俄语;
- JAP:日语;
- KOR:韩语;
detect_direction string true
false
false 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:
- true:检测朝向;
- false:不检测朝向。
detect_language string true
false
false 是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语)
probability string true
false
  是否返回识别结果中每一行的置信度

在这里,博主在原有代码的基础上还将返回的具体数值写入文件以方便后期的处理,具体实现的完整代码为:

from aip import AipOcr
import json

""" 你的 APPID AK SK """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ' '

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
image = get_file_content('ocr2.jpg')

""" 如果有可选参数 """
options = {}
""" 识别语言类型 """
options["language_type"] = "CHN_ENG"
""" 检测图片朝向 """
options["detect_direction"] = "false"
""" 检测语言 """
options["detect_language"] = "false"
""" 置信度 """
options["probability"] = "false"

""" 带参数调用通用文字识别, 图片参数为本地图片 """
result=client.basicGeneral(image, options)
print(result)
result_txt=json.dumps(result,ensure_ascii=False)
file = open('result.ini', 'w')  # 打开文件
file.write(result_txt)  # 写入
file.close()

 

2018-07-24 18:51:00 weixin_42536182 阅读数 19

百度技术文档

首先要注册百度云账号:

在首页,找到图像识别创建应用,选择相应的功能,创建

安装接口模块:

pip install baidu-aip

 

简单识别一:

简单图形验证码:

图片:

from aip import AipOcr

 # 你的 APPID AK SK
APP_ID = '你的APPID'
API_KEY = '你的AK'
SECRET_KEY = '你的SK'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

# 读取图片
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
# 测试文件也可以写路径
image = get_file_content('test.jpg')

#  调用通用文字识别, 图片参数为本地图片
result = client.basicGeneral(image)

# 定义参数变量
options = {
    # 定义图像方向
        'detect_direction' : 'true',
    # 识别语言类型,默认为'CHN_ENG'中英文混合
        'language_type' : 'CHN_ENG',
}

# 调用通用文字识别接口
results = client.basicGeneral(image,options)
print(results)
# 遍历取出图片解析的内容
# for word in result['words_result']:
#     print(word['words'])
try:
    code = results['words_result'][0]['words']
except:
    code = '验证码匹配失败'

print(code)

结果为:

{'log_id': **************, 'direction': 0, 'words_result_num': 1, 'words_result': [{'words': '526'}]}
526

返回数据的参数详解:

输出结果中,各字段分别代表:

  • log_id : 唯一的log id,用于定位问题
  • direction : 图像方向,传入参数时定义为true表示检测,0表示正向,1表示逆时针90度,2表示逆时针180度,3表示逆时针270度,-1表示未定义。
  • words_result_num : 识别的结果数,即word_result的元素个数
  • word_result : 定义和识别元素数组
  • words : 识别出的字符串

二.很明显结果不太正确,(部分代码可能和官网不太一样,因为在python3中有些模块被替代了)然后就继续在百度技术文档中寻找答案,于是又找到了一个方案(其余的功能调用方法相同)

代码如下:

# 第一步:获取百度access_token
import urllib, sys
from urllib import request
import ssl

# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的API_KEY】&client_secret=【你的SECRET_KEY】'
requests = request.Request(host)
requests.add_header('Content-Type', 'application/json; charset=UTF-8')
response = request.urlopen(requests)
content = response.read()
# 获取返回的数据
if (content):
    print(content)

# 第二步 通用文字识别(高精度版)识别
# 与百度技术文档上的部分代码不同,在python3中urllib2和urllib合并成了urllib
import base64
from urllib import request,parse
import json

access_token = '第一步获取的token'
url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=' + access_token
# 二进制方式打开图文件
f = open(r'test.jpg', 'rb')
# 参数image:图像base64编码
img = base64.b64encode(f.read())
params = {"image": img}
# 将图像转化为可携带的参数
params = parse.urlencode(params)
# 构造请求对象
requests = request.Request(url, bytes(params, encoding='utf-8'))
# 添加请求头
requests.add_header('Content-Type', 'application/x-www-form-urlencoded')
#发起请求
response = request.urlopen(requests)
# 读取返回的内容并解码
content = response.read().decode('utf-8')
# 将数据转换为字典
res = json.loads(content)

try:
    # 尝试从数据中获取图片解析的结果,如果没有则证明没有解析成功
    code = res['words_result'][0]['words']
except:
    code = '验证码匹配失败'

print(code)

结果为:

5526

对于特别复杂的图片,需要经过处理才能识别,使用PIL和Tesseract-OCR

from PIL import Image
import subprocess
def cleanFile(filePath, newFilePath):
    image = Image.open(filePath)
    # 对图片进行阈值过滤,然后保存
    image = image.point(lambda x: 0 if x<143 else 255)
    image.save(newFilePath)
    # 调用系统的tesseract命令对图片进行OCR识别  可以使用绝对路径,也可将程序添加到系统环境变量中
    subprocess.call(['C:\\Program Files (x86)\\Tesseract-OCR\\tesseract', newFilePath, "output"])
    # 打开文件读取结果
    with open("output.txt", 'r') as f:
        print(f.read())

cleanFile("text.jpg", "text2clean.png")

但是呢,不知道为什么识别率太低了,求大神指教

 

使用云打码识别,识别率会高很多,但也是有代价的,就是需要花钱,但是挺便宜的

  https://www.cnblogs.com/mswei/p/9392530.html

2019-08-24 21:31:09 weixin_43962871 阅读数 397

关于OCR&百度云OCR

OCR全称为Optical Character Recognition,指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。
在这里百度云OCR是识别并返回图片中的文字。百度云中的文字识别有专门针对如身份证,驾驶证,银行卡等API供调用,本项目的图片均为商品包装图片,故选择通用文字识别和通用文字识别(高精度版)两个进行比较使用。

步骤

1.登录百度云,创建管理应用,获取AppID,API Key,Secret Key。
2.下载需要的包,pip install baidu-aip
3.准备代码如下,

from aip import AipOcr   #pip install baidu-aip
import time

t1=time.time()

# 定义常量
APP_ID = '你的AppID'
API_KEY = '你的API Key'
SECRET_KEY = '你的Secret Key'

# 初始化AipFace对象
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)

# 读取图片
filePath = "1111.png"

def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 定义参数变量
options = {
    'detect_direction': 'true',
    'language_type': 'CHN_ENG',
    'probability':'true',
}

# 调用通用文字识别接口 5w次每天
#result = aipOcr.basicGeneral(get_file_content(filePath), options)
# print(result)

# 调用高精度版  500次每天
result=aipOcr.basicAccurate(get_file_content(filePath), options)

# 整理返回的结果
a=''
for i in result['words_result']:
    a=a+i['words']+','
print(a)

# 将结果写入文件
with open('输出.txt','w',encoding='utf-8') as f:    #设置文件对象
    f.write(a)
    
t2=time.time()
print("调用耗时:",t2-t1)
2019-04-11 16:50:23 imVainiycos 阅读数 1172

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。

首先假设读者已经有了百度开发者账号,并且在百度AI开放平台上申请了通用文字识别的api调用资格。
若还没有,请点击下面的链接进行注册使用
百度文字识别

在百度AI开放平台上注册并将图片识别功能加入控制台之后,你将会得到三个值,分别是:

appId
apiKey
secretKey

请记住这三个值,后续将会使用,并且需要注意的是个人用户当天的免费调用次数仅有500次。
读者可以访问以下链接查看实现效果:http://www.vainycos.cn/zym/ocr.html

  • 我们将OCR的图片识别功能分成两部分,第一部分是后台实现,可以参考百度OCR的官方文档,此处我使用了SpringBoot进行简单的架构。
    示例
    红色框部分是我个人的appId,apiKey以及secretKey,目前为了演示项目就不做隐藏,不过后续希望读者将自己申请的对应值填写上去。目前只提供一个出口为/ocr/go的服务,提供给页面调用。

  • 第二部分是页面实现,我们需要将本地图片通过页面解析成base64编码的值并上传至后台进行解码,并进行图片文字解析工作返回给页面解析结果。
    示例
    目前我将/ocr/go的后台服务部署于我的个人服务器上,所以在发送ajax请求的url中我填入了自己的域名信息,后续读者如果启动了自己的服务则可以将url替换成对应的服务调用地址。其中,细心的读者应该注意到了发送数据的data部分,我进行了数值截取,只截取第23位后的数据,这是为什么。因为将图片转换成base64编码的时候data:image/jpeg;base64,这部分头文件是要进行去除的,所以就做了简单的截取处理。
    页面效果如下所示:
    page
    解析结果

至此,从前台到后台发起请求的简单ocr服务就已经完成了。在实现过程中查阅了部分资料发现没有一个完整的实现过程,并且没有具体的编码实现,所以就自己做了个简单的示例实现,talk is cheap,show me the code
点击上方的英文有惊喜,若能提供读者一定的帮助,就很好了。

2018-06-06 17:27:48 weixin_42247440 阅读数 10034

枸杞菊花茶了解一下.jpg

前言

  OCR 是 Optical Character Recognition 的缩写,翻译为光学字符识别,指的是针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术(好吧,这是我查来的)。简单的来说,OCR技术就是可以把图片上的文字识别出来,并以文本格式的形式提取出来。

  这个技术的应用方面很广泛,比如说把纸质书籍的内容转化为电子书,之前都需要人手打,但是现在只要扫描一下,将扫描出来的图片通过OCR技术转化成文本格式,效率和成本不知提升了多少倍。

  有人可能会想,这个技术听起来好高端,不懂计算机图形学,模式识别,机器学习巴拉巴拉东西的人,是不是无法接触到这样的技术,实现这样的功能,(好像是的,emmm…),不过,虽然咱们自己实现不了,但是有人把轮子造好了呀,我们只要使用人家造好的轮子,就能实现图片文字识别的功能。

  先来看一下我实现的效果吧,随手拿了办公桌上有字的东西(拿了枸杞茶和菊花茶的包装…),用自己写的demo拍了照识别了一下
图片文字识别1
图片文字识别2
  界面下方显示的图片是手机拍的照片,界面上方显示的是从照片中识别出来的文字信息。可以看出识别的正确率还是挺高的。

  我这边用的轮子是 百度文字识别 。下面我将介绍一下我是如何实现上述的文字识别功能。

请求模块定义

  百度其实有提供图片识别Android的SDK,就像其他的SDK一样,只要导入一系列包之后就可以调用识别。寻求快速开发的小伙伴可以了解一下,我看了一下文档,实现还是十分容易的。OCR Android SDK
  但是,我在demo中使用的并非是SDK,而是使用另外一种方法——以网络api的方式来进行识别。涉及到的技术有 retrofit+rxjava 进行网络请求(在之前的一篇博客中有介绍如何使用 retrofit+rxjava ,贴一下链接),Android应用动态权限的申请,FileProvider,图片的base64转码,以及热门的MVP框架

  先看一下项目结构项目结构.png
  module目录下存放的是MVP架构的三个模块,bean目录下存放的是网络请求返回的数据类型,apiservice中存放的是retrofit有关网络请求的接口。
  根据百度OCR官方给出的接口api请求说明.png
  我们定义出如下的接口方法。

 /**
     * 通过图片URL的形式,获取图片内的文字信息
     * @param accessToken 通过API Key和Secret Key获取的access_token
     * @param url 图片的url
     * @return observable对象用于rxjava,从RecognitionResultBean中可以获得图片文字识别的信息
     */
    @POST("rest/2.0/ocr/v1/general_basic")
    @FormUrlEncoded
    Observable<RecognitionResultBean> getRecognitionResultByUrl(@Field("access_token") String accessToken, @Field("url") String url);

    /**
     * 通过图片,获取图片内的文字信息
     * @param accessToken 通过API Key和Secret Key获取的access_token
     * @param image 图像数据base64编码后进行urlencode后的String
     * @return  observable对象用于rxjava,从RecognitionResultBean中可以获得图片文字识别的信息
     */
    @POST("rest/2.0/ocr/v1/general_basic")
    @FormUrlEncoded
    Observable<RecognitionResultBean> getRecognitionResultByImage(@Field("access_token") String accessToken, @Field("image") String image);

  在第一个方法中,我们需要传入两个参数,一个是access_token,需申请百度文字识别的开发者资格,得到API key和Secret Key后获取,还有一个参数是图片的网络地址url,可以直接通过这个url直接访问到图片。

  第二个方法中,第一个参数也是同上的access_token,第二个参数则是String类型,这个参数是在本地将图片base64转码之后生成。

  因为我们要实现的功能是用手机拍照,然后将照片信息传递给服务器,因此我们之后调用的是第二个方法(第一个方法只是我按照api说明随手写了一下),这些参数我们以POST的形式发送,按照百度OCRapi 的要求,需要加上@FormUrlEncode注释,我们使用@Field的方式将参数加入请求体。可以看到Observable中的是RecognitionResultBean类型,我们可以从里面拿到服务器返回的文字识别信息。

  定义好这两个方法之后,我们便可以构造retrofit对象进行调用

 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://aip.baidubce.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        baiduOCRService = retrofit.create(BaiduOCRService.class);

  我们来看一下 rxjava+retrofit 在接口方法中的具体实现

  @Override
    public void getRecognitionResultByImage(Bitmap bitmap) {

        String encodeResult = bitmapToString(bitmap);

        baiduOCRService.getRecognitionResultByImage(ACCESS_TOKEN,encodeResult)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<RecognitionResultBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(RecognitionResultBean recognitionResultBean) {
                        Log.e("onnext",recognitionResultBean.toString());
                        StringBuilder s = new StringBuilder();
                        List<RecognitionResultBean.WordsResultBean> wordsResult = recognitionResultBean.getWords_result();
                        for (RecognitionResultBean.WordsResultBean words:wordsResult) {
                            s.append(words.getWords());
                        }

                        mView.updateUI(s.toString());

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("onerror",e.toString());
                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

  可以看到传入了一个Bitmap类型的图片参数,这个参数经过 String encodeResult = bitmapToString(bitmap); 方法转成了String类型。是因为接口要求的参数数据为String类型,所以我们对图片进行了base64转码,具体的转码方法如下:

    private String bitmapToString(Bitmap bitmap){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] bytes = baos.toByteArray();
        return Base64.encodeToString(bytes, Base64.DEFAULT);
    }

  调用此方法,便可以把图片类型转化成字符串类型,之后的操作便是对网路接口调用之后的回调方法进行定义,我们在调用成功后的onNext操作中,拿到了RecognitionResultBean类型参数,这个参数里含有图片所包含文字的信息,我们将所有的文字一一取出,用StringBuilder连接成一个字符串,返回给View层,调用View层的updateUI进行UI界面的更新,对于这个字符串我们在之后还可以进行进一步的分析操作。

  以上,百度OCR接口请求模块定义部分便已完成,接下来,我们要做的就是调用系统的相机功能,拍照得到照片,将照片传递给我们上面定义的请求接口,进行文字识别。

相机功能调用

  首先,由于要对相机功能进行调用,我们需要在AndroidManifest清单文件中写明我们需要用到的权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>

  分别是网络请求权限,数据的读存取权限,以及相机权限。在Android 6.0 之前应用的权限在安装时全部授予,也就是说只要在AndroidManifest中申请过的权限,都会给予。而在 Android 6.0 或更高版本之后,对权限的管理作出了改变,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予,也就是说,在AndroidManifest中申请的权限,在用户使用的过程中还得询问用户是否给予,用户给予权限了,应用才能进行相关的权限操作。因此我们需在代码中增加动态权限申请的模块(对用户安全性友好了,但是对开发者增加了不友好度….),以下是动态权限申请部分的代码:

    private boolean hasPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CODE);
            return false;
        }else {
            return true;
        }
    }

  代码的主要逻辑是,在程序运行的时候,检查是否有相应的权限,如果有权限,则可以进行相关操作,如果没有权限,就调用申请权限的方法。在完成这部分代码的编写之后还需重写onRequestPermissionsResult方法,对申请权限的结果进行反应。

  接下来是调用相机功能的代码

 private void takePhoto(){

        if (!hasPermission()) {
            return;
        }

        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/img";
        if (new File(path).exists()) {
            try {
                new File(path).createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String filename = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        mTmpFile = new File(path, filename + ".jpg");
        mTmpFile.getParentFile().mkdirs();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            String authority = getPackageName() + ".provider";
            imageUri = FileProvider.getUriForFile(this, authority, mTmpFile);
        } else {
            imageUri = Uri.fromFile(mTmpFile);
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

        startActivityForResult(intent, CAMERA_REQUEST_CODE);

    }

  需要提到的是,在Android 7.0之后,如果你使用Intent携带这样的上面的imageUri去打开相机拍照,会抛出FileUriExposedException异常。这时候就需要用到google官方的解决方案——FileProvider。使用的方法可以参照 Android 7.0适配-应用之间共享文件

  调用相机之后我们需要重写onActivityResult方法,对返回拍照结果进行处理,

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST_CODE) {
            if (requestCode == RESULT_OK){
                Bitmap photo = BitmapFactory.decodeFile(mTmpFile.getAbsolutePath());
                mPresenter.getRecognitionResultByImage(photo);
                imageView.setImageBitmap(photo);
            }
        }
    }

  如果拍照成功,我们就把照片作为参数传递给之前定义好的接口方法,调用进行图片文字识别。可以看到我还把照片放入imageview中方便与识别结果进行对比。等服务器成功返回识别结构之后,就会调用VIew层的updateUI,更新textview显示识别结果。

  至此,我们就完成了从拍照到拿到识别结果的全部功能。再来识别一下公交卡
公交卡识别.jpg

  嗯,不错。

最后

  这个demo实现了单纯的图片文字识别,就是把图片上的字读取了出来,在此之上我们可以进一步做很多有意思的事,比如用正则表达式把字符串里的一些字提取出来进行操作,像食品的营养成分表啊,发票单子啊,都可以拿来识别,将里面的有用信息提取出来,进行分析处理操作,将功能进一步扩展。
  当然,在实现这些功能之后,我们最后还是得感谢为我们提供轮子的大佬,哈哈。
  贴上本项目的github地址 reggie1996/CharacterRecognition

没有更多推荐了,返回首页