22、OCR识别
<p>[TOC]</p>
<h4>简要描述</h4>
<ul>
<li>对印刷体字符、常见标准字体字符、PDF扫描文字进行OCR识别,每10字符收费2题分</li>
</ul>
<h4>请求URL</h4>
<p><strong>{ocrhost}</strong> 为第21步获取到的OCR上传图片地址,建议在一定时间(1~6小时)或一定次数(50~100)后重新获取</p>
<ul>
<li><code>稍后公布</code></li>
</ul>
<h4>请求方式</h4>
<ul>
<li><code>POST</code></li>
</ul>
<h4>请求编码</h4>
<ul>
<li><code>UTF-8</code></li>
</ul>
<h4>请求包头</h4>
<p>> 请求包头即 HTTP Request Header</p>
<ul>
<li>default 默认方式,二进制图片格式,formdata表单方式:</li>
</ul>
<p><code>Content-Type: multipart/form-data; boundary=fengwanfieldboundary; charset=utf-8</code></p>
<ul>
<li>base64 图片格式,urlencoded表单方式:</li>
</ul>
<p><code>Content-Type: application/x-www-form-urlencoded; charset=utf-8</code></p>
<h4>参数</h4>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">uploadtype</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string,字符串</td>
<td>上传图片方式,default(默认)、base64</td>
</tr>
<tr>
<td style="text-align: left;">ascii</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int,整数型</td>
<td>是否将返回内容的中文进行escape编码,默认不编码、为1时进行编码</td>
</tr>
<tr>
<td style="text-align: left;">ver</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int,整数型</td>
<td>上传api版本号,自写接口应设为 202306</td>
</tr>
<tr>
<td style="text-align: left;">userstr</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string,字符串</td>
<td>用户密码串,注意如果密码串使用了“密码串功能”,应该对该字段进行URL Encode UTF-8 编码,建议进行编码</td>
</tr>
<tr>
<td style="text-align: left;">softkey</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string,字符串</td>
<td>软件KEY,需在“开发者信息”中查询自己的软件KEY,不能留空</td>
</tr>
<tr>
<td style="text-align: left;">kou</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">int,整数型</td>
<td>自定义扣分,当客户在可返利情况下,获取返利糖果。取值范围:0~100</td>
</tr>
<tr>
<td style="text-align: left;">img(default)</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">binary,二进制</td>
<td>图片二进制数据</td>
</tr>
<tr>
<td style="text-align: left;">img(base64)</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string,字符串</td>
<td>图片base64编码后的数据,注意如果在使用的http post接口不会自动UTF-8编码的情况下,应该将base64编码内的“+”替换为“%2b”</td>
</tr>
</tbody>
</table>
<h4>发包格式(default)</h4>
<pre><code class="language-js">--fengwanfieldboundary
Content-Disposition: form-data; name=&quot;ascii&quot;
--fengwanfieldboundary
Content-Disposition: form-data; name=&quot;ver&quot;
202306
--fengwanfieldboundary
Content-Disposition: form-data; name=&quot;userstr&quot;
fengwan123|BDC44CF198768A
--fengwanfieldboundary
Content-Disposition: form-data; name=&quot;softkey&quot;
1001|9A42B0F1BD994C75
--fengwanfieldboundary
Content-Disposition: form-data; name=&quot;kou&quot;
0
--fengwanfieldboundary
Content-Disposition: form-data; name=&quot;img&quot;; filename=&quot;C:\yzm.jpg&quot;
Content-Type: image/jpeg
(ps:这里也是一个回车换行\r\n)
?? JFIF ` ` ? C
(ps:图片二进制内容,内容结束后需要+回车换行\r\n)
--fengwanfieldboundary--</code></pre>
<h4>发包格式(base64)</h4>
<pre><code class="language-vb">&quot;为便于观看,对每个字段值后增加了换行,实际发包不需要回车换行符&quot;
uploadtype=base64
&amp;ascii=
&amp;ver=202306
&amp;userstr=myid|JWA2DSAKZDZ2
&amp;softkey=1001|9A42B0F1BD994C75
&amp;kou=0
&amp;img=iVBORw0KGgoAAAANSUhEUgAAAL8AAACWCAIAAAAAK86vAAAABmJLR0QA/wD/AP%2bgvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOx9d7wcV3X/95apO9teVZds4d4wuMSVbgeIDSaYltBLQgmQYKrpYIgpoToU2/yAECBATEkoxgbcwQWMLeMi2VaXXtm%2b0%2bfee35/zHtPT7YFEsECPh/OG93P7mh2duac75xz7il3YfseA576N2dGg3ba2X7rjTee%2buTn7oxJGcpTHUd5FKd7vRX9vo5DUnnRa83GUZ6m6fs/8Ja3vftfLr/uhvPee8GPr//ZU8896%2bDDj/r3iz4/mJkilZ3/7vd/9T%2b/QUlIeb6tkz/rpa8x8fS9t9/w12c/b9O2HmWD8171oh/c%2bMutOX32cxe/5XX/SNnUf3z2A9/8yhfOO%2b9...
&quot;(图片base64编码后的内容较长,仅截取了部分)&quot;</code></pre>
<h4>返回包头</h4>
<p>> 返回包头即 HTTP Response Header</p>
<ul>
<li><code>Content-Type: application/json</code></li>
</ul>
<h4>返回示例</h4>
<pre><code>&quot;为便于观看,对每个字段进行了格式化,实际返回内容无回车换行Tab符&quot;
{
&quot;error&quot;: 0,
&quot;errmsg&quot;: &quot;&quot;,
&quot;warn&quot;: 1,
&quot;warnmsg&quot;: &quot;1001软件KEY仅供测试,有每小时的用量限制&quot;,
&quot;answer&quot;: [{...}],
&quot;msg&quot;: &quot;OCR识别成功&quot;
}</code></pre>
<h4>返回参数说明</h4>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">error</td>
<td style="text-align: left;">int,整数型</td>
<td>是否有错误内容 0、1</td>
</tr>
<tr>
<td style="text-align: left;">errmsg</td>
<td style="text-align: left;">string,字符串</td>
<td>详细错误内容,应该在明显位置提示客户,并根据返回详细错误内容调整软件发题的流程</td>
</tr>
<tr>
<td style="text-align: left;">warn</td>
<td style="text-align: left;">int,整数型</td>
<td>是否有提醒内容 0、1</td>
</tr>
<tr>
<td style="text-align: left;">warnmsg</td>
<td style="text-align: left;">string,字符串</td>
<td>详细提醒内容,应该显示在软件应用上,告知客户</td>
</tr>
<tr>
<td style="text-align: left;">answer</td>
<td style="text-align: left;">[],列表数组</td>
<td>接口返回的任务流水编号,用于下一步的 获取答案</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">string,字符串</td>
<td>流程无误时,返回“OCR识别成功”,其余情况下为“”</td>
</tr>
</tbody>
</table>
<h4>异常情况判断及处理</h4>
<p>> 1、判断返回内容长度是否>0,并且第一个字符为"{",否则可能是网络或服务器出现问题,导致无法获取。应该重新再获取上传图片服务器地址HOST。
2、上述判断还可以直接判断HTTP响应Status_Code(HTTP状态代码)是否为200,200即可直接进行json解析。如果不是200,则请重新获取HOST</p>
<h4>errmsg 返回内容举例</h4>
<p>> 1、当error为1时,errmsg显示具体详细的错误信息
2、仅包含目前的全部错误返回内容,以后可能还会增加其他错误内容</p>
<pre><code>&quot;题分不足&quot; &quot;密码串有误&quot; &quot;密码串不符合规则&quot;
&quot;软件KEY有误&quot; &quot;题目类型有误&quot; &quot;自定义扣分超过100限制&quot;
&quot;图片数据不正确&quot; &quot;图片超过1MB限制&quot; &quot;图片小于100字节&quot; &quot;写入文件异常失败&quot;
&quot;不支持的上传类型&quot; &quot;账号数据异常&quot; &quot;上传异常失败&quot;
</code></pre>
<h4>warnmsg 返回内容举例</h4>
<p>> 1、当warn为1时,warnmsg显示具体详细的错误信息
2、仅包含目前的全部提醒返回内容,以后可能还会增加其他提醒内容</p>
<pre><code>&quot;题分不足xxx,已微信提醒&quot; &quot;未绑定微信,无法提醒&quot;
&quot;题号选择有误,已更改为xxxx&quot; &quot;1001软件KEY仅供测试,有每小时的用量限制&quot; &quot;账号题量异常,已被分流处理&quot;
&quot;密码串功能生效:超时已更改&quot; &quot;密码串功能生效:平台已更改&quot; &quot;密码串功能生效:题号已更改&quot; &quot;密码串功能生效:备注已更改 &quot;</code></pre>