小牛翻译:图片翻译API+语音翻译API调用,保姆级使用教程

news/2024/7/14 18:56:20/文章来源:https://blog.csdn.net/Jiqifanyixuetang/article/details/139140779

一、小牛翻译接口简介

图片翻译API

  1. 支持格式:png、jpg、jpeg、bmp
  2. 支持图片尺寸:128px*128px~2048px*2048px
  3. 支持最大图片大小:10M
  4. 支持的语种:中、英、日、韩、俄

语音翻译API

  1. 支持格式:MP3、WAV
  2. 支持语音时长:60s
  3. 支持最大文件大小:2M
  4. 支持的语种:中、英、日、韩、俄

如需要更多语种或更多API接口权限,可以联系小牛官网客服咨询。

备注

①小牛官网提供在线试用功能,可以查看翻译效果,满意再写代码调用。

试用链接:小牛翻译开放平台 - 机器翻译找小牛

②小牛官网,每个账号每天赠送100积分,相当于20万字符流量/34页文档页数/34张图片/25次语音翻译。在线和API调用都可使用。(每日自动到账,无需手动领取)

③如需使用文本翻译+文档翻译的API调用,可参考我之前的文章,里面有详细介绍:小牛翻译API接口的服务开通及使用JAVA进行接口调用实例演示_翻译软件是怎么调用翻译接口的-CSDN博客
 

二、如何调用

1.获取API KEY 和 APP ID

     ①【注册】或【登录】小牛翻译官网账号;

     ②进入【控制台】页面,然后在左侧菜单栏点击【API应用】;

     ③找到所需的API服务【图片API/语音API】,点击【开通】按钮;

     ④即可获取对应的 APIKEY 和 APPID。

2.开始集成

    可參考官网【图片翻译API开发文档】、【语音翻译API开发文档】。

    值得一提的事,小牛是我发现唯一提供终止接口的翻译引擎提供商。文件在翻译过程中,如果停止翻译,不会扣除翻译额度。

三、JAVA集成实例

需要注意的点

1.译后文件类型

图片翻译 API 和语音翻译 API ,获取到翻译后的内容为文本,没有把译后内容直接生成图片或语音的接口。小牛提供的下载接口,图片下载的是docx,语音下载的是txt。

 2.权限字符串

这个稍微麻烦些,不过官网开发文档里有详细的权限字符串生成规则可参考。

3.调用示例

官网有不同开发语言的调用示例可供参考。

图片翻译

代码展示

