玩瞳文档中心


手指点读接口

<h3>概述</h3> <p>该部分接口的入口类为 <strong>VTBRSDKManager</strong>,在调用该部分接口前,需要打开sdk和license认证通过,否则有可能会导致部分功能无法正常work。</p> <p>&gt; 设备点读功能的开启需要满足三个条件,否则不会有识别回调: &gt; &gt; 1. license对应的应用服务支持点读; &gt; 2. 设备机型支持点读(玩瞳负责后台配置); &gt; 3. 书本有点读资源(识别返回信息的resourceType为2或者3)</p> <h3>1. 监听手指点读状态</h3> <pre><code class="language-java">public void setFingerDetectListener(IFingerDetectListener listener)</code></pre> <h3>2. IFingerDetectListener识别回调</h3> <p>该回调类用于监听手指点读回调,接口类如下:</p> <pre><code class="language-java">public interface IFingerDetectListener { /** * 手指检测成功 * * @param frameIndex 框的编号数组 * @param extraData extraData数组 * @return 是否消费该识别结果 * {true: 消费该识别结果, 则不走之后的播放玩瞳手指点读音频流程; * false: 不消费该识别结果, 继续执行玩瞳的操作} */ boolean onFingerDetectSuccess(@Nullable int[] frameIndex, @Nullable String[] extraData); /** * 手指检测失败 * * @param code 错误码 * @param msg 消息 */ void onFingerDetectFail(int code, String msg); } //新版本 public interface IFingerDetectListener { /** * 手指检测成功 * * @param absolutePoints 手指的绝对坐标点(手指在图像上的像素坐标) * @param relativePoints 手指的相对坐标点(手指的像素坐标对应的书本位置坐标) * @param frameIndex 框的编号数组 * @param extraData extraData数组 * @return 是否消费该识别结果 * {true: 消费该识别结果, 则不走之后的播放玩瞳手指点读音频流程; * false: 不消费该识别结果, 继续执行玩瞳的操作} */ boolean onFingerDetectSuccess(Point2f[] absolutePoints, Point2f[] relativePoints, @Nullable int[] frameIndex, @Nullable String[] extraData); //v3.1.0及以上版本添加FingerInfoData字段,该字段为框数据 void onFingerSuccess(int frameId, @Nullable String[] videoTexts, @Nullable List&amp;lt;EvalTextsBean&amp;gt; evalTexts, @Nullable FingerInfoData data); /** * 手指检测失败 * * @param code 错误码 * @param msg 消息 */ void onFingerDetectFail(int code, String msg); }</code></pre> <h4>2.1 onFingerDetectSuccess</h4> <p>该回调为识别成功的回调</p> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>absolutePoints</td> <td>Point2f[]</td> <td>手指的绝对坐标点(手指在图像上的像素坐标)</td> </tr> <tr> <td>relativePoints</td> <td>Point2f[]</td> <td>手指的相对坐标点(手指的像素坐标对应的书本位置坐标)</td> </tr> <tr> <td>frameIndex</td> <td>int[]</td> <td>框的编号数组</td> </tr> <tr> <td>extraData</td> <td>String[]</td> <td>额外信息数组(客户自定义)</td> </tr> </tbody> </table> <p><strong>frameId:</strong></p> <ul> <li>null:当前书页没有点读相关的配置信息(此情况extraData为null);</li> <li>长度为0:手指不在热区内(此情况extraData长度也为0);</li> <li>长度&gt;0:手指在热区内;</li> </ul> <p><strong>返回值:</strong>是否消费该识别结果</p> <p>true: 消费该识别结果, 则后续不走玩瞳的流程(播放手指所点热区的音频);</p> <p>false: 不消费该识别结果, 继续执行玩瞳的操作</p> <h4>2.2 onFingerSuccess</h4> <p>该回调为识别成功的回调,可在此处处理框数据 <strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>videoTexts</td> <td>String[]</td> <td>框视频地址</td> </tr> <tr> <td>evalTexts</td> <td>List&lt;EvalTextsBean&gt;</td> <td>框评测文本</td> </tr> <tr> <td>frameId</td> <td>int</td> <td>框的编号</td> </tr> <tr> <td>data</td> <td>FingerInfoData</td> <td>框内容信息</td> </tr> </tbody> </table> <h4>2.3 onFingerDetectFail</h4> <p>该回调为识别失败的回调</p> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>code</td> <td>int</td> <td>错误码</td> </tr> <tr> <td>msg</td> <td>String</td> <td>响应消息</td> </tr> </tbody> </table> <p><strong>备注:</strong>错误码请查看错误码章节</p> <h3>3. 点读开启状态</h3> <p>该设置/获取接口用来提供客户来主动控制,在满足点读条件(见概述)的前提下,自主控制点读的状态</p> <p><strong>备注:</strong>入口类为 <code>VTBRConfigure</code></p> <h4>3.1 设置点读状态</h4> <pre><code class="language-java">/** * 设置点读开启状态 * * @param enable true:开启 false:关闭 */ public static void setFingerDdEnable(boolean enable)</code></pre> <h4>3.2 获取点读状态</h4> <pre><code class="language-java">/** * 获取点读开启状态 */ public static boolean isFingerDdEnable()</code></pre> <h3>4. 设置手指坐标偏移量</h3> <p>该接口适用于某些设备上因为角度等问题,手指识别的坐标出现一定的偏移(离指尖位置),可通过该接口调整偏移数值来对该设备校准。</p> <p><strong>备注:2.1.5+版本的sdk开放该接口;</strong></p> <pre><code class="language-java">/** * 设置手指偏移量 * @param xOffset x坐标偏移量 * @param yOffset y坐标偏移量 */ public void setupFingerPointOffset(int xOffset, int yOffset)</code></pre> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>xOffset</td> <td>int</td> <td>x坐标偏移量(sdk内部默认值为0);单位:像素</td> </tr> <tr> <td>yOffset</td> <td>int</td> <td>y坐标偏移量(sdk内部默认值为0);单位:像素</td> </tr> </tbody> </table> <p><strong>备注:</strong>坐标系以图像左上角的顶点为(0,0)</p> <h3>5. 设置手指点读 寻找临近框(SDK v2.8.0以上支持)</h3> <p>功能说明:当手指点到非框区域时,可以寻找手指点周围最近的框 建议:开启此功能模式4,有助于手指点读准确率</p> <h4>5.1 设置手指点寻找临近框模式</h4> <pre><code class="language-java"> /** * 设置手指检测模式 参见FingerDetectMode * @param modeCode 0, 绝对击中不返回近邻 1, 加入垂直上下方向近邻框 3, 加入任意方向近邻框 4, 加入垂直向上近邻框(推荐) */ public void setFingerDetectMode(int modeCode)</code></pre> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>modeCode</td> <td>int</td> <td>选框模式(sdk内部默认值为1,建议值为4)</td> </tr> </tbody> </table> <h4>5.2 设置手指点读精确距离</h4> <p>功能:设置5.1接口中,寻找手指周围临近框的有效距离</p> <pre><code class="language-java"> /** * 设置手指检测邻近框精确度[0.01~0.10] * @param thre */ public void setFingerDetectThre(float thre)</code></pre> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>thre</td> <td>int</td> <td>点读到选框距离(sdk内部默认值为0.01,建议值为0.04)</td> </tr> </tbody> </table> <h3>6. 设置OCR监听</h3> <pre><code class="language-java"> /** * 设置OCR监听 * @param thre */ public void setIOCRListener(IOCRListener mIOCRListener)</code></pre> <h3>7. IOCRListener 回调</h3> <p>该回调类用于监听OCR点读回调,接口类如下:</p> <pre><code class="language-java">public interface IOCRListener { /** * 成功获取ocr * @param data ocr结果 * @param bmp 区块裁图 * @param x 裁图宽 * @param y 裁图高 */ void onOCRSuccess(OcrResult data, byte[] bmp, int x, int y); /** * 获取ocr失败 * @param error 错误信息 */ void onOCRError(String error); }</code></pre> <h4>7.1 onOCRSuccess</h4> <p>该回调为ocr成功的回调</p> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>data</td> <td>OcrResult</td> <td>ocr结果</td> </tr> <tr> <td>bmp</td> <td>byte[]</td> <td>区块裁图</td> </tr> <tr> <td>x</td> <td>int</td> <td>裁图宽</td> </tr> <tr> <td>y</td> <td>int</td> <td>裁图高</td> </tr> </tbody> </table> <h4>7.2 onOCRError</h4> <p>该回调为ocr失败的回调</p> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>msg</td> <td>String</td> <td>响应消息</td> </tr> </tbody> </table> <h3>8. IOnlineFingerDataListener识别回调</h3> <p>该回调类用于监听加载手指点读数据的回调,接口类如下:</p> <pre><code class="language-java">public interface IOnlineFingerDataListener { void onLoadOnlineFingerStart(); void onLoadOnlineFingerSuccess(); void onLoadOnlineFingerFail(int code, String msg); void onFrameData(int pageId, List&amp;lt;FramesBean&amp;gt; framesList); //内部自用 点读数据与互动数据的转换 default void onHandleFingerFrameDataToFaFrameData(int pageId,List&amp;lt;FramesBean&amp;gt; faFrames,List&amp;lt;FramesBean&amp;gt; fingerFrames){}; }</code></pre> <h4>8.1 onLoadOnlineFingerStart</h4> <p>该回调为开始加载手指数据的回调</p> <h4>8.2 onLoadOnlineFingerSuccess</h4> <p>该回调为加载手指数据成功的回调</p> <h4>8.3 onLoadOnlineFingerFail</h4> <p>该回调为加载手指数据失败的回调</p> <h4>8.4 onFrameData(int pageId, List&lt;FramesBean&gt; framesList)</h4> <p>该回调为识别成功的page对应的手指数据</p> <p><strong>参数:</strong></p> <table> <thead> <tr> <th>参数名</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>pageId</td> <td>int</td> <td>pageId</td> </tr> <tr> <td>framesList</td> <td>List&lt;FramesBean&gt;</td> <td>手指数据</td> </tr> </tbody> </table>

页面列表

ITEM_HTML