добавить кнопки pause stop rec с помощью opencv и gtk - PullRequest
0 голосов
/ 16 мая 2019

Привет всем! Мне нужна ваша помощь для решения возникшей проблемы. У меня есть следующий код, где моя веб-камера активируется и начинает запись без проблем.

Но мне нужно создать три бота Record, Pause и Stop, с помощью gtk, но я не знаю, как я могу сделать это с кодом

import cv2
import numpy as np
from datetime import datetime
import gtk



def show_webcam(mirror=False):


    cam = cv2.VideoCapture(0)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    frame_width = int(cam.get(3))
    frame_height = int(cam.get(4))


    filename = datetime.now().strftime("%Y-%m-%d_%H.%M.%S") + ".avi"
    out = cv2.VideoWriter(filename,fourcc, 30, (frame_width,frame_height))

    if event == cv2.EVENT_LBUTTONDOWN:
        while True:
            ret_val, img = cam.read()
            if mirror: 
                img = cv2.flip(img, 1)

            cv2.imshow('Grabacion de Audiencias', img)
            out.write(img)

            if cv2.waitKey(1) == 27: 
                break  # esc to quit
    elif event == cv2.EVENT_RBUTTONDOWN:
        pass

    cam.release()        
    out.release()        
    cv2.destroyAllWindows()

Я жду вашей помощи, потому что это проект, и ничего не достигнуто

Мне удалось использовать клавиатуру для приостановки видео и продолжения записи, в дополнение к информированию пользователя визуальными подсказками, но мне не удалось создать эти действия с помощью бонусов, используя gtk, чтобы конечный пользователь мог запись без проблем. помощь

import cv2
import numpy as np
from datetime import datetime
import gtk
import keyboard
flagrecord=True


def show_webcam(flagrecord):

    cam = cv2.VideoCapture(0)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    frame_width = int(cam.get(3))
    frame_height = int(cam.get(4))
    FONT = cv2.FONT_HERSHEY_PLAIN
    filename = datetime.now().strftime("%Y-%m-%d_%H.%M.%S") + ".avi"

    out = cv2.VideoWriter(filename,fourcc, 30, (frame_width,frame_height))

    while True:
        ret_val, img = cam.read()
        title = datetime.now().strftime("%Y-%m-%d*%H:%M:%S")
        if flagrecord: 
            img = cv2.flip(img,1)
            cv2.putText(img, "REC", (40,40), FONT, 3 , (0,0,255), 2)
            cv2.circle(img, (20,20), 10 , (0,0,255), -1)
            cv2.rectangle(img, (30,430),(600,480),(0,0,0), -1)
            cv2.putText(img, title, (40,470), FONT, 3 , (255,255,255), 2)
            cv2.imshow('Grabacion de Audiencias', img)
            out.write(img)
        else:
            img = cv2.flip(img,1)
            cv2.putText(img, "PAUSE", (40,40), FONT, 3 , (255,0,0), 2)
            cv2.circle(img, (20,20), 10 , (255,0,0), -1)
            cv2.rectangle(img, (50,430),(570,480),(0,0,0), -1)
            cv2.putText(img, "Audiencias En Pausa", (60,470), FONT, 3 , (255,255,255), 2)
            cv2.imshow('Grabacion de Audiencias', img)

        if cv2.waitKey(1) == 27: 
            break  
        if keyboard.is_pressed('p'):
            flagrecord=False
        if keyboard.is_pressed('c'):
            flagrecord=True 
        if keyboard.is_pressed('q'):
            break     

    cam.release()        
    out.release()        
    cv2.destroyAllWindows()

def main():
    show_webcam(mirror=True)


if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 16 мая 2019

Используйте cv2.waitKey вместо Keyboard lib. Вы можете сделать это изменения:

        q = cv2.waitKey(1)
        if q == 27: 
            break  
        if q == ord('p'):
            flagrecord=False
        if q == ord('c'):
            flagrecord=True 
        if q == ord('q'):
            break
...