├── test ├── 1-1.jpg ├── 1-2.jpg ├── 2-1.jpg ├── 2-2.jpg ├── ppt.pptx ├── ppt1.PNG ├── ppt2.PNG ├── ppt3.PNG ├── ppt4.PNG └── ppt_video.mp4 ├── Testout ├── 000.jpg ├── 074.jpg ├── 148.jpg └── 185.jpg ├── test.sh ├── other_tools └── DupImageFinder │ ├── dcrawlib.dll │ ├── DupImageFinder.exe │ └── reg.reg ├── pkg ├── __pycache__ │ ├── comp_img.cpython-37.pyc │ ├── comp_ski.cpython-37.pyc │ └── read_video.cpython-37.pyc ├── comp_TF.py ├── read_video.py ├── comp_ski.py └── comp_img.py ├── README.md ├── vshot.py └── log /test/1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/1-1.jpg -------------------------------------------------------------------------------- /test/1-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/1-2.jpg -------------------------------------------------------------------------------- /test/2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/2-1.jpg -------------------------------------------------------------------------------- /test/2-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/2-2.jpg -------------------------------------------------------------------------------- /test/ppt.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/ppt.pptx -------------------------------------------------------------------------------- /test/ppt1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/ppt1.PNG -------------------------------------------------------------------------------- /test/ppt2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/ppt2.PNG -------------------------------------------------------------------------------- /test/ppt3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/ppt3.PNG -------------------------------------------------------------------------------- /test/ppt4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/ppt4.PNG -------------------------------------------------------------------------------- /Testout/000.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/Testout/000.jpg -------------------------------------------------------------------------------- /Testout/074.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/Testout/074.jpg -------------------------------------------------------------------------------- /Testout/148.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/Testout/148.jpg -------------------------------------------------------------------------------- /Testout/185.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/Testout/185.jpg -------------------------------------------------------------------------------- /test/ppt_video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/test/ppt_video.mp4 -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | rm Testout/* ; python vshot.py ./test/ppt_video.mp4 -o ./Testout/ -s 37 -m 3 -S 0.92 --all 2 | -------------------------------------------------------------------------------- /other_tools/DupImageFinder/dcrawlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/other_tools/DupImageFinder/dcrawlib.dll -------------------------------------------------------------------------------- /pkg/__pycache__/comp_img.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/pkg/__pycache__/comp_img.cpython-37.pyc -------------------------------------------------------------------------------- /pkg/__pycache__/comp_ski.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/pkg/__pycache__/comp_ski.cpython-37.pyc -------------------------------------------------------------------------------- /pkg/__pycache__/read_video.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/pkg/__pycache__/read_video.cpython-37.pyc -------------------------------------------------------------------------------- /other_tools/DupImageFinder/DupImageFinder.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wan230114/VideoScreenshot/HEAD/other_tools/DupImageFinder/DupImageFinder.exe -------------------------------------------------------------------------------- /other_tools/DupImageFinder/reg.reg: -------------------------------------------------------------------------------- 1 | REGEDIT4 2 | 3 | [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Types\VSDIF9124] 4 | "FFVSDIF9124"="972B-E9DD" 5 | 6 | [HKEY_CURRENT_USER\Software\Microsoft\Windows Media\VSDIF9124] 7 | "FEVSDIF9124"="6B3304B163D3145B" 8 | -------------------------------------------------------------------------------- /pkg/comp_TF.py: -------------------------------------------------------------------------------- 1 | from imagededup.methods import PHash 2 | phasher = PHash() 3 | 4 | # Generate encodings for all images in an image directory 5 | encodings = phasher.encode_images(image_dir='../Testout') 6 | 7 | # Find duplicates using the generated encodings 8 | duplicates = phasher.find_duplicates(encoding_map=encodings) 9 | 10 | # from imagededup.utils import plot_duplicates 11 | # # plot duplicates obtained for a given file using the duplicates dictionary 12 | # plot_duplicates(image_dir='path/to/image/directory', 13 | # duplicate_map=duplicates, 14 | # filename='ukbench00120.jpg') 15 | -------------------------------------------------------------------------------- /pkg/read_video.py: -------------------------------------------------------------------------------- 1 | # 来源参考: 2 | # Python首先视频帧截图,并保存图片_python_kuronekonano的博客-CSDN博客 3 | # https://blog.csdn.net/kuronekonano/article/details/90766475 4 | 5 | import cv2 6 | 7 | 8 | def VideoCut(filename, spend): 9 | # 使用opencv按一定间隔截取视频帧,并保存为图片 10 | 11 | vc = cv2.VideoCapture(filename) # 读取视频文件 12 | c = 0 13 | if vc.isOpened(): # 判断是否正常打开 14 | rval, frame = vc.read() 15 | yield vc.get(7) # 总帧数 16 | else: 17 | rval = False 18 | timeF = spend # 视频帧计数间隔频率 19 | while rval: # 循环读取视频帧 20 | # print(rval, frame) 21 | # print(c, timeF, c % timeF) 22 | if (c % timeF == 0): # 每隔timeF帧进行存储操作 23 | # print("write...") 24 | # cv2.imwrite('../testout/all/%03d.jpg' % c, frame) # 存储为图像 25 | yield c, frame 26 | # print("success!") 27 | c = c + 1 28 | rval, frame = vc.read() 29 | cv2.waitKey(1) 30 | vc.release() 31 | 32 | 33 | if __name__ == "__main__": 34 | for x in VideoCut('../test/ppt_video.mp4', 1): 35 | # print(x) 36 | pass 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VideoScreenshot 2 | 打开视频文件进行按照不同画面自动截图,适用于众多PPT讲解视频截取PPT图片 3 | 4 | ## 准备 5 | 6 | 提前安装Python库 7 | ```bash 8 | pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/ 9 | pip install Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple/ 10 | ``` 11 | 12 | ## 使用方法 13 | 14 | ``` 15 | usage: vshot.py [-h] [-o OUTDIR] [-S SIMILARITY] [-s SPEND] [-m METHOD] 16 | VideoFilePath 17 | 18 | 用于自动从视频截取不同图片 19 | 20 | positional arguments: 21 | VideoFilePath 输入文件, filepath 22 | 23 | optional arguments: 24 | -h, --help show this help message and exit 25 | -o OUTDIR, --outdir OUTDIR 26 | 输出文件夹路径, dirpath 27 | -S SIMILARITY, --Similarity SIMILARITY 28 | 相似度参数, 默认低于0.98进行截取, float 29 | -s SPEND, --spend SPEND 30 | 间隔帧数, int 31 | -m METHOD, --method METHOD 32 | 使用算法, 0,1,2对应均值、差值、感知哈希算法, 33 | 3,4对应三直方图算法和单通道的直方图, 34 | 5为ssim(注:该算法效率最低) 35 | ``` 36 | 37 | ```python 38 | python vshot.py ./test/ppt_video.mp4 -o ./Testout/ -s 10 -S 0.97 39 | ``` 40 | 41 | ## 其他工具 42 | 43 | [DupImageFinder](./other_tools/DupImageFinder/) 用于对于截取的众多图片,进行二次去重。(先点击reg注册) 44 | -------------------------------------------------------------------------------- /pkg/comp_ski.py: -------------------------------------------------------------------------------- 1 | """ 2 | Python3通过OpenCV对比图片相似度_Python_u014259820的博客-CSDN博客 3 | https://blog.csdn.net/u014259820/article/details/82889752 4 | """ 5 | 6 | from skimage.measure import compare_ssim 7 | import cv2 8 | 9 | 10 | class CompareImage(): 11 | 12 | def compare_image(self, path_image1, path_image2): 13 | 14 | imageA = cv2.imread(path_image1) 15 | imageB = cv2.imread(path_image2) 16 | return self.compare_gray(imageA, imageB) 17 | 18 | def compare_gray(self, imageA, imageB): 19 | grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY) 20 | grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY) 21 | (score, diff) = compare_ssim(grayA, grayB, full=True) 22 | # print("SSIM: {}".format(score)) 23 | return score 24 | 25 | 26 | if __name__ == "__main__": 27 | compare_image = CompareImage() 28 | compare_image.compare_image("../test/1-1.jpg", "../test/1-2.jpg") 29 | compare_image.compare_image("../test/2-1.jpg", "../test/2-2.jpg") 30 | compare_image.compare_image("../test/1-1.jpg", "../test/2-1.jpg") 31 | compare_image.compare_image("../test/ppt1.PNG", "../test/ppt2.PNG") 32 | compare_image.compare_image("../test/ppt2.PNG", "../test/ppt3.PNG") 33 | compare_image.compare_image("../test/ppt3.PNG", "../test/ppt4.PNG") 34 | -------------------------------------------------------------------------------- /vshot.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | from pkg.comp_img import * 3 | from pkg.read_video import VideoCut 4 | import os 5 | 6 | 7 | def fargv(): 8 | parser = argparse.ArgumentParser( 9 | formatter_class=argparse.RawDescriptionHelpFormatter, 10 | description=('用于自动从视频截取不同图片'), 11 | epilog=('')) 12 | parser.add_argument('VideoFilePath', type=str, 13 | help=('输入文件, filepath')) 14 | parser.add_argument('-o', '--outdir', type=str, default='./', 15 | help=('输出文件夹路径, dirpath')) 16 | parser.add_argument('-S', '--Similarity', type=float, default=0.98, 17 | help=('相似度参数, 默认低于0.98进行截取, float')) 18 | parser.add_argument('-s', '--spend', type=int, default=10, 19 | help=('间隔帧数, int')) 20 | parser.add_argument('-m', '--method', type=int, default=0, 21 | help=('使用算法, ' 22 | '0,1,2对应均值、差值、感知哈希算法, ' 23 | '3,4对应三直方图算法和单通道的直方图, ' 24 | '5为ssim(注:该算法效率最低)')) 25 | parser.add_argument('--all', action='store_true', default=False, 26 | help='是否使用让5种算法都进行计算') 27 | # 参数组,只能选择其中一个 28 | # group = parser.add_mutually_exclusive_group() 29 | # group.add_argument('-m1', help=('模式1')) 30 | # group.add_argument('-m2', help=('模式2')) 31 | # group.add_argument('-m3', help=('模式3')) 32 | args = parser.parse_args() 33 | print(args) 34 | return args.__dict__ 35 | 36 | 37 | def comp(img1, img2, method=0): 38 | # 均值、差值、感知哈希算法三种算法值越小,则越相似,相同图片值为0 39 | # 三直方图算法和单通道的直方图 0-1之间,值越大,越相似。 相同图片为1 40 | if method == 0: 41 | hash1 = aHash(img1) 42 | hash2 = aHash(img2) 43 | n1 = cmpHash(hash1, hash2) 44 | return 1 - float(n1 / 64) 45 | # print('均值哈希算法相似度aHash:', n1) 46 | elif method == 1: 47 | hash1 = dHash(img1) 48 | hash2 = dHash(img2) 49 | n2 = cmpHash(hash1, hash2) 50 | # print('差值哈希算法相似度dHash:', n2) 51 | return 1 - float(n2 / 64) 52 | elif method == 2: 53 | hash1 = pHash(img1) 54 | hash2 = pHash(img2) 55 | n3 = cmpHash(hash1, hash2) 56 | # print('感知哈希算法相似度pHash:', n3) 57 | return 1 - float(n3 / 64) 58 | elif method == 3: 59 | n4 = classify_hist_with_split(img1, img2) 60 | # print('三直方图算法相似度:', n4) 61 | return n4[0] if n4 < 1 else n4 62 | elif method == 4: 63 | n5 = calculate(img1, img2) 64 | # print("单通道的直方图", n5) 65 | return n5[0] if n5 < 1 else n5 66 | elif method == 5: 67 | # pass 68 | from pkg.comp_ski import CompareImage 69 | compare_image = CompareImage() 70 | n5 = compare_image.compare_gray(img1, img2) 71 | return n5 72 | 73 | 74 | def mydo(VideoFilePath, outdir, Similarity, spend, method=0, all=False): 75 | os.makedirs(outdir, exist_ok=True) 76 | outdir = os.path.abspath(outdir) 77 | ITERS = VideoCut(VideoFilePath, spend) 78 | num_frames_all = next(ITERS) 79 | print('视频总帧数:', num_frames_all) 80 | num_frames_all_N = len(str(int(num_frames_all))) 81 | mod = '%%0%dd.jpg' % num_frames_all_N 82 | 83 | # 开始 84 | num_frames, frame = next(ITERS) 85 | outpath = (outdir + os.sep + mod) % num_frames 86 | cv2.imwrite(outpath, frame) # 截取第一张 87 | print('writed to ', outpath) 88 | for num_frames_new, frame_new in ITERS: 89 | result = comp(frame, frame_new, method=method) 90 | outpath = (outdir + os.sep + mod) % num_frames_new 91 | print('[%6.3f%%]' % (num_frames_new/num_frames_all*100), 92 | mod % num_frames, mod % num_frames_new, 93 | '%5s'% (result < Similarity), '%06f' % result, 94 | end=('\t' if all else '\n')) 95 | if all: 96 | print(*('%06f' % x for x in (runAllImageSimilaryFun( 97 | frame, frame_new, isfile=False, isprint=False)))) 98 | if result < Similarity: 99 | print('writed to ', outpath) 100 | cv2.imwrite(outpath, frame_new) # 截取不同 101 | num_frames, frame = num_frames_new, frame_new 102 | 103 | 104 | def main(): 105 | # sys.argv = '1 -l listfile -i file -n 1,2'.split() 106 | # sys.argv = ['', '-h'] 107 | args = fargv() 108 | # print(*list(args.keys()), sep=", ") 109 | # print(*list(args.values()), sep=", ") 110 | mydo(**args) 111 | 112 | 113 | if __name__ == '__main__': 114 | main() 115 | # mydo('./test/ppt_video.mp4', './testout', 0.99985, 15) 116 | # mydo('./test/ppt_video.mp4', './testout', 0.92, 1, 1) 117 | -------------------------------------------------------------------------------- /pkg/comp_img.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # @Author: ChenJun 3 | # @Email: chenjun4663@novogene.com 4 | # @Qmail: 1170101471@qq.com 5 | # @Date: 2020-05-09 21:59:05 6 | # @Last Modified by: JUN 7 | # @Last Modified time: 2020-05-09 21:59:38 8 | 9 | import matplotlib.pyplot as plt 10 | import cv2 11 | import numpy as np 12 | from PIL import Image 13 | import requests 14 | from io import BytesIO 15 | # import matplotlib 16 | # matplotlib.use('TkAgg') 17 | 18 | 19 | def aHash(img): 20 | # 均值哈希算法 21 | # 缩放为8*8 22 | img = cv2.resize(img, (8, 8)) 23 | # 转换为灰度图 24 | gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 25 | # s为像素和初值为0,hash_str为hash值初值为'' 26 | s = 0 27 | hash_str = '' 28 | # 遍历累加求像素和 29 | for i in range(8): 30 | for j in range(8): 31 | s = s + gray[i, j] 32 | # 求平均灰度 33 | avg = s / 64 34 | # 灰度大于平均值为1相反为0生成图片的hash值 35 | for i in range(8): 36 | for j in range(8): 37 | if gray[i, j] > avg: 38 | hash_str = hash_str + '1' 39 | else: 40 | hash_str = hash_str + '0' 41 | return hash_str 42 | 43 | 44 | def dHash(img): 45 | # 差值哈希算法 46 | # 缩放8*8 47 | img = cv2.resize(img, (9, 8)) 48 | # 转换灰度图 49 | gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 50 | hash_str = '' 51 | # 每行前一个像素大于后一个像素为1,相反为0,生成哈希 52 | for i in range(8): 53 | for j in range(8): 54 | if gray[i, j] > gray[i, j + 1]: 55 | hash_str = hash_str + '1' 56 | else: 57 | hash_str = hash_str + '0' 58 | return hash_str 59 | 60 | 61 | def pHash(img): 62 | # 感知哈希算法 63 | # 缩放32*32 64 | img = cv2.resize(img, (32, 32)) # , interpolation=cv2.INTER_CUBIC 65 | 66 | # 转换为灰度图 67 | gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 68 | # 将灰度图转为浮点型,再进行dct变换 69 | dct = cv2.dct(np.float32(gray)) 70 | # opencv实现的掩码操作 71 | dct_roi = dct[0:8, 0:8] 72 | 73 | hash = [] 74 | avreage = np.mean(dct_roi) 75 | for i in range(dct_roi.shape[0]): 76 | for j in range(dct_roi.shape[1]): 77 | if dct_roi[i, j] > avreage: 78 | hash.append(1) 79 | else: 80 | hash.append(0) 81 | return hash 82 | 83 | 84 | def calculate(image1, image2): 85 | # 灰度直方图算法 86 | # 计算单通道的直方图的相似值 87 | hist1 = cv2.calcHist([image1], [0], None, [256], [0.0, 255.0]) 88 | hist2 = cv2.calcHist([image2], [0], None, [256], [0.0, 255.0]) 89 | # 计算直方图的重合度 90 | degree = 0 91 | for i in range(len(hist1)): 92 | if hist1[i] != hist2[i]: 93 | degree = degree + \ 94 | (1 - abs(hist1[i] - hist2[i]) / max(hist1[i], hist2[i])) 95 | else: 96 | degree = degree + 1 97 | degree = degree / len(hist1) 98 | return degree 99 | 100 | 101 | def classify_hist_with_split(image1, image2, size=(256, 256)): 102 | # RGB每个通道的直方图相似度 103 | # 将图像resize后,分离为RGB三个通道,再计算每个通道的相似值 104 | image1 = cv2.resize(image1, size) 105 | image2 = cv2.resize(image2, size) 106 | sub_image1 = cv2.split(image1) 107 | sub_image2 = cv2.split(image2) 108 | sub_data = 0 109 | for im1, im2 in zip(sub_image1, sub_image2): 110 | sub_data += calculate(im1, im2) 111 | sub_data = sub_data / 3 112 | return sub_data 113 | 114 | 115 | def cmpHash(hash1, hash2): 116 | # Hash值对比 117 | # 算法中1和0顺序组合起来的即是图片的指纹hash。顺序不固定,但是比较的时候必须是相同的顺序。 118 | # 对比两幅图的指纹,计算汉明距离,即两个64位的hash值有多少是不一样的,不同的位数越小,图片越相似 119 | # 汉明距离:一组二进制数据变成另一组数据所需要的步骤,可以衡量两图的差异,汉明距离越小,则相似度越高。汉明距离为0,即两张图片完全一样 120 | n = 0 121 | # hash长度不同则返回-1代表传参出错 122 | if len(hash1) != len(hash2): 123 | return -1 124 | # 遍历判断 125 | for i in range(len(hash1)): 126 | # 不相等则n计数+1,n最终为相似度 127 | if hash1[i] != hash2[i]: 128 | n = n + 1 129 | return n 130 | 131 | 132 | def getImageByUrl(url): 133 | # 根据图片url 获取图片对象 134 | html = requests.get(url, verify=False) 135 | image = Image.open(BytesIO(html.content)) 136 | return image 137 | 138 | 139 | def PILImageToCV(): 140 | # PIL Image转换成OpenCV格式 141 | path = "/Users/waldenz/Documents/Work/doc/TestImages/t3.png" 142 | img = Image.open(path) 143 | plt.subplot(121) 144 | plt.imshow(img) 145 | print(isinstance(img, np.ndarray)) 146 | img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) 147 | print(isinstance(img, np.ndarray)) 148 | plt.subplot(122) 149 | plt.imshow(img) 150 | plt.show() 151 | 152 | 153 | def CVImageToPIL(): 154 | # OpenCV图片转换为PIL image 155 | path = "/Users/waldenz/Documents/Work/doc/TestImages/t3.png" 156 | img = cv2.imread(path) 157 | # cv2.imshow("OpenCV",img) 158 | plt.subplot(121) 159 | plt.imshow(img) 160 | 161 | img2 = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 162 | plt.subplot(122) 163 | plt.imshow(img2) 164 | plt.show() 165 | 166 | 167 | def bytes_to_cvimage(filebytes): 168 | # 图片字节流转换为cv image 169 | image = Image.open(filebytes) 170 | img = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR) 171 | return img 172 | 173 | 174 | """def runAllImageSimilaryFun(para1, para2): 175 | # 均值、差值、感知哈希算法三种算法值越小,则越相似,相同图片值为0 176 | # 三直方图算法和单通道的直方图 0-1之间,值越大,越相似。 相同图片为1 177 | 178 | # t1,t2 14;19;10; 0.70;0.75 179 | # t1,t3 39 33 18 0.58 0.49 180 | # s1,s2 7 23 11 0.83 0.86 挺相似的图片 181 | # c1,c2 11 29 17 0.30 0.31 182 | 183 | if para1.startswith("http"): 184 | # 根据链接下载图片,并转换为opencv格式 185 | img1 = getImageByUrl(para1) 186 | img1 = cv2.cvtColor(np.asarray(img1), cv2.COLOR_RGB2BGR) 187 | 188 | img2 = getImageByUrl(para2) 189 | img2 = cv2.cvtColor(np.asarray(img2), cv2.COLOR_RGB2BGR) 190 | else: 191 | # 通过imread方法直接读取物理路径 192 | img1 = cv2.imread(para1) 193 | img2 = cv2.imread(para2) 194 | 195 | hash1 = aHash(img1) 196 | hash2 = aHash(img2) 197 | n1 = cmpHash(hash1, hash2) 198 | print('均值哈希算法相似度aHash:', n1) 199 | 200 | hash1 = dHash(img1) 201 | hash2 = dHash(img2) 202 | n2 = cmpHash(hash1, hash2) 203 | print('差值哈希算法相似度dHash:', n2) 204 | 205 | hash1 = pHash(img1) 206 | hash2 = pHash(img2) 207 | n3 = cmpHash(hash1, hash2) 208 | print('感知哈希算法相似度pHash:', n3) 209 | 210 | n4 = classify_hist_with_split(img1, img2) 211 | print('三直方图算法相似度:', n4) 212 | 213 | n5 = calculate(img1, img2) 214 | print("单通道的直方图", n5) 215 | print("%d %d %d %.2f %.2f " % (n1, n2, n3, round(n4[0], 2), n5[0])) 216 | print("%.2f %.2f %.2f %.2f %.2f " % (1 - float(n1 / 64), 1 - 217 | float(n2 / 64), 1 - float(n3 / 64), round(n4[0], 2), n5[0])) 218 | 219 | plt.subplot(121) 220 | plt.imshow(Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))) 221 | plt.subplot(122) 222 | plt.imshow(Image.fromarray(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))) 223 | plt.show() 224 | """ 225 | 226 | 227 | def runAllImageSimilaryFun(para1, para2, isfile=True, isprint=True): 228 | # 均值、差值、感知哈希算法三种算法值越小,则越相似,相同图片值为0 229 | # 三直方图算法和单通道的直方图 0-1之间,值越大,越相似。 相同图片为1 230 | 231 | # t1,t2 14;19;10; 0.70;0.75 232 | # t1,t3 39 33 18 0.58 0.49 233 | # s1,s2 7 23 11 0.83 0.86 挺相似的图片 234 | # c1,c2 11 29 17 0.30 0.31 235 | if isfile: 236 | img1, img2 = cv2.imread(para1), cv2.imread(para2) 237 | else: 238 | img1, img2 = para1, para2 239 | hash1 = aHash(img1) 240 | hash2 = aHash(img2) 241 | n1 = cmpHash(hash1, hash2) 242 | # print('均值哈希算法相似度aHash:', n1) 243 | 244 | hash1 = dHash(img1) 245 | hash2 = dHash(img2) 246 | n2 = cmpHash(hash1, hash2) 247 | # print('差值哈希算法相似度dHash:', n2) 248 | 249 | hash1 = pHash(img1) 250 | hash2 = pHash(img2) 251 | n3 = cmpHash(hash1, hash2) 252 | # print('感知哈希算法相似度pHash:', n3) 253 | 254 | n4 = classify_hist_with_split(img1, img2) 255 | # print('三直方图算法相似度:', n4) 256 | 257 | n5 = calculate(img1, img2) 258 | # print("单通道的直方图", n5) 259 | # print("%d %d %d %.2f %.2f " % (n1, n2, n3, round(n4[0], 2), n5[0])) 260 | result = (1 - float(n1 / 64), 261 | 1 - float(n2 / 64), 262 | 1 - float(n3 / 64), 263 | n4[0] if n4 < 1 else n4, 264 | n5[0] if n5 < 1 else n5) 265 | if isprint: 266 | if isfile: 267 | print(para1, para2, end=' ') 268 | print("%.2f %.2f %.2f %.2f %.2f " % result) 269 | else: 270 | return result 271 | 272 | 273 | if __name__ == "__main__": 274 | # p1 = "https://ww3.sinaimg.cn/bmiddle/007INInDly1g336j2zziwj30su0g848w.jpg" 275 | # p2 = "https://ww2.sinaimg.cn/bmiddle/007INInDly1g336j10d32j30vd0hnam6.jpg" 276 | # runAllImageSimilaryFun(p1, p2) 277 | # runAllImageSimilaryFun("../test/1-1.jpg", "../test/1-2.jpg") 278 | # runAllImageSimilaryFun("../test/2-1.jpg", "../test/2-2.jpg") 279 | # runAllImageSimilaryFun("../test/1-1.jpg", "../test/2-1.jpg") 280 | # runAllImageSimilaryFun("../test/ppt1.PNG", "../test/ppt2.PNG") 281 | # runAllImageSimilaryFun("../test/ppt2.PNG", "../test/ppt3.PNG") 282 | # runAllImageSimilaryFun("../test/ppt3.PNG", "../test/ppt4.PNG") 283 | import sys 284 | runAllImageSimilaryFun(sys.argv[1], sys.argv[2]) 285 | -------------------------------------------------------------------------------- /log: -------------------------------------------------------------------------------- 1 | Namespace(Similarity=0.92, VideoFilePath='./test/ppt_video.mp4', all=True, method=3, outdir='./Testout/', spend=1) 2 | 视频总帧数: 244.0 3 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/000.jpg 4 | [0.410%] 000.jpg 001.jpg False 0.972863 1.000000 1.000000 1.000000 0.972863 0.972808 5 | [0.820%] 000.jpg 002.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 6 | [1.230%] 000.jpg 003.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 7 | [1.639%] 000.jpg 004.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 8 | [2.049%] 000.jpg 005.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 9 | [2.459%] 000.jpg 006.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 10 | [2.869%] 000.jpg 007.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 11 | [3.279%] 000.jpg 008.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 12 | [3.689%] 000.jpg 009.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 13 | [4.098%] 000.jpg 010.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 14 | [4.508%] 000.jpg 011.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 15 | [4.918%] 000.jpg 012.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 16 | [5.328%] 000.jpg 013.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 17 | [5.738%] 000.jpg 014.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 18 | [6.148%] 000.jpg 015.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 19 | [6.557%] 000.jpg 016.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 20 | [6.967%] 000.jpg 017.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 21 | [7.377%] 000.jpg 018.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 22 | [7.787%] 000.jpg 019.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 23 | [8.197%] 000.jpg 020.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 24 | [8.607%] 000.jpg 021.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 25 | [9.016%] 000.jpg 022.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 26 | [9.426%] 000.jpg 023.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 27 | [9.836%] 000.jpg 024.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 28 | [10.246%] 000.jpg 025.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 29 | [10.656%] 000.jpg 026.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 30 | [11.066%] 000.jpg 027.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 31 | [11.475%] 000.jpg 028.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 32 | [11.885%] 000.jpg 029.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 33 | [12.295%] 000.jpg 030.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 34 | [12.705%] 000.jpg 031.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 35 | [13.115%] 000.jpg 032.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 36 | [13.525%] 000.jpg 033.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 37 | [13.934%] 000.jpg 034.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 38 | [14.344%] 000.jpg 035.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 39 | [14.754%] 000.jpg 036.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 40 | [15.164%] 000.jpg 037.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 41 | [15.574%] 000.jpg 038.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 42 | [15.984%] 000.jpg 039.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 43 | [16.393%] 000.jpg 040.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 44 | [16.803%] 000.jpg 041.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 45 | [17.213%] 000.jpg 042.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 46 | [17.623%] 000.jpg 043.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 47 | [18.033%] 000.jpg 044.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 48 | [18.443%] 000.jpg 045.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 49 | [18.852%] 000.jpg 046.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 50 | [19.262%] 000.jpg 047.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 51 | [19.672%] 000.jpg 048.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 52 | [20.082%] 000.jpg 049.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 53 | [20.492%] 000.jpg 050.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 54 | [20.902%] 000.jpg 051.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 55 | [21.311%] 000.jpg 052.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 56 | [21.721%] 000.jpg 053.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 57 | [22.131%] 000.jpg 054.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 58 | [22.541%] 000.jpg 055.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 59 | [22.951%] 000.jpg 056.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 60 | [23.361%] 000.jpg 057.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 61 | [23.770%] 000.jpg 058.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 62 | [24.180%] 000.jpg 059.jpg False 0.973502 1.000000 1.000000 1.000000 0.973502 0.972649 63 | [24.590%] 000.jpg 060.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 64 | [25.000%] 000.jpg 061.jpg True 0.740819 0.984375 0.953125 0.906250 0.740819 0.640400 65 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/061.jpg 66 | [25.410%] 061.jpg 062.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 67 | [25.820%] 061.jpg 063.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 68 | [26.230%] 061.jpg 064.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 69 | [26.639%] 061.jpg 065.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 70 | [27.049%] 061.jpg 066.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 71 | [27.459%] 061.jpg 067.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 72 | [27.869%] 061.jpg 068.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 73 | [28.279%] 061.jpg 069.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 74 | [28.689%] 061.jpg 070.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 75 | [29.098%] 061.jpg 071.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 76 | [29.508%] 061.jpg 072.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 77 | [29.918%] 061.jpg 073.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 78 | [30.328%] 061.jpg 074.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 79 | [30.738%] 061.jpg 075.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 80 | [31.148%] 061.jpg 076.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 81 | [31.557%] 061.jpg 077.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 82 | [31.967%] 061.jpg 078.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 83 | [32.377%] 061.jpg 079.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 84 | [32.787%] 061.jpg 080.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 85 | [33.197%] 061.jpg 081.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 86 | [33.607%] 061.jpg 082.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 87 | [34.016%] 061.jpg 083.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 88 | [34.426%] 061.jpg 084.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 89 | [34.836%] 061.jpg 085.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 90 | [35.246%] 061.jpg 086.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 91 | [35.656%] 061.jpg 087.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 92 | [36.066%] 061.jpg 088.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 93 | [36.475%] 061.jpg 089.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 94 | [36.885%] 061.jpg 090.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 95 | [37.295%] 061.jpg 091.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 96 | [37.705%] 061.jpg 092.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 97 | [38.115%] 061.jpg 093.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 98 | [38.525%] 061.jpg 094.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 99 | [38.934%] 061.jpg 095.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100 | [39.344%] 061.jpg 096.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 101 | [39.754%] 061.jpg 097.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 102 | [40.164%] 061.jpg 098.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 103 | [40.574%] 061.jpg 099.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 104 | [40.984%] 061.jpg 100.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 105 | [41.393%] 061.jpg 101.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 106 | [41.803%] 061.jpg 102.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 107 | [42.213%] 061.jpg 103.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 108 | [42.623%] 061.jpg 104.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 109 | [43.033%] 061.jpg 105.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 110 | [43.443%] 061.jpg 106.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 111 | [43.852%] 061.jpg 107.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 112 | [44.262%] 061.jpg 108.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 113 | [44.672%] 061.jpg 109.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 114 | [45.082%] 061.jpg 110.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 115 | [45.492%] 061.jpg 111.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 116 | [45.902%] 061.jpg 112.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 117 | [46.311%] 061.jpg 113.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 118 | [46.721%] 061.jpg 114.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 119 | [47.131%] 061.jpg 115.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 120 | [47.541%] 061.jpg 116.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 121 | [47.951%] 061.jpg 117.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 122 | [48.361%] 061.jpg 118.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 123 | [48.770%] 061.jpg 119.jpg True 0.784498 1.000000 1.000000 1.000000 0.784498 0.782140 124 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/119.jpg 125 | [49.180%] 119.jpg 120.jpg False 0.949527 1.000000 1.000000 1.000000 0.949527 0.940716 126 | [49.590%] 119.jpg 121.jpg False 0.949527 1.000000 1.000000 1.000000 0.949527 0.940716 127 | [50.000%] 119.jpg 122.jpg True 0.870459 1.000000 1.000000 1.000000 0.870459 0.881346 128 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/122.jpg 129 | [50.410%] 122.jpg 123.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 130 | [50.820%] 122.jpg 124.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 131 | [51.230%] 122.jpg 125.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 132 | [51.639%] 122.jpg 126.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 133 | [52.049%] 122.jpg 127.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 134 | [52.459%] 122.jpg 128.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 135 | [52.869%] 122.jpg 129.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 136 | [53.279%] 122.jpg 130.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 137 | [53.689%] 122.jpg 131.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 138 | [54.098%] 122.jpg 132.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 139 | [54.508%] 122.jpg 133.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 140 | [54.918%] 122.jpg 134.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 141 | [55.328%] 122.jpg 135.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 142 | [55.738%] 122.jpg 136.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 143 | [56.148%] 122.jpg 137.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 144 | [56.557%] 122.jpg 138.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 145 | [56.967%] 122.jpg 139.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 146 | [57.377%] 122.jpg 140.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 147 | [57.787%] 122.jpg 141.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 148 | [58.197%] 122.jpg 142.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 149 | [58.607%] 122.jpg 143.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 150 | [59.016%] 122.jpg 144.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 151 | [59.426%] 122.jpg 145.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 152 | [59.836%] 122.jpg 146.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 153 | [60.246%] 122.jpg 147.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 154 | [60.656%] 122.jpg 148.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 155 | [61.066%] 122.jpg 149.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 156 | [61.475%] 122.jpg 150.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 157 | [61.885%] 122.jpg 151.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 158 | [62.295%] 122.jpg 152.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 159 | [62.705%] 122.jpg 153.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 160 | [63.115%] 122.jpg 154.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 161 | [63.525%] 122.jpg 155.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 162 | [63.934%] 122.jpg 156.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 163 | [64.344%] 122.jpg 157.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 164 | [64.754%] 122.jpg 158.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 165 | [65.164%] 122.jpg 159.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 166 | [65.574%] 122.jpg 160.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 167 | [65.984%] 122.jpg 161.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 168 | [66.393%] 122.jpg 162.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 169 | [66.803%] 122.jpg 163.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 170 | [67.213%] 122.jpg 164.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 171 | [67.623%] 122.jpg 165.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 172 | [68.033%] 122.jpg 166.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 173 | [68.443%] 122.jpg 167.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 174 | [68.852%] 122.jpg 168.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 175 | [69.262%] 122.jpg 169.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 176 | [69.672%] 122.jpg 170.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 177 | [70.082%] 122.jpg 171.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 178 | [70.492%] 122.jpg 172.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 179 | [70.902%] 122.jpg 173.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 180 | [71.311%] 122.jpg 174.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 181 | [71.721%] 122.jpg 175.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 182 | [72.131%] 122.jpg 176.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 183 | [72.541%] 122.jpg 177.jpg False 0.999328 1.000000 1.000000 1.000000 0.999328 0.999306 184 | [72.951%] 122.jpg 178.jpg True 0.890204 1.000000 1.000000 1.000000 0.890204 0.858025 185 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/178.jpg 186 | [73.361%] 178.jpg 179.jpg False 0.945063 1.000000 1.000000 1.000000 0.945063 0.931973 187 | [73.770%] 178.jpg 180.jpg False 0.945063 1.000000 1.000000 1.000000 0.945063 0.931973 188 | [74.180%] 178.jpg 181.jpg False 0.945063 1.000000 1.000000 1.000000 0.945063 0.931973 189 | [74.590%] 178.jpg 182.jpg False 0.945063 1.000000 1.000000 1.000000 0.945063 0.931973 190 | [75.000%] 178.jpg 183.jpg True 0.865361 1.000000 1.000000 1.000000 0.865361 0.834512 191 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/183.jpg 192 | [75.410%] 183.jpg 184.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 193 | [75.820%] 183.jpg 185.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 194 | [76.230%] 183.jpg 186.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 195 | [76.639%] 183.jpg 187.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 196 | [77.049%] 183.jpg 188.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 197 | [77.459%] 183.jpg 189.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 198 | [77.869%] 183.jpg 190.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 199 | [78.279%] 183.jpg 191.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 200 | [78.689%] 183.jpg 192.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 201 | [79.098%] 183.jpg 193.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 202 | [79.508%] 183.jpg 194.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 203 | [79.918%] 183.jpg 195.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 204 | [80.328%] 183.jpg 196.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 205 | [80.738%] 183.jpg 197.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 206 | [81.148%] 183.jpg 198.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 207 | [81.557%] 183.jpg 199.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 208 | [81.967%] 183.jpg 200.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 209 | [82.377%] 183.jpg 201.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 210 | [82.787%] 183.jpg 202.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 211 | [83.197%] 183.jpg 203.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 212 | [83.607%] 183.jpg 204.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 213 | [84.016%] 183.jpg 205.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 214 | [84.426%] 183.jpg 206.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 215 | [84.836%] 183.jpg 207.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 216 | [85.246%] 183.jpg 208.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 217 | [85.656%] 183.jpg 209.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 218 | [86.066%] 183.jpg 210.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 219 | [86.475%] 183.jpg 211.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 220 | [86.885%] 183.jpg 212.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 221 | [87.295%] 183.jpg 213.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 222 | [87.705%] 183.jpg 214.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 223 | [88.115%] 183.jpg 215.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 224 | [88.525%] 183.jpg 216.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 225 | [88.934%] 183.jpg 217.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 226 | [89.344%] 183.jpg 218.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 227 | [89.754%] 183.jpg 219.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 228 | [90.164%] 183.jpg 220.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 229 | [90.574%] 183.jpg 221.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 230 | [90.984%] 183.jpg 222.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 231 | [91.393%] 183.jpg 223.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 232 | [91.803%] 183.jpg 224.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 233 | [92.213%] 183.jpg 225.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 234 | [92.623%] 183.jpg 226.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 235 | [93.033%] 183.jpg 227.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 236 | [93.443%] 183.jpg 228.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 237 | [93.852%] 183.jpg 229.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 238 | [94.262%] 183.jpg 230.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 239 | [94.672%] 183.jpg 231.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 240 | [95.082%] 183.jpg 232.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 241 | [95.492%] 183.jpg 233.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 242 | [95.902%] 183.jpg 234.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 243 | [96.311%] 183.jpg 235.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 244 | [96.721%] 183.jpg 236.jpg False 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 245 | [97.131%] 183.jpg 237.jpg True 0.872390 1.000000 1.000000 1.000000 0.872390 0.852040 246 | writed to /mnt/d/JUN_data/GitHub/VideoScreenshot/Testout/237.jpg 247 | [97.541%] 237.jpg 238.jpg False 0.931112 1.000000 1.000000 1.000000 0.931112 0.945737 248 | [97.951%] 237.jpg 239.jpg False 0.930857 1.000000 1.000000 1.000000 0.930857 0.944708 249 | [98.361%] 237.jpg 240.jpg False 0.930857 1.000000 1.000000 1.000000 0.930857 0.944708 250 | [98.770%] 237.jpg 241.jpg False 0.930857 1.000000 1.000000 1.000000 0.930857 0.944708 251 | [99.180%] 237.jpg 242.jpg False 0.930857 1.000000 1.000000 1.000000 0.930857 0.944708 252 | [99.590%] 237.jpg 243.jpg False 0.930857 1.000000 1.000000 1.000000 0.930857 0.944708 253 | --------------------------------------------------------------------------------