Это позволяет протестировать OpenCV + Python на использование картинок, степень анализа которых ниже программы, но у меня были некоторые проблемы, и я не знал, как их решить.Строка, которая используется жирным шрифтом, не заставила некоторых изображений войти в следующий цикл.
Если вам нужна вся программа, вы можете использовать почту, чтобы связаться со мной.kyle199899@gmail.com
while True:
aa= 0
for f in cam.capture_continuous(stream, format="bmp"):
buff = numpy.fromstring(stream.getvalue(), dtype=numpy.uint8)
img = cv2.imdecode(buff, 1)
aa+=1
#take picture
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Frame", img)
# detector = dlib.get_frontal_face_detector()
# rects = detector(gray, 0)
**print("111", len(img))**
#I want to test len(img) if it was True.
if len(img) !=0 and not self.nextFace:
faces = face_detect.detectMultiScale(gray, 1.1,5,cv2.CASCADE_SCALE_IMAGE,(50,50),(100,100))
for (x, y, w, h) in faces:
fileNum += 1
cv2.imwrite("camera/{}.{}.jpg".format(fileName, fileNum), gray[y:y + h, x:x + w])
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.waitKey(500)
cv2.waitKey(2)
delayStartTime = time.time()
print("臉部已截取:camera/%s.%d.jpg 目前已拍攝 %d/%d 張照片" % (fileName, fileNum, fileNum , self.needFace))
self.thread_job(fileNum)
#計算是否達到拍照的目標數量
if fileNum % self.needFace == 0:
self.nextFace = True
continue
#延遲拍照
delayEndTime = time.time()
diff = int(delayEndTime - delayStartTime)
if diff < self.delay:
time.sleep(self.delay - diff)
elif fileNum != self.needFace:
print("請對準像機,還需要拍 %d 張照片" % (self.needFace - fileNum))
elif self.nextFace:
startTime = self.dataTime[0]
endTime = self.dataTime[self.needFace-1]
strftime = lambda a : time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(a))
ppSql = """INSERT INTO `products_people` (`id`, `pr_id`, `start_time`, `end_time`, `pp_result`, `pp_age`, `pp_gender`, `pp_love`, `time_spacing`) VALUES (default, '%d', '%s', '%s', '%s', '%s', '%s', '%d', '%d');"""
detectSql = "INSERT INTO `detect_data` (`id`, `pp_id`, `pr_id`, `detect_age`, `emo_surprise`, `emo_anger`, `emo_contempt`, `emo_disgust`, `emo_fear`, `emo_happiness`, `emo_neutral`, `emo_sadness`,`detect_gender`, `detect_time`) VALUES (DEFAULT, '%d', '%d', '%d', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%s', '%s');"
sql1 = ''
sql2 = ''
con = Database.getConnect()
cursor = None
pp_id = 0
try:
#新增products_people
cursor = con.cursor()
sql1 = ppSql % (self.pr_id, strftime(startTime), strftime(endTime), max(self.data, key=lambda k: sum(self.data.get(k))), self.age, self.gender, self.love, int(endTime - startTime))
cursor.execute(sql1)
pp_id = cursor.lastrowid
cursor.close()
#新增detect_data
cursor = con.cursor()
for i in list(range(0, self.needFace)):
sql2+= detectSql % ( pp_id, self.pr_id, self.age, self.data['surprise'][i], self.data['anger'][i], self.data['contempt'][i], self.data['disgust'][i], self.data['fear'][i], self.data['happiness'][i], self.data['neutral'][i], self.data['sadness'][i], self.gender, strftime(self.dataTime[i]))+'\n'
cursor.execute(sql2)
cursor.close()
except Exception as ex:
print(ex)
con.rollback()
finally:
con.commit()
con.close()
#開啟debug模式會印出sql
if self.isDebug:
print(sql1)
print(sql2)
print('==========臉次編號 %d 儲存完成===========' % (pp_id))
print('\n')
self.reset()
fileNum = 0
print('==========準備進行下一張臉次拍攝===========')
#取得喜樂度 如果輸入exit就關閉程式
if not self.getLove():
return