package com.mro.imageDeal.utility;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.HashMap;
/**
*
* 对接TensorFlow帮助类
*
* @author zy
* Created 2021/8/21 15:43
*/
@Component
public class ImageHelper {
public static String getImageData(String file){
try {
//导入opencv.dll文件
String dir = new File(".").getCanonicalPath();
System.load(dir+"/opencv/x64/opencv_java452.dll");
//读取图片矩阵数据
Mat mat = Imgcodecs.imread(file);
int width = (int)mat.size().width;
int height = (int)mat.size().height;
//初始化4维矩阵
double[][][][] matData = new double[1][height][width][3];
//升维
for (int i=0;i<mat.size().height;i++){
for (int j=0;j<mat.size().width;j++){
matData[0][i][j] = mat.get(i,j);
};
};
HashMap<String,Object> param = new HashMap<>();
param.put("signature_name","serving_default");
param.put("instances",matData);
return JSONArray.toJSONString(param);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public static void setImageData(String response,String file){
//读取TensorFlow返回信息
JSONArray dataArr = JSON.parseObject(response).getJSONArray("predictions").getJSONArray(0);
//初始化3维矩阵
Mat matRes = new Mat(dataArr.size(),dataArr.getJSONArray(0).size(), CvType.CV_8UC3);
//降维存储
for (int i=0;i<dataArr.size();i++){
JSONArray data2Arr = dataArr.getJSONArray(i);
for (int j=0;j<data2Arr.size();j++){
double[] data3 = new double[3];
data3[0] = data2Arr.getJSONArray(j).getFloat(0);
data3[1] = data2Arr.getJSONArray(j).getFloat(1);
data3[2] = data2Arr.getJSONArray(j).getFloat(2);
matRes.put(i,j,data3);
};
};
//写入图片
Imgcodecs.imwrite(file,matRes);
}
}