科大讯飞通用文字识别 intsig API接口接入PHP版

科大讯飞通用文字识别 intsig API接口接入PHP版

一、通用文字识别是什么?

科大讯飞通用文字识别 intsig(Universal Character Recognition),基于深度神经网络模型的端到端文字识别系统,将图片中印刷或手写的文字转化为计算机可编码的文字。该通用文字识别接口支持语种包括:中、日、韩、英、德、法等52种语言

二、使用步骤

1.注册并认证

访问讯飞官网注册账号:https://xinghuo.xfyun.cn/sparkapi?ch=gji
在这里插入图片描述
服务管理-完成个人认证
在这里插入图片描述

2.创建应用

右上角-我的应用
在这里插入图片描述
完善应用信息
在这里插入图片描述
左边选择“通用文字识别intsig”
在这里插入图片描述
右边的token信息需要记录下来
实时用量-购买字符量-购买服务量-免费领取
在这里插入图片描述

3.构建API

https://www.xfyun.cn/doc/words/universal-character-recognition/API.html
官网提供的demo有python、java语言
这里以PHP调用python为例构建一个API
instig.py文件内写入内容:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from datetime import datetime
from wsgiref.handlers import format_date_time
from time import mktime
import hashlib
import base64
import hmac
from urllib.parse import urlencode
import json
import requests
import sys

class AssembleHeaderException(Exception):
    def __init__(self, msg):
        self.message = msg


class Url:
    def __init__(this, host, path, schema):
        this.host = host
        this.path = path
        this.schema = schema
        pass


class universalOcr(object):
    def __init__(self):
        self.appid = appid
        self.apikey = apikey
        self.apisecret = apisecret
        self.url = 'http://api.xf-yun.com/v1/private/hh_ocr_recognize_doc'


    def parse_url(self,requset_url):
        stidx = requset_url.index("://")
        host = requset_url[stidx + 3:]
        schema = requset_url[:stidx + 3]
        edidx = host.index("/")
        if edidx <= 0:
            raise AssembleHeaderException("invalid request url:" + requset_url)
        path = host[edidx:]
        host = host[:edidx]
        u = Url(host, path, schema)
        return u

    def get_body(self, file_path):
        # 将payload中数据替换成实际能力内容,参考不同能力接口文档请求数据中payload
        file = open(file_path, 'rb')
        buf = file.read()
        body = {
            "header": {
                "app_id": self.appid,
                "status": 3
            },
            "parameter": {
                "hh_ocr_recognize_doc": {
                    "recognizeDocumentRes": {
                        "encoding": "utf8",
                        "compress": "raw",
                        "format": "json"
                    }
                }
            },
            "payload": {
                "image": {
                    "encoding": "jpg",
                    "image": str(base64.b64encode(buf), 'utf-8'),
                    "status": 3
                }
            }
        }
        # print(body)
        return body


# build websocket auth request url
def assemble_ws_auth_url(requset_url, method="GET", api_key="", api_secret=""):
    u = universalOcr.parse_url(requset_url)
    host = u.host
    path = u.path
    now = datetime.now()
    date = format_date_time(mktime(now.timetuple()))
    # date = "Mon, 22 Aug 2022 03:26:45 GMT"
    signature_origin = "host: {}\ndate: {}\n{} {} HTTP/1.1".format(host, date, method, path)
    signature_sha = hmac.new(api_secret.encode('utf-8'), signature_origin.encode('utf-8'),
                             digestmod=hashlib.sha256).digest()
    signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')
    # print("signature:",signature_sha)
    authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (
        api_key, "hmac-sha256", "host date request-line", signature_sha)
    authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
    # print("authorization:",authorization)
    values = {
        "host": host,
        "date": date,
        "authorization": authorization
    }

    return requset_url + "?" + urlencode(values)



def get_result():
    request_url = assemble_ws_auth_url(universalOcr.url, "POST", universalOcr.apikey, apisecret)
    headers = {'content-type': "application/json", 'host': 'api.xf-yun.com', 'appid': 'APPID'}
    # print(request_url)
    body = universalOcr.get_body(file_path=file_path)
    response = requests.post(request_url, data=json.dumps(body), headers=headers)
    # print(response)
    re = response.content.decode('utf8')
    str_result = json.loads(re)
    # print("\nresponse-content:", re)
    if str_result.__contains__('header') and str_result['header']['code'] == 0:
        renew_text = str_result['payload']['recognizeDocumentRes']['text']
        print(str(base64.b64decode(renew_text), 'utf-8'))


if __name__ == "__main__":
    # 填写在开放平台申请的APPID、APIKey、APISecret
    appid = "xxxxxx"
    apisecret = "xxxxxx"
    apikey = "xxxxxx"
    file_path = sys.argv[1]
    
    universalOcr = universalOcr()
    get_result()    

index.php获取待识别的图片,存储到本地供python调用,识别完成后删除图片

