|
@@ -0,0 +1,90 @@
|
|
|
+package com.ruixuan.isc.utils;
|
|
|
+
|
|
|
+import io.minio.GetObjectArgs;
|
|
|
+import lombok.Data;
|
|
|
+import net.sourceforge.tess4j.ITesseract;
|
|
|
+import net.sourceforge.tess4j.Tesseract;
|
|
|
+import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import javax.imageio.ImageIO;
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+
|
|
|
+@Data
|
|
|
+@Component
|
|
|
+public class Tess4jClient {
|
|
|
+
|
|
|
+ private String dataPath = "/data/webapp/RuiXuan-Cloud/tessdata";
|
|
|
+ private String language = "chi_sim";
|
|
|
+ // 入参:图片流
|
|
|
+ public String doOCR(BufferedImage image) throws Exception {
|
|
|
+ //创建Tesseract对象
|
|
|
+ ITesseract tesseract = new Tesseract();
|
|
|
+ //设置中文字体库路径
|
|
|
+ tesseract.setDatapath(dataPath);
|
|
|
+ //中文识别
|
|
|
+ tesseract.setLanguage(language);
|
|
|
+ //执行ocr识别
|
|
|
+ String result = tesseract.doOCR(image);
|
|
|
+ //替换回车和tal键 使结果为一行
|
|
|
+ System.out.println(result.replaceAll(" ", ""));
|
|
|
+ result = result.replaceAll("\\r|\\n", "-").replaceAll(" ", "");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getWords(MultipartFile file) throws Exception {
|
|
|
+ InputStream inputStream = file.getInputStream();
|
|
|
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
|
+ byte[] buff = new byte[100];
|
|
|
+ int rc = 0;
|
|
|
+ while (true) {
|
|
|
+ try {
|
|
|
+ if (!((rc = inputStream.read(buff, 0, 100)) > 0)) break;
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ byteArrayOutputStream.write(buff, 0, rc);
|
|
|
+ }
|
|
|
+ //从byte[]转换为butteredImage
|
|
|
+ ByteArrayInputStream in = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
|
|
|
+ BufferedImage imageFile = ImageIO.read(in);
|
|
|
+ //识别图片的文字
|
|
|
+ return doOCR(imageFile);
|
|
|
+ //再结合敏感词过滤算法,审核图片中的文字是否包含敏感词
|
|
|
+ }
|
|
|
+
|
|
|
+// public byte[] downLoadFile(String pathUrl) {
|
|
|
+// String key = pathUrl.replace(minIOConfigProperties.getEndpoint()+"/","");
|
|
|
+// int index = key.indexOf("/");
|
|
|
+// String bucket = key.substring(0,index);
|
|
|
+// String filePath = key.substring(index+1);
|
|
|
+// InputStream inputStream = null;
|
|
|
+// try {
|
|
|
+// inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(minIOConfigProperties.getBucket()).object(filePath).build());
|
|
|
+// } catch (Exception e) {
|
|
|
+// log.error("minio down file error. pathUrl:{}",pathUrl);
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+//
|
|
|
+// ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
|
+// byte[] buff = new byte[100];
|
|
|
+// int rc = 0;
|
|
|
+// while (true) {
|
|
|
+// try {
|
|
|
+// if (!((rc = inputStream.read(buff, 0, 100)) > 0)) break;
|
|
|
+// } catch (IOException e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+// byteArrayOutputStream.write(buff, 0, rc);
|
|
|
+// }
|
|
|
+// return byteArrayOutputStream.toByteArray();
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+}
|