## OpenCV 项目 ### [模糊检测原理](https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/) 整个算法的原理和拉普拉斯算子本身的定义有关,该算子主要用来测量图像的二阶导数。它强调了包含快速强度变化的图像区域。拉普拉斯算子经常被用来做边缘检测。这里存在着一个假设,即如果一个图像中包含着高方差,那么在图像中会有较大范围的响应,包括边缘和非边缘,这代表着一张正常图像。但是如果该图像的方差很低,那么响应的范围很小,这表明图像中的边缘很小。众所周知的是当图像越模糊时,包含的边缘信息就会越少 实现步骤: - 步骤1-读取输入图片; - 步骤2-输入图片灰度化; - 步骤3-与特定的Laplacian核进行卷积; - 步骤4-计算响应的方差值; - 步骤5-如果当前的方差值> ~/.bash_profile source ~/.bash_profile ``` ### 如何使用? #### java **将 SDK copy 至你的项目** ```shell cp PQCVMedia/output/jar/libpq-cv-media.jar 你的项目目录 cp PQCVMedia/output/lib/libpiaoquan_java_opencv.so 你的项目目录 ``` **1、初始化 SDK** ```java PQCVMediaProcessor.initSDK("/root/libpiaoquan_java_opencv.so"); ``` **2、以 bytes 流形式传递** ```java PQCVMediaProcessor.blurDetectionFromImageBytes(byte[] data) ``` **2、以 path 绝对路径形式传递** ```java PQCVMediaProcessor.blurDetectionFromImagePath(String path); ``` ### 获取视频指纹码,用于比较是否相似 #### 环境配置 1. FFmpeg 安装 >=4.4.1 (建议 4.4.1) ```shell yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo yum-config-manager --disable epel-multimedia yum install --enablerepo=epel-multimedia ffmpeg ffmpeg-devel ``` 2. OpenCV 安装 (参考上面) 3. JAVA 安装 (参考上面) 4. 代码地址 ```shell git clone https://git.yishihui.com/VideoProcessing/PQCVMedia.git cd PQCVMedia git checkout ffmpeg-opencv ./build.sh echo "安装成功,在当前 output/lib 下" ``` #### api **inputjson:** strartTimeMs,endTimeMs 时间建议传递 8 段,每段为 1s,比如视频时长 100min,去掉前面 10%,尾部 10%,然后需要中间的 80% 做检查,每隔 10 分钟截取 1s 即可。 ```json { "videoPath": "\"xxx.mp4\"", "clips": [ { "strartTimeMs": 10*60*1000,//10 分钟 "endTimeMs": 10*60*1000 + 1000,//10分1秒 "hashs": [ //结果返回 start -> end 每张图片 标识用于比较 { "imageHash": "\"000010000101010010101010\"", "hashSize": 64, "pts": 0 }, { "imageHash": "\"000010000101010010101010\"", "hashSize": 64, "pts": 40 } ] } ] } ``` ```java PQCVMediaProcessor.java static String getVideoSimilarityLists(String inputjson) ``` 相似比较 API imageHash 每个字符串中的字符比较,如果对应位置上一样,即为相似, 如果有 10 帧图像,其中经过比较有 5 张图片相似,那么他们的相似值为 50% ```java //检测 String src = PQCVMediaProcessor.getVideoSimilarityLists(sVIS[0]); String src2 = PQCVMediaProcessor.getVideoSimilarityLists(sVIS[1]); //识别 返回 0.0~1.0 float v = PQCVMediaProcessor.getVideoSimilarityValue(src, src2); ```