# OCRRecognition **Repository Path**: cxshu/ocrrecognition ## Basic Information - **Project Name**: OCRRecognition - **Description**: 通用文字识别 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-04-22 - **Last Updated**: 2022-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 接口说明 通用文字识别提供了setVisionConfiguration()和detect()两个函数接口。 调用ITextDetector的setVisionConfiguration()方法,通过传入的TextConfiguration,选择需要调用的OCR类型。 `void setVisionConfiguration(TextConfiguration textConfiguration);` 下表列出了TextConfiguration的常用设置: 调用ITextDetector的detect()方法,获取识别结果。 `int detect(VisionImage image, Text result, VisionCallback visionCallBack);` 其中: image为待OCR检测识别的输入图片。 如果visionCallback为null,执行同步调用,结果码由方法返回,检测及识别结果由result中返回。 如果visionCallback为有效的回调函数,则该函数为异步调用,函数返回时result中的值无效,实际识别结果由回调函数返回。回调函数的使用方法请参见开发步骤中的具体说明。 同步模式调用成功时,该函数返回结果码0。异步模式调用请求发送成功时,该函数返回结果码700。 开发步骤 在使用通用文字识别SDK时,将实现文字识别的相关的类添加至工程。 ``` import ohos.ai.cv.common.ConnectionCallback; import ohos.ai.cv.common.VisionCallback; import ohos.ai.cv.common.VisionConfiguration; import ohos.ai.cv.common.VisionImage; import ohos.ai.cv.common.VisionManager; import ohos.ai.cv.text.ITextDetector; import ohos.ai.cv.text.Text; import ohos.ai.cv.text.TextConfiguration; import ohos.ai.cv.text.TextDetectType; import ohos.app.Context; import ohos.media.image.PixelMap; ``` 定义ConnectionCallback回调,实现连接能力引擎成功与否后的操作。 ``` ConnectionCallback connectionCallback = new ConnectionCallback() { @Override public void onServiceConnect() { // 定义连接能力引擎成功后的操作。 } @Override public void onServiceDisconnect() { // 定义连接能力引擎失败后的操作。 } }; ``` 调用VisionManager.init()方法,将此工程的context和已经定义的connectionCallback回调作为入参,建立与能力引擎的连接。context应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。 `int result = VisionManager.init(context, connectionCallback);` 实例化ITextDetector接口,将此工程的context作为入参。 `ITextDetector textDetector = VisionManager.getTextDetector(context);` 实例化VisionImage对象image,并传入待检测图片pixelMap。 `VisionImage image = VisionImage.fromPixelMap(pixelMap);` 实例化Text对象text,该对象在同步模式下用于存放调用textDetector.detect()方法的结果返回码及文字识别结果。 `Text text = new Text();` (可选) 定义VisionCallback回调。 ``` VisionCallback callback= new VisionCallback() { @Override public void onResult(Text text) { // 对正确获得文字识别结果进行处理。 } @Override public void onError(int i) { // 处理错误返回码。 } @Override public void onProcessing(float v) { // 返回处理进度。 } }; ``` 说明 在异步模式下,该类的onResult()方法用于获得文字识别结果Text;onError()方法用于处理错误返回码;onProcessing()方法用于返回处理进度,目前没有实现此接口的功能。 同步与异步模式区别在于detect()的最后一个参数VisionCallback是否为空。若非空则为异步模式。此时会忽略自定义的Text输入(效果与传入null相同),接口调用结果一律从VisionCallback获得,自定义的Text输入不做更新。 通过TextConfiguration配置textDetector()方法的运行参数,可选择识别场景,语言类型,调用模式等。跨进程模式(MODE_OUT)下调用方与能力引擎处于不同进程;同进程模式(MODE_IN)下,能力引擎在调用方进程中实例化,调用方通过反射的方式调用引擎里的通用文字识别能力。以聚焦通用文字识别,同进程英文语种检测为例: ``` TextConfiguration.Builder builder = new TextConfiguration.Builder(); builder.setProcessMode(VisionConfiguration.MODE_IN); builder.setDetectType(TextDetectType.TYPE_TEXT_DETECT_FOCUS_SHOOT); builder.setLanguage(TextConfiguration.ENGLISH); TextConfiguration config = builder.build(); textDetector.setVisionConfiguration(config); ``` (可选)调用ITextDetector的prepare()方法。 `result = textDetector.prepare();` 说明 如果返回的result不为0,说明当前OCR能力准备失败,需要处理错误,不再执行之后的动作。在detect()方法中会首先调用prepare()启动引擎,如果引擎已经启动则不会再次启动。 调用ITextDetector的detect()方法。 `result = textDetector.detect(image, text, null); // 同步` 或者 ``` result = textDetector.detect(image, null, visionCallback); // 异步 ``` 说明 同步模式调用完成时,该函数立即返回结果码; 异步模式调用请求发送成功时,该函数返回结果码700。如果返回其他的结果码,说明异步调用请求不成功,需要先处理错误,此时回调函数不会被调用。 如果异步模式调用请求发送成功,则OCR完成后,相应的回调函数会被自动调用。 如果onResult()回调被调用,说明OCR检测识别成功,相当于同步模式结果码为0的情况。 如果onError()方法被调用,则说明OCR发生了错误,具体的调用结果码将由onError()的参数接收。 结果码定义如下表: 结果码 调用ITextDetector的release()方法,释放资源。调用pixelMap的release()方法,释放图片内存。 ``` textDetector.release(); if (pixelMap != null) { pixelMap.release(); pixelMap = null; } ``` 说明 不再使用通用文字识别能力时,调用release()方法释放资源。 调用VisionManager.destroy()方法,断开与能力引擎的连接。 VisionManager.destroy();