Skip to content

GitLab

  • Menu
    • Projects Groups Snippets
      Help
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in / Register
  • 2 2022CapstoneDesignGroupF
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 2
    • Merge requests 2
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • JiHun Kwon
  • 2022CapstoneDesignGroupF
  • Merge requests
  • !9

Open
Created 3 years ago by Jiseon Choi@jiseonDeveloper
  • Report abuse
Report abuse

Upload New File

  • Overview 0
  • Commits 33
  • Changes 12
  • You're only seeing other activity in the feed. To add a comment, switch to one of the following options.
Please register or sign in to reply
Compare
  • version 32
    e9869be6
    2 years ago

  • version 31
    5c4770da
    3 years ago

  • version 30
    61fca270
    3 years ago

  • version 29
    c7fff913
    3 years ago

  • version 28
    311e5777
    3 years ago

  • version 27
    97f26077
    3 years ago

  • version 26
    7430c94a
    3 years ago

  • version 25
    02ebcb9e
    3 years ago

  • version 24
    c59947f4
    3 years ago

  • version 23
    def864c0
    3 years ago

  • version 22
    53dfc4c6
    3 years ago

  • version 21
    e76141d5
    3 years ago

  • version 20
    691b8e3c
    3 years ago

  • version 19
    17ada196
    3 years ago

  • version 18
    355c1c2f
    3 years ago

  • version 17
    6591b973
    3 years ago

  • version 16
    ac098589
    3 years ago

  • version 15
    1fd09d6f
    3 years ago

  • version 14
    1927f8d0
    3 years ago

  • version 13
    09090fc7
    3 years ago

  • version 12
    73754e04
    3 years ago

  • version 11
    b58c9eed
    3 years ago

  • version 10
    f748c5fb
    3 years ago

  • version 9
    4948704c
    3 years ago

  • version 8
    3e7322b3
    3 years ago

  • version 7
    99176999
    3 years ago

  • version 6
    0f9b1c80
    3 years ago

  • version 5
    497356ea
    3 years ago

  • version 4
    148355ee
    3 years ago

  • version 3
    b8bf16d8
    3 years ago

  • version 2
    cb17a63b
    3 years ago

  • version 1
    cae80c5d
    3 years ago

  • main (HEAD)

and
  • latest version
    a49e521f
    33 commits, 2 years ago

  • version 32
    e9869be6
    32 commits, 2 years ago

  • version 31
    5c4770da
    31 commits, 3 years ago

  • version 30
    61fca270
    30 commits, 3 years ago

  • version 29
    c7fff913
    29 commits, 3 years ago

  • version 28
    311e5777
    28 commits, 3 years ago

  • version 27
    97f26077
    27 commits, 3 years ago

  • version 26
    7430c94a
    26 commits, 3 years ago

  • version 25
    02ebcb9e
    25 commits, 3 years ago

  • version 24
    c59947f4
    24 commits, 3 years ago

  • version 23
    def864c0
    23 commits, 3 years ago

  • version 22
    53dfc4c6
    22 commits, 3 years ago

  • version 21
    e76141d5
    21 commits, 3 years ago

  • version 20
    691b8e3c
    20 commits, 3 years ago

  • version 19
    17ada196
    19 commits, 3 years ago

  • version 18
    355c1c2f
    18 commits, 3 years ago

  • version 17
    6591b973
    17 commits, 3 years ago

  • version 16
    ac098589
    16 commits, 3 years ago

  • version 15
    1fd09d6f
    15 commits, 3 years ago

  • version 14
    1927f8d0
    14 commits, 3 years ago

  • version 13
    09090fc7
    13 commits, 3 years ago

  • version 12
    73754e04
    12 commits, 3 years ago

  • version 11
    b58c9eed
    11 commits, 3 years ago

  • version 10
    f748c5fb
    10 commits, 3 years ago

  • version 9
    4948704c
    9 commits, 3 years ago

  • version 8
    3e7322b3
    8 commits, 3 years ago

  • version 7
    99176999
    7 commits, 3 years ago

  • version 6
    0f9b1c80
    6 commits, 3 years ago

  • version 5
    497356ea
    5 commits, 3 years ago

  • version 4
    148355ee
    4 commits, 3 years ago

  • version 3
    b8bf16d8
    3 commits, 3 years ago

  • version 2
    cb17a63b
    2 commits, 3 years ago

  • version 1
    cae80c5d
    1 commit, 3 years ago

