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
def error_check(): """ エラー判定する関数 (カメラへのアクセスが全NGだった場合はエラーカウントを追加する """ global e_check global camera_list if e_check == int(camera_list): err.main()
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()
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()
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
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