본문 바로가기

Dev.../alfresco

Alfresco에 새로운 MIME타입을 추가하여, 의료영상정보 DICOM 파일을 관리하기...

요즘 Alfresco의 매력에 푸욱 빠져있다는... 개인적으로 관심이 있는 의료영상정보를 볼 수 있게 하는 타입을 하나 늘려봤네요. 

이 Alfresco의 장점을 몇가지 이야기해보겠습니다.

1. 공짜버전도 있습니다. ~.~ 오픈소스기반이기 때문에 필요하면 Web상의 기능을 모두 바꿀 수 있습니다.

2. 웹상에서 디지털자료에 대해서 버전관리를 하고, 특정 목적에 맞도록 카테고리 구분이 가능합니다.

3. Office를 비롯해서, 웬만한 이미지 파일은 대부분 Preview를 지원합니다. 필요하다면, 이 포스팅처럼 DICOM파일을 보여줄 수 있는 기능도 손쉽게 붙일 수 있습니다.

4. jBPM의 워크플로우 기능을 활용하면 제안서모음이나, 논문작성들에 필요한 내용들을 별도로 관리하기 좋습니다.

5. 출판사의 저자들이 자신의 저작물을 관리하는 용도로도 괜찮을 듯 합니다.

6. SVN과 같은 버전컨트롤 시스템은 프로그래머들에게는 익숙하지만, 일반인들에게는 사용하기 좀 어렵습니다. 하지만, 똑같은 개념으로 디지털 문서에 대해서 관리가 가능합니다. Word파일을 업로드하고, 해당 파일을 버전관리하면서 업그레이드한다던지, 공동 작업할때에 Lock을 걸어둔다든디, 해당 문서를 특정 플로우로 review를 하게 한다던지 하는 것들이 가능합니다.

7. Lucene의 강력한 검색기능 ( 한글은 안되지만.. )은 의료진의 내부관리에도 좋습니다. 의료영상정보도 가능합니다.

8. 의료기관내에서 간호팀이나 원무팀등에서 필요로 하는 디지털 컨텐츠들을 자유롭게 관리할 수 있습니다.

9. 과거 W병원시절에 몇억들여 만든 KMS시스템도 Alfresco의 기능에 비할바가 못되는 군요. ㅇ.ㅇ 작은 병원에서는 내부의 KMS의 Repository로 활용하셔도 매우 좋을듯 합니다.

Alfresco를 Repositoy로 구성하고, 그 위에 다양한 어플리케이션을 구축하는 것으로 매우 탁월하군요. 더군다나 아래의 구조를 보시면 아시겠지만, FTP, CIFS, WebDAV등의 다양한 파일시스템을 사용할 수 있습니다.

업로드된 컨텐츠를 특정 URI를 부착해서 트위터나, 페이스북, 구글+등에 보내는 것도 매우 손쉽습니다.

아예, GoogleDoc를 내부에서 문서를 만들고 하는 것도 간편하게 되있더군요. 그리고, 속도와 성능이 정말 고속입니다. 개인적으로 웹상에서 다양한 컨텐츠를 다루고 관리하는 용도로는 이 넘보다 더 강력한 녀석을 보지 못한것 같습니다.

구조가 매우 안정적이고, 디지털컨텐츠를 다루는 용도로써 그 활용가치가 매우 크다는 점이 정말 저의 시선을 잡아끌더군요.

  • 문서관리 (Document Management )
  • 웹 컨텐츠 관리 (Web Content Management )
  • 이미지 관리 (Image Management)
  • 기록 관리 (Records Management )
크게 기능은 위의 4가지라고 볼 수 있는데, 웹컨텐츠관리(WCM)은 웹개발을 할 경우에 내부에서 이미지화일을 관리하는 용도로 사용하는 것도 아주 괜찮다는 것을 확인해봤습니다.


  • JSF를 사용하여 UI 컴포넌트 재사용( MyFaces를 이용하여 재사용 가능함 )
  • JSR-170 사용 ( API집합 Java Content Repository - JCR )을 사용
    - 버전관리, 관찰, 잠금, SQL검색, 트랜잭션 기능 구현
  • jBPM을 사용 ( 다양한 비즈니스 프로세스 구현 가능 ), jPDL(jBPM Process Definition Language)를 통해 쉽게 정의 )
  • Apache의 Lucene의 검색엔진 및 인덱싱 기능 ( 단, 한글 형태소는 지원하지 않음 )
  • CIFS 지원 - 윈도우 탐색기로도 접근 가능함.
RSS와 RestFul, WebService등을 지원하니, 다양한 환경에서 Repositoy의 역활을 수행할 수 있는 점도 매우 매력적입니다. 

설치된 디렉토리를 확인해보면, 기본적으로 libreoffice가 보이고, postgresql, swftools가 보입니다. 이 녀석들은 Alfresco가 다양한 오피스문서나 PDF, 플래시파일을 처리할 수 있게 해준다는 것을 알 수 있구요. imagemagick은 대부분의 이미지파일들을 변환하거나 사용할 수 있게 해줍니다.

