spring.servlet.multipart.max-file-size=10MB
处理图片文件的目录
predict.imagefilepath=/app/images/
模型所在位置
predict.modelpath=/app/model/minist-model.zip
- 将处理图片所需的静态方法集中在ImageFileUtil.java的文件中,主要是save(存到磁盘上)、resize(缩放)、colorRevert(反色)、clear(清理)、getGrayImageFeatures(提取特征,操作和训练时的是一样的):
package com.bolingcavalry.commons.utils;
import lombok.extern.slf4j.Slf4j;
import org.datavec.api.split.FileSplit;
import org.datavec.image.loader.NativeImageLoader;
import org.datavec.image.recordreader.ImageRecordReader;
import org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.dataset.api.preprocessor.ImagePreProcessingScaler;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Slf4j
public class ImageFileUtil {
/**
- 调整后的文件宽度
*/
public static final int RESIZE_WIDTH = 28;
/**
- 调整后的文件高度
*/
public static final int RESIZE_HEIGHT = 28;
/**
-
将上传的文件存在服务器上
-
@param base 要处理的文件所在的目录
-
@param file 要处理的文件
-
@return
*/
public static String save(String base, MultipartFile file) {
// 检查是否为空
if (file.isEmpty()) {
log.error(“invalid file”);
return null;
}
// 文件名来自原始文件
String fileName = file.getOriginalFilename();
// 要保存的位置
File dest = new File(base + fileName);
// 开始保存
try {
file.transferTo(dest);
} catch (IOException e) {
log.error(“upload fail”, e);
return null;
}
return fileName;
}
/**
-
将图片转为28*28像素
-
@param base 处理文件的目录
-
@param fileName 待调整的文件名
-
@return
*/
public static String resize(String base, String fileName) {
// 新文件名是原文件名在加个随机数后缀,而且扩展名固定为png
String resizeFileName = fileName.substring(0, fileName.lastIndexOf(".")) + “-” + UUID.randomUUID() + “.png”;
log.info(“start resize, from [{}] to [{}]”, fileName, resizeFileName);
try {
// 读原始文件
BufferedImage bufferedImage = ImageIO.read(new File(base + fileName));
// 缩放后的实例
Image image = bufferedImage.getScaledInstance(RESIZE_WIDTH, RESIZE_HEIGHT, Image.SCALE_SMO