实现语音转文字功能

解决方案

最近要实现语音转文字接口,具体需求是录制语音后再聊天室实时显示文字:
     image.png
目前腾讯有三种解决方案:
image.png
实时语音识别使用场景是一边录语音,一遍转文字,实时性较高;一句话识别是对60s内的语音文件或语音链接转换后返回语音文本;录制文件识别是对较大的语音文件识别。
经过调用接口测试,一句话识别速度很快,对比实时语音识别接口调用费用,最后确定使用一句话识别接口。
image.png
这里公共请求参数是腾讯云接口调用时共用的参数,具体方法可参考:

功能实现

image.png

/**
 * <p>
 * 语音转文字表 服务实现类
 * </p>
 *
 * @author
 * @since 2020-05-11
 */
@Service
@Transactional
@Slf4j
@DS("slave")
public class VoiceToTextServiceImpl extends ServiceImpl<VoiceToTextMapper, VoiceToText> implements IVoiceToTextService {

    @Value("${tencent.secretId}")
    private String secretId;
    @Value("${tencent.secretKey}")
    private String secretKey;

    @Autowired
    private VoiceToTextMapper voiceToTextMapper;

    @Override
    public ResultVO<?> searchVoiceText(VoiceToTextDTO dto) throws Exception {
        // TreeMap可以自动排序
        TreeMap<String, Object> params = new TreeMap<String, Object>();
        // 公共参数
        params.put("Nonce", new Random().nextInt(Integer.MAX_VALUE));
        params.put("Timestamp", System.currentTimeMillis() / 1000);
        params.put("SecretId", secretId);
        params.put("Action", "SentenceRecognition");
        params.put("Version", "2019-06-14");
        params.put("Region", "ap-shanghai");
        // 业务参数
        params.put("ProjectId", 0);
        params.put("SubServiceType", 2);
        params.put("EngSerViceType", "16k");
        params.put("SourceType", 0);
        params.put("VoiceFormat", dto.getVoiceFormat());
        String tempNo = CodeNoEnum.VOICE_TO_TEXT.getTableNO() + CommentUtil.createNo();
        params.put("UsrAudioKey", tempNo);
        params.put("Url", dto.getVoiceUrl());
        // 公共参数
        params.put("Signature", TencentCloudVoiceUtil.sign(TencentCloudVoiceUtil.getStringToSign(params), secretKey, "HmacSHA1"));
        String url = TencentCloudVoiceUtil.getUrl(params);
        String getResponse = HttpUtil.get(url);
        log.info(getResponse);
        JSONObject parse = JSONObject.parseObject(getResponse);
        JSONObject response = parse.getJSONObject("Response");
        String result = response.getString("Result");
        String errorResult = response.getString("Error");
        log.info("Error:"+errorResult);
        log.info("语音识别结果:"+result);
        if (errorResult != null) {
            return ResultVOUtil.returnFail(-1,"文件识别失败!");
        }
        VoiceToText entity = new VoiceToText();
        entity.setNo(tempNo);
        entity.setVoiceUrl(dto.getVoiceUrl());
        entity.setUrl(url);
        entity.setVoiceText(result);
        voiceToTextMapper.insert(entity);
        return ResultVOUtil.returnSuccess("voiceText",result);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值