基于多种哈希算法和孪生神经网络的短视频相似度检测系统
文本相似度检测算法使用Jaccrad,余弦相似度及Dice,最终结果为三者取平均值
视频相似度检测即为遍历关键帧对比,使用均值哈希,差值哈希,感知哈希,三直方图及SSIM指标,若这五个指标中有四个及以上大于阈值0.55,则调用神经网络进行进一步对比,最终分数为0.1*(前五个算法之和) + 神经网络/100
开发框架
-
Vue3
-
Flask
项目功能
登录、注册
视频管理与上传
视频总览
项目搭建与运行
前端
node.js版本v14.17.1
frontend目录下npm i && npm run serve
生产环境搭建命令为npm run build,文件在dist目录下
后端
Python版本(Anaconda)3.7
backend目录下pip install -r requirements
数据库建议清空,测试用户名ivy,密码ivy
后端app.py代码:
import json
import os
import time
from argparse import ArgumentParser
import hashlib
from flask_cors import CORS
import shutil
from JwtVerify.create_token import create_token
from JwtVerify.verify_token import verify_token
from flask import Flask, request, current_app, g, \
render_template, jsonify, make_response
import threading
from Utils.utils import get_db, target_compare, verify_iden, upload_compare
# 配置
JWT_LIST = []
HASH_LIST = []
# 设置允许的视频文件格式
UPLOAD_PATH = 'C:/Users/Administrator/Desktop/DeepSeek/DeepSeek-frontend/public/'
# 实例化我们的节点;加载 Flask 框架
app = Flask(__name__)
app.config.from_object(__name__)
# 处理跨域请求
CORS(app, resources=r'/*')
@app.teardown_appcontext
def close_db(error):
"""请求结束时关闭数据库连接"""
if hasattr(g, 'sqlite_db'):
g.sqlite_db.close()
@app.route('/')
def index():
"""首页"""
return render_template('index.html')
@app.route('/register', methods=['GET', 'POST'])
def register():
"""注册"""
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
usertype = int(request.form['type'])
if not username:
return make_response(), 402
elif not password:
return make_response(), 402
else:
db = get_db()
error = None
if db.execute(
'SELECT id FROM user WHERE username = ?', (username,)
).fetchone() is not None:
return make_response(), 1001
if error is None:
db.execute(
'INSERT INTO user (username, password, type) VALUES (?, ?, ?)',
(username, password, usertype)
)
db.commit()
# 视频的最终保存路径
os.mkdir(UPLOAD_PATH + 'videos/' + username)
return make_response(), 200
return make_response(), 403
@app.route('/login', methods=['GET', 'POST'])
def login():
"""登录"""
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
user = db.execute(
'SELECT * FROM user WHERE username = ?', (username,)
).fetchone()
if user is None:
return make_response(), 402
elif not password == user['password']:
return make_response(), 402
if error is None:
token = create_token(payload=json.dumps({
'username': username, 'password': password}))