From 5c407ec56d37fa5922a6cf743c35114d2b83c147 Mon Sep 17 00:00:00 2001 From: OJW0918 Date: Mon, 1 Dec 2025 17:15:51 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=99=EC=8A=B5=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=A0=84=EC=B2=98=EB=A6=AC=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=B0=8F=20=EB=AA=A8=EB=8D=B8=20=EC=B6=94=EB=A1=A0=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C,=20=EC=B5=9C=EC=A2=85=20=EA=B0=80=EC=A4=91=EC=B9=98?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OJW/model.ipynb | 0 OJW/orbit.ipynb | 1042 ----------------------------------------------- 2 files changed, 1042 deletions(-) delete mode 100644 OJW/model.ipynb delete mode 100644 OJW/orbit.ipynb diff --git a/OJW/model.ipynb b/OJW/model.ipynb deleted file mode 100644 index e69de29..0000000 diff --git a/OJW/orbit.ipynb b/OJW/orbit.ipynb deleted file mode 100644 index cec3e03..0000000 --- a/OJW/orbit.ipynb +++ /dev/null @@ -1,1042 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "71dc41b4", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import glob\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "# =============================\n", - "# 1) 이전 기수 스타일 BIN 파서\n", - "# =============================\n", - "def parse_bin_legacy(bin_path,\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " num_channels=24,\n", - " bytes_per_sample=4):\n", - " \"\"\"\n", - " - 파일 맨 끝에서 24채널 × 10초 신호만 잘라서 읽는 이전 기수 방식.\n", - " - float32 little-endian으로 파싱.\n", - " - 반환: (24, 400000)\n", - " \"\"\"\n", - " num_samples_total = fs * duration_sec\n", - " block_bytes = num_channels * num_samples_total * bytes_per_sample\n", - "\n", - " with open(bin_path, \"rb\") as f:\n", - " content = f.read()\n", - "\n", - " # 맨 끝에서 필요한 데이터 크기만큼 자르기\n", - " signal_bytes = content[-block_bytes:]\n", - "\n", - " # float32 LE 변환\n", - " data = np.frombuffer(signal_bytes, dtype=\" mil 변환\n", - "# =============================\n", - "def volt_to_mil(x, y, mil_per_volt=10.0):\n", - " \"\"\"\n", - " 평균 제거 + mil 변환\n", - " \"\"\"\n", - " x_ac = x - x.mean()\n", - " y_ac = y - y.mean()\n", - " return x_ac * mil_per_volt, y_ac * mil_per_volt\n", - "\n", - "\n", - "# =============================\n", - "# 4) Orbit 이미지 저장\n", - "# =============================\n", - "def save_orbit_images_for_pair(x_mil,\n", - " y_mil,\n", - " rcp_name=\"RCP1A\",\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " seconds_per_img=1,\n", - " axis_lim_mil=3.0,\n", - " base_out_dir=\"output\"):\n", - " \"\"\"\n", - " - 1초 단위 orbit 10장 저장\n", - " - 저장 구조:\n", - " base_out_dir/\n", - " RCP1A/\n", - " orbit_RCP1A_sec0.png\n", - " ...\n", - " \"\"\"\n", - " # RCP 폴더 생성\n", - " rcp_dir = os.path.join(base_out_dir, rcp_name)\n", - " os.makedirs(rcp_dir, exist_ok=True)\n", - "\n", - " samples_per_img = fs * seconds_per_img\n", - " num_imgs = duration_sec // seconds_per_img\n", - "\n", - " x_min, x_max = -axis_lim_mil, axis_lim_mil\n", - " y_min, y_max = -axis_lim_mil, axis_lim_mil\n", - "\n", - " for i in range(num_imgs):\n", - " s = i * samples_per_img\n", - " e = (i + 1) * samples_per_img\n", - "\n", - " seg_x = x_mil[s:e]\n", - " seg_y = y_mil[s:e]\n", - "\n", - " plt.figure(figsize=(4, 4))\n", - " plt.scatter(seg_x, seg_y, s=0.1)\n", - " plt.title(f\"{rcp_name} Orbit (sec {i})\")\n", - " plt.xlabel(\"X [mil]\")\n", - " plt.ylabel(\"Y [mil]\")\n", - " plt.xlim(x_min, x_max)\n", - " plt.ylim(y_min, y_max)\n", - " plt.gca().set_aspect(\"equal\", \"box\")\n", - " plt.grid(True, alpha=0.2)\n", - "\n", - " fpath = os.path.join(rcp_dir, f\"orbit_{rcp_name}_sec{i}.png\")\n", - " plt.savefig(fpath, dpi=150, bbox_inches=\"tight\")\n", - " plt.close()\n", - "\n", - " print(\"Saved:\", fpath)\n", - "\n", - "\n", - "# =============================\n", - "# 5) BIN 하나 처리\n", - "# =============================\n", - "def process_bin(bin_path,\n", - " out_root=\".\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10):\n", - " \"\"\"\n", - " bin_path 하나에 대해:\n", - " out_root / [bin이름] / RCP1A,1B,2A,2B / 각 10장 orbit 저장\n", - " \"\"\"\n", - " bin_name = os.path.splitext(os.path.basename(bin_path))[0]\n", - " base_out_dir = os.path.join(out_root, bin_name)\n", - " os.makedirs(base_out_dir, exist_ok=True)\n", - "\n", - " print(f\"\\n=== Processing BIN: {bin_path}\")\n", - " print(f\" → output dir: {base_out_dir}\")\n", - "\n", - " # 1) 파싱\n", - " data = parse_bin_legacy(bin_path, fs=fs, duration_sec=duration_sec)\n", - "\n", - " # 2) XY 4쌍 추출 (이전 기수 방식)\n", - " target_pairs = [(4, 6), (10, 12), (16, 18), (22, 24)]\n", - " xy_pairs = extract_xy_pairs_legacy(data, target_pairs)\n", - "\n", - " # 3) RCP명 매핑\n", - " rcp_names = [\"RCP1A\", \"RCP1B\", \"RCP2A\", \"RCP2B\"]\n", - "\n", - " for i, (x, y) in enumerate(xy_pairs):\n", - " rcp_name = rcp_names[i]\n", - "\n", - " x_mil, y_mil = volt_to_mil(x, y, mil_per_volt=mil_per_volt)\n", - "\n", - " save_orbit_images_for_pair(\n", - " x_mil, y_mil,\n", - " rcp_name=rcp_name,\n", - " fs=fs,\n", - " duration_sec=duration_sec,\n", - " seconds_per_img=1,\n", - " axis_lim_mil=5.0,\n", - " base_out_dir=base_out_dir\n", - " )\n", - "\n", - "\n", - "# =============================\n", - "# 6) 폴더 전체 처리\n", - "# =============================\n", - "def process_folder(folder_path,\n", - " out_root=\"output_orbits\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10):\n", - " \"\"\"\n", - " folder_path 안에 있는 모든 .BIN 파일에 대해 process_bin 수행.\n", - " \"\"\"\n", - " os.makedirs(out_root, exist_ok=True)\n", - "\n", - " pattern = os.path.join(folder_path, \"*.BIN\")\n", - " bin_files = sorted(glob.glob(pattern))\n", - "\n", - " if not bin_files:\n", - " print(\"폴더 안에 .BIN 파일이 없습니다:\", folder_path)\n", - " return\n", - "\n", - " print(f\"총 {len(bin_files)}개의 BIN 파일 발견\")\n", - "\n", - " for bin_path in bin_files:\n", - " process_bin(\n", - " bin_path,\n", - " out_root=out_root,\n", - " mil_per_volt=mil_per_volt,\n", - " fs=fs,\n", - " duration_sec=duration_sec\n", - " )\n", - "\n", - "\n", - "if __name__ == \"__main__\":\n", - " # 예시: 정상 BIN들이 들어있는 폴더 경로\n", - " normal_folder = \"../5기(25-2)/BKG_1/정상(Pk 1mils 이내 데이터)\" # 여기에 네 정상폴더 경로 넣어줘\n", - " process_folder(normal_folder)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba2392ab", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import glob\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "# =============================\n", - "# 1) 이전 기수 스타일 BIN 파서\n", - "# =============================\n", - "def parse_bin_legacy(bin_path,\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " num_channels=24,\n", - " bytes_per_sample=4):\n", - " \"\"\"\n", - " - 파일 맨 끝에서 24채널 × 10초 신호만 잘라서 읽는 이전 기수 방식.\n", - " - float32 little-endian으로 파싱.\n", - " - 반환: (24, 400000)\n", - " \"\"\"\n", - " num_samples_total = fs * duration_sec\n", - " block_bytes = num_channels * num_samples_total * bytes_per_sample\n", - "\n", - " with open(bin_path, \"rb\") as f:\n", - " content = f.read()\n", - "\n", - " # 맨 끝에서 필요한 데이터 크기만큼 자르기\n", - " signal_bytes = content[-block_bytes:]\n", - "\n", - " # float32 LE 변환\n", - " data = np.frombuffer(signal_bytes, dtype=\" mil 변환\n", - "# =============================\n", - "def volt_to_mil(x, y, mil_per_volt=10.0):\n", - " \"\"\"\n", - " 평균 제거 + mil 변환\n", - " \"\"\"\n", - " x_ac = x - x.mean()\n", - " y_ac = y - y.mean()\n", - " return x_ac * mil_per_volt, y_ac * mil_per_volt\n", - "\n", - "\n", - "# =============================\n", - "# 4) Orbit 이미지 저장\n", - "# =============================\n", - "def save_orbit_images_for_pair(x_mil,\n", - " y_mil,\n", - " rcp_name=\"RCP1A\",\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " seconds_per_img=1,\n", - " axis_lim_mil=5.0,\n", - " base_out_dir=\"output\"):\n", - " \"\"\"\n", - " - 1초 단위 orbit 10장 저장\n", - " - 저장 구조:\n", - " base_out_dir/\n", - " RCP1A/\n", - " orbit_RCP1A_sec0.png\n", - " ...\n", - " \"\"\"\n", - " # RCP 폴더 생성\n", - " rcp_dir = os.path.join(base_out_dir, rcp_name)\n", - " os.makedirs(rcp_dir, exist_ok=True)\n", - "\n", - " samples_per_img = fs * seconds_per_img\n", - " num_imgs = duration_sec // seconds_per_img\n", - "\n", - " x_min, x_max = -axis_lim_mil, axis_lim_mil\n", - " y_min, y_max = -axis_lim_mil, axis_lim_mil\n", - "\n", - " for i in range(num_imgs):\n", - " s = i * samples_per_img\n", - " e = (i + 1) * samples_per_img\n", - "\n", - " seg_x = x_mil[s:e]\n", - " seg_y = y_mil[s:e]\n", - "\n", - " plt.figure(figsize=(4, 4))\n", - " plt.scatter(seg_x, seg_y, s=0.1)\n", - " plt.title(f\"{rcp_name} Orbit (sec {i})\")\n", - " plt.xlabel(\"X [mil]\")\n", - " plt.ylabel(\"Y [mil]\")\n", - " plt.xlim(x_min, x_max)\n", - " plt.ylim(y_min, y_max)\n", - " plt.gca().set_aspect(\"equal\", \"box\")\n", - " plt.grid(True, alpha=0.2)\n", - "\n", - " fpath = os.path.join(rcp_dir, f\"orbit_{rcp_name}_sec{i}.png\")\n", - " plt.savefig(fpath, dpi=150, bbox_inches=\"tight\")\n", - " plt.close()\n", - "\n", - " print(\"Saved:\", fpath)\n", - "\n", - "\n", - "# =============================\n", - "# 5) BIN 하나 처리\n", - "# =============================\n", - "def process_bin(bin_path,\n", - " out_root=\".\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10):\n", - " \"\"\"\n", - " bin_path 하나에 대해:\n", - " out_root / [bin이름] / RCP1A,1B,2A,2B / 각 10장 orbit 저장\n", - " \"\"\"\n", - " bin_name = os.path.splitext(os.path.basename(bin_path))[0]\n", - " base_out_dir = os.path.join(out_root, bin_name)\n", - " os.makedirs(base_out_dir, exist_ok=True)\n", - "\n", - " print(f\"\\n=== Processing BIN: {bin_path}\")\n", - " print(f\" → output dir: {base_out_dir}\")\n", - "\n", - " # 1) 파싱\n", - " data = parse_bin_legacy(bin_path, fs=fs, duration_sec=duration_sec)\n", - "\n", - " # 2) XY 4쌍 추출 (이전 기수 방식)\n", - " target_pairs = [(4, 6), (10, 12), (16, 18), (22, 24)]\n", - " xy_pairs = extract_xy_pairs_legacy(data, target_pairs)\n", - "\n", - " # 3) RCP명 매핑\n", - " rcp_names = [\"RCP1A\", \"RCP1B\", \"RCP2A\", \"RCP2B\"]\n", - "\n", - " for i, (x, y) in enumerate(xy_pairs):\n", - " rcp_name = rcp_names[i]\n", - "\n", - " x_mil, y_mil = volt_to_mil(x, y, mil_per_volt=mil_per_volt)\n", - "\n", - " save_orbit_images_for_pair(\n", - " x_mil, y_mil,\n", - " rcp_name=rcp_name,\n", - " fs=fs,\n", - " duration_sec=duration_sec,\n", - " seconds_per_img=1,\n", - " axis_lim_mil=5.0,\n", - " base_out_dir=base_out_dir\n", - " )\n", - "\n", - "\n", - "# =============================\n", - "# 6) 폴더 전체 처리\n", - "# =============================\n", - "def process_folder(folder_path,\n", - " out_root=\"output_orbits\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10):\n", - " \"\"\"\n", - " folder_path 안에 있는 모든 .BIN 파일에 대해 process_bin 수행.\n", - " \"\"\"\n", - " os.makedirs(out_root, exist_ok=True)\n", - "\n", - " pattern = os.path.join(folder_path, \"*.BIN\")\n", - " bin_files = sorted(glob.glob(pattern))\n", - "\n", - " if not bin_files:\n", - " print(\"폴더 안에 .BIN 파일이 없습니다:\", folder_path)\n", - " return\n", - "\n", - " print(f\"총 {len(bin_files)}개의 BIN 파일 발견\")\n", - "\n", - " for bin_path in bin_files:\n", - " process_bin(\n", - " bin_path,\n", - " out_root=out_root,\n", - " mil_per_volt=mil_per_volt,\n", - " fs=fs,\n", - " duration_sec=duration_sec\n", - " )\n", - "\n", - "\n", - "if __name__ == \"__main__\":\n", - " # 예시: 정상 BIN들이 들어있는 폴더 경로\n", - " normal_folder = \"../5기(25-2)/BKG_2/비정상(Pk 1mils 이상 데이터)\" # 여기에 네 정상폴더 경로 넣어줘\n", - " process_folder(normal_folder)\n" - ] - }, - { - "cell_type": "markdown", - "id": "c50b91fc", - "metadata": {}, - "source": [ - "# 병렬처리" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0fa54155", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "총 82개의 BIN 파일 → 병렬 처리 시작\n", - "사용할 프로세스 수: 16\n" - ] - } - ], - "source": [ - "import os\n", - "import glob\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import multiprocessing as mp\n", - "\n", - "\n", - "# =============================\n", - "# 1) 이전 기수 스타일 BIN 파서\n", - "# =============================\n", - "def parse_bin_legacy(bin_path,\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " num_channels=24,\n", - " bytes_per_sample=4):\n", - " num_samples_total = fs * duration_sec\n", - " block_bytes = num_channels * num_samples_total * bytes_per_sample\n", - "\n", - " with open(bin_path, \"rb\") as f:\n", - " content = f.read()\n", - "\n", - " signal_bytes = content[-block_bytes:]\n", - "\n", - " data = np.frombuffer(signal_bytes, dtype=\" mil 변환\n", - "# =============================\n", - "def volt_to_mil(x, y, mil_per_volt=10.0):\n", - " x_ac = x - x.mean()\n", - " y_ac = y - y.mean()\n", - " return x_ac * mil_per_volt, y_ac * mil_per_volt\n", - "\n", - "\n", - "# =============================\n", - "# 4) Orbit 이미지 저장\n", - "# =============================\n", - "def save_orbit_images_for_pair(x_mil,\n", - " y_mil,\n", - " rcp_name=\"RCP1A\",\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " seconds_per_img=1,\n", - " axis_lim_mil=5.0,\n", - " base_out_dir=\"output\"):\n", - "\n", - " rcp_dir = os.path.join(base_out_dir, rcp_name)\n", - " os.makedirs(rcp_dir, exist_ok=True)\n", - "\n", - " samples_per_img = fs * seconds_per_img\n", - " num_imgs = duration_sec // seconds_per_img\n", - "\n", - " x_min, x_max = -axis_lim_mil, axis_lim_mil\n", - " y_min, y_max = -axis_lim_mil, axis_lim_mil\n", - "\n", - " for i in range(num_imgs):\n", - " s = i * samples_per_img\n", - " e = (i + 1) * samples_per_img\n", - "\n", - " seg_x = x_mil[s:e]\n", - " seg_y = y_mil[s:e]\n", - "\n", - " plt.figure(figsize=(4, 4))\n", - " plt.scatter(seg_x, seg_y, s=0.1)\n", - " plt.title(f\"{rcp_name} Orbit (sec {i})\")\n", - " plt.xlabel(\"X [mil]\")\n", - " plt.ylabel(\"Y [mil]\")\n", - " plt.xlim(x_min, x_max)\n", - " plt.ylim(y_min, y_max)\n", - " plt.gca().set_aspect(\"equal\", \"box\")\n", - " plt.grid(True, alpha=0.2)\n", - "\n", - " fpath = os.path.join(rcp_dir, f\"orbit_{rcp_name}_sec{i}.png\")\n", - " plt.savefig(fpath, dpi=150, bbox_inches=\"tight\")\n", - " plt.close()\n", - "\n", - "\n", - "# =============================\n", - "# 5) BIN 하나 처리\n", - "# =============================\n", - "def process_bin(bin_path,\n", - " out_root=\"output_orbits\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10):\n", - "\n", - " bin_name = os.path.splitext(os.path.basename(bin_path))[0]\n", - " base_out_dir = os.path.join(out_root, bin_name)\n", - " os.makedirs(base_out_dir, exist_ok=True)\n", - "\n", - " print(f\"Processing BIN → {bin_path}\")\n", - "\n", - " data = parse_bin_legacy(bin_path, fs=fs, duration_sec=duration_sec)\n", - "\n", - " target_pairs = [(4, 6), (10, 12), (16, 18), (22, 24)]\n", - " xy_pairs = extract_xy_pairs_legacy(data, target_pairs)\n", - "\n", - " rcp_names = [\"RCP1A\", \"RCP1B\", \"RCP2A\", \"RCP2B\"]\n", - "\n", - " for i, (x, y) in enumerate(xy_pairs):\n", - " rcp_name = rcp_names[i]\n", - " x_mil, y_mil = volt_to_mil(x, y, mil_per_volt=mil_per_volt)\n", - "\n", - " save_orbit_images_for_pair(\n", - " x_mil, y_mil,\n", - " rcp_name=rcp_name,\n", - " fs=fs,\n", - " duration_sec=duration_sec,\n", - " seconds_per_img=1,\n", - " axis_lim_mil=5.0,\n", - " base_out_dir=base_out_dir\n", - " )\n", - "\n", - " print(f\"✔ 완료: {bin_name}\")\n", - "\n", - "\n", - "# =============================\n", - "# 6) 폴더 전체 병렬 처리\n", - "# =============================\n", - "def process_folder(folder_path,\n", - " out_root=\"output_orbits\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10):\n", - "\n", - " os.makedirs(out_root, exist_ok=True)\n", - " pattern = os.path.join(folder_path, \"*.BIN\")\n", - " bin_files = sorted(glob.glob(pattern))\n", - "\n", - " if not bin_files:\n", - " print(\"폴더 안에 .BIN 파일이 없습니다:\", folder_path)\n", - " return\n", - "\n", - " print(f\"총 {len(bin_files)}개의 BIN 파일 → 병렬 처리 시작\")\n", - "\n", - " # CPU 코어 개수만큼 병렬 처리\n", - " num_workers = mp.cpu_count()\n", - " print(f\"사용할 프로세스 수: {num_workers}\")\n", - "\n", - " pool_inputs = [\n", - " (bin_path, out_root, mil_per_volt, fs, duration_sec)\n", - " for bin_path in bin_files\n", - " ]\n", - "\n", - " with mp.Pool(num_workers) as pool:\n", - " pool.starmap(process_bin, pool_inputs)\n", - "\n", - " print(\"🎉 모든 BIN 처리 완료!\")\n", - "\n", - "\n", - "# =============================\n", - "# 실행 예시\n", - "# =============================\n", - "if __name__ == \"__main__\":\n", - " normal_folder = \"../5기(25-2)/BKG_1/정상(Pk 1mils 이내 데이터)\"\n", - " process_folder(normal_folder)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a9d92a5b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[normal] 폴더: 82개 BIN 처리 시작\n", - "Processing BIN: RCPVMS_BKG_251113201603886 (label=normal)\n", - " → done: RCPVMS_BKG_251113201603886\n", - "Processing BIN: RCPVMS_BKG_251113201808887 (label=normal)\n", - " → done: RCPVMS_BKG_251113201808887\n", - "Processing BIN: RCPVMS_BKG_251113202013886 (label=normal)\n", - " → done: RCPVMS_BKG_251113202013886\n", - "Processing BIN: RCPVMS_BKG_251113202218876 (label=normal)\n", - " → done: RCPVMS_BKG_251113202218876\n", - "Processing BIN: RCPVMS_BKG_251113202423878 (label=normal)\n", - " → done: RCPVMS_BKG_251113202423878\n", - "Processing BIN: RCPVMS_BKG_251113202628910 (label=normal)\n", - " → done: RCPVMS_BKG_251113202628910\n", - "Processing BIN: RCPVMS_BKG_251113202833873 (label=normal)\n", - " → done: RCPVMS_BKG_251113202833873\n", - "Processing BIN: RCPVMS_BKG_251113203038876 (label=normal)\n", - " → done: RCPVMS_BKG_251113203038876\n", - "Processing BIN: RCPVMS_BKG_251113203243883 (label=normal)\n", - " → done: RCPVMS_BKG_251113203243883\n", - "Processing BIN: RCPVMS_BKG_251113203448876 (label=normal)\n", - " → done: RCPVMS_BKG_251113203448876\n", - "Processing BIN: RCPVMS_BKG_251113203653987 (label=normal)\n", - " → done: RCPVMS_BKG_251113203653987\n", - "Processing BIN: RCPVMS_BKG_251113203858896 (label=normal)\n", - " → done: RCPVMS_BKG_251113203858896\n", - "Processing BIN: RCPVMS_BKG_251113204103907 (label=normal)\n", - " → done: RCPVMS_BKG_251113204103907\n", - "Processing BIN: RCPVMS_BKG_251113204308872 (label=normal)\n", - " → done: RCPVMS_BKG_251113204308872\n", - "Processing BIN: RCPVMS_BKG_251113204513874 (label=normal)\n", - " → done: RCPVMS_BKG_251113204513874\n", - "Processing BIN: RCPVMS_BKG_251113204718874 (label=normal)\n", - " → done: RCPVMS_BKG_251113204718874\n", - "Processing BIN: RCPVMS_BKG_251113204923867 (label=normal)\n", - " → done: RCPVMS_BKG_251113204923867\n", - "Processing BIN: RCPVMS_BKG_251113205128856 (label=normal)\n", - " → done: RCPVMS_BKG_251113205128856\n", - "Processing BIN: RCPVMS_BKG_251113205333873 (label=normal)\n", - " → done: RCPVMS_BKG_251113205333873\n", - "Processing BIN: RCPVMS_BKG_251113205538865 (label=normal)\n", - " → done: RCPVMS_BKG_251113205538865\n", - "Processing BIN: RCPVMS_BKG_251113205743900 (label=normal)\n", - " → done: RCPVMS_BKG_251113205743900\n", - "Processing BIN: RCPVMS_BKG_251113205948859 (label=normal)\n", - " → done: RCPVMS_BKG_251113205948859\n", - "Processing BIN: RCPVMS_BKG_251113210153866 (label=normal)\n", - " → done: RCPVMS_BKG_251113210153866\n", - "Processing BIN: RCPVMS_BKG_251113210358856 (label=normal)\n", - " → done: RCPVMS_BKG_251113210358856\n", - "Processing BIN: RCPVMS_BKG_251113210603854 (label=normal)\n", - " → done: RCPVMS_BKG_251113210603854\n", - "Processing BIN: RCPVMS_BKG_251113210808866 (label=normal)\n", - " → done: RCPVMS_BKG_251113210808866\n", - "Processing BIN: RCPVMS_BKG_251113211013888 (label=normal)\n", - " → done: RCPVMS_BKG_251113211013888\n", - "Processing BIN: RCPVMS_BKG_251113211218866 (label=normal)\n", - " → done: RCPVMS_BKG_251113211218866\n", - "Processing BIN: RCPVMS_BKG_251113211423855 (label=normal)\n", - " → done: RCPVMS_BKG_251113211423855\n", - "Processing BIN: RCPVMS_BKG_251113211628857 (label=normal)\n", - " → done: RCPVMS_BKG_251113211628857\n", - "Processing BIN: RCPVMS_BKG_251113211833854 (label=normal)\n", - " → done: RCPVMS_BKG_251113211833854\n", - "Processing BIN: RCPVMS_BKG_251113212038844 (label=normal)\n", - " → done: RCPVMS_BKG_251113212038844\n", - "Processing BIN: RCPVMS_BKG_251113212243852 (label=normal)\n", - " → done: RCPVMS_BKG_251113212243852\n", - "Processing BIN: RCPVMS_BKG_251113212448843 (label=normal)\n", - " → done: RCPVMS_BKG_251113212448843\n", - "Processing BIN: RCPVMS_BKG_251113212653875 (label=normal)\n", - " → done: RCPVMS_BKG_251113212653875\n", - "Processing BIN: RCPVMS_BKG_251113212858844 (label=normal)\n", - " → done: RCPVMS_BKG_251113212858844\n", - "Processing BIN: RCPVMS_BKG_251113213103840 (label=normal)\n", - " → done: RCPVMS_BKG_251113213103840\n", - "Processing BIN: RCPVMS_BKG_251113213308881 (label=normal)\n", - " → done: RCPVMS_BKG_251113213308881\n", - "Processing BIN: RCPVMS_BKG_251113213513841 (label=normal)\n", - " → done: RCPVMS_BKG_251113213513841\n", - "Processing BIN: RCPVMS_BKG_251113213718843 (label=normal)\n", - " → done: RCPVMS_BKG_251113213718843\n", - "Processing BIN: RCPVMS_BKG_251113213923835 (label=normal)\n", - " → done: RCPVMS_BKG_251113213923835\n", - "Processing BIN: RCPVMS_BKG_251113214128842 (label=normal)\n", - " → done: RCPVMS_BKG_251113214128842\n", - "Processing BIN: RCPVMS_BKG_251113214333853 (label=normal)\n", - " → done: RCPVMS_BKG_251113214333853\n", - "Processing BIN: RCPVMS_BKG_251113214538841 (label=normal)\n", - " → done: RCPVMS_BKG_251113214538841\n", - "Processing BIN: RCPVMS_BKG_251113214743842 (label=normal)\n", - " → done: RCPVMS_BKG_251113214743842\n", - "Processing BIN: RCPVMS_BKG_251113214948832 (label=normal)\n", - " → done: RCPVMS_BKG_251113214948832\n", - "Processing BIN: RCPVMS_BKG_251113215153836 (label=normal)\n", - " → done: RCPVMS_BKG_251113215153836\n", - "Processing BIN: RCPVMS_BKG_251113215358862 (label=normal)\n", - " → done: RCPVMS_BKG_251113215358862\n", - "Processing BIN: RCPVMS_BKG_251113215603824 (label=normal)\n", - " → done: RCPVMS_BKG_251113215603824\n", - "Processing BIN: RCPVMS_BKG_251113215808888 (label=normal)\n", - " → done: RCPVMS_BKG_251113215808888\n", - "Processing BIN: RCPVMS_BKG_251113220013843 (label=normal)\n", - " → done: RCPVMS_BKG_251113220013843\n", - "Processing BIN: RCPVMS_BKG_251113220218827 (label=normal)\n", - " → done: RCPVMS_BKG_251113220218827\n", - "Processing BIN: RCPVMS_BKG_251113220423837 (label=normal)\n", - " → done: RCPVMS_BKG_251113220423837\n", - "Processing BIN: RCPVMS_BKG_251113220628833 (label=normal)\n", - " → done: RCPVMS_BKG_251113220628833\n", - "Processing BIN: RCPVMS_BKG_251113220833844 (label=normal)\n", - " → done: RCPVMS_BKG_251113220833844\n", - "Processing BIN: RCPVMS_BKG_251113221038834 (label=normal)\n", - " → done: RCPVMS_BKG_251113221038834\n", - "Processing BIN: RCPVMS_BKG_251113221243854 (label=normal)\n", - " → done: RCPVMS_BKG_251113221243854\n", - "Processing BIN: RCPVMS_BKG_251113221448824 (label=normal)\n", - " → done: RCPVMS_BKG_251113221448824\n", - "Processing BIN: RCPVMS_BKG_251113221653826 (label=normal)\n", - " → done: RCPVMS_BKG_251113221653826\n", - "Processing BIN: RCPVMS_BKG_251113221858820 (label=normal)\n", - " → done: RCPVMS_BKG_251113221858820\n", - "Processing BIN: RCPVMS_BKG_251113222103833 (label=normal)\n", - " → done: RCPVMS_BKG_251113222103833\n", - "Processing BIN: RCPVMS_BKG_251113222308836 (label=normal)\n", - " → done: RCPVMS_BKG_251113222308836\n", - "Processing BIN: RCPVMS_BKG_251113222513822 (label=normal)\n", - " → done: RCPVMS_BKG_251113222513822\n", - "Processing BIN: RCPVMS_BKG_251113222718826 (label=normal)\n", - " → done: RCPVMS_BKG_251113222718826\n", - "Processing BIN: RCPVMS_BKG_251113222923820 (label=normal)\n", - " → done: RCPVMS_BKG_251113222923820\n", - "Processing BIN: RCPVMS_BKG_251113223128838 (label=normal)\n", - " → done: RCPVMS_BKG_251113223128838\n", - "Processing BIN: RCPVMS_BKG_251113223333822 (label=normal)\n", - " → done: RCPVMS_BKG_251113223333822\n", - "Processing BIN: RCPVMS_BKG_251113223538854 (label=normal)\n", - " → done: RCPVMS_BKG_251113223538854\n", - "Processing BIN: RCPVMS_BKG_251113223743836 (label=normal)\n", - " → done: RCPVMS_BKG_251113223743836\n", - "Processing BIN: RCPVMS_BKG_251113223948826 (label=normal)\n", - " → done: RCPVMS_BKG_251113223948826\n", - "Processing BIN: RCPVMS_BKG_251113224153813 (label=normal)\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[1], line 206\u001b[0m\n\u001b[0;32m 203\u001b[0m dataset_root \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124morbit_dataset\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;66;03m# 최종 학습용 이미지 폴더 루트\u001b[39;00m\n\u001b[0;32m 205\u001b[0m \u001b[38;5;66;03m# 정상 BIN → dataset_root/normal/*.png\u001b[39;00m\n\u001b[1;32m--> 206\u001b[0m process_folder_to_dataset(\n\u001b[0;32m 207\u001b[0m normal_bin_folder,\n\u001b[0;32m 208\u001b[0m label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnormal\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 209\u001b[0m out_root\u001b[38;5;241m=\u001b[39mdataset_root,\n\u001b[0;32m 210\u001b[0m img_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m128\u001b[39m,\n\u001b[0;32m 211\u001b[0m axis_lim_mil\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10.0\u001b[39m\n\u001b[0;32m 212\u001b[0m )\n\u001b[0;32m 214\u001b[0m \u001b[38;5;66;03m# 비정상 BIN → dataset_root/abnormal/*.png\u001b[39;00m\n\u001b[0;32m 215\u001b[0m process_folder_to_dataset(\n\u001b[0;32m 216\u001b[0m abnormal_bin_folder,\n\u001b[0;32m 217\u001b[0m label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mabnormal\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 220\u001b[0m axis_lim_mil\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10.0\u001b[39m\n\u001b[0;32m 221\u001b[0m )\n", - "Cell \u001b[1;32mIn[1], line 181\u001b[0m, in \u001b[0;36mprocess_folder_to_dataset\u001b[1;34m(bin_folder, label, out_root, mil_per_volt, fs, duration_sec, img_size, axis_lim_mil)\u001b[0m\n\u001b[0;32m 178\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlabel\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] 폴더: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(bin_files)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m개 BIN 처리 시작\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 180\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m bin_path \u001b[38;5;129;01min\u001b[39;00m bin_files:\n\u001b[1;32m--> 181\u001b[0m process_bin_to_images(\n\u001b[0;32m 182\u001b[0m bin_path,\n\u001b[0;32m 183\u001b[0m label\u001b[38;5;241m=\u001b[39mlabel,\n\u001b[0;32m 184\u001b[0m out_root\u001b[38;5;241m=\u001b[39mout_root,\n\u001b[0;32m 185\u001b[0m mil_per_volt\u001b[38;5;241m=\u001b[39mmil_per_volt,\n\u001b[0;32m 186\u001b[0m fs\u001b[38;5;241m=\u001b[39mfs,\n\u001b[0;32m 187\u001b[0m duration_sec\u001b[38;5;241m=\u001b[39mduration_sec,\n\u001b[0;32m 188\u001b[0m img_size\u001b[38;5;241m=\u001b[39mimg_size,\n\u001b[0;32m 189\u001b[0m axis_lim_mil\u001b[38;5;241m=\u001b[39maxis_lim_mil\n\u001b[0;32m 190\u001b[0m )\n\u001b[0;32m 192\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlabel\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] 폴더 처리 완료\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "Cell \u001b[1;32mIn[1], line 144\u001b[0m, in \u001b[0;36mprocess_bin_to_images\u001b[1;34m(bin_path, label, out_root, mil_per_volt, fs, duration_sec, img_size, axis_lim_mil)\u001b[0m\n\u001b[0;32m 141\u001b[0m seg_x \u001b[38;5;241m=\u001b[39m x_mil[s:e]\n\u001b[0;32m 142\u001b[0m seg_y \u001b[38;5;241m=\u001b[39m y_mil[s:e]\n\u001b[1;32m--> 144\u001b[0m grid \u001b[38;5;241m=\u001b[39m orbit_to_grid(seg_x, seg_y,\n\u001b[0;32m 145\u001b[0m axis_lim\u001b[38;5;241m=\u001b[39maxis_lim_mil,\n\u001b[0;32m 146\u001b[0m img_size\u001b[38;5;241m=\u001b[39mimg_size)\n\u001b[0;32m 148\u001b[0m img \u001b[38;5;241m=\u001b[39m Image\u001b[38;5;241m.\u001b[39mfromarray(grid, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;66;03m# grayscale\u001b[39;00m\n\u001b[0;32m 149\u001b[0m fname \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbin_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrcp_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m_sec\u001b[39m\u001b[38;5;132;01m{\u001b[39;00msec\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.png\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", - "Cell \u001b[1;32mIn[1], line 86\u001b[0m, in \u001b[0;36morbit_to_grid\u001b[1;34m(x_mil, y_mil, axis_lim, img_size)\u001b[0m\n\u001b[0;32m 84\u001b[0m \u001b[38;5;66;03m# y가 row, x가 col\u001b[39;00m\n\u001b[0;32m 85\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m xi, yi \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(x_idx, y_idx):\n\u001b[1;32m---> 86\u001b[0m grid[yi, xi] \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1.0\u001b[39m\n\u001b[0;32m 88\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m grid\u001b[38;5;241m.\u001b[39mmax() \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 89\u001b[0m grid \u001b[38;5;241m=\u001b[39m grid \u001b[38;5;241m/\u001b[39m grid\u001b[38;5;241m.\u001b[39mmax() \u001b[38;5;66;03m# 0~1 정규화\u001b[39;00m\n", - "\u001b[1;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "import os\n", - "import glob\n", - "import numpy as np\n", - "from PIL import Image\n", - "\n", - "\n", - "# =============================\n", - "# 1) BIN 파싱 (이전 기수 방식)\n", - "# =============================\n", - "def parse_bin_legacy(bin_path,\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " num_channels=24,\n", - " bytes_per_sample=4):\n", - " \"\"\"\n", - " 파일 맨 끝에서 24채널 × 10초 데이터를 잘라 읽는다.\n", - " dtype: float32 little-endian\n", - " 반환: (24, 400000)\n", - " \"\"\"\n", - " num_samples_total = fs * duration_sec\n", - " block_bytes = num_channels * num_samples_total * bytes_per_sample\n", - "\n", - " with open(bin_path, \"rb\") as f:\n", - " content = f.read()\n", - "\n", - " signal_bytes = content[-block_bytes:]\n", - " data = np.frombuffer(signal_bytes, dtype=\" mil 변환\n", - "# =============================\n", - "def volt_to_mil(x, y, mil_per_volt=10.0):\n", - " \"\"\"\n", - " 평균 제거 + mil 변환\n", - " (지시서: 1 V = 10 mils)\n", - " \"\"\"\n", - " x_ac = x - x.mean()\n", - " y_ac = y - y.mean()\n", - " return x_ac * mil_per_volt, y_ac * mil_per_volt\n", - "\n", - "\n", - "# =============================\n", - "# 4) orbit를 2D grid 이미지로 변환\n", - "# =============================\n", - "def orbit_to_grid(x_mil,\n", - " y_mil,\n", - " axis_lim=10.0,\n", - " img_size=128):\n", - " \"\"\"\n", - " [-axis_lim, axis_lim] mil 구간을 img_size×img_size grid로 매핑.\n", - " 빈도(count)를 밝기로 사용하는 grayscale 이미지 생성.\n", - " \"\"\"\n", - " # [-axis_lim, axis_lim] -> [0, img_size-1]\n", - " x_norm = (x_mil + axis_lim) / (2 * axis_lim) * (img_size - 1)\n", - " y_norm = (y_mil + axis_lim) / (2 * axis_lim) * (img_size - 1)\n", - "\n", - " x_idx = np.clip(x_norm.astype(int), 0, img_size - 1)\n", - " y_idx = np.clip(y_norm.astype(int), 0, img_size - 1)\n", - "\n", - " grid = np.zeros((img_size, img_size), dtype=np.float32)\n", - " # y가 row, x가 col\n", - " for xi, yi in zip(x_idx, y_idx):\n", - " grid[yi, xi] += 1.0\n", - "\n", - " if grid.max() > 0:\n", - " grid = grid / grid.max() # 0~1 정규화\n", - "\n", - " # 0~255 uint8로 변환\n", - " grid_uint8 = (grid * 255).astype(np.uint8)\n", - " return grid_uint8\n", - "\n", - "\n", - "# =============================\n", - "# 5) BIN 하나 → 여러 orbit 이미지로\n", - "# =============================\n", - "def process_bin_to_images(bin_path,\n", - " label, # \"normal\" 또는 \"abnormal\"\n", - " out_root=\"dataset\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " img_size=128,\n", - " axis_lim_mil=10.0):\n", - " \"\"\"\n", - " BIN 하나에서 4개 RCP × 10초 = 최대 40장 orbit 이미지 생성.\n", - " 저장 위치: out_root / label / [bin]_[RCP]_[sec].png\n", - " \"\"\"\n", - " # 출력 폴더: dataset_root/normal 또는 dataset_root/abnormal\n", - " class_dir = os.path.join(out_root, label)\n", - " os.makedirs(class_dir, exist_ok=True)\n", - "\n", - " bin_name = os.path.splitext(os.path.basename(bin_path))[0]\n", - " print(f\"Processing BIN: {bin_name} (label={label})\")\n", - "\n", - " # 1) 파싱\n", - " data = parse_bin_legacy(bin_path, fs=fs, duration_sec=duration_sec)\n", - "\n", - " # 2) XY 페어 4쌍 추출\n", - " target_pairs = [(4, 6), (10, 12), (16, 18), (22, 24)]\n", - " xy_pairs = extract_xy_pairs_legacy(data, target_pairs)\n", - "\n", - " # RCP 이름(이름은 파일명에만 쓰이고 라벨링에는 영향 없음)\n", - " rcp_names = [\"RCP1A\", \"RCP1B\", \"RCP2A\", \"RCP2B\"]\n", - "\n", - " samples_per_sec = fs # 1초 = 40000 샘플\n", - "\n", - " for rcp_idx, (x, y) in enumerate(xy_pairs):\n", - " rcp_name = rcp_names[rcp_idx]\n", - "\n", - " # Volt -> mil (AC 성분)\n", - " x_mil, y_mil = volt_to_mil(x, y, mil_per_volt=mil_per_volt)\n", - "\n", - " # 10초를 1초씩 잘라서 10장 생성\n", - " for sec in range(duration_sec):\n", - " s = sec * samples_per_sec\n", - " e = (sec + 1) * samples_per_sec\n", - "\n", - " seg_x = x_mil[s:e]\n", - " seg_y = y_mil[s:e]\n", - "\n", - " grid = orbit_to_grid(seg_x, seg_y,\n", - " axis_lim=axis_lim_mil,\n", - " img_size=img_size)\n", - "\n", - " img = Image.fromarray(grid, mode=\"L\") # grayscale\n", - " fname = f\"{bin_name}_{rcp_name}_sec{sec}.png\"\n", - " fpath = os.path.join(class_dir, fname)\n", - " img.save(fpath)\n", - "\n", - " print(f\" → done: {bin_name}\")\n", - "\n", - "\n", - "# =============================\n", - "# 6) 폴더 전체 처리\n", - "# =============================\n", - "def process_folder_to_dataset(bin_folder,\n", - " label, # \"normal\" or \"abnormal\"\n", - " out_root=\"dataset\",\n", - " mil_per_volt=10.0,\n", - " fs=40_000,\n", - " duration_sec=10,\n", - " img_size=128,\n", - " axis_lim_mil=10.0):\n", - " \"\"\"\n", - " bin_folder 안의 모든 .BIN을 읽어서\n", - " out_root/label/ 밑에 이미지로 저장.\n", - " \"\"\"\n", - " pattern = os.path.join(bin_folder, \"*.BIN\")\n", - " bin_files = sorted(glob.glob(pattern))\n", - "\n", - " if not bin_files:\n", - " print(\"BIN 파일이 없습니다:\", bin_folder)\n", - " return\n", - "\n", - " print(f\"[{label}] 폴더: {len(bin_files)}개 BIN 처리 시작\")\n", - "\n", - " for bin_path in bin_files:\n", - " process_bin_to_images(\n", - " bin_path,\n", - " label=label,\n", - " out_root=out_root,\n", - " mil_per_volt=mil_per_volt,\n", - " fs=fs,\n", - " duration_sec=duration_sec,\n", - " img_size=img_size,\n", - " axis_lim_mil=axis_lim_mil\n", - " )\n", - "\n", - " print(f\"[{label}] 폴더 처리 완료\")\n", - "\n", - "\n", - "# =============================\n", - "# 7) 실행 예시\n", - "# =============================\n", - "if __name__ == \"__main__\":\n", - " # 정상/비정상 BIN 폴더 경로\n", - " normal_bin_folder = r\"../5기(25-2)/BKG_1/정상(Pk 1mils 이내 데이터)\"\n", - " abnormal_bin_folder = r\"../5기(25-2)/BKG_1/비정상(Pk 1mils 이상 데이터)\" # 예시\n", - "\n", - " dataset_root = \"orbit_dataset\" # 최종 학습용 이미지 폴더 루트\n", - "\n", - " # 정상 BIN → dataset_root/normal/*.png\n", - " process_folder_to_dataset(\n", - " normal_bin_folder,\n", - " label=\"normal\",\n", - " out_root=dataset_root,\n", - " img_size=128,\n", - " axis_lim_mil=10.0\n", - " )\n", - "\n", - " # 비정상 BIN → dataset_root/abnormal/*.png\n", - " process_folder_to_dataset(\n", - " abnormal_bin_folder,\n", - " label=\"abnormal\",\n", - " out_root=dataset_root,\n", - " img_size=128,\n", - " axis_lim_mil=10.0\n", - " )\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}