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

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

ただいまの
回答率

90.51%

  • Python 3.x

    6835questions

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

複数の.pyファイルを連動させたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 151

bonboniso

score 1

 前提・実現したいこと

pythonを独学で勉強しています。
その他言語についてもほぼ無知でプログラミングに関して完全なド素人です。

現状やりたいこととしては、
・「main.py」「sub.py」の2つのファイルを作成
・「sub」は「main」のモジュールとしてインポートする
(バックグラウンドで「sub」を待機させておくイメージです)
・「main」で特定の操作をすると、「sub」が走り出す
・「sub」の動作が完了すると、またバックグラウンドで待機
このような感じです。

まず、このようなことができるのでしょうか。
可能な場合「main」から「sub」へはどのように指示を出せば良いでしょうか。
また、「main」から「sub」へデータ(値)を受け渡したりすることは可能でしょうか。

このあたりの方法が全くわからず、調べても理解ができません。
方法とどのようなコードを書けばを知りたく、質問いたしました。

具体的には、

1.「main.py」にてウェブカメラを起動し、表示
同時に「sub.py」を起動し、バックグラウンドで待機させる
2.特定のコマにてボタンを押すとキャプチャをjpgで特定のフォルダに保存
その際、ファイル名に日付・時刻などをつける
3.項2を実行したと同時に、「sub.py」を実行(このトリガーの与え方がわかりません)
4.「sub.py」では項2で保存されたjpgファイルを開き、加工して保存したい
この際にjpgファイルを開くため、項2で指定したファイル名を取得する必要がある
(このファイル名の取得方法がわかりません)
5.「sub.py」での加工が終えたら再びバックグラウンドで待機
 

 発生している問題・エラーメッセージ

 該当のソースコード

「main.py」

import cv2, sub, datetime

cam_win = "capture"
date_name = ""

capture = cv2.VideoCapture(0)
while(True):
    date = datetime.datetime.now()
    global date_name 
    date_name = "{0:%Y%m%d%H%M%S}_".format(date)

    ret, img = capture.read()

    if(ret == False):
        print("capture failed.")
        break

    cv2.imshow(cam_win, img)

    save_key = cv2.waitKey(1)
    if save_key == ord("s"):
        cv2.imwrite(date_name + "img.jpg", img)
        print("save complete.")
        continue
        #ここで「sub.py」を走らせるシグナルを送りたい
        #また、ファイル名を一緒に転送したい

    key = cv2.waitKey(1)
    if(key == 27):
        print("close.")
        break

capture.release()
cv2.destroyAllWindows()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

「sub.py」

from threading import (Event, Thread)
import cv2, datetime

event = Event()

def img_edit():

    while(True):
        event.wait()
        edit_img = cv2.imread("~.jpg", 1) #ここで「main.py」から転送されたファイル名を指定したい
        cv2.imwrite("edit_img.jpg", edit_img)
       #本来は画像加工をしたいのですが、説明を簡略化するためリネームのみとしています

th = Thread(target=img_edit)
th.start()
#ここで「main.py」からのシグナルを受けてimg_edit関数を走らせるトリガーを入れる?
event.set()

自分で調べて考えたところ、上記のような内容となります。
threadingやevent部分は理解が進まず、ネットで知った情報をコピペしている状態です。
お手数をおかけしますがご教示のほどよろしくお願いいたします。

 試したこと

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

利用環境は

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

まず、やりたいことから察しますに、sub.pyをバックグラウンドで待機させる必要を感じません。
「#ここで「sub.py」を走らせるシグナルを送りたい」の箇所で普通に画像加工を行ってやれば良いのではないでしょうか。

関数の組み立てはなるべくシンプルに考えるべきです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/14 15:14

    ご回答ありがとうございます。
    仰られる通り、今回の質問のパターンですと一つのファイルで行うべきと思っておりますが、後学のためにこちらの方法を知りたく、質問いたしました。よろしくお願いいたします。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonのエラー

    testThreadが見つからないというメッセージが出てきたのですが、どこに問題があるのでしょうか? よろしくお願いします コード #-*- coding utf-8-*-

  • 解決済

    動画から静止画切り出し

    動画から静止画の切り出しをしたいと考えています。 しかし、参考になるサイトを探していても見つかりません。 opencvで動画から静止画を切り出すことは不可能なのでしょうか?

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 解決済

    PythonのFlaskでのrender_templateで画像ファイルの表示方法

    前提・実現したいこと PythonのFlaskのフレームワークを用いて、QRコードを作成して、それを表示させるプログラムを作成しています。(python3) わからないこと QRコ

  • 解決済

    pythonでログの分析(時間)が出来ません。

    前提・実現したいこと pythonのプログラムで質問です。 以下のログがあります。 2012/01/02 13:00 0 2012/01/02 14:00 1 2012/01/

  • 解決済

    Google Calendar APIを使用してイベント終了日を取得したい

    Google Calendar APIを使用してグーグルカレンダーに登録したイベントをphpで読み込でいるのですが、終了日をgetEnd()で読み込むと終了日がカレンダー登録した終

  • 受付中

    動画から連番で画像を保存するプログラム

    前提・実現したいこと 動画(wmvファイル)を読み込んで、静止画(jpgファイル)を連番で保存したいです。 発生している問題・エラーメッセージ 画像が出力されない 該当のソ

  • 解決済

    opencvの処理をリアルタイムに

    処理が途中でとまり、 処理後フォルダにaviファイルは保存されるのですが2秒ほどの動画となってしまいます 動画を撮り続けて自分で止めたい場合どのようにすればよいでしょうか アドバイ

同じタグがついた質問を見る

  • Python 3.x

    6835questions

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