代码拉取完成,页面将自动刷新
https://github.com/lifejwang11/easyAi
链接:https://gitee.com/dromara/sayOrder (gitee) https://github.com/lifejwang11/SayOrder (github)
///////////////训练部分
YoloConfig yoloConfig = new YoloConfig();//创建配置参数类
//配置类内的配置参数,根据实际情况修改
private int windowWidth = 90;//检测窗口宽
private int windowHeight = 140;//检测窗口高
private int typeNub = 10;//需要识别的种类数
private int hiddenNerveNub = 16;//线性层隐层神经元数量
private double lineStudy = 0.01;//线性层学习率
private int kernelSize = 3;//卷积核尺寸
private boolean showLog = false;//是否打印学习过程中的log
private double convStudy = 0.01;//卷积层学习率
private int enhance = 800;//训练样本过少时增强效果,如果有足够训练数据量,请将其设置为1
private double iouTh = 0.05;//NMS合并框交并比阈值
private double containIouTh = 0.15;//训练时是否包含样本判断交并比阈值
FastYolo yolo = new FastYolo(yoloConfig); //初始化图像识别类
List<YoloSample> data//目标标注类集合
YoloSample data;//标注类
//标注类属性
private String locationURL;//标注图片的本地url
private List<YoloBody> yoloBodies;//该图片的内部标注
YoloBody yoloBody;//内部标注类
//内部标注类属性
private int x;//目标左上角x的值
private int y;//目标左上角得y的值
private int width;//目标的宽度
private int height;//目标的高度
private int typeID;//标注类别id
//开始训练
yolo.toStudy(data);
//训练结束将模型写出
YoloModel yoloModel = yolo.getModel();
writeModel(JSON.toJSONString(yoloModel), "D:\\lesson/yoloModel.json");
/////////////////////初始化部分(单例且只初始化一次)
FastYolo yolo = new FastYolo(yoloConfig); //初始化图像识别类
YoloModel yoloModel = readModelParameter();//从训练的模型中JSON反序列化读取模型
yolo.insertModel(yoloModel);//识别类注入模型
//////////////////////识别部分
Picture picture = new Picture();//初始化图像解析类
ThreeChannelMatrix th = picture.getThreeMatrix("D:\\lesson/number.png");//将图像解析为矩阵
List<OutBox> list = yolo.look(th);//对该图像矩阵进行识别,并返回识别结果
List<OutBox> list;//识别结果集合
////识别结果类
OutBox outBox;
private int x;//检测到物体在该图片中的横坐标
private int y;//检测到物体在该图片中的纵坐标
private int width;//检测到物体在该图片中的宽度
private int height;//检测到物体在该图片中的高度
private int typeID;//检测到物体在该图片中的类别id
//参数分别为:
//第一个参数:threeChannelMatrix,图片矩阵(图片矩阵如何提取,上文有讲不在阐述)
//第二个参数:boxSize,将一张图片横纵各分为几个区域提取特征
参数说明:该值越大,摘要id敏感度越高,该参数有最大值。最大值为图片:图片最小边长/5,超过会报错数组越界
//第三个参数:regionSize,相似特征区域分区种类数量
参数说明:该值越大,摘要id敏感度越高
//返回name 即为该图片摘要id,通过id逐位对比即可对比相似程度
//什么是id敏感度:
//id敏感度越高,对图片变化越敏感,越适合越大的检索区域匹配,即特征越细致,但缺点id长度越长。
//id敏感度越低,对图片变化越不敏感,越适合越小的检索区域匹配,特征越粗,优点是id长度越短。
FastPictureExcerpt fastPictureExcerpt = new FastPictureExcerpt();
String name = fastPictureExcerpt.creatImageName(threeChannelMatrix, 5, 10);
//通过txt默认格式进行读取
TemplateReader templateReader = new TemplateReader();
WordTemple wordTemple = new WordTemple();//初始化语言模版,该语言模板训练结束后一定要static出来,在内存中长期持有,Talk识别构造参数进行复用
//wordTemple.setTreeNub(9);
//wordTemple.setTrustPunishment(0.5);
//读取语言模版,第一个参数是模版地址,第二个参数是编码方式 (教程里的第三个参数已经省略)
//同时也是学习过程
templateReader.read("/Users/lidapeng/Desktop/myDocument/model.txt", "UTF-8", wordTemple);
Talk talk = new Talk(wordTemple);
//输入语句进行识别,若有标点符号会形成LIST中的每个元素
//返回的集合中每个值代表了输入语句,每个标点符号前语句的分类
List<Integer> list = talk.talk("空调坏了,帮我修一修");
System.out.println(list);
/////////////////////////////////自定义输入训练语句
WordTemple wordTemple = new WordTemple();//初始化语言模版,该语言模板训练结束后一定要static出来,在内存中长期持有,Talk识别构造参数进行复用
Tokenizer tokenizer = new Tokenizer(wordTemple);//学习类
//训练模板 主键为类别id,值为该类别id的语句集合
//注意
//1,若训练量不足,建议训练语句通过标点符号拆分为若干句,且不要将标点符号带入训练语句
//2,包含数字的语句用统一的占位符代替 例如 35,3,36% 变为 #,#,#%
Map<Integer, List<String>> model = new HashMap<>();
//开始训练
tokenizer.start(model);
///////////////////////////////////单纯对输入语句进行切词结果返回,不进行识别
wordTemple.setSplitWord(true);//将模板设置成纯切词模式
List<List<String>> lists = talk.getSplitWord("空调坏了,帮我修一修");
for (List<String> list : lists) {
System.out.println(list);
}
//创建一个DNN神经网络管理器
NerveManager nerveManager = new NerveManager(...);
//构造参数
//sensoryNerveNub 感知神经元数量 即输入特征数量
//hiddenNerverNub 每一层隐层神经元的数量
//outNerveNub 输出神经元数量 即分类的类别
//hiddenDepth 隐层神经元深度,即学习深度
//activeFunction 激活函数
//isDynamic 是否启用动态神经元数量(没有特殊需求建议为静态,动态需要专业知识)
public NerveManager(int sensoryNerveNub, int hiddenNerverNub, int outNerveNub, int hiddenDepth, ActiveFunction activeFunction, boolean isDynamic)
nerveManager.getSensoryNerves()获取感知神经元集合
//eventId:事件ID
//parameter:输入特征值
//isStudy:是否是学习
//E:特征标注
//OutBack 回调类
SensoryNerv.postMessage(long eventId, double parameter, boolean isStudy, Map<Integer, Double> E, OutBack outBack)
//每一次输出结果都会返回给回调类,通过回调类拿取输出结果,并通过eventId来对应事件
//创建一个内存中的数据表
DataTable dataTable = new DataTable(column);
//构造参数是列名集合
public DataTable(Set<String> key)
//指定主列名集合中该表的主键
dataTable.setKey("point");
//创建一片随机森林
RandomForest randomForest = new RandomForest(7);
//构造参数为森林里的树木数量
public RandomForest(int treeNub)
//唤醒随机森林里的树木
randomForest.init(dataTable);
//将加入数据的实体类一条条插入森林中
randomForest.insert(Object object);
//森林进行学习
randomForest.study();
//插入特征数据,森林对该数据的最终分类结果进行判断
randomForest.forest(Object objcet);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型