Как регулярно делать снимки на Raspberry Pi 2 - PullRequest
0 голосов
/ 22 декабря 2018

Это позволяет протестировать 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
...