質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1318閲覧

pythonで一定時間ごとに動作を行うタイマーを使いたい

hokahomu

総合スコア38

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/28 08:16

編集2018/11/28 08:32

前提・実現したいこと

赤い丸の物体をカメラを用いてリアルタイムで認識し、音声を鳴らすプログラムを作っているのですが、音声が鳴った後に10秒ほど間をあけてからまた鳴らしたいのですが、実装方法がわからないので教えていただきたいです。
一応現段階では鳴らす前にflgの値を0にし、鳴らした後にflgの値を1にすることで連続でならないようにしています。

該当のソースコード

Python

1from mutagen.mp3 import MP3 as mp3 2import numpy as np 3import cv2 4import pygame 5import time 6import threading 7 8def getCircle(frame, lower_color, upper_color): 9 MIN_RADIUS = 25 10 11 # HSVによる画像情報に変換 12 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 13 14 # ガウシアンぼかしを適用して、認識精度を上げる 15 blur = cv2.GaussianBlur(hsv, (9, 9), 0) 16 17 # 指定した色範囲のみを抽出する 18 color = cv2.inRange(blur, lower_color, upper_color) 19 20 # オープニング・クロージングによるノイズ除去 21 element8 = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]], np.uint8) 22 oc = cv2.morphologyEx(color, cv2.MORPH_OPEN, element8) 23 oc = cv2.morphologyEx(oc, cv2.MORPH_CLOSE, element8) 24 25 # 輪郭抽出 26 img, contours, hierarchy = cv2.findContours(oc, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 27 print("{} contours.".format(len(contours))) 28 29 if len(contours) > 0: 30 # 一番大きい赤色領域を指定する 31 contours.sort(key=cv2.contourArea, reverse=True) 32 cnt = contours[0] 33 34 # 最小外接円を用いて円を検出する 35 (x, y), radius = cv2.minEnclosingCircle(cnt) 36 center = (int(x), int(y)) 37 radius = int(radius) 38 39 40 # 円が小さすぎたら円を検出していないとみなす 41 if radius < MIN_RADIUS: 42 return None 43 else: 44 return center, radius 45 else: 46 return None 47 48 49 50def flg(): 51 flg=flg-1 52 53 54 55if __name__ == '__main__': 56 # 内蔵カメラを起動(カメラが一つしか繋がっていない場合は、引数に0を渡せば良い) 57 cap = cv2.VideoCapture(0) 58 59 flg=0 60 61 while True: 62 # 赤色の円を抽出する 63 frame = cap.read()[1] 64 getframe = getCircle(frame, np.array([130, 80, 80]), np.array([200, 255, 255])) 65 66 if getframe is not None: 67 # 見つかった円の上に青い円を描画 68 # getframe[0]:中心座標、getframe[1]:半径 69 cv2.circle(frame, getframe[0], getframe[1], (255, 0, 0), 2) 70 print(getframe[1]) 71 if flg==0: 72 filename = 'D:\ppcon\keikoku .mp3' #再生したいmp3ファイル 73 pygame.mixer.init() 74 pygame.mixer.music.load(filename) #音源を読み込み 75 mp3_length = mp3(filename).info.length #音源の長さ取得 76 pygame.mixer.music.play(1) #再生開始。1の部分を変えるとn回再生(その場合は次の行の秒数も×nすること) 77 time.sleep(mp3_length + 0.25) #再生開始後、音源の長さだけ待つ(0.25待つのは誤差解消) 78 pygame.mixer.music.stop() #音源の長さ待ったら再生停止 79 flg = flg+1 80 81 if flg==1: 82 t=threading.Timer(10,flg) 83 t.start() 84 85 # 検出結果とともに映像を表示 86 cv2.imshow('Circle Detect', frame) 87 88 89 if cv2.waitKey(1) & 0xFF == ord('q'): 90 break 91 92 # 終了時にカメラを解放 93 cap.release() 94 cv2.destroyAllWindows()

試したこと

sleepを使ってみましたがカメラでの検出も止まってしまうため断念
threadingを用いたタイマーを自分なりに使用してみましたが既定の秒数経った後にも反応がないこと

補足情報(FW/ツールのバージョンなど)

python3.7
opencv-python(3.4.3.18)
numpy(1.15.1)
pygame(1.9.4)
muatagen(1.41.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・音声が鳴ったときに、10秒先の時刻をなんらかの変数に設定、
・while true のループの中で、現在時刻がその変数以降になってるかをチェックし、そうなってるなら音を鳴らす

というのでどうでしょう

投稿2018/11/28 08:25

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokahomu

2018/11/28 08:33

datetimeを使って時刻を取得するということですよね? やってみますね
y_waiwai

2018/11/28 08:37

この場合は実際の日付時刻は不要なので、エポック秒なんかを使えば簡単にできるんではないかと。
hokahomu

2018/11/28 08:56

エポック秒が何かわからないので取得方法教えてほしいです...
y_waiwai

2018/11/28 09:29

「python エポック秒」でぐぐるとでてきます
hokahomu

2018/11/29 09:06

無事に解決することが出来ました! 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問