python
1#coding:utf-8 2import cv2 3import time 4import pygame #音出す 5 6 7 8#音出す関数 9def add_sound(): 10 sound_file="door_chime0.mp3" 11 pygame.mixer.init() 12 pygame.mixer.music.load(sound_file) 13 pygame.mixer.music.play(1) 14 time.sleep(3.0) 15 pygame.mixer.music.stop() 16 17 18 19 20 21 22def fleez_alarm(): 23 24 cap=cv2.VideoCapture('sample.mp4') 25 26 count1=0 27 count2=0 28 count3=0 29 count4=0 30 31 while True: 32 ret,frame=cap.read() 33 #frame=cv2.flip(frame,1) 34 gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 35 36 fps = cap.get(cv2.CAP_PROP_FPS)#フレームレート 37 w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)#フレームの幅 38 h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)#フレームの高さ 39 frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)#フレーム数 40 sec = frame_count / fps#動画の時間 41 42 43 pic0=frame[0:int(h)//2,0:int(w)//2] 44 pic1=frame[0:int(h)//2,int(w)//2+1:int(w)] 45 pic2=frame[int(h)//2+1:int(h),int(w)//2+1:int(w)] 46 pic3=frame[int(h)//2+1:int(h),0:int(w)//2] 47 48 if not ret: 49 break 50 51 52 if pic0.mean()<10: 53 count1+=1 54 if count1>=120 and count1%120==0: 55 add_sound() 56 57 if count1>=120: 58 cv2.putText(frame,'SV1Error',(10,70),cv2.FONT_HERSHEY_PLAIN,5.5,(0,0,255),1,cv2.LINE_AA) 59 60 61 else: 62 count1=0 63 64 if pic1.mean()<10: 65 count2+=1 66 if count2>=120 and count2%120==0: 67 add_sound() 68 if count2>=120: 69 cv2.putText(frame,'SV2Error',(1000,70),cv2.FONT_HERSHEY_PLAIN,5.5,(0,0,255),1,cv2.LINE_AA) 70 else: 71 count2=0 72 73 74 75 76 cv2.imshow('Test',frame) 77 78 key=cv2.waitKey(30) 79 if key==27: 80 break 81 82 cap.release() 83 cv2.destroyAllWindows() 84 85 86if __name__=='__main__': 87 88 fleez_alarm()
前提・実現したいこと
初質問となります。python初心者です。
現在、ある動画を4分割にしてその一つ一つの区分に対してOpenCVにおける処理をしたいと考えています。具体的にはその一つの区分に対する輝度の平均値がある一定時間下回ればアラーム音と警告文を表示させるイメージです。エラーは出ず処理されるのですが、処理が重いのか動画が途中でフリーズしてしまいます。countを定義してプラスしていく方式がよろしくないのでしょうか?稚拙な質問ですが回答の方をして頂けると嬉しいです。将来的には4つの区分に対して輝度の比較なども同じシステム内に組み込みたいと考えております。
発生している問題・エラーメッセージ
該当のソースコード
試したこと
色々ググったのですがあまりわかりませんでした。
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー