전체 글 229

1. 심전도 분석에 관해

드라마에서 주인공이 사고를 당해 응급실에 실려가면 모니터로 심전도가 표시되는 광경을 많이 봤을 것이다. 일본의 한 건강관리 회사에서 심장부위에 부착을해서 24시간 심전도 데이터를 리얼타임으로 저장하는 디바이스를 가지고 측정자의 건강상태를 체크하는 프로그램을 작성한적이 있다. 이때 얻었던 심장에 관련된 건강 지식을 공유하고 파이선 프로그램으로 구현하고자 한다. 일단, 심전도를 ECG(electrocardiogram) 또는 EKG 라고 한다. ECG를 분석해서 병이 있다고 단언하는 것은 의료 행위이므로 위법이다. 단순히 데이터를 분석해서 어드바이스하는 수준으로 끝나야 할 것이다. 일단 ECG의 형태와 어떻게 생성되는지 알아보자. 일단 심장의 박동은 좌심방(Left atria) 에서 전기 신호가 발생되면 시작..

공백 메우기

왼쪽과 같은 b/w 이미지를 오른쪽과 같이 공백을 메우는 방법을 OpenCV로 알아보자.아울러 아래의 기법도 확실히 알아두기로 하자.findNonZero 함수를 이용한 흰픽셀의 좌표얻기convexHull 함수를 이용한 어바우트한 윤곽 포인트 획득 이미지를 그레이스케일 변환하여 읽어 들이고 10 을 기준으로 b/w 변환한다. cv::Mat inputImage = cv::imread("input.jpg", CV_LOAD_IMAGE_GRAYSCALE); cv::threshold(inputImage, inputImage, 10, 255, 0); b/w 이미지내에서 흰색픽셀의 좌표를 찾아내서 Mat 안에 보관cv::Mat nonZeroCoordinates; cv::findNonZero(inputImage, non..

opencv 2023.12.02

b/w 이미지의 칼럼(수직방향)별 검정(=0)픽셀수 카운트

이미지에 있어서 검은 테두리 부분을 제거 하는 등을 위해서는 각 로우별, 칼럼별로 검은 픽셀수를 카운트하여 어느 threshold 치 이상인 경우에는 처리하는 로직등의 경우에 아래 코드가 유용하게 사용할 수 있을 것 같다. 아래코드는 수직방향인 칼럼의 검정픽셀수를 계산한다. 각 로별의 검정픽셀수도 응용할 수 있으리라 본다. // GRAY인 경우에는 읽어들어 cv::threshold 로 이진화 할 필요가 있다. // 이하는 이미지 자체가 흑백만이 존재하는 가정으로 하자. cv::Mat1b img = cv::imread("img.png", CV_LOAD_IMAGE_GRAYSCALE); cv::Mat1i black_pixels(img.cols, 1); for(int x = 0; x < img.cols; x++..

opencv 2023.12.02

긴 처리시간을 필요로 하는 서비스 설계 고찰

앞에서는 Rest API Request 에 대해 Response 까지 기다리는 설계에 대해 고찰해 보았다. 이는 결과가 빠른시간내에 처리되는 경우에 적합한 설계이지만 만약 긴 처리시간을 요구하는 Request 에 대해서는 다른 설계를 고찰해야 한다. 예를들면 책 1권의 Word 화일을 일정의 문자수를 분리를 하여 OpenAI 의 GPT Api 에 프롬프트와 함께 Request 한다고 하면 긴 처리가 끝날 때까지 결과를 마냥 기다릴 수는 없을 것이다. 이럴 경우에 아래와 같은 설계를 제안할 수 있다.

ai 모델 서비스 설계 고찰

개의 종을 학습시킨 모델을 생성하여 웹서비스를 하고자 한다고 하면, 아래와 같이 접속때 마다 Flask의 Rest API Request 처리 안에서 대응하고자 한다면 매번 모델을 로딩하는 결과를 초래한다. 대안으로써는 별도 추론 쓰레드를 생성하여 모델을 한번만 로딩하고 브로커(redis)를 사용하여 Rest API Request 와 추론쓰레드간의 중계역할을 해주도록 한다. 다음 칼럼에서는 위의 설계를 코드로 실현해 보도록 하자.

(React) const, var, let

keyword scope const 전체 var 와 같으나 한번 값이 할당되면 바꾸지 못함 var function 내 서브블럭내에서 다시 같은 이름의 변수를 할당하여도 똑같은 변수를 가르킨다. let 블럭( { } ) 내 블럭내에 선언하면 블럭을 빠져나오면 사라짐 // case 1 function varScoping() { var x = 1; if (true) { var x = 2; console.log(x); // will print 2 } console.log(x); // will print 2 } // case 2 function letScoping() { let x = 1; if (true) { let x = 2; console.log(x); // will print 2 } console.log(..

(React) Parent 와 Child 컴포넌트간의 값 전달, 변경, 반영시키기

Child 를 품고 있는 Parent 컴포넌트에서 Child에 값을 전달하면 Child 안에서 값을 변경한 후, 변경한 값이 Parent 에도 동기가 되도록 할 필요가 있을 경우.예를 들면, Parent 가 서버에서 값을 가져와서 다이얼로그를 띄워 값을 변경하여 그 값이 Parent에 반영시킬 경우. Parentconst ParentComp = () => {   const [values, setValues] = useState({"key1": "value1", "key2": "value2"});      useEffect(() => {      // 서버에서 값을 가져온다면       // rest api get -> setValue( ... )    }, []);      return (     cha..

(React) env 설정 ( 글로벌 변수)

env 설정의 활용 ReactJS 프로젝트 내에서 사용할 글로벌 변수의 정의 github 에 프로젝트를 업로드하고자 하는 경우 -> .env 화일에 저장후 .gitignore 를 통해서 업로드에서 배제 인스톨 npm i --save-dev dotenv .env 화일을 프로젝트의 root 디렉토리에 생성 (src 폴더 NG) .env 화일내에 아래 샘플과 같이 정의 ( 반드시 REACT_APP_ 로 시작해야 하고, 값에는 쿼테이션 불필요 ) REACT_APP_BASE_URL=http://localhost:8000 REACT_APP_API_KEY=YOUR-API-KEY 프로젝트내 사용법 1. 변수명을 재정의한 (예) variables.js 파일을 생성하여 export 선언 export const BASE_U..

flask 를 쓸까? django 를 쓸까?

파이선 환경의 framework 로서는 flask 와 django 가 있다. 둘 다 개발해본 경험자로서 어떤것을 사용할까에 개인적인 소견을 말하고자 한다. django 의 장점으로서는 보안문제와 template 을 사용할 수 있다는게 장점일 것 같다. 하지만 설정방법과 사용법이 어렵고 template 은 frontend용 JavaScript framework(React, Angular, Vue) 가 있기 때문에 그다지 사용할 필요가 없는 것 같다. 반면 flask 는 간단히 개발할 수 있기때문에 앞으로 flask 개발에 대해 설명하고자 한다. flask, django 는 어플리케이션 framework 이기 때문에 멀티 접속을 지원하지 않는다. 즉 동시에 여러 접속이 존재하게 되면 먼저 온 순서에 따라 순..