java实现视频转化图片和图片内容识别
今年来到个新公司,不过万万没想到的是作为刚入职的新人第一次以为会接到一个普通的crud的模块,结果确接到了一个这么刺激的功能(未接触过的领域)。
公司里的运营团队在做运营的时候会录屏,所有需要我们开发人员做一个能够将视频转入接口里然后自动识别视频里的订单页面,然后再将订单页面以图片的形式给保存在文件夹里!
虽然这个从没做过,但这好歹是我程序员职业生涯的第一战一定要打好!
要筛选视频的页面,首先要做的是将视频变成一张张的图片,变成图片后才能进行图片识别进行一张张筛选!所以这里用的两个技术分别是 javacv和Tesseract-orc注解如下:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.4.0</version>
</dependency>
除了这些还需要准备Tesseract-orc(不可少的)如下:
链接:https://download.csdn.net/download/a1079062541/16078591
当然公司的要求肯定是要求识别准确率的所以下面还有 训练字库(需要则下载)专门提高准确率如下:https://download.csdn.net/download/a1079062541/16079122
安装Tesseract-ocr的流程,反正无脑下一步就可以了!
安装好了以后把 训练字库解压把所以的内容cv到
接下来就是代码:
这里就是直接的调用
//训练文字库的位置
static String lagnguagePath = "C:\\Program Files\\Tesseract-OCR\\tessdata";
static ITesseract instance = new Tesseract();
public static void main(String[] args) throws IOException {
/* String r = "View order details";*/
Image("F:\\snapshot\\laijunping@bestwo.com\\114-6293536-9163409.mp4","F:\\mv","View order details");
}
这个方法是做过优化的,在视频转为图片的过程里会有大量的图片,让我们来举个栗子:
一个10分钟23帧的视频转成图片一共有601023张图片就是13800张图片。每张图片识别过程,简单的0.9秒复杂的3.2秒一共需要都是时间呢…
大家自行计算吧!
所以这里我做了一个操作,三秒进行一次识别,这样的话就过滤了大量重复的图片(当然也是根据运营的习惯做的需要的自行修改)。
//将视频的链接传入参数(videoPath)、结果图片路径(imagePath)、模糊匹配的参数(matching)
public static void Image(String videoPath,String imagePath,String matching) throws IOException {
//截取图片名称前的订单号当文件名
String str=videoPath.