Пример #1
0
def get_sensor_data():
    """
    各データを格納する関数
    """
    global do_average
    global water_salt_data
    global salinity_data
    global daytime
    global factory_info
    # DO値
    do_data = t3_do_logger.main()
    do_1 = do_data[0]
    do_2 = do_data[1]
    do_3 = do_data[2]
    do_denominator = len(do_data) - do_data.count(
        None)  # 未取得(None)がある場合は分母数から引く
    if do_denominator == 0:  # 取得値がすべて0の場合はエラー処理
        err.main()
        sys.exit()
    do_average = round(
        ((float(do_1) + float(do_2) + float(do_3)) / do_denominator),
        2)  # n回計測からの平均値
    # 水温と塩分濃度
    water_salt_data = actw_wtemp_logger.main()
    water_temp_data = water_salt_data[3]
    salinity_data = water_salt_data[4]
    #water_temp_data = 15.0
    #salinity_data = 2.9
    # その他情報
    daytime = set_info.get_daytime2()  # 0 日付 1 時刻 (セパレート記号付き)
    factory_info = set_info.get_factory_info()  # 0 施設ID 2 水槽数
    # 0 施設ID 1 水槽数 2 日付 3 時刻 4 水温 5 塩分濃度 6 溶存酸素濃度
    return factory_info[0], factory_info[1], daytime[0], daytime[
        1], water_temp_data, salinity_data, do_average
Пример #2
0
def error_check():
    """
    エラー判定する関数
    (カメラへのアクセスが全NGだった場合はエラーカウントを追加する
    """
    global e_check
    global camera_list
    if e_check == int(camera_list):
        err.main()
Пример #3
0
def sql_sshtunnel_connect():
    """
    接続とデータベース登録を行う関数
    """
    get_infomation()
    global data
    global ssh_info
    global mysql_info
    global mysql_columns
    global mysql_value
    # サーバの仕様で直にMySQL接続できないので、一度サーバへSSH接続
    server = SSHTunnelForwarder(
        (str(ssh_info[0]), int(ssh_info[1])),
        ssh_password=str(ssh_info[3]),
        ssh_pkey=str(ssh_info[4]),
        ssh_username=str(ssh_info[2]),
        remote_bind_address=(str(ssh_info[0]), int(ssh_info[1])),
        local_bind_address=(str(mysql_info[0]), int(mysql_info[6])))
    # insert用処理準備
    sshtunnel.SSH_TIMEOUT = 5.0
    sshtunnel.TUNNEL_TIMEOUT = 5.0
    server.start()
    mysql_columns = '(' + mysql_columns + ') '
    insert_data = "values ( " + mysql_value + ')'
    sql = 'insert into ' + mysql_info[3] + '.' + mysql_info[
        4] + mysql_columns + insert_data
    print(sql)
    conn = MySQLdb.connect(host=str(mysql_info[0]),
                           user=mysql_info[1],
                           password=mysql_info[2],
                           db=mysql_info[3],
                           charset=mysql_info[5],
                           port=int(mysql_info[6]))
    try:
        cursor = conn.cursor()
        cursor.execute(
            sql,
            (data[0], data[1], data[2], data[3], data[4], data[5], data[6]))
        conn.commit()
    except:
        err.main()
        conn.close()
        server.close()
        sys.exit()
    finally:
        conn.close()
    server.close()