package com.niutrans.platform.controller;import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;@Slf4j
public class NiuTransImageApiDemoV2 {public static String BASE_URL = "https://api.niutrans.com";public static String UPLOAD_TRANS_URL = BASE_URL + "/v2/image/translate/upload";//上传并翻译接口 public static String GET_INFO_URL = BASE_URL + "/v2/image/translate/status/{file_no}";//获取进度接口public static String INTERRUPT_URL = BASE_URL + "v2/image/translate/interrupt/{file_no}";// 终止翻译接口public static String DOWNLOAD_URL = BASE_URL + "/v2/image/translate/download/{file_no}";//下载文件接口public static String from = "原语语种,例如:zh";public static String to = "目标语语种,例如:en";public static String apikey = "您的apikey";//在'控制台->API应用'中查看public static String appId = "您的appId";//应用唯一标识,在'控制台->API应用'中查看public static String filePath = "D:\data\test.jpg";//替换为你要翻译的文件路径public static String saveFilePath = "D:\data\";public static void main(String[] args) {String fileNo = uploadAndTrans();JSONObject documentInfo = getDocumentInfo(fileNo);while (Integer.parseInt(documentInfo.get("transStatus").toString()) == 103) {documentInfo = getDocumentInfo(fileNo);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}if (Integer.parseInt(documentInfo.get("transStatus").toString()) == 105) {downloadFile(fileNo);}}//上传并翻译文件public static String uploadAndTrans() {TreeMap<String, Object> requestParamsMap = new TreeMap();requestParamsMap.put("from", from);requestParamsMap.put("to", to);authStrGenerate(requestParamsMap);requestParamsMap.put("file", new File(filePath));String response = null;try {response = HttpUtil.post(UPLOAD_TRANS_URL, requestParamsMap);} catch (Exception e) {e.printStackTrace();log.error("上传文档并翻译异常");}log.info("上传并翻译结果为:{}", response);JSONObject jsonObject = JSONUtil.parseObj(response);JSONObject dataObject = JSONUtil.parseObj(jsonObject.get("data"));return dataObject.get("fileNo").toString();}//获取文件信息public static JSONObject getDocumentInfo(String fileNo) {TreeMap<String, Object> requestParamsMap = new TreeMap<>();authStrGenerate(requestParamsMap);String response = null;GET_INFO_URL = GET_INFO_URL.replace("{file_no}", fileNo);try {response = HttpUtil.get(GET_INFO_URL, requestParamsMap);} catch (Exception e) {e.printStackTrace();log.error("获取文档信息异常");}log.info("文档信息为:{}", response);JSONObject jsonObject = JSONUtil.parseObj(response);return JSONUtil.parseObj(JSONUtil.toJsonStr(jsonObject.get("data")));}//终止翻译中的文件public static void interruptTrans(String fileNo) {TreeMap<String, Object> requestParamsMap = new TreeMap<>();authStrGenerate(requestParamsMap);String body = null;INTERRUPT_URL = INTERRUPT_URL.replace("{file_no}", fileNo);final HttpRequest request = HttpUtil.createRequest(Method.PUT, INTERRUPT_URL);request.form(requestParamsMap);try (final HttpResponse httpResponse = request.execute()){body = httpResponse.body();} catch (Exception e) {e.printStackTrace();}log.info("终止结果:{}", body);}//下载文件public static void downloadFile(String fileNo) {TreeMap<String, Object> requestParamsMap = new TreeMap();requestParamsMap.put("type", 1);authStrGenerate(requestParamsMap);DOWNLOAD_URL = DOWNLOAD_URL.replace("{file_no}", fileNo);String url = DOWNLOAD_URL + "?" + HttpUtil.toParams(requestParamsMap);HttpUtil.downloadFile(url, FileUtil.file(saveFilePath));}//生成权限字符串public static void authStrGenerate(TreeMap<String, Object> requestParamsMap) {requestParamsMap.put("appId", appId);requestParamsMap.put("apikey", apikey);requestParamsMap.put("timestamp", System.currentTimeMillis() + "");StringBuilder requestParamsStr = new StringBuilder("");Set<String> keys = requestParamsMap.keySet();Iterator<String> iterator = keys.iterator();while (iterator.hasNext()) {String key = iterator.next();requestParamsStr.append("&").append(key).append("=").append(requestParamsMap.get(key));}String paramsStr = requestParamsStr.toString().replaceFirst("&", "");requestParamsMap.put("authStr", SecureUtil.md5(paramsStr));requestParamsMap.remove("apikey");}}

语音翻译

