본문 바로가기

전체 글126

(python) text 를 길이 단위로 분리 OpenAI Embedding 기능을 사용하기 위해 PDF 에서 Text를 추출하여 특정 길이로 분리할 필요가 있었어 langchain 의 CharacterTextSplitter 를 사용하였다. 인스톨 pip install langchain CharacterTextSplitter from langchain.text_splitter import CharacterTextSplitter story = '어느 마을에 양치기 소년이 하나 있었는데,\n 늑대들이 나타나 양을 물어간다느니 잡아먹는다느니 식으로 수시로 장난삼아 소리치곤 했다. 두세 번 정도는 마을 사람들이 놀라 부리나케 달려왔다. 하지만 그 때마다 골탕을 먹고 바보가 된 기분으로 화를 내거나 투덜거리며 돌아갔다.\n 그러던 어느 날 진짜로 늑대가 나타.. 2023. 12. 6.
(python) PDF 내의 텍스트 추출하기 PDF내의 텍스트를 추출하는 Python 용 pdfminer.six 를 소개한다. 인스톨 (python 3.8 이상) pip install pdfminer.six from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from io import StringIO import re # PDF 화일 오픈 pdfname = "./sample.pdf" fp = open(pdfname, 'rb') # 리소스 매니저 인스턴스 생성 rsrc.. 2023. 12. 3.
1. 심전도 분석에 관해 드라마에서 주인공이 사고를 당해 응급실에 실려가면 모니터로 심전도가 표시되는 광경을 많이 봤을 것이다. 일본의 한 건강관리 회사에서 심장부위에 부착을해서 24시간 심전도 데이터를 리얼타임으로 저장하는 디바이스를 가지고 측정자의 건강상태를 체크하는 프로그램을 작성한적이 있다. 이때 얻었던 심장에 관련된 건강 지식을 공유하고 파이선 프로그램으로 구현하고자 한다. 일단, 심전도를 ECG(electrocardiogram) 또는 EKG 라고 한다. ECG를 분석해서 병이 있다고 단언하는 것은 의료 행위이므로 위법이다. 단순히 데이터를 분석해서 어드바이스하는 수준으로 끝나야 할 것이다. 일단 ECG의 형태와 어떻게 생성되는지 알아보자. 일단 심장의 박동은 좌심방(Left atria) 에서 전기 신호가 발생되면 시작.. 2023. 12. 3.
공백 메우기 왼쪽과 같은 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.. 2023. 12. 2.
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++.. 2023. 12. 2.
긴 처리시간을 필요로 하는 서비스 설계 고찰 앞에서는 Rest API Request 에 대해 Response 까지 기다리는 설계에 대해 고찰해 보았다. 이는 결과가 빠른시간내에 처리되는 경우에 적합한 설계이지만 만약 긴 처리시간을 요구하는 Request 에 대해서는 다른 설계를 고찰해야 한다. 예를들면 책 1권의 Word 화일을 일정의 문자수를 분리를 하여 OpenAI 의 GPT Api 에 프롬프트와 함께 Request 한다고 하면 긴 처리가 끝날 때까지 결과를 마냥 기다릴 수는 없을 것이다. 이럴 경우에 아래와 같은 설계를 제안할 수 있다. 2023. 12. 1.