Show latest version
6 files
+ 28
- 147

    Preferences

    File browser
    Compare changes
1. Trac‎king.py‎ +0 -0
2. Trackin‎g_04.18_.py‎ +0 -0
20220520_ChoiJiS‎eon_capstone.pptx‎ +0 -0
3. Trackin‎g_update.py‎ +12 -19
4. PyQt_Gui‎+Tracking.py‎ +16 -17
mainP‎age.py‎ +0 -111
tracking.py → 1. Tracking.py
+ 0
- 0
  • View file @ ac098589

  • Edit in single-file editor

  • Edit in Web IDE

Unable to load file contents. Try again later.
File renamed with no changes. Show file contents
tracking_04.18_.py → 2. Tracking_04.18_.py
+ 0
- 0
  • View file @ ac098589

  • Edit in single-file editor

  • Edit in Web IDE

Unable to load file contents. Try again later.
File renamed with no changes. Show file contents
20220520_ChoiJiSeon_capstone.pptx
+ 0
- 0
  • View file @ ac098589

20220520_ChoiJiSeon_capstone.pptx

Download
tracking_update.py → 3. Tracking_update.py
+ 12
- 19
  • View file @ ac098589

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
video_path = '아이들.mp4'
cap = cv2.VideoCapture(video_path)
output_size = (300, 700) # 너비, 높이
output_size = (300, 700)
# 영상 저장
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
Show 20 lines Show all unchanged lines Show 20 lines
cap.set(cv2.CAP_PROP_POS_FRAMES, cap.get(cv2.CAP_PROP_FPS)*(self.min*60+self.sec)+5) # cv2.CAP_PROP_FPS*min*sec
print(cap.get(cv2.CAP_PROP_FPS)*(self.min*60+self.sec)+5)
# cap.set(cv2.CAP_PROP_POS_FRAMES, 3035)
ret, img = cap.read() # 동영상을 1프레임씩 읽어온다
ret, img = cap.read()
cv2.namedWindow('ROI set window')
cv2.imshow('ROI set window', img) # 동영상의 첫번째 프레임을 보여줌
cv2.imshow('ROI set window', img)
# setting ROI(Region of interest) : 관심영역
rect = cv2.selectROI('ROI set window', img, fromCenter=False,
showCrosshair=True) # selectROI() : ROI를 설정해서 rect로 반환한다, roi정보가 rect에 최종저장
showCrosshair=True)
cv2.destroyWindow('ROI set window')
# initialize tracker
tracker.init(img, rect) # 오브젝트 트래커가 img과 rect를 따라가게끔 설정
tracker.init(img, rect)
cnt = 0
while True:
ret, img = cap.read() # 동영상을 1프레임씩 읽어온다, read() : 읽기가 성공했는지 여부를 부울을 통해 반환하고 이미지 자체도 반환
cnt += 1
if not ret: # cap으로 동영상을 읽어왔는데 ret값이 false인 경우(동영상 읽기가 모두 끝난 경우) 종료
ret, img = cap.read()
if not ret:
exit()
if cnt == cap.get(cv2.CAP_PROP_FPS)*self.dur+1:
break
success, box = tracker.update(img) # img에서 rect로 설정한 이미지와 비슷한 물체의 위치를 찾아 반환한다
success, box = tracker.update(img)
left, top, w, h = [int(v) for v in box] # 왼쪽, 위쪽, 너비, 높이
left, top, w, h = [int(v) for v in box]
center_x = left + w / 2
center_y = top + h / 2
# print(center_x, center_y, w, h)
# result_top = int(center_y - output_size[1] / 7)
# result_bottom = int(center_y + (output_size[1] / 7) * 6)
# result_left = int(center_x - output_size[0] / 2)
# result_right = int(center_x + output_size[0] / 2)
result_top = int(center_y - h)
result_bottom = int(center_y + h * 6)
result_left = int(center_x - w * 2)
Show 20 lines Show all unchanged lines Show 20 lines
cv2.imshow('result_img', result_img)
cv2.imshow('img', img)
if cv2.waitKey(1) == ord('q'): # 문자 q에 해당하는 아스키 코드 int를 반환한다
if cv2.waitKey(1) == ord('q'):
break
a=Tracker(1, 41, 5) #몇분 몇초 구간부터 몇초간 트래킹
Show 20 lines Show all unchanged lines
media+tracking.py → 4. PyQt_Gui+Tracking.py
+ 16
- 17
  • View file @ ac098589

  • Edit in single-file editor

  • Edit in Web IDE


