Skip to content

Commit 966d5a5

Browse files
committed
flipshowvideo
1 parent 29b0e21 commit 966d5a5

File tree

5 files changed

+16677
-9986
lines changed

5 files changed

+16677
-9986
lines changed

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ which writes to 'HumanProcessed' directory
2121
find ./positive_images -iname "*.jpg" > positives.txt
2222
4)
2323
create distorted positive samples:
24-
perl ../opencv-haar-classifier-training/bin/createsamples.pl positives.txt negatives.txt samples 1000 "opencv_createsamples -maxxangle 0.1 -maxyangle 0.1 -maxzangle 0.2 -maxidev 50 -w 40 -h 10"
24+
perl ../opencv-haar-classifier-training/bin/createsamples.pl positives.txt negatives.txt samples 1000 "opencv_createsamples -maxxangle 0.1 -maxyangle 0.1 -maxzangle 0.3 -maxidev 50 -w 20 -h 5"
2525

26-
check: opencv_createsamples -w 40 -h 10 -vec ./samples/sample_pos4.jpg.vec
26+
check: opencv_createsamples -w 20 -h 5 -vec ./samples/*vec
2727

2828
5)
2929
merge positive *.vec files to one vec file
3030
python2 ~/Dropbox/Apu/mergevec.py -v samples -o positives.vec
3131
#python2 ../opencv-haar-classifier-training/tools/mergevec.py -v samples -o positives.vec
32-
check: opencv_createsamples -w 40 -h 10 -vec positives.vec
32+
check: opencv_createsamples -w 20 -h 5 -vec positives.vec
3333

3434
4) generate vec file of positive samples
3535
NOT USED
@@ -40,12 +40,12 @@ edit info.txt to contain pixel info
4040
opencv_createsamples -num 36 -info info.txt -w 80 -h 20 -vec positives.vec
4141

4242
6) train:
43-
check: opencv_createsamples -w 40 -h 10 -vec positives.vec
43+
check: opencv_createsamples -w 20 -h 5 -vec positives.vec
4444
rm -f classifier/*
4545
mkdir classifier
4646
opencv_traincascade -data classifier -vec positives.vec -bg negatives.txt\
4747
-numStages 50 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000 \
48-
-numNeg 429 -w 40 -h 10 -mode ALL -precalcValBufSize 512\
48+
-numNeg 429 -w 20 -h 5 -mode ALL -precalcValBufSize 512\
4949
-precalcIdxBufSize 512
5050

5151
7) in rekkariDetection.py play with parameters

flipshowVideo.py

+157
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
import cv2
2+
import numpy as np
3+
import sys
4+
from PyQt5 import QtWidgets, QtCore, QtGui
5+
6+
7+
class QtCapture(QtWidgets.QWidget):
8+
def __init__(self, *args):
9+
super(QtWidgets.QWidget, self).__init__()
10+
11+
self.fps = 24
12+
#self.cap = cv2.VideoCapture(*args)
13+
self.read_frames(sys.argv[1])
14+
self.frame_nr = 0
15+
#print ("cap", self.cap)
16+
self.video_frame = QtWidgets.QLabel()
17+
lay = QtWidgets.QVBoxLayout()
18+
#lay.setContentsMargins(0, 0, 0, 0)
19+
lay.addWidget(self.video_frame)
20+
self.setLayout(lay)
21+
print ("INIT OK")
22+
23+
def read_frames(self, filename):
24+
cap = cv2.VideoCapture(filename)
25+
self.rekkari_cascade = cv2.CascadeClassifier('./rekkari.xml')
26+
27+
n_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
28+
self.frames = []
29+
print ("starting reading: filename", filename)
30+
while not cap.isOpened():
31+
cap = cv2.VideoCapture(filename)
32+
cv2.waitKey(1000)
33+
print("Wait for the header")
34+
35+
36+
pos_frame = cap.get(cv2.CAP_PROP_POS_FRAMES)
37+
while True:
38+
flag, frame = cap.read()
39+
if flag:
40+
# The frame is ready and already captured
41+
#cv2.imshow('video', frame)
42+
# Convert to RGB for QImage.
43+
cv2.cvtColor(frame, cv2.COLOR_BGR2RGB, frame)
44+
frame = cv2.transpose(frame)
45+
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
46+
rekkaris = self.rekkari_cascade.detectMultiScale(gray, 1.1, 5)
47+
for (x,y,w,h) in rekkaris:
48+
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),5)
49+
self.frames.append(frame)
50+
pos_frame = cap.get(cv2.CAP_PROP_POS_FRAMES)
51+
print (str(pos_frame)+" frames")
52+
else:
53+
# The next frame is not ready, so we try to read it again
54+
cap.set(cv2.CAP_PROP_POS_FRAMES, pos_frame-1)
55+
print("frame is not ready")
56+
# It is better to wait for a while for the next frame to be ready
57+
cv2.waitKey(1000)
58+
59+
if cv2.waitKey(10) == 27:
60+
break
61+
if cap.get(cv2.CAP_PROP_POS_FRAMES) == cap.get(cv2.CAP_PROP_FRAME_COUNT):
62+
# If the number of captured frames is equal to the total number of frames,
63+
# we stop
64+
break
65+
if pos_frame > 15:
66+
break
67+
68+
69+
70+
cap.release()
71+
print("finished reading")
72+
73+
74+
def setFPS(self, fps):
75+
self.fps = fps
76+
77+
def nextFrameSlot(self):
78+
import sys
79+
80+
print("frameinfo", self.frame_nr, len(self.frames))
81+
#sys.exit()
82+
if self.frame_nr < (len(self.frames) -1):
83+
self.frame_nr = self.frame_nr + 1
84+
else:
85+
self.frame_nr = 0
86+
print("frameinfo2", self.frame_nr, len(self.frames))
87+
frame = self.frames[self.frame_nr]
88+
89+
# OpenCV yields frames in BGR format
90+
#frame = cv2.cvtColor(frame, cv2.cv.CV_BGR2RGB)
91+
#cv2.cvtColor(frame, cv2.COLOR_BGR2RGB, frame)
92+
#img = frame["img"]
93+
if frame is not None:
94+
print('FRAME', frame)
95+
#height, width, bytesPerComponent = frame.shape
96+
#bytesPerLine = bytesPerComponent * width
97+
#img = QtGui.QImage(self.cv_img.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
98+
img = QtGui.QImage(frame, frame.shape[1], frame.shape[0], QtGui.QImage.Format_RGB888)
99+
pix = QtGui.QPixmap.fromImage(img)
100+
self.video_frame.setPixmap(pix)
101+
102+
103+
def start(self):
104+
self.timer = QtCore.QTimer()
105+
self.timer.timeout.connect(self.nextFrameSlot)
106+
self.timer.start(1000./self.fps)
107+
108+
def stop(self):
109+
self.timer.stop()
110+
111+
def deleteLater(self):
112+
self.cap.release()
113+
super(QtWidgets.QWidget, self).deleteLater()
114+
115+
class ControlWindow(QtWidgets.QWidget):
116+
def __init__(self):
117+
QtWidgets.QWidget.__init__(self)
118+
self.capture = None
119+
120+
self.start_button = QtWidgets.QPushButton('Start')
121+
self.start_button.clicked.connect(self.startCapture)
122+
self.quit_button = QtWidgets.QPushButton('End')
123+
self.quit_button.clicked.connect(self.endCapture)
124+
self.end_button = QtWidgets.QPushButton('Stop')
125+
126+
vbox = QtWidgets.QVBoxLayout(self)
127+
vbox.addWidget(self.start_button)
128+
vbox.addWidget(self.end_button)
129+
vbox.addWidget(self.quit_button)
130+
self.setLayout(vbox)
131+
self.setWindowTitle('Control Panel')
132+
self.setGeometry(100,100,200,200)
133+
self.show()
134+
135+
def startCapture(self):
136+
if not self.capture:
137+
self.capture = QtCapture(0)
138+
self.end_button.clicked.connect(self.capture.stop)
139+
# self.capture.setFPS(1)
140+
self.capture.setParent(self)
141+
self.capture.setWindowFlags(QtCore.Qt.Tool)
142+
self.capture.start()
143+
self.capture.show()
144+
145+
def endCapture(self):
146+
self.capture.deleteLater()
147+
self.capture = None
148+
149+
150+
if __name__ == '__main__':
151+
import sys
152+
app = QtWidgets.QApplication(sys.argv)
153+
window = ControlWindow()
154+
sys.exit(app.exec_())
155+
156+
157+

picture2rectangle.py

+43-20
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
4 go for the next picture (goto 1) ).
99
1010
Finnish car number plate: 118 mm x 442 mm
11-
try here 10x40 pixel
11+
try here 5x20 pixel
1212
"""
1313

1414
import sys
@@ -66,9 +66,12 @@ def click_and_crop(self,event, x, y, flags, param):
6666
class Example(QWidget):
6767

6868

69-
def __init__(self):
69+
def __init__(self, *args):
7070
super().__init__()
7171

72+
self.xpixel = int(sys.argv[1])
73+
self.ypixel = int(sys.argv[2])
74+
print("INIT:", self.xpixel, self.ypixel)
7275

7376
self.mouse = MouseRectangle()
7477

@@ -88,13 +91,14 @@ def __init__(self):
8891
layout.addWidget(self.contents)
8992
self.setLayout(layout)
9093
self.setWindowTitle("File Dialog demo")
91-
94+
9295
def getNewName(self, oldname, subdir='img'):
9396
"""
9497
get new filename with extra path
9598
"""
9699
import os
97-
dir = os.path.dirname(oldname)
100+
#dir = os.path.dirname(oldname)
101+
dir = os.getcwd()
98102
name = os.path.basename(oldname)
99103
#generate new dir if it doesnot exist
100104
newdir = dir + '/'+ subdir
@@ -103,19 +107,24 @@ def getNewName(self, oldname, subdir='img'):
103107
return newdir+'/'+'sample_'+name
104108

105109
def showDialog(self):
106-
107-
while True:
108-
fname = QFileDialog.getOpenFileName(self,
109-
'Open file',
110-
'~/PycharmProjects/Rekkari')
111-
112-
if fname[0]:
113-
print(fname[0])
110+
import glob
111+
import math
112+
fnames =glob.glob('*jpg')
113+
fnames = fnames + glob.glob('*png')
114+
for fname in fnames:
115+
#while True:
116+
# fname = QFileDialog.getOpenFileName(self,
117+
# 'Open file',
118+
# '~/PycharmProjects/Rekkari')
119+
120+
# if fname[0]:
121+
# print(fname[0])
114122
# cv2.namedWindow('image')
115-
img = cv2.imread(fname[0],0)
123+
# img = cv2.imread(fname[0],0)
124+
img = cv2.imread(fname,0)
116125
print("size:", img.shape[0], img.shape[1])
117-
if (img.shape[0] > 1000):
118-
img = cv2.resize(img, (int(img.shape[0]/2), int(img.shape[1]/2)))
126+
#if (img.shape[0] > 1000):
127+
# img = cv2.resize(img, (int(img.shape[0]/2), int(img.shape[1]/2)))
119128
clone = img.copy()
120129
self.mouse.set_image(image=img)
121130
cv2.imshow('image', img)
@@ -149,11 +158,25 @@ def showDialog(self):
149158
refPt = self.mouse.get_refPt()
150159
if len(refPt) == 2:
151160
roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]]
152-
roi_scaled = cv2.resize(roi,(80,20))
153-
newname = self.getNewName(fname[0],'Rectangle')
161+
roi_scaled = cv2.resize(roi,(self.xpixel,self.ypixel))
162+
newname = self.getNewName(fname,'Rectangle')
154163
print(newname)
155164
cv2.imwrite(newname,roi_scaled)
156-
newname2 = self.getNewName(fname[0],'NotScaled')
165+
166+
roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]]
167+
roi_scaled = cv2.resize(roi,(2*self.xpixel,2*self.ypixel))
168+
newname = self.getNewName(fname,'Rectanglex2')
169+
print(newname)
170+
cv2.imwrite(newname,roi_scaled)
171+
172+
roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]]
173+
roi_scaled = cv2.resize(roi,(4*self.xpixel,4*self.ypixel))
174+
newname = self.getNewName(fname,'Rectanglex4')
175+
print(newname)
176+
cv2.imwrite(newname,roi_scaled)
177+
178+
179+
newname2 = self.getNewName(fname,'NotScaled')
157180
cv2.imwrite(newname2,roi)
158181
#cv2.imshow("ROI", roi)
159182
#cv2.waitKey(0)
@@ -166,7 +189,7 @@ def showDialog(self):
166189
#print("writing with added rectangle :", newname)
167190
#cv2.rectangle(clone, refPt[0], refPt[1], (255, 255, 255), -2)
168191
cv2.circle(clone, center, radius, (255, 255, 255), thickness=-2)
169-
newname3 = self.getNewName(fname[0],'NegativeSamples')
192+
newname3 = self.getNewName(fname,'NegativeSamples')
170193
cv2.imwrite(newname3,clone)
171194

172195
# close all open windows
@@ -176,5 +199,5 @@ def showDialog(self):
176199
if __name__ == '__main__':
177200

178201
app = QApplication(sys.argv)
179-
ex = Example()
202+
ex = Example(sys.argv)
180203
sys.exit(app.exec_())

0 commit comments

Comments
 (0)