Пример #4
0
def sql_sshtunnel_connect():
    """
    接続とデータベース登録を行う関数
    """
    global data
    global ssh_info
    global mysql_info
    global mysql_columns
    global mysql_value
    # 構文準備
    #print(sql)
    # SSHポートフォワーディング
    with SSHTunnelForwarder(
        (str(ssh_info[0]), int(ssh_info[1])),
            ssh_password='******',  # ここ変数にすると確実にエラーが起きる
            ssh_pkey=str(ssh_info[4]),
            ssh_username=str(ssh_info[2]),
            remote_bind_address=(str(ssh_info[0]), 3306),  # ここ変数にすると確実にエラーが起きる
            local_bind_address=(str(mysql_info[0]),
                                3306),  # ここ変数にすると確実にエラーが起きる
    ) as server:
        conn = MySQLdb.connect(
            host=str(mysql_info[0]),
            user=str(mysql_info[1]),
            password=str(mysql_info[2]),
            db=str(mysql_info[3]),
            charset=str(mysql_info[5]),
            port=int(mysql_info[6]),
        )
        dt_now = datetime.datetime.now()
        try:
            cursor = conn.cursor()
            cursor.execute(sql, (data[0], data[1], data[2], data[3], data[4]))
            conn.commit()
        except:  # エラー時処理呼び出し
            conn.close()
            print("[" + dt_now.strftime('%Y-%m-%d %H:%M:%S') +
                  "] Connection Error.")
            err.main()
            sys.exit()
        finally:  # 終了処理
            conn.close()
Пример #5
0
def image_cap():
    """
    静止画の撮影・保存を行う処理
    """

    global camera_list
    global ipcamera_list
    global dir_info
    global daytime
    global image_info
    global image_upload_files
    global image_mini_files

    # 静止画の撮影用
    i = 0
    camera_no = 1  # 周回確認用

    # 0_height 1_width 2_quality
    org_imageinfo = image_info[0].split(', ')
    upload_imageinfo = image_info[1].split(', ')
    mini_imageinfo = image_info[2].split(', ')
    original_w_h = (int(org_imageinfo[0]), int(org_imageinfo[1]))
    #upload_w_h = (upload_imageinfo[0] + ',' + upload_imageinfo[1])
    mini_w_h = (int(mini_imageinfo[0]), int(mini_imageinfo[1]))
    # print(original_w_h)
    # print(mini_w_h)
    # print(org_imageinfo[2])
    for i in range(int(camera_list)):
        image_dir = str(dir_info[1]) + 'images/' + \
            str(camera_no) + '/' + daytime[0]
        # print(image_dir)
        if not os.path.exists(image_dir):
            os.mkdir(image_dir)
        # 書込設定
        image_org_files = str(image_dir) + '/' + daytime[0] + '_' + daytime[
            1] + '00_org.jpg'  # ローカル保存用
        image_upload_files = str(image_dir) + '/' + daytime[0] + '_' + daytime[
            1] + '00.jpg'  # アップロード用
        image_mini_files = str(image_dir) + '/' + daytime[0] + '_' + daytime[
            1] + '00_mini.jpg'  # サムネイル用
        # print(image_org_files)
        # print(image_upload_files)
        # print(image_mini_files)
        # 撮影開始
        cap = cv2.VideoCapture(ipcamera_list[i])
        # print(ipcamera_list[i])
        cap.set(cv2.CAP_PROP_POS_FRAMES, 3)
        c = 1
        for c in range(3):
            ret, frame = cap.read()
            if ret:
                org_image = cv2.resize(frame, original_w_h)
                cv2.imwrite(
                    image_org_files, org_image,
                    [int(cv2.IMWRITE_JPEG_QUALITY),
                     int(org_imageinfo[2])])  # オリジナル画像の保存
                c = 0
                # 成功したら抜ける
                break
            else:
                c += 1
                # print(c)
        # 終了
        cap.release()
        # 4回以上の場合はエラー判定
        if c >= 4:
            err.main()
            # エラー処理された場合はそのまま終了させる
            sys.exit()
        # アップロード用の画像作成 サイズはそれぞれ固定なので値そのまま書き込み
        # オリジナルファイル読み込み
        load_image = cv2.imread(image_org_files)
        cv2.imwrite(image_upload_files, load_image,
                    [int(cv2.IMWRITE_JPEG_QUALITY),
                     int(upload_imageinfo[2])])  # アップ用
        up_mini = cv2.resize(load_image, mini_w_h)
        if load_image is None:
            err.main()
            # エラー処理された場合はそのまま終了させる
            sys.exit()
        cv2.imwrite(image_mini_files, up_mini,
                    [int(cv2.IMWRITE_JPEG_QUALITY),
                     int(mini_imageinfo[2])])  # サムネイル
        # カウントを増やして次へ
        camera_no = int(camera_no) + 1