개인적으로 관심있는 의료영상정보 DICOM정보를 사용하기 위해서 dcm4che를 설치해서 의료영상정보를 관리할 수 있게 해봤습니다.

총 4개의 화일을 수정하거나 추가하시면 되더군요.

먼저, mimettype-map.xml에 새로운  mime타입을 추가합니다.

         <mimetype mimetype="image/dcm" display="DCM File">
            <extension>dcm</extension>
         </mimetype>

이렇게 하면 확장자가 DCM으로 들어오는 녀석을 Alfresco의 commadMap에 연결시켜주는 시작점이 되죠.

그리고, alfresco-global.properties에 해당 mime타입의 정보가 들어왔을때에 연결해줄 녀석을 추가합니다.

### External executable locations ###

dcm.root=F:\\alfresco\\dcm4che
dcm.exe=F:/alfresco/dcm4che/dcm22jpg.exe
.dcm의 확장자를 컨버팅해줄 녀석의 디렉토리와 실행화일을 설정합니다.

그리고, dcm-trasmform.properties 을 추가해서, 기본적인 파라메터 값들을 설정해줍니다. 특별한 것이 없다면, 생략해도 무방한듯 합니다.

# External executable locations
dcm.exe=F:/alfresco/dcm4che/dcm22jpg.exe

# This option on pdf2swf improves the transformation of graphics-heavy pdfs. See ALF-3580.
# poly2bitmap improves the chances of successful transformation. On its own it reduces
#   the resolution of embedded images. subpixels sets the dpi for embedded images.
#dcm.encoder.params=-s poly2bitmap -s subpixels=72
그리고, dcm-transform-context 을 추가하여서, 실제 commandMap을 구성하게 됩니다.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

   <bean id="transformer.worker.dcm22jpg" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker">
      <property name="mimetypeService">
         <ref bean="mimetypeService" />
      </property>
      <property name="checkCommand">
         <bean class="org.alfresco.util.exec.RuntimeExec">
            <property name="commandMap">
               <map>
                  <entry key=".*">
                     <value>${dcm.exe} -V</value>
                  </entry>
               </map>
            </property>
            <property name="errorCodes">
               <value>1</value>
            </property>
         </bean>
      </property>
      <property name="transformCommand">
         <bean class="org.alfresco.util.exec.RuntimeExec">
            <property name="commandMap">
               <map>
                  <entry key=".*">
                     <value>${dcm.exe} ${source} ${target}</value>
                  </entry>
               </map>
            </property>
            <property name="errorCodes">
               <value>1</value>
            </property>
         </bean>
      </property>
      <property name="explicitTransformations">
         <list>
            <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
               <property name="sourceMimetype">
                  <value>image/dcm</value>
               </property>
               <property name="targetMimetype">
                  <value>applicationd/jpg</value>
               </property>
            </bean>
            <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails">
               <property name="sourceMimetype">
                  <value>image/dcm</value>
               </property>
               <property name="targetMimetype">
                  <value>application/jpg</value>
               </property>
            </bean>
         </list>
      </property>
   </bean>

</beans>

일단은, 뭐 복잡한 것은 빼고, 단순하게 Source, Target을 맞추어서 Alfresco가 .dcm파일을 .jpg로 변환하게 하여서 보일 수 있게 하는 것이죠.

자 그렇게 하면, .dcm ( DICOM파일 )을 업로드하면... Alfresco가 의료영상정보를 이렇게 보여줍니다.

정말 쉽죠? ~.~

그 다음부터는 Alfresco의 디지털컨텐츠 능력을 즐기시면 됩니다. 개인적으로 의료기관 내부에서 의료영상정보를 관리하거나 임상자료의 정리용도로 활용을 하셔도 매우 좋을 듯합니다. 

당연하게도 jBPM이 들어있으니, review하는 워크플로우를 작성하거나, Lucene이 있으니 다양한 검색을 적용할 수 있으니, 의료기관내부에서 비싼 PACS를 사용하지 않더라도, 상당부분의 의료영상정보를 관리할 수 있다는 점이죠.

Alfresco의 내부를 보니, 필요하다면... DCM4CHE의 능력을 활용하고, .dcm -> .svg -> svgedit을 application mime타입을 이용하면, 간단한 web pacs viewer로 확장하는 것도 가능하겠더군요.

실제, 해외에서는 dcm4che를 활용해서 pacs archive로 사용하는 사례도 적지않으니, 아주 매력적입니다.

개원가에 계신분에게는 아주 쓸모있을 것 같습니다. ~.~ 당연하겠지만... 아는 산부인과 의사분께서 초음파로 출력되어진 태아의 사진을 프린터로 무료로 찍어주고 싶다고 하신다고 하는 용도로 활용하거나, 임상결과나 연구결과관리의 목적으로 활용하시기에도 어느정도 괜찮을 듯합니다.