<?php
/*
*@通过curl方式获取指定的图片到本地
*@ 完整的图片地址
*@ 要存储的文件名
*/
function getImg($url = "", $filename = ""){
    //去除URL连接上面可能的引号
    $hander = curl_init();
    $fp = fopen($filename, 'wb');
    curl_setopt($hander, CURLOPT_URL, $url);
    curl_setopt($hander, CURLOPT_FILE, $fp);
    curl_setopt($hander, CURLOPT_HEADER, 0);
    curl_setopt($hander, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($hander, CURLOPT_TIMEOUT, 60);
    curl_exec($hander);
    curl_close($hander);
    fclose($fp);
    return true;
}

header('Access-Control-Allow-Origin:*');
header('Content-type: application/json');

$pic=isset($_GET['pic'])? $_GET['pic'] :null; 
if(empty($pic)){die("请传入图片参数");}
$time = gmdate('H-i-s', time() + 3600 * 8);   
$png = $time.'.png';
getImg($pic,$png);

$str = exec("python instig.py $png");
$res = json_decode($str, true);//转换为数组
$text = $res['whole_text'];
if($text) {$code = '200';}
else{$code = '202';}
$json_return = array(
    "code" => $code,
    "src" => $pic,
    "dst" => $text
);
echo json_encode($json_return, JSON_UNESCAPED_UNICODE);
unlink($png)
?>

遇到报错:exec() has been disabled,则取消函数exec()的禁用。
运行前:请先填写Appid、APIKey、APISecret。

4.调用实例

请求地址:

https:/你的api地址/?pic=网络图片地址

返回数据:

{
   "code": "200",
   "src": "网络图片地址",
   "dst": "识别的文字信息"
}

Demo:https://api.szfx.top/api/xfocr.html


总结

以上就是使用PHP调用python构建图片文字识别API的教程,欢迎大家去体验。

### 使用科大讯飞API的文档与示例代码 #### 调用科大讯飞在线语音合成API 为了调用科大讯飞的在线语音合成API,开发者需要完成一系列初始化操作并遵循其官方文档中的指导。以下是基于已有资料整理的一个完整的Python实现方案。 首先,注册科大讯飞账号并获取相应的AppID、API Key以及API Secret是非常重要的前提条件[^1]。这些凭证用于身份验证和权限管理。 下面是一个简单的Python脚本,展示如何通过HTTP请求的方式调用科大讯飞的TTS (Text-to-Speech) 接口: ```python import base64 import hashlib import hmac import json from datetime import datetime import requests def generate_signature(api_key, api_secret, date=None): if not date: date = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') signature_str = f'{date}\n{api_key}' hashed = hmac.new(api_secret.encode('utf-8'), signature_str.encode('utf-8'), hashlib.sha256) return base64.b64encode(hashed.digest()).decode() def text_to_speech(text, app_id, api_key, api_secret): url = 'https://ltsv.xfyun.cn/v2/lts' headers = { 'Authorization': f'APPCODE {app_id}', 'Content-Type': 'application/json', 'X-Param': '{"auf":"audio/L16;rate=16000","aue":"raw","voice_name":"xiaoyan","speed":"50","volume":"50","pitch":"50","engine_type":"intp65"}', 'Date': datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT'), 'Host': 'ltsv.xfyun.cn' } data = {"text": text} response = requests.post(url=url, headers=headers, data=json.dumps(data)) pcm_data = response.content with open("output.pcm", "wb") as file: file.write(pcm_data) # 替换为实际的应用参数 APP_ID = '<your_app_id>' API_KEY = '<your_api_key>' API_SECRET = '<your_api_secret>' text_to_speech("你好,这是来自科大讯飞的声音合成测试!", APP_ID, API_KEY, API_SECRET) ``` 上述代码实现了基本的文字转语音功能,并保存结果为PCM格式文件[^3]。如果希望进一步处理该音频数据,则可考虑将其转换成更常见的WAV格式以便于播放或其他用途。 #### 对本地语音文件进行识别 对于上传本地录音片段至服务器端执行ASR (Automatic Speech Recognition),即自动语音识别的任务而言,同样依赖于先前提及过的认证机制来构建合法请求头信息[^2]。具体流程如下所示: ```python import os import time import random import string import hashlib import base64 import json import requests class VoiceRecognition: def __init__(self, appid, secret_key): self.appid = appid self.secret_key = secret_key @staticmethod def get_random_string(length): letters_and_digits = string.ascii_letters + string.digits result_str = ''.join((random.choice(letters_and_digits) for i in range(length))) return result_str def recognize(self, audio_path): cur_time = int(time.time()) param_dict = {'.engine_type':'sms16k','aue':"raw"} param_json = json.dumps(param_dict).replace(' ', '') param_base64 = str(base64.b64encode(param_json.encode('utf-8')), 'utf-8') m2 = hashlib.md5() m2.update((self.get_random_string(8)).encode('utf-8')) boundary = m2.hexdigest() body_content = [] body_content.append('--%s'%boundary) body_content.append('Content-Disposition:form-data;name="param"' '\r\n%s\r\n'%(param_base64)) # 加载二进制文件内容... with open(audio_path,'rb')as fp: content =fp.read() body_content.append('--%s'%boundary) body_content.append('Content-Disposition: form-data; name=\"audio\";' ' filename=\"%s\"\r\nContent-Type: application/octet-stream\r\n\r\n'%os.path.basename(audio_path)) body_content.append(content.decode('latin1')) body_content.append('\r\n--%s--\r\n'%boundary) http_body='\r\n'.join(body_content) signa=str(hashlib.md5((http_body+self.secret_key).encode('utf-8')).hexdigest()+cur_time+str(int(len(http_body)/1024)+1)+'audio/'+os.path.splitext(os.path.basename(audio_path))[0] auth_head='appid='+self.appid+',host=lva.api.xfyun.cn,sig='+signa+',curtime='+str(cur_time) header={ 'authorization':auth_head, 'content-type':'multipart/form-data;charset=utf-8;boundary=%s'%boundary} r=requests.post('https://lva.xfyun.cn/v2/iat',data=http_body,headers=header) res=r.json() print(res['data']['result']) if __name__ == '__main__': vr = VoiceRecognition('<your_app_id>', '<your_secret_key>') vr.recognize('./test.raw') ``` 此段程序展示了怎样把一段预录制好的`.raw`类型的音频提交给讯飞云平台做解析工作。注意这里的输入应该满足特定采样率等技术规格的要求,请参照相关手册调整前处理逻辑部分。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值