public class Sample { //设置APPID/AK/SK public static final String APP_ID = "10570384"; public static final String API_KEY = "74ik5L8ZlazExSPdodV3G2ZQ"; public static final String SECRET_KEY = "eqwGnR5CYQb8aUGaI2dAxQhAqHM10Giu";
public static JSONObject get(String image) { AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY); client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 调用接口 String path = image; JSONObject res = client.basicGeneral(path, new HashMap()); return res; }
api更底层些,sdk更简单些
sdk我理解就是基于api的一个封装吧,仅仅是方便相应的开发语言进行调用;还会涉及实现方案不一致吗?
请问OCR的涂抹翻译功能给开放出来了吗
你会发现。sdk封装的的就是api。hhh
谢谢了 我在看看sdk源码
传递图片的网络路径是可以不用你本地io资源的。但是那只是个别接口支持。
不管sdk还是api如果是图片本地路径或者图片的base64数据。都是需要io进行操作。反正支持url接口就个别几个。
https://github.com/Baidu-AIP/java-sdk/
sdk源码你可以自行查看
都避免不了操作io。除非你的base64是别的地方传递给你的。你是因为操作io对你的服务器有什么影响吗?出于什么考虑呢?
哪位看看怎么避免io操作 用api也行
package com.cn.until;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/imageSerlvet")
public class imageSerlvet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 500);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024 * 1024 * 5);
try {
List items = upload.parseRequest(request);
// 2. 遍历 items:
for (FileItem item : items) {
// 文件名
String fileName = item.getName();
InputStream in = item.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
/*
* 用到了io操作浪费资源 是不是可以不用写io 要怎么写
*/
OutputStream out = new FileOutputStream(fileName);
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
in.close();
System.out.println(Sample.get(fileName).toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.cn.until;
import java.util.HashMap;
import org.json.JSONObject;
import com.baidu.aip.ocr.AipOcr;
public class Sample {
//设置APPID/AK/SK
public static final String APP_ID = "10570384";
public static final String API_KEY = "74ik5L8ZlazExSPdodV3G2ZQ";
public static final String SECRET_KEY = "eqwGnR5CYQb8aUGaI2dAxQhAqHM10Giu";
public static JSONObject get(String image) {
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
// 调用接口
String path = image;
JSONObject res = client.basicGeneral(path, new HashMap());
return res;
}
}
我的意思是自己搭建的服务器 用sdk的话是不是需要io操作先写入图片 再进行处理 占用了io资源
而api请求是不是不需要io
api也占资源。看你是所有模块都用到了。还是只用一个模块。只用一个模块。那需要下载百度的3个工具类代码。占资源8kb。
但是加上你自己调用要必须用到的URL地址。如果只是单个 加起来也就 10kb就够一个模块调用了。
你说的是占什么资源?反正你写代码 写一个字母也是要占资源的。
sdk所占资源74kb。