File size: 1,922 Bytes
afdbcb1
7acc140
ad5fb46
018419b
afdbcb1
7ebb572
86c36ee
7ebb572
 
546f703
afdbcb1
1ff395f
0032752
1ff395f
1e29126
afdbcb1
 
 
 
ad5fb46
caff417
546f703
caff417
d333a65
7410fcb
 
 
ad5fb46
1e8162b
afdbcb1
 
caff417
afdbcb1
1e8162b
6713a04
afdbcb1
 
 
1e8162b
018419b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb89ead
 
 
 
 
 
 
 
 
 
 
 
 
1e8162b
 
ecc43ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import cv2
import streamlit as st
import tempfile
from ffmpeg import FFmpeg

try:
    face_cascade = cv2.CascadeClassifier('XML/faces.xml')
except Exception:
    st.write("Error loading cascade classifiers")

def censor_face(filePath):
    
    #output_file = 'Output/censored_' + str(filePath.name) + '.mp4'
    
    video=cv2.VideoCapture(filePath.name)
    success, frame = video.read()
    
    height = frame.shape[0]
    width = frame.shape[1]

    #st.write(height, width)

    #gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    #st.write("Frame: " + str(frame))

    tfile2 = tempfile.NamedTemporaryFile(delete=False, suffix='.mp4')
    #tfile2.write("Censored.mp4")
    
    output=cv2.VideoWriter(tfile2.name, cv2.VideoWriter_fourcc(*'mp4v2'), 30, (width, height))
    
    while success:
        faces = face_cascade.detectMultiScale(frame, 1.1, 4)
        for (x,y, w, h) in faces: #multiple faces in a video
            frame[y:y+h, x:x+w] = cv2.blur(frame[y:y+h, x:x+w], (50, 50))
            #st.write("frame")
        output.write(frame)
        success, frame = video.read()    
    
    
    #st.write(tfile2.name)
    #st.write(tfile2)

    ffmpeg = (
        FFmpeg()
        .option("y")
        .input(tfile2.name)
        .output(
            tfile2.name,
            {"codec:v": "libx264"},
            vf="scale=1280:-1",
            preset="veryslow",
            crf=24,
        )
    )

    ffmpeg.execute()
    
    result_video = open(tfile2.name, "rb")
    vid_bytes = result_video.read()
    #with open(tfile2.name, "rb") as file:
    #    btn = st.download_button(
    #            label="Download video",
    #            data=file,
    #            file_name=tfile2.name,
    #            mime="video/mp4"
    #          )

    #video_file = open(tfile2.name, 'rb')
    #video_bytes = video_file.read()
    st.video(vid_bytes)
    output.release()    
    video.release()
    return tfile2