From 7e5a9d53480330d875df625605b513da75874dd6 Mon Sep 17 00:00:00 2001 From: lucky Date: Tue, 25 Jan 2022 18:39:30 +0800 Subject: [PATCH] =?UTF-8?q?ocr=E8=AF=86=E5=88=AB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/ptccsens/api/OcrController.java | 56 +++++++++++++++++++ .../com/ccsens/ptccsens/bean/vo/OcrVo.java | 30 ++++++++++ .../ccsens/ptccsens/service/IOcrService.java | 12 ++++ .../ccsens/ptccsens/service/OcrService.java | 30 ++++++++++ .../ccsens/ptccsens/util/BasicsConstant.java | 7 +++ 5 files changed, 135 insertions(+) create mode 100644 src/main/java/com/ccsens/ptccsens/api/OcrController.java create mode 100644 src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java create mode 100644 src/main/java/com/ccsens/ptccsens/service/IOcrService.java create mode 100644 src/main/java/com/ccsens/ptccsens/service/OcrService.java diff --git a/src/main/java/com/ccsens/ptccsens/api/OcrController.java b/src/main/java/com/ccsens/ptccsens/api/OcrController.java new file mode 100644 index 0000000..7a923df --- /dev/null +++ b/src/main/java/com/ccsens/ptccsens/api/OcrController.java @@ -0,0 +1,56 @@ +package com.ccsens.ptccsens.api; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.ImageUtil; +import com.ccsens.cloudutil.annotation.MustLogin; +import com.ccsens.ptccsens.bean.dto.ProjectFinanceDto; +import com.ccsens.ptccsens.bean.vo.OcrVo; +import com.ccsens.ptccsens.bean.vo.ProjectFinanceVo; +import com.ccsens.ptccsens.service.IOcrService; +import com.ccsens.ptccsens.util.BasicsConstant; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.baidu.BaiDuDto; +import com.ccsens.util.baidu.BaiDuUtil; +import com.ccsens.util.baidu.BaiDuVo; +import com.ccsens.util.bean.dto.QueryDto; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.Part; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + + +/** + * @author AUSU + */ +@Api(tags = "图片识别" ) +@RestController +@RequestMapping("/ocr") +@Slf4j +public class OcrController { + + @Resource + private IOcrService ocrService; + + @ApiOperation(value = "图像识别", notes = "whj") + @RequestMapping(value = "/bill", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse identifyBill(@RequestParam(required = true) Part part) throws IOException { + log.info("图像识别"); + // 压缩图像 + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ImageUtil.scale(ImageIO.read(part.getInputStream()), out, 1f); + String img = Base64.encode(out.toByteArray()); + OcrVo.BillInfo billInfo = ocrService.identifyBill(img); + log.info("图像识别结束:{}", billInfo); + return JsonResponse.newInstance().ok(billInfo); + } + +} diff --git a/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java b/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java new file mode 100644 index 0000000..cd23594 --- /dev/null +++ b/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java @@ -0,0 +1,30 @@ +package com.ccsens.ptccsens.bean.vo; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class OcrVo { + + @Data + @ApiModel("发票信息") + public static class BillInfo { + @JSONField(name = "InvoiceCode") + @ApiModelProperty("发票代码") + private String invoiceCode; + @JSONField(name = "InvoiceNum") + @ApiModelProperty("发票号码") + private String invoiceNumber; + @JSONField(name = "CommodityAmount") + @ApiModelProperty("金额") + private Long money; + @JSONField(name = "CommodityTax") + @ApiModelProperty("税额") + private Long taxMoney; + @JSONField(name = "InvoiceDate") + @ApiModelProperty("开票时间") + private String invoiceTime; + } +} diff --git a/src/main/java/com/ccsens/ptccsens/service/IOcrService.java b/src/main/java/com/ccsens/ptccsens/service/IOcrService.java new file mode 100644 index 0000000..4b042d5 --- /dev/null +++ b/src/main/java/com/ccsens/ptccsens/service/IOcrService.java @@ -0,0 +1,12 @@ +package com.ccsens.ptccsens.service; + +import com.ccsens.ptccsens.bean.vo.OcrVo; + +public interface IOcrService { + /** + * 发票识别 + * @param img 发表base64 + * @return 识别结果 + */ + OcrVo.BillInfo identifyBill(String img); +} diff --git a/src/main/java/com/ccsens/ptccsens/service/OcrService.java b/src/main/java/com/ccsens/ptccsens/service/OcrService.java new file mode 100644 index 0000000..29d1ea2 --- /dev/null +++ b/src/main/java/com/ccsens/ptccsens/service/OcrService.java @@ -0,0 +1,30 @@ +package com.ccsens.ptccsens.service; + +import com.ccsens.ptccsens.bean.vo.OcrVo; +import com.ccsens.ptccsens.util.BasicsConstant; +import com.ccsens.util.baidu.BaiDuDto; +import com.ccsens.util.baidu.BaiDuUtil; +import com.ccsens.util.baidu.BaiDuVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Slf4j +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) +public class OcrService implements IOcrService{ + + @Override + public OcrVo.BillInfo identifyBill(String img) { + // 图像识别 + BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); + basic.setImage(img); + BaiDuVo.BillBasic words = BaiDuUtil.billBasic(BasicsConstant.BaiDu.APP_KEY, BasicsConstant.BaiDu.SECRET_KEY, basic); + log.info("识别结果:{}",words); + // 返回数据 + OcrVo.BillInfo personMsg = new OcrVo.BillInfo(); +// personMsg.toMsg(words.getWordsResult()); + return personMsg; + } +} diff --git a/src/main/java/com/ccsens/ptccsens/util/BasicsConstant.java b/src/main/java/com/ccsens/ptccsens/util/BasicsConstant.java index b6726a4..2b7d62c 100644 --- a/src/main/java/com/ccsens/ptccsens/util/BasicsConstant.java +++ b/src/main/java/com/ccsens/ptccsens/util/BasicsConstant.java @@ -52,4 +52,11 @@ public class BasicsConstant { public static final byte INVOICE_UPLOAD_NO = 0; public static final byte INVOICE_UPLOAD_YES = 1; } + + public static class BaiDu{ + public static final String APP_KEY = "F43SLi3hDra3EgWiSi8bIH8c"; + public static final String SECRET_KEY = "wGhbTXGsrbxfuCQT7WyLDndYRxrSYqbD"; + public static final String KEY = "key"; + public static final String NUM = "num"; + } }