手指点读接口
<h3>概述</h3>
<p>该部分接口的入口类为 <strong>VTBRSDKManager</strong>,在调用该部分接口前,需要打开sdk和license认证通过,否则有可能会导致部分功能无法正常work。</p>
<p>> 设备点读功能的开启需要满足三个条件,否则不会有识别回调:
>
> 1. license对应的应用服务支持点读;
> 2. 设备机型支持点读(玩瞳负责后台配置);
> 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);
void onFingerSuccess(int frameId, @Nullable String[] videoTexts, @Nullable List&lt;EvalTextsBean&gt; evalTexts);
/**
* 手指检测失败
*
* @param code 错误码
* @param msg 消息
*/
void onFingerDetectFail(int code, String msg);
//v3.1.0及以上版本添加FingerInfoData字段,兼容旧版本
default void onFingerData(@Nullable FingerInfoData data) {}
}</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>长度>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<EvalTextsBean></td>
<td>框评测文本</td>
</tr>
<tr>
<td>frameId</td>
<td>int</td>
<td>框的编号</td>
</tr>
</tbody>
</table>
<h4>2.2.1 onFingerData</h4>
<p>高版本兼容可选数据,返回FingerInfoData类</p>
<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&lt;FramesBean&gt; framesList);
//内部自用 点读数据与互动数据的转换
default void onHandleFingerFrameDataToFaFrameData(int pageId,List&lt;FramesBean&gt; faFrames,List&lt;FramesBean&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<FramesBean> 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<FramesBean></td>
<td>手指数据</td>
</tr>
</tbody>
</table>