 代码展示

package com.niutrans.platform.controller;import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;@Slf4j
public class NiuTransVoiceApiDemoV2 {public static String BASE_URL = "https://api.niutrans.com";public static String UPLOAD_TRANS_URL = BASE_URL + "/v2/voice/translate/short-voice/upload";//上传并翻译接口 public static String GET_INFO_URL = BASE_URL + "/v2/voice/translate/short-voice/status/{file_no}";//获取进度接口public static String INTERRUPT_URL = BASE_URL + "v2/voice/translate/short-voice/interrupt/{file_no}";// 终止翻译接口public static String DOWNLOAD_URL = BASE_URL + "/v2/voice/translate/short-voice/download/{file_no}";//下载文件接口public static String from = "原语语种,例如:zh";public static String to = "目标语语种,例如:en";public static String apikey = "您的apikey";//在'控制台->API应用'中查看public static String appId = "您的appId";//应用唯一标识,在'控制台->API应用'中查看public static String filePath = "D:\data\test.mp3";//替换为你要翻译的文件路径public static String saveFilePath = "D:\data\";public static void main(String[] args) {String fileNo = uploadAndTrans();JSONObject documentInfo = getDocumentInfo(fileNo);while (Integer.parseInt(documentInfo.get("transStatus").toString()) == 103) {documentInfo = getDocumentInfo(fileNo);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}if (Integer.parseInt(documentInfo.get("transStatus").toString()) == 105) {downloadFile(fileNo);}}//上传并翻译文件public static String uploadAndTrans() {TreeMap<String, Object> requestParamsMap = new TreeMap();requestParamsMap.put("from", from);requestParamsMap.put("to", to);authStrGenerate(requestParamsMap);requestParamsMap.put("file", new File(filePath));String response = null;try {response = HttpUtil.post(UPLOAD_TRANS_URL, requestParamsMap);} catch (Exception e) {e.printStackTrace();log.error("上传文档并翻译异常");}log.info("上传并翻译结果为:{}", response);JSONObject jsonObject = JSONUtil.parseObj(response);JSONObject dataObject = JSONUtil.parseObj(jsonObject.get("data"));return dataObject.get("fileNo").toString();}//获取文件信息public static JSONObject getDocumentInfo(String fileNo) {TreeMap<String, Object> requestParamsMap = new TreeMap<>();authStrGenerate(requestParamsMap);String response = null;GET_INFO_URL = GET_INFO_URL.replace("{file_no}", fileNo);try {response = HttpUtil.get(GET_INFO_URL, requestParamsMap);} catch (Exception e) {e.printStackTrace();log.error("获取文档信息异常");}log.info("文档信息为:{}", response);JSONObject jsonObject = JSONUtil.parseObj(response);return JSONUtil.parseObj(JSONUtil.toJsonStr(jsonObject.get("data")));}//终止翻译中的文件public static void interruptTrans(String fileNo) {TreeMap<String, Object> requestParamsMap = new TreeMap<>();authStrGenerate(requestParamsMap);String body = null;INTERRUPT_URL = INTERRUPT_URL.replace("{file_no}", fileNo);final HttpRequest request = HttpUtil.createRequest(Method.PUT, INTERRUPT_URL);request.form(requestParamsMap);try (final HttpResponse httpResponse = request.execute()) {body = httpResponse.body();} catch (Exception e) {e.printStackTrace();}log.info("终止结果:{}", body);}//下载文件public static void downloadFile(String fileNo) {TreeMap<String, Object> requestParamsMap = new TreeMap();requestParamsMap.put("type", 1);authStrGenerate(requestParamsMap);DOWNLOAD_URL = DOWNLOAD_URL.replace("{file_no}", fileNo);String url = DOWNLOAD_URL + "?" + HttpUtil.toParams(requestParamsMap);HttpUtil.downloadFile(url, FileUtil.file(saveFilePath));}//生成权限字符串public static void authStrGenerate(TreeMap<String, Object> requestParamsMap) {requestParamsMap.put("appId", appId);requestParamsMap.put("apikey", apikey);requestParamsMap.put("timestamp", System.currentTimeMillis() + "");StringBuilder requestParamsStr = new StringBuilder("");Set<String> keys = requestParamsMap.keySet();Iterator<String> iterator = keys.iterator();while (iterator.hasNext()) {String key = iterator.next();requestParamsStr.append("&").append(key).append("=").append(requestParamsMap.get(key));}String paramsStr = requestParamsStr.toString().replaceFirst("&", "");requestParamsMap.put("authStr", SecureUtil.md5(paramsStr));requestParamsMap.remove("apikey");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1052707.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据经纬度点计算经纬度点之间的距离

根据经纬度点计算经纬度点之间的距离 根据两点经纬度坐标计算直线距离 根据经纬度点计算经纬度点之间的距离 根据经纬度计算两地之间的距离 根据两点经纬度坐标计算距离 其实看第一个就够了 根据 半正矢公式&#xff08;Haversine formula&#xff09;即可计算 本计算式选取地…

2024电激世界脉动-中国汽车品牌全球化制胜手册

来源&#xff1a;奥美Ogilvy&#xff1a; 近期历史回顾&#xff1a; 2024中国宏观经济专题报告-数据要素市场建设 2023-2024年度报告.pdf 2024制药与生化医疗技术产业链白皮书.pdf 从可再生能源到绿氢-中国投资助力埃及能源转型.pdf 2024有机旅行中国行业指引.pdf 2024中国技术…

【常用的队列总结】

文章目录 队列的介绍Queue队列的基本概念与操作队列的基本概念 常见的队列介绍非阻塞队列LinkedList:ArrayDeque:PriorityQueue: 阻塞队列ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue DelayQueueSynchronousQueue 队列的介绍 Queue队列的基本概念与操作 在 …

常见算法(1)

1.基本查找/顺序查找 核心&#xff1a;从0索引之后挨个查找 实现代码&#xff1a; public class test {public static void main(String [] arg) throws ParseException {int[] arr {121,85,46,15,55,77,63,49};int number55;System.out.println(bashi(arr,number));}publi…

多线程基本常识

多线程的状态 在Java中&#xff0c;一个线程的生命周期有以下几种状态&#xff1a; 新建&#xff08;New&#xff09;&#xff1a;当线程对象被创建时&#xff0c;线程处于新建状态。此时线程对象存在&#xff0c;但还没有调用start()方法启动线程。 运行&#xff08;Runnable…

ssm145基于java的电脑硬件库存管理系统+jsp

电脑硬件库存管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对电脑硬件库存信息管理混乱&…

SQL 语言:完整性约束

文章目录 概述主键 ( Primary Key ) 约束外键&#xff08;Foreign Key&#xff09;约束属性值上的约束全局约束总结 概述 数据库的完整性是指数据库正确性和相容性&#xff0c;是防止合法用户使用数据库时向数据库加入不符合语义的数据。保证数据库中数据是正确的&#xff0c;…

React18 apexcharts数据可视化之甜甜圈图

03 甜甜圈图 apexcharts数据可视化之甜甜圈图。 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基本甜甜圈图个性图案的甜甜圈图渐变色的甜甜圈图 面包圈 import ApexChart from react-apexcharts;export function DonutUpdate() {// 数据…

通过扩展指令增强基于覆盖引导的模糊测试

本文由Bruno Oliveira于2024年4月25日发表于IncludeSec的官方网站上。作为IncludeSec的安全研究人员&#xff0c;在他们日常的安全审计和渗透测试工作中&#xff0c;有时需要为客户开发一些模糊测试工具。在安全评估方法中使用模糊测试技术&#xff0c;可以有效地在复杂的现代化…

已解决SyntaxError: EOL while scanning string literal 亲测有效!!!

已解决SyntaxError: EOL while scanning string literal 亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 报错问题解决思路解决方法 报错问题 当你在编写Python代码时&#xff0c;可能会遇到以下报错信息&#xff1a; SyntaxError: EOL while scanning string liter…

如何搭建springBoot项目中的全局异常处理和自定义异常处理

目录 1 什么是异常 2 异常的种类 3 解决异常的方式 4 全局异常处理器和自定义异常处理器 5 测试异常处理 1 什么是异常 异常&#xff08;Exception&#xff09;是在程序执行过程中出现的一种特殊情况或错误。它可以是由于程序逻辑错误、运行环境问题、用户输入错误等原因…

JUC框架-并发容器源码详解

文章目录 并发容器ConcurrentHashMapJDK 1.7 及之前的实现原理JDK 1.8 及之后的实现原理 CopyOnWriteArrayList & CopyOnWriteArraySet工作原理&#xff08;附源码&#xff09;特点适用场景 ConcurrentLinkedQueue数据结构入队列操作ConcurrentLinkedQueue 特性ConcurrentL…

LED屏控制卡是如何控制LED屏的?

LED屏控制卡是LED显示屏的关键组件之一&#xff0c;负责将输入的画面信息转换为LED屏能够显示的数据和控制信号。以下是LED屏控制卡的工作原理和功能的详细介绍&#xff1a; 1. LED显示屏控制器概述&#xff1a; LED显示屏控制器是LED显示屏的核心部件之一&#xff0c;也称为LE…

剪画小程序:自媒体创作的第一步:如何将视频中的文案提取出来?

自媒体创作第一步&#xff0c;文案提取无疑是至关重要的一环。 做自媒体之所以要进行文案提取&#xff0c;有以下重要原因&#xff1a; 首先&#xff0c;提高效率。通过文案提取&#xff0c;可以快速获取关键信息&#xff0c;避免在无关紧要的内容上浪费时间&#xff0c;从而…

685. 冗余连接 II

685. 冗余连接 II 问题描述 在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有父节点。 输入一个有向图&#xff0c;该…

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤

序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…

Qt | QTabBar 类(选项卡栏)

01、上节回顾 Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget02、简介 1、QTabBar类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页…

基础—SQL—DML(数据操作语言)插入数据

一、介绍 分类全称说明DMLData Manipulation Language数据操作语言。用来对数据库表中的数据进行增删改(插入、删除、修改) 则增、删、改是三个操作也就对应着三个关键字&#xff0c;分别是&#xff1a; 添加数据&#xff1a;&#xff08; INSERT &#xff09;修改数据&#…

远程户外监控组网方案,工业4G路由器ZR2000

户外监控无人值守4G工业路由器组网应用涉及工业自动化、数据传输和远程监控的重要领域。在户外没有光纤的情况下&#xff0c;想要让监控或传感器等设备联网&#xff0c;仅需一台4G工业路由器即可解决。以下是关于远程监控户外组网的详细分析与应用&#xff1a; 物联网应用场景 …

LeetCode115:不同的子序列

题目描述 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 代码 /*dp[i][j]&#xff1a;以i为结尾的s中有以j为尾的t的个数递推公式&#xff1a;当s[i - 1] 与 t[j - 1]相等时&#xff0c;dp[i][j]可以有两…