from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtCore import QUrl, QObject, pyqtSignal
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
from moviepy.video.io.VideoFileClip import VideoFileClip
import cv2
import numpy as np
import moviepy.editor as mp
Show 20 lines Show all unchanged lines Show 20 lines
else:
end = int(endTime.text())
ffmpeg_extract_subclip(file, start, end, targetname=f'{fName}_Cut.mp4')
with VideoFileClip(file) as video:
new = video.subclip(start, end)
new.write_videofile(f'{fName}_Cut.mp4')
url = QUrl.fromLocalFile(f'{fName}_Cut.mp4')
self.player.setMedia(QMediaContent(url))
Show 20 lines Show all unchanged lines Show 20 lines
self.player.setMedia(QMediaContent(url))
def startTracking(self, route):
# pass
# video_path = QFileDialog.getOpenFileName(self, "open cut video", QDir.currentPath())
file = route.text()
fileName = file[file.rfind('/') + 1:]
fName = fileName[:fileName.find('.')]
video_path = fName + '_cut.mp4'
#video_path="아이들_Cut.mp4"
cap = cv2.VideoCapture(video_path)
output_size = (300, 700) # 너비, 높이
output_size = (300, 700)
# 영상 저장
fourcc = cv2.VideoWriter_fourcc(*'FMP4')
Show 20 lines Show all unchanged lines Show 20 lines
tracker = cv2.TrackerCSRT.create()
ret, img = cap.read() # 동영상을 1프레임씩 읽어온다
ret, img = cap.read()
cv2.namedWindow('ROI set window')
cv2.imshow('ROI set window', img) # 동영상의 첫번째 프레임을 보여줌
cv2.imshow('ROI set window', img)
# setting ROI(Region of interest) : 관심영역
rect = cv2.selectROI('ROI set window', img, fromCenter=False,
showCrosshair=True) # selectROI() : ROI를 설정해서 rect로 반환한다, roi정보가 rect에 최종저장
showCrosshair=True)
cv2.destroyWindow('ROI set window')
# initialize tracker
tracker.init(img, rect) # 오브젝트 트래커가 img과 rect를 따라가게끔 설정
tracker.init(img, rect)
cnt = 0
while True:
ret, img = cap.read() # 동영상을 1프레임씩 읽어온다, read() : 읽기가 성공했는지 여부를 부울을 통해 반환하고 이미지 자체도 반환
ret, img = cap.read()
cnt += 1
if not ret: # cap으로 동영상을 읽어왔는데 ret값이 false인 경우(동영상 읽기가 모두 끝난 경우) 종료
if not ret:
exit()
success, box = tracker.update(img) # img에서 rect로 설정한 이미지와 비슷한 물체의 위치를 찾아 반환한다
left, top, w, h = [int(v) for v in box] # 왼쪽, 위쪽, 너비, 높이
success, box = tracker.update(img)
left, top, w, h = [int(v) for v in box]
center_x = left + w / 2
center_y = top + h / 2
Show 20 lines Show all unchanged lines Show 20 lines
cv2.imshow('result_img', result_img)
cv2.imshow('img', img)
if cv2.waitKey(1) == ord('q'): # 문자 q에 해당하는 아스키 코드 int를 반환한다
if cv2.waitKey(1) == ord('q'):
break
def playMedia(self):
Show 20 lines Show all unchanged lines
mainPage.py deleted
+ 0
- 111
  • View file @ 4948704c

