Browse Source

发票图片识别

ptos
lucky 4 years ago
parent
commit
ea300dbd1f
  1. 3
      src/main/java/com/ccsens/ptccsens/api/OcrController.java
  2. 13
      src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java
  3. 4
      src/main/java/com/ccsens/ptccsens/service/IOcrService.java
  4. 35
      src/main/java/com/ccsens/ptccsens/service/OcrService.java

3
src/main/java/com/ccsens/ptccsens/api/OcrController.java

@ -26,6 +26,7 @@ import javax.imageio.ImageIO;
import javax.servlet.http.Part;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.ParseException;
/**
@ -42,7 +43,7 @@ public class OcrController {
@ApiOperation(value = "图像识别", notes = "whj")
@RequestMapping(value = "/bill", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<OcrVo.BillInfo> identifyBill(@RequestParam(required = true) Part part) throws IOException {
public JsonResponse<OcrVo.BillInfo> identifyBill(@RequestParam(required = true) Part part) throws Exception {
log.info("图像识别");
// 压缩图像
ByteArrayOutputStream out = new ByteArrayOutputStream();

13
src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java

@ -11,20 +11,15 @@ 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")
private String invoiceNum;
@ApiModelProperty("金额")
private Long money;
@JSONField(name = "CommodityTax")
private Long totalAmount;
@ApiModelProperty("税额")
private Long taxMoney;
@JSONField(name = "InvoiceDate")
private Long totalTax;
@ApiModelProperty("开票时间")
private String invoiceTime;
private Long invoiceDate;
}
}

4
src/main/java/com/ccsens/ptccsens/service/IOcrService.java

@ -2,11 +2,13 @@ package com.ccsens.ptccsens.service;
import com.ccsens.ptccsens.bean.vo.OcrVo;
import java.text.ParseException;
public interface IOcrService {
/**
* 发票识别
* @param img 发表base64
* @return 识别结果
*/
OcrVo.BillInfo identifyBill(String img);
OcrVo.BillInfo identifyBill(String img) throws ParseException;
}

35
src/main/java/com/ccsens/ptccsens/service/OcrService.java

@ -1,6 +1,9 @@
package com.ccsens.ptccsens.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.druid.sql.visitor.functions.If;
import com.ccsens.ptccsens.bean.vo.OcrVo;
import com.ccsens.ptccsens.util.BasicsConstant;
import com.ccsens.util.RestTemplateUtil;
@ -12,26 +15,38 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@Service
@Slf4j
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class OcrService implements IOcrService{
@Override
public OcrVo.BillInfo identifyBill(String img) {
public OcrVo.BillInfo identifyBill(String img) throws ParseException {
// 图像识别
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);
String token = BaiDuUtil.getToken(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY);
String invoiceUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={}";
String url = StrUtil.format(invoiceUrl, token);
String result = RestTemplateUtil.postUrlEncode(url, basic);
log.info("result:{}", result);
BaiDuVo.BillBasic words = BaiDuUtil.billBasic(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY, basic);
log.info("识别结果:{}",words);
// String token = BaiDuUtil.getToken(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY);
// String invoiceUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={}";
// String url = StrUtil.format(invoiceUrl, token);
// String result = RestTemplateUtil.postUrlEncode(url, basic);
// log.info("result:{}", result);
// 返回数据
OcrVo.BillInfo personMsg = new OcrVo.BillInfo();
OcrVo.BillInfo billInfo = new OcrVo.BillInfo();
if (CollectionUtil.isNotEmpty(words.getWordsResult())) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd");
BeanUtil.copyProperties(words.getWordsResult().get(0),billInfo);
billInfo.setTotalAmount(new BigDecimal(words.getWordsResult().get(0).getTotalAmount()).multiply(BigDecimal.valueOf(100)).longValue());
billInfo.setTotalTax(new BigDecimal(words.getWordsResult().get(0).getTotalTax()).multiply(BigDecimal.valueOf(100)).longValue());
billInfo.setInvoiceDate(sdf.parse(words.getWordsResult().get(0).getInvoiceDate()).getTime());
}
// personMsg.toMsg(words.getWordsResult());
return personMsg;
return billInfo;
}
}

Loading…
Cancel
Save