Work

태아심박동 영상 비식별화 자동화

Automating de-identification of fetal heart-rate scans

약 2.5만 장 1주 처리. 몇 달짜리로 잡혀 있던 태아심박동 영상의 그래프 추출과 환자 정보 마스킹을 OCR과 컨투어 기반 Python 코드로 자동화한 NIA 과제 데이터관리 실무.

한 장씩 편집하던 스캔 이미지를 픽셀과 패턴 인식 문제로 재정의

문제

영상기획 스타트업을 그만둔 뒤, 의료정보학 랩에서 박사과정 중이던 MD 지인의 추천으로 NIA 과제 기간직 자리를 받았다. 들어가 본격적으로 맡은 첫 일이 2022년 NIA 태아심박동 과제의 데이터관리 실무였다.

환자 정보 비식별화, 임상정보 키 해시화, 데이터 관리가 묶음으로 들어 있었다. 그 중 처음 떨어진 구체적 과업은 약 2.5만 장의 태아심박동 영상(대부분 스캔본)에서 그래프 영역만 일정하게 잘라내고, 환자 정보가 든 영역을 마스킹하는 일이었다. 처음에는 “이미지 편집 툴로 한 장씩 작업하면 된다”는 설명이 깔려 있었다.

제약

  • 한 장에 30초만 잡아도 약 2.5만 장이면 몇 달이 걸리는 분량
  • 인력은 한 명
  • 시기상 ChatGPT 이전이라 LLM 도구의 도움은 받을 수 없었다
  • 내 배경은 소프트웨어 부전공과 기초 Python 정도 — 개발자라고 부를 만한 수준은 아니었다

내가 처음 본 핵심

이 작업의 본질은 판단이 아니라 반복적인 패턴 매칭이다. 이미지는 픽셀로 이루어진 데이터이고, 그래프와 환자 정보 텍스트의 위치에 일정한 패턴이 있어 코드로 다룰 수 있는 문제였다.

내가 한 선택

이미지 편집을 그만두고 Python으로 풀기로 했다. OCR 관련 함수를 구글링으로 익혔고, 그래프 영역을 검출하기 위해 컨투어(contour)가 무엇인지부터 공부했다. 검출한 그래프 영역을 원본보다 조금 더 큰 범위로 크롭해 여백과 노이즈가 남지 않게 했고, 그래프 바깥에 남는 텍스트는 모두 마스킹하도록 처리했다.

코드를 익히고 작성하는 데 약 1주. 실제 실행은 몇 시간이면 끝났다.

결과

원래 몇 달짜리로 잡혀 있던 일이 약 1주에 마무리됐다.

나는 국책과제 기간직으로 데이터실무를 하러 들어온 자리였고, 잘 해낼 수 있을까 스스로 자신이 없던 시기였다. 이 일을 본 PI는 NIA 과제 외에 드라이랩에서 빅데이터 연구도 함께 해주길 원했고, 그것이 의료정보학 대학원 진학으로 이어졌다.

이 사례가 보여주는 것

이미지를 픽셀로 다룰 수 있다는 시각은 컴퓨터에 익숙한 사람에게는 자연스럽지만, 의학·임상에 기반을 둔 쪽에서는 익숙하지 않은 사고이고 쉽게 떠오르는 종류의 발상이 아니다. 양쪽의 거리는 누구의 잘못도 아니다. 다만 그 사이에 누군가 서면, 막혀 있던 흐름이 풀리는 자리가 있어 보였다.

나는 완전한 개발자도 아니고 완전한 의료인도 아니지만, 여러 영역에 걸쳐 있는 사람으로서 양쪽의 어려움을 이해하며 그 사이에서 도움이 되고 싶다는 생각을 이때 처음 했다. 그 자각이 이후 일하는 방식의 뼈대가 됐다.