from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog
from PyQt5.QtCore import Qt, QUrl, QDir
from PyQt5.QtGui import QPalette
from PyQt5.uic import loadUi
from PyQt5 import uic
from media import CMultiMedia
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
import sys
import datetime
import cv2
import numpy as np
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
class CWidget(QWidget):
def __init__(self):
super().__init__()
loadUi('mainPage.ui', self)
# Multimedia Object
self.mp = CMultiMedia(self, self.view)
# video background color
pal = QPalette()
pal.setColor(QPalette.Background, Qt.black)
self.view.setAutoFillBackground(True)
self.view.setPalette(pal)
# play time
self.duration = ''
# signal
self.btn_play.clicked.connect(self.clickPlay)
self.btn_stop.clicked.connect(self.clickStop)
self.btn_pause.clicked.connect(self.clickPause)
self.btn_tracking.clicked.connect(self.startTracking)
self.btn_back.clicked.connect(self.beforeCut)
self.btn_open.clicked.connect(self.openFile)
self.btn_quit.clicked.connect(self.exitCall)
self.btn_cut.clicked.connect(self.cutVideo)
self.bar.sliderMoved.connect(self.barChanged)
def openFile(self):
fName, _ = QFileDialog.getOpenFileName(self, "Open Full Cam", QDir.homePath())
if fName != '':
self.mp.openFile(fName)
self.route.setText(fName)
def exitCall(self):
sys.exit(app.exec_())
def beforeCut(self):
self.mp.back(self.route)
self.btn_back.setEnabled(False)
self.btn_tracking.setEnabled(False)
def cutVideo(self):
self.mp.cutVideo(self.route, self.startTime, self.endTime)
self.btn_back.setEnabled(True)
self.btn_tracking.setEnabled(True)
def clickPlay(self):
self.mp.playMedia()
def clickStop(self):
self.mp.stopMedia()
def clickPause(self):
self.mp.pauseMedia()
def barChanged(self, pos):
print(pos)
self.mp.posMoveMedia(pos)
def updateState(self, msg):
self.state.setText(msg)
def updateBar(self, duration):
self.bar.setRange(0, duration)
self.bar.setSingleStep(int(duration / 10))
self.bar.setPageStep(int(duration / 10))
self.bar.setTickInterval(int(duration / 10))
td = datetime.timedelta(milliseconds=duration)
stime = str(td)
idx = stime.rfind('.')
self.duration = stime[:idx]
def updatePos(self, pos):
self.bar.setValue(pos)
td = datetime.timedelta(milliseconds=pos)
stime = str(td)
idx = stime.rfind('.')
stime = f'{stime[:idx]} / {self.duration}'
self.playtime.setText(stime)
def startTracking(self):
self.mp.startTracking(self.route)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = CWidget()
w.resize(1280, 720)
w.show()
sys.exit(app.exec_())
0 Assignees
None
Assign to
0 Reviewers
None
Request review from
Milestone
No milestone
None
None
Time tracking
No estimate or time spent
0
Labels
None
Lock merge request
Unlocked
1
1 participant
Jiseon Choi
Reference: KwonJiHun/2022capstonedesigngroupf!9
Source branch: jiseon-main-patch-90259

Menu

Projects Groups Snippets
Help