You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
easyAi/图像识别API文档.txt

83 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

本包针对目的:本包对图像进行训练及识别的轻量级面向小白的框架,功能在逐渐扩展中
本包目的是低硬件成本CPU可快速运行面向jAVA开发的程序员简单API调用实现图像识别
入手门槛低,简单配置,快速上手
本文档配合说明1对本包进行说明若还有不解之处可联系QQ794757862 作者本人 询问
本包功能说明:
因为图像属于超大浮点运算亿对亿级任何一点操作都会被扩大一千万倍以上所以目前市面上的框架大都针对GPU运算
深度学习GPU价格昂贵动则几万一块这也是图像识别的费用门槛而JAVA的用户一般都是使用CPU运算。
很少会使用JCUDA 包的GPU浮点操作,目前的主流算法大都使用GPU运算速度快
为了保证用户对本包的使用性能且降低部署成本面向JAVA开发的程序员对图像的CPU快速处理可以在CPU部署。
所以本包对一些算法进行了部分功能阉割部分精度忽略来保证速度并且做到可CPU快速运算。
阉割的代价,在某些精度上会有所下降,所以本包建议使用方案是对图像识别的分类
比如你要分辨当前图像 是 苹果或是香蕉或是桃子,对图像进行判断分类,精准度更高
对图像的切割,针对占比比较大的物体切割,定位。
好的让我们从HELLO WORLD 开始
testPic();
getTemple();
这有两个方法testPic()是我们的入口
public static void testPic() throws Exception {
//初始化图像转矩阵类
Picture picture = new Picture();
//初始化配置模板类
TempleConfig templeConfig = getTemple(true);
//初始化计算类
Operation operation = new Operation(templeConfig);
//标注主键为 第几种分类,值为标注 1 是TRUE 0是FALSE
Map<Integer, Double> rightTagging = new HashMap<>();//分类标注
Map<Integer, Double> wrongTagging = new HashMap<>();//分类标注
rightTagging.put(1, 1.0);
wrongTagging.put(1, 0.0);
for (int i = 1; i < 999; i++) {
System.out.println("开始学习1==" + i);
//读取本地URL地址图片,并转化成矩阵
//训练一个物体我建议是准备一万张这个物体的图片只留物体周围要扣空目前只支持PNG格式图片
//训练的时候光有正模板不行你除了要告诉他true,必须还要告诉他false,正负模板数量相同
Matrix right = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/c/c" + i + ".png");
Matrix wrong = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/b/b" + i + ".png");
//将图像矩阵和标注加入进行学习,
operation.study(right, rightTagging);
operation.study(wrong, wrongTagging);
}
//获取训练结束的模型参数提取出来转化成JSON保存数据库下次服务启动时不用学习
//直接将模型参数注入
//获取模型MODLE
ModelParameter modelParameter = templeConfig.getModel();
//将模型MODEL转化成JSON 字符串
String model = JSON.toJSONString(modelParameter);
//将JSON字符串转化为模型MODEL
ModelParameter modelParameter1 = JSONObject.parseObject(model, ModelParameter.class);
//初始化模型配置
TempleConfig templeConfig1 = getTemple(false);
//注入之前学习结果的模型MODEL到配置模版里面
templeConfig1.insertModel(modelParameter1);
//将配置模板配置到运算类
Operation operation1 = new Operation(templeConfig1);
//获取本地图片字节码转化成降纬后的灰度矩阵
Matrix right = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/test/a101.png");
Matrix wrong = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/b/b1000.png");
//进行图像检测
operation1.look(wrong, 3);
operation1.look(right, 2);
}
public static TempleConfig getTemple(boolean isFirst) throws Exception {
TempleConfig templeConfig = new TempleConfig();
//创建一个回调类
Ma ma = new Ma();//创建一个回调类
//注册输出结果回调类 必写
templeConfig.setOutBack(ma);
//全连接层深度,默认为2 选填
templeConfig.setDeep(2);
//要学习几种分类 默认为1 选填
templeConfig.setClassificationNub(1);
//设置图像行列比例的行默认为5 选填
templeConfig.setRow(5);
//设置图像行列比例的列默认为3 选填
templeConfig.setColumn(3);
//对模版进行初始化 Ps:初始化一定要在所有参数设置完成后设置,否则设置无效。
// 使用默认值(模型参数注入除外)若无需注入参数 选择TRU若注入模型参数选择FALSE
//相似说明见 文档1
templeConfig.initModelVision(isFirst);//对模板初始化 使用模板视觉
return templeConfig;
}