个人需求
SpaceX在发射猎鹰9号的时候,在画面左下角及右下角均会出现一二级火箭的实时速度与高度信息,同时画面中间底部还是时间:
前几天我发了一篇文章,讲的是猎鹰9号那超神的40秒,其中就大量引用了Transport-3任务中猎鹰9号一级火箭从点火到落地的实时速度与高度,美中不足的是,速度与高度的数据,我是看着视频每隔10秒,手工录入到Excel中的,这种事情做一次还可以,但要做第二次,简直受不了!而且!如果我想压缩一下时间间隔,那录入量将会成倍地增加,这种事情对一个程序员来讲是不可以接受了!
于是我就想玩点高端的,为什么不自动从视频中通过图片文字识别的方式来获取这些数据的?我的构想很简单,三步走:
其一、将视频按每秒切割成图片,对整体图片进行降噪处理,然后只聚焦有数字的图片区域,也就是对已降噪的图片的进行三次裁剪,生成三张关联的小图片。
其二、对生成的图片进行字符识别,由训练好的第三方模型库生成文本字符。
其三、将自动提取的数据写入数据库,然后搞个简单的可视化Web页面。
如此一来,每次SpaceX发射猎鹰9号,把视频下载下来之后,就可以自动获取此次任务中一级火箭与二级火箭的实时速度与高度数据了,这对进一步加深对猎鹰9号的了解绝对是有很大帮助的!
技术选型
本人Java系程序员,以快速实现个人需求,搜寻支持Java的开源库,开源库要实现两个功能,其一是能够对视频进行单帧画面捕获与裁剪,其二是能够识别图片上的文字,还好这两个需求已经是历史悠久了,视频帧画面捕获与裁剪选定使用开源的OpenCV,图片文字识别选定使用开源的Tesseract。
由于苹果M1系列芯片刚发布没两年,很多开源的功能库虽然支持通过JNA包装让Java来调用,但绝大多数都是X86平台的,所以如果基于Arm架构的M1系列芯片要使用,最好还是通过源码专门以Arm指令再编译一次,正好也可趁此机会了解一下高深莫测的C系编译与打包。
这里得稍微吐槽一下,像这种多数是由C或C++编写的图像类别类的开源基础库,在网络上找来找去,也只能用国外的了。
Tesseract简介
Tesseract是一款开源的光学字符识别(OCR)引擎,据说识别准确率位居前三,光学字符识别,简单来说就是从数字图片中基于训练的模型识别出各个语系的字符,支持世界主流语言。
据悉,Tesseract在Windows系统以及Ubuntu系统会经过了严格的测试,综合表现良好,不知在MacOS下会有怎样的识别表现,正好本期内容就可以专门试验一下。
OpenCV简介
OpenCV用一句话来概括就是一套跨平台的计算机视觉基础库,适用的领域很广泛,包括但不限于:情绪估计、面部识别、手势识别、人机交互、运动追踪、对象检测、立体视觉、增强现实等,当然就我个人而言,我可能只会用到它提供的二维或三维基础视觉工具包。
另外,OpenCV的合作伙伴阵容强大,Intel、微软、华为等科技巨头均在其列:
在商用方面,OpenCV给各位开发者吃了一个定心丸儿--免费:
综合来看,OpenCV是一个不错的深耕方向,个人也有意将其作为一个优先级很高的兴趣予以对待,说不定以后OpenCV还能给我提供一个稳定的饭碗。
安装前置:HomeBrew
具体HomeBrew是做什么的,不妨看一张官方图片:
如红色框框所示,HomeBrew是macOS或Linux系统中软件包的管理器,安装起来十分简单,官方也给出了兼下载跟运行于一体的命令:
/bin/bash-c"$(curl-fsSL