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.

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