Пример #6
0
def image_cap():
    """
    静止画の撮影・保存を行う処理
    """

    global camera_list
    global ipcamera_list
    global dir_info
    global daytime
    global image_info
    global image_upload_files
    global image_mini_files
    global logtime

    # 静止画の撮影用
    i = 0
    camera_no = 1  # 周回確認用

    # 0_height 1_width 2_quality
    org_imageinfo = image_info[0].split(', ')
    upload_imageinfo = image_info[1].split(', ')
    mini_imageinfo = image_info[2].split(', ')
    original_w_h = (int(org_imageinfo[0]), int(org_imageinfo[1]))
    #upload_w_h = (upload_imageinfo[0] + ',' + upload_imageinfo[1])
    mini_w_h = (int(mini_imageinfo[0]), int(mini_imageinfo[1]))
    # print(original_w_h)
    # print(mini_w_h)
    # print(org_imageinfo[2])
    for i in range(int(camera_list)):
        image_dir = str(dir_info[1]) + 'images/' + \
            str(camera_no) + '/' + daytime[0]
        # print(image_dir)
        if not os.path.exists(image_dir):
            os.mkdir(image_dir)
        # 書込設定
        image_org_files = str(image_dir) + '/' + daytime[0] + '_' + daytime[
            1] + '00_org.jpg'  # ローカル保存用
        image_timestamp_files = image_org_files
        image_upload_files = str(image_dir) + '/' + daytime[0] + '_' + daytime[
            1] + '00.jpg'  # アップロード用
        image_mini_files = str(image_dir) + '/' + daytime[0] + '_' + daytime[
            1] + '00_mini.jpg'  # サムネイル用
        # print(image_org_files)
        # print(image_upload_files)
        # print(image_mini_files)
        # 撮影開始
        cap = cv2.VideoCapture(ipcamera_list[i])
        # print(ipcamera_list[i])
        cap.set(cv2.CAP_PROP_POS_FRAMES, 3)
        c = 1
        for c in range(3):
            ret, frame = cap.read()
            if ret:
                org_image = cv2.resize(frame, original_w_h)
                cv2.imwrite(
                    image_org_files, org_image,
                    [int(cv2.IMWRITE_JPEG_QUALITY),
                     int(org_imageinfo[2])])  # オリジナル画像の保存
                c = 0
                # 成功したら抜ける
                break
            else:
                c += 1
                # print(c)
        # 終了
        cap.release()
        # 4回以上の場合はエラー判定
        if c >= 4:
            err.main()
            # エラー処理された場合はそのまま終了させる
            sys.exit()
        # 20200825処理追加 画像にタイムスタンプを付与する
        timestamp_img = cv.imread(image_org_files)
        dt = datetime.datetime.now()
        timetext = dt.strftime('%Y-%m-%d %a %H:%M:00')
        cv.putText(timestamp_img, timetext, (50, 50), cv.FONT_HERSHEY_PLAIN, 3,
                   (255, 255, 255), 6, cv.LINE_AA)  #白文字太め
        cv.putText(timestamp_img, timetext, (50, 50), cv.FONT_HERSHEY_PLAIN, 3,
                   (0, 0, 0), 2, cv.LINE_AA)  #黒文字細め
        cv.imwrite(image_timestamp_files, timestamp_img)
        # アップロード用の画像作成
        # オリジナルファイル読み込み
        load_image = cv2.imread(image_timestamp_files)
        cv2.imwrite(image_upload_files, load_image,
                    [int(cv2.IMWRITE_JPEG_QUALITY),
                     int(upload_imageinfo[2])])  # アップ用
        up_mini = cv2.resize(load_image, mini_w_h)
        if load_image is None:
            err.main()
            # エラー処理された場合はそのまま終了させる
            sys.exit()
        cv2.imwrite(image_mini_files, up_mini,
                    [int(cv2.IMWRITE_JPEG_QUALITY),
                     int(mini_imageinfo[2])])  # サムネイル
        # カウントを増やして次へ
        camera_no = int(camera_no) + 1