Groovy 이미지 변환 코드

자바|2023. 7. 30. 18:13
728x90

현재 모처에서 대규모 문서 검색 시스템(50t 규모) 구축 프로젝트를 진행 중 이다.

고객의 요청으로 문서에서 이미지 추출 미리보기 기능이 필요 한데 외부 필터를 사용해 추출 하다 보니 이미지 포멧이 멋대로 나와 몇가지 처리가 필요 하다.

 

이미지 추출 -> 이미지 파일 정리(외부 도구가 몇개 이하 추출 제한이 없다(이미지 갯수 만큼 모두 추출)) 10개 이상 삭제 ->

이미지 변환 

 

프로세스가 필요 하다. 해당 프로세스는 대략 아래의 흐름(대충 예시로 만든거라 실제 만들면 더 많은 플로우나 기능 필요) 으로 진행 하면 된다.

뭐튼 중요한건 저게 아니고 이미지 처리를 해야 되다 보니 스크립트 실행이 필요 하게 되었다.

NIFI 자체에는 이미지 처리 프로세스가 없다.

 

처음에는 파이썬으로 executecommand(외부 실행 호출)를 통해 해결할려고 했으나 폐쇄망의 특성으로 인해 외부 whl이 필요 한데 os 버전 등 등이 막장이라 오히려 더 불편해지는 상황이 필요 해서 자바로 개발해서 통jar 실행 형태로 해결할려고 보던 도중 자바의 경우 간단한 변환 작업은 외부 import 없이 해결이 가능 했다.

 

외부 import가 필요 없다는거에서 착안 groovy 로 하면 되지 않을까 싶어서 간단히 짜봤더니 역시 된다.

아래는 나이파이 관련 내용은 없고 이미지 변환 내용만 있다. (나중에 수정)

 

테스트 구동 해본 결과 에러 없이 정상적으로 잘 변환 된다. 업무에 적용 후 스크립트는 나이파이용으로 변환 후 다시 기록 하겠다.

 

목적에 맞춰 발과 깃코파일럿으로 짯다. 엉성한거 잘알고 있다....


import javax.imageio.ImageIO
static void main(String[] args) {

    flowFile = session.get()
    if(!flowFile) return

    def dirPath = flowFile.getAttribute('dirPath')
    def file = new File(dirPath)
    def files = file.listFiles()

    for(f in files) {
        def splitFile = f.getName().split("\\.")

        if( splitFile[0].length() > 3)   {
            f.delete()
        }
        else
        {
            if(splitFile[1].toLowerCase().equals('bmp')){
                def image = ImageIO.read(f)
                ImageIO.write(image, "jpg", new File(dirPath + "/" + splitFile[0] + ".jpg"))
                f.delete()
            }
        }
    }

    flowFile = session.putAttribute(flowFile, "ImageTransferPath", dirPath)
    session.transfer(flowFile, REL_SUCCESS)
}

 

아래표는 읽어들일수 있는 이미지 타입들이다.

댓글()

NIFI 실행 방법 도커기반

빅데이터|2022. 12. 19. 15:31
728x90

2019~2020년도 하던 프로젝트에서 발굴 하여 많이 쓰다가 이후 이직과 함께 자연스럽게 폐기처분되었던 나이파이 이후 회사에서 장점 설명하면서 쓰자고 했지만 노관이여서 집에서 혼자하는 프로젝트에서 대충 쓰다가 다시 꺼내게 되었다. 

 

2년정도 텀은 있지만 크게 변한건 없는듯 하고 예전엔 맨땅에 노가다로 내가 다 만들었다면 지금은 템플릿이 많이 준비되어 있어서 흐름만 잘설계하면 된다.

 

일단 로컬이나 집에서 다시 연습을 하기 위해 설치부터 필요 하여 그때는 도커를 DB만 썻지만 지금은 다용도로 쓰는 만큼 역시 NIFI도 도커로 설치해보았다.

 

https://hub.docker.com/r/apache/nifi

방법은 크게 어렵지 않다.

docker pull apache/nifi
docker run --name nifi   -p 8443:8443   -d   apache/nifi:latest

이미지 받고 외부 접속 포트인 8443만 연결해주면 된다.

단 아이디 비밀번호가 자동생성 방식이라 확인이 필요 하다.

 

아래 명령어를 통해 쉽게 확인 가능 하다.

docker logs nifi | grep Generated

윈도우 기반일 경우 로그탭에서 확인 가능 하다.

해당 접속 꼭 nifi를 붙여주자 접속 로그인 하면 사용이 가능하다.

https://localhost:8443/nifi

 

최초 접속시 당연하지만 아무것도 없기에 횡하다.

'빅데이터' 카테고리의 다른 글

NIFI Attribute json Array 저장 방법  (0) 2023.07.20
NIFI Expression docs  (0) 2023.05.17
ambari 기반 HDP 3.1 설치 #2  (0) 2022.12.18
ambari 기반 HDP 3.1 설치 #1  (0) 2022.12.14
Cribl Stream Docker 설치 방법  (0) 2022.12.06

댓글()

예전에 만들었던 NIFI 데이터 흐름도

빅데이터|2022. 9. 30. 19:08
728x90

몇년전에 하던 프로젝트에서 썻던 나이파이 데이터 흐름도 이다. 로컬 파일 save, hdfs 파일 save, 엘라스틱 적재가 한번에 필요했던 프로젝트라 어떻게 할까 고민 하다가 나이파이 존재를 알게되어 급하게 공부해서 적용 했던 방법론

'빅데이터' 카테고리의 다른 글

NIFI 실행 방법 도커기반  (0) 2022.12.19
ambari 기반 HDP 3.1 설치 #2  (0) 2022.12.18
ambari 기반 HDP 3.1 설치 #1  (0) 2022.12.14
Cribl Stream Docker 설치 방법  (0) 2022.12.06
Cribl.io stream  (0) 2022.11.17

댓글()