java实现视频转化图片和图片内容识别

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.substring(videoPath.indexOf(".com\\")+5,videoPath.indexOf(".mp4"));
        double skip;
        //先获得视频路径和图片的目标路径
        //获得FFmpegFrameGrabber(视频处理对象)
        FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(videoPath);
        ff.start();
        //获取视频帧数(图片数)
        int lengthInFrames = ff.getLengthInFrames();
        for (int i=0;i<lengthInFrames;i++){
            //因为目前的视频是23帧所有是三秒一次截图判断(根据需求抛弃掉无用的图片)
                skip=i%69;
            if (i==0||skip==0){
                //一张张浏览图片
                Frame frame = ff.grabImage();
                System.out.println("第"+i+"张图片");
                //进行图片识别
                ImageRecognition.doExecuteFrame(frame, imagePath, i, matching, str);
            }else{
            //一张张浏览图片
                ff.grabImage();
            }
        }


    }

这里把所有的图片吐到自己想放到的区域

//获得需求的图片,图片(frame)、结果图片路径(imagePath)、图片坐标(帧数坐标index)、模糊匹配条件(matching)、图片名(ImageName)
    public static boolean doExecuteFrame(Frame f, String targerFilePath, int index,String matching,String ImageName) throws IOException {
        boolean img = false;
        if (null == f||f.image==null) {
            System.out.println("没有图片运行失败");
        } else {
                //使用帧数转换器
                Java2DFrameConverter converter = new Java2DFrameConverter();
                //选择格式 png
                String imageMat = "png";
                //获得缓冲图片
                BufferedImage bi = converter.getBufferedImage(f);
                String Imagename = targerFilePath + File.separator +""+ImageName+"_"+index+"."+imageMat;
                System.out.println(Imagename);
                //new一个文件类
                File output = new File(Imagename);
                //判断是否是需要获取的图片
                //将图片吐到该区域
                ImageIO.write(bi, imageMat, output);
            //筛选图片
            img = Img(Imagename, matching);

        }
        return img;
    }

最后将区域里的图片放入Tesseract进行识别。

/**图片智能识别内容*
     * ImagePath:图片的路径
     * matching:匹配条件
     * */
    public static boolean Img(String ImagePath, String matching){
        // 识别图片的路径(修改为自己的图片路径)
        String path = ImagePath;

        File file = new File(path);
        // 语言库位置(修改为跟自己语言库文件夹的路径)
        //设置训练库的位置
        instance.setDatapath(lagnguagePath);
        //chi_sim :简体中文, eng    根据需求选择语言库
        instance.setLanguage("eng");
        String result = null;
        try {
            long startTime = System.currentTimeMillis();
            //提高图片的识别度
            System.out.println(startTime);
            //识别图片
            result=instance.doOCR(file);
            long endTime = System.currentTimeMillis();
            System.out.println("Time is:" + (endTime - startTime) + " 毫秒");
        } catch (TesseractException e){
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

            if (result.contains(matching)){
                System.out.println("匹配成功");
                return true;
            }else{
                file.delete();
                System.out.println("匹配失败!");
                return false;
            }


    }

这样一个视频转图片和图片内容识别就完成了!这里只提供测试版(确保功能完好!)需要请自便!

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Java可以通过使用相关的第三方库来实现视频文字提取。其中,使用Tesseract OCR库是一种常见的方法。 首先,我们需要将视频换为图像序列。可以使用FFmpeg工具将视频换为一系列图像帧。这一步骤可以通过Java的Runtime类来执行外部命令来完成。 然后,我们可以使用Tesseract OCR库来对每一帧图像进行OCR识别,将图像中的文字提取出来。Tesseract是一个开源的OCR引擎,可以识别图片中的文本,并将其换为可编辑的文本格式。可以使用Tesseract的Java API来实现这个过程。 将每一帧图像传递给Tesseract进行OCR识别,可以通过将图像加载到Java中,然后将其换为Tesseract所需的格式,如TIFF或JPEG。可以使用Java的图像处理库,如Java Advanced Imaging (JAI)或OpenCV来完成这个步骤。 接下来,将处理后的图像传递给Tesseract进行文本提取。Tesseract将图像中的文本识别出来,并将其换为可编辑的文本格式。可以使用Tesseract的Java API中的方法来实现这个步骤。 最后,将提取的文字保存到文件或数据库中,以供后续处理和分析使用。可以使用Java的文件操作API来实现这个步骤。 综上所述,通过使用Java和相关的第三方库,如FFmpeg和Tesseract OCR,我们可以实现视频文字的提取。这个过程包括将视频换为图像序列,对每一帧图像进行OCR识别,将提取的文字保存到文件或数据库中。 ### 回答2: 要实现Java中的视频文字提取,可以按照以下步骤进行: 1. 首先,需要使用Java的多媒体库,如FFmpeg或JavaCV,引入相关依赖。 2. 根据视频文件的路径,使用库提供的类和方法加载视频文件,并准备进行处理。 3. 接下来,需要将视频分解成一系列的帧。可以使用库提供的类将视频分解成图像序列,每一帧都是一个图像。 4. 对每一帧图像进行文字提取。可以使用OCR(光学字符识别)技术,通过处理每一帧图像,提取其中的文字信息。Java中有很多OCR库,如Tesseract OCR和AparOCR等,可以根据需要选择合适的库。 5. 对提取到的文字进行整理和处理。可以根据需求,对文字进行过滤、去重、排序等操作。 6. 最后,可以将提取到的文字保存到文件或数据库中,或进行其他后续处理。 需要注意的是,视频文字提取是一个相对复杂的任务,需要借助一些专门的库和算法,并且对计算机视觉和光学字符识别等领域有一定的了解。在实际应用中,还需要根据具体场景和需求进行调优和优化。 ### 回答3: Java可以通过使用一些开源库和工具来实现视频文字提取。其中最常用的是使用OCR(光学字符识别)技术。 首先,需要将视频换为图像序列。可以使用FFmpeg等工具将视频拆分为一系列帧图像。这些图像在Java中可以使用像JavaCV或OpenCV这样的库进行处理。 接下来,使用OCR库如Tesseract,Google Cloud Vision API或百度OCR等来识别图像中的文字。这些库可以将图像中的文字换为可用的文本。 在图像中识别到的文字可能有误识别或错误。因此,可以使用文本处理技术来进一步净化和改进识别结果。例如,可以使用NLP(自然语言处理)技术来处理文本,进行拼写纠错、语义分析和关键字提取等操作。 最后,将得到的文本进行整理和存储,以便进行后续分析或应用。可以将提取到的文字保存到数据库中,或者导出为文本文件等。 需要注意的是,视频文字提取是一个复杂的任务,其结果受多种因素影响,包括视频的质量、光照条件、文字大小和字体等。因此,在实际应用中需要进行多次尝试和优化,以获得更准确